||||怎么对用户自定义的存储过程的正确性进行验证?

在程序中,允许用户自编写一些简单的SQL语句,程序把这些语句变成存储过程,供用户调用,现在问题是,怎么判断用户写的这些语句的正确性呢?请问各位有没有什么好办法?
---------------------------------------------------------------

我現在的做法是具體的SQL語句不讓用戶編寫的,我們提供輸入的參數
例如,表名、列名(中英文對照),運算關系:+,-,*,/,等
---------------------------------------------------------------

语法和语义的检查可以执行explain plan for <用户写的sql>来判断是否正确。
至于逻辑正确性(例如是否删除了不应该删除的数据),好像没有办法
---------------------------------------------------------------

在sql developer 里可以单步调试
就是那个test
---------------------------------------------------------------

你可以把用户写的SQL作为字符串,传给存储过程,在过程里动态的执行
判断她的返回值,
但有些问题,因为SQL语句是对数据库操作的,所以如果只是想测试而不对数据库照成影响
是不可能的,比如
SQL:=‘UPDATE TABLE_NAME SET COL=222’;
后面你虽然知道语句是正确的,但已经对数据库造成了影响。
---------------------------------------------------------------

1、语法准确性只要看建好的过程状态是否valid就知道了。
2、关于逻辑准确性,没办法。

Published At
Categories with 数据库类
Tagged with
comments powered by Disqus