CREATE OR REPLACE PROCEDURE proc2_del_rows
(v_tname VARCHAR2,
v_condition VARCHAR2 DEFAULT NULL)
AS
sql_stmt VARCHAR2(500);
where_clause VARCHAR2(200) := 'WHERE'||' '||v_condition;
BEGIN
IF v_condition IS NULL THEN
where_clause := NULL;
END IF;
sql_stmt := 'DELETE FROM :1'||' '||where_clause;
EXECUTE IMMEDIATE sql_stmt USING v_tname;
COMMIT;
END;
/
-2
A
回答
1
CREATE or replace PROCEDURE proc2_del_rows
(v_tname VARCHAR2,
v_condition VARCHAR2 DEFAULT NULL)
AS
sql_stmt VARCHAR2(500);
where_clause VARCHAR2(200) := 'WHERE'||' '||v_condition;
BEGIN
IF v_condition IS NULL THEN
where_clause := NULL;
END IF;
sql_stmt := 'DELETE FROM '||v_tname||' '||where_clause;
EXECUTE IMMEDIATE sql_stmt;
END;
/
+0
你能详细说明你改变了什么吗? – mmmmmpie
2
表名是错的不能绑定变量。对输入表名称参数执行DBMS_ASSERT
并确保它是有效的表名称文字,然后将其直接连接到delete语句。这至少可以保护你免受sql注入。
我想知道使用过程进行删除并将此过程的执行授予个别用户的原因,而不是直接向用户授予对表的删除,这会更容易控制/限制。我不明白在安全方面如何更好,如果这是你的目标。
0
相关问题
- 1. 什么是错在我的代码?为什么错误味精
- 2. PING错误代码87:它是什么?
- 3. 这段代码的错误是什么?
- 4. 此代码中的错误是什么?
- 5. 什么是Delphi错误代码e8000067?
- 6. 此代码中的错误是什么?
- 7. 什么是错误的代码(BST)
- 8. 什么是这个代码错误
- 9. 什么是JConnect错误代码列表?
- 10. EIO错误代码是什么意思?
- 11. 什么是SVN错误代码200015?
- 12. 什么是AJAX代码中的错误
- 13. 此代码中的错误是什么?
- 14. 什么是布局代码错误
- 15. “错误代码:4004”是什么意思?
- 16. 这是什么错误代码? -2147220717(0x80040313)
- 17. 这段代码的错误是什么?
- 18. 代码中的错误是什么?
- 19. C代码中的错误是什么?
- 20. VBS/iMacros - 什么是错误代码-911
- 21. 这是什么错误代码平均值(附代码)
- 22. 我在做什么错误的代码?
- 23. 什么在此代码中的错误
- 24. 有什么错误在此代码
- 25. 什么错误++这段代码在C
- 26. 什么是错在我的代码的给予解析错误
- 27. 这段代码中的错误是什么,为什么?
- 28. jQuery ajax错误代码:“错误”的真正含义是什么?
- 29. 什么是导致此C代码中的段错误错误?
- 30. HTTP错误代码的错误域的名称是什么?
您的过程编译正确。 – mmmmmpie
@ mmmmmpie说,该过程编译没有任何错误。您是在问它的逻辑还是在编译时遇到错误? – anudeepks
如果我传递像proc2_del_rows('EMP','DEPTNO = 10')参数成功执行。但是当我传递参数像proc2_del_rows('EMP','JOB ='CLERK')它会给出错误。然后如何传递包含字符串数据的列。 –