分析器錯誤我有我與SQL分析的更新語句::分析器如何捕捉SQL ::在Perl
uPdate scott.emp
set ename='SCT%',emp_date=TO_DATE('04/16/2011 00:00:00', 'MM/DD/YYYY HH24:MI:SS'),empno='15645'
WHERE dept=20 and ename IN(select ename from emp where empno='1111');
但由於TO_DATE功能不能與SQL解析::分析器因此它拋出錯誤:
Incomplete SET clause! at ./post_audit.pl line 173
Incomplete SET clause! at ./post_audit.pl line 173
如何捕獲此類錯誤? eval能做到這一點嗎?沒有找到相同的適當文件。
代碼來解析SQL語句:
+12 use SQL::Parser;
+34 my $statement = "uPdate scott.emp set ename='SCT%',emp_date=TO_DATE('04/16/2011 00:00:00', 'MM/DD/YYYY HH24:MI:SS'),empno='15645' WHERE dept=20 and ename IN(select ename from emp where empno='1111')";
+172 my $parser = SQL::Parser->new('AnyData', {RaiseError=>1});
+173 $parser->parse($statement);
誤差在173線扔在解析的語句。
作爲一個側面說明,這聽起來是一個非常狡猾的方式來解析SQL。如果在SQL中的字符串文字中存在逗號或「=」,該怎麼辦? – DVK 2013-05-14 14:10:46
DVK - 問題不在於我的SQL是否適合解析,問題是如何捕獲這些SQL並在解析任何不正確的SQL時輸出錯誤消息。 – contravaluebets 2013-05-15 10:36:41
順便說一句,問題只是由於TO_DATE函數。當我解析下面的SQL時,它傳遞:'code'uPdate scott.emp set ename ='SCT%',emp_date = '04/16/2011',empno ='15645'WHERE dept = 20並且輸入IN從emp的where empno ='1111');'code' – contravaluebets 2013-05-15 10:44:24