我正在準備一個屏幕,其中用戶將輸入plsql的一個匿名塊(declare ... begin ... end),並且將它的塊保存到一個文件中,並在需要時運行它。 但我想驗證用戶對我的數據庫的輸入,無論它在執行前是否有語法錯誤。當我GOOGLE了它,我發現我可以使用antlr,但我找不到任何工作示例。任何人都可以給我一個示例,我可以在java和plsql上下文中找到其他解決方案。驗證一個plsql塊
0
A
回答
3
你可以用DBMS_SQL解析PLSQL命令:
SQL> CREATE OR REPLACE PROCEDURE parse(p_command VARCHAR2) AUTHID CURRENT_USER IS
2 l_cursor INTEGER;
3 BEGIN
4 l_cursor := dbms_sql.open_cursor;
5 dbms_sql.parse(l_cursor, p_command, dbms_sql.native);
6 dbms_sql.close_cursor(l_cursor);
7 EXCEPTION
8 WHEN OTHERS THEN
9 dbms_sql.close_cursor(l_cursor);
10 RAISE;
11 END;
12/
Procedure created
SQL> exec parse ('BEGIN NULL;END;');
PL/SQL procedure successfully completed
SQL> exec parse ('BEGIN incorrect_statement;END;');
begin parse ('BEGIN incorrect_statement;END;'); end;
ERROR at line 1:
ORA-06550: line 1, column 7:
PLS-00201: identifier 'INCORRECT_STATEMENT' must be declared
小心你解析什麼,但:DDL將在解析被執行(!)。
+3
勇敢的研究員,「dursun」 – 2012-02-15 20:04:00
+0
@RogerCornejo它將如何危險 – dursun 2012-02-17 07:05:40
+0
@dursun - 基本上,代碼將運行任何東西,可能包括SQL注入(「黑客金礦」)。 – 2012-03-28 12:14:26
相關問題
- 1. 如何監視一個plsql塊語句
- 2. 在PLSQL中驗證一個由3個字段組成的日期
- 3. Hadoop驗證塊
- 4. 塊域驗證?
- 5. oracle plsql分塊行
- 6. ,C#,服務器驗證和驗證塊
- 7. jQuery驗證只驗證一個字段
- 8. 使用驗證應用程序塊驗證集合至少有一個項目
- 9. 企業庫驗證塊 - 將條件驗證爲另一個屬性值
- 10. 驗證一個javax.ejb.ScheduleExpression
- 11. 驗證一個FQDN
- 12. Bean驗證驗證一個驗證是否有效?
- 13. jquery驗證引擎:驗證一個接一個
- 14. 2個驗證器一次驗證一個
- 15. 如何使一個ASP.Net驗證依賴於另一個驗證
- 16. 列索引無效PLSQL塊
- 17. 這塊PLSQL如何編譯?
- 18. 返回一個PLSQL光標
- 19. 輸入驗證號碼與顯示另一個塊
- 20. 在另一個AngularJS模塊中創建驗證
- 21. yii ajaxSubmitButton塊html5驗證
- 22. Kohana 3:驗證模塊
- 23. Linux模塊驗證失敗
- 24. Asp.Net身份驗證模塊
- 25. 企業庫驗證塊
- 26. 驗證模塊VS Nhibernate.Validator
- 27. Catch塊串/號驗證
- 28. 塊完成狀態驗證
- 29. jQuery手機滑塊驗證
- 30. 模塊的ActiveRecord驗證
您確定要允許用戶在數據庫中運行命令嗎?你將如何防止他破壞你的數據庫(有意或無意)? – 2012-02-15 10:05:35
我的應用程序將被系統管理員使用。濫用現在不是一個問題。 – dursun 2012-02-15 11:04:02
@dursun系統管理員與其他任何人一樣易犯錯。一個小錯字,它可能會出現可怕的錯誤... – 2012-02-16 12:02:54