使用多个 SQL 语句立即执行

Posted

技术标签:

【中文标题】使用多个 SQL 语句立即执行【英文标题】:Execute Immediate with multiple SQL Statements 【发布时间】:2011-11-14 23:27:33 【问题描述】:

这是我的 PL/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.

谢谢!

【问题讨论】:

【参考方案1】:

您无法在执行查询字符串之前对其进行操作?如果你没有这个能力,那你有什么能力呢?

听起来您只需要在运行之前对查询字符串进行查找和替换。

【讨论】:

动态 SQL 由用户输入,我无法更改。我可以控制所有其他事情。我需要“查找和替换”什么? 好的,所以你只是说你不能阻止他们进入它们......但你可以在运行之前操纵他们的输入。在 SQL Server 中,我将使用替换函数:msdn.microsoft.com/en-us/library/ms186862.aspx。在您的 dbms 中可能是相同的,但如果不只是进行 Google 搜索,我相信您会比您再次询问和我为您查找并回复答案更快地找到它。

以上是关于使用多个 SQL 语句立即执行的主要内容,如果未能解决你的问题,请参考以下文章

ora-00900 无效的 sql 语句立即执行

为啥我不能在立即执行语句中使用绑定变量?

立即执行“创建或替换视图”给出 00900。00000 -“无效 SQL 语句”错误

您可以从立即执行语句中退出 PL-SQL 循环吗?

SQL语句中Case 的用法

立即执行中的多个更新