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')它會給出錯誤。然後如何傳遞包含字符串數據的列。 –