2011-11-14 55 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中,我将使用替换函数:http://msdn.microsoft.com/en-us/library/ms186862.aspx。在你的dbms中可能是一样的,但如果不是只是做一个谷歌搜索,我相信你会发现它比你要求我再次提问并回答答案要快。 –