2011-11-14 12 views
0

ここは私のPL/SQLです。複数のSQL文で即時実行

execute immediate ' 
create table Alex_Test2(col1 varchar2(100)); 
/
drop table Alex_Test2; 
/
'; 

動的SQLでは、テーブルが作成されてすぐに削除されます。面白いのは、テーブルが正常に作成され、削除されたことですが、エラーが発生します。

Error starting at line 1 in command: 
execute immediate ' 
Error report: 
ORA-06550: line 1, column 17: 
PLS-00103: Encountered the symbol "; END;" when expecting one of the following: 

    := . (@ % ; 
06550. 00000 - "line %s, column %s:\n%s" 
*Cause: Usually a PL/SQL compilation error. 
*Action: 
table ALEX_TEST2 created. 
table ALEX_TEST2 dropped. 

Error starting at line 6 in command: 
' 
Error report: 
Unknown Command 

実際にユーザーが入力したSQL文。私は;/のような記号を避けることはできません。どうすればこの問題を解決できますか?またはこのエラーを回避するにはどうすればよいですか?

しかし、私はまだログを保持する必要があります。ログはちょうどだと思います。

table ALEX_TEST2 created. 
table ALEX_TEST2 dropped. 

ありがとう!

答えて

2

実行する前にクエリ文字列を操作できません。あなたがそれを行う能力を持っていないなら、あなたは何をする能力がありますか?

実行する前に、検索文字列を検索して置換するだけでいいと思います。

+0

動的SQLは、ユーザーがタイプしても変更できません。私は他のすべてのことをコントロールすることができます。 「見つけて交換する」には何が必要ですか? –

+0

さて、あなたは彼らがそれらに入るのを防ぐことはできないと言っているだけですが、実行する前に入力を操作することができます。 SQL Serverでは、replace関数を使用します。http://msdn.microsoft.com/en-us/library/ms186862.aspxあなたのdbmsで同じかもしれませんが、単にGoogleの検索を行うだけではない場合は、あなたがそれを見て返答するように再度と私に尋ねるよりも速く見つけることができます。 –