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

解决方案 »

  1.   

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

  2.   

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

  3.   

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

  4.   

    <<所以如果只是想测试而不对数据库照成影响是不可能的>>不可能???SQL:=‘explain plan for UPDATE TABLE_NAME SET COL=222’;
      

  5.   

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

  6.   

    厉害!explain plan for  很好用呵。。
    谢谢!