Oracle:“立即执行”是什么意思?

时间:2013-08-22 09:06:12

标签: oracle plsql oracle-sqldeveloper

与DML和DDL语句一起使用时,{/ 1}在PL / SQL中有什么意义? execute immediate隐式提交像DDL语句这样的数据库吗?

以下是我遇到的一个例子:

execute immediate

2 个答案:

答案 0 :(得分:10)

用于运行原生dynamic SQL

对于DML,您在运行编译时没有的语句时会使用它,例如:如果列列表基于用户的选择。

在您的情况下,它正被使用,因为DDL无法在PL / SQL中作为静态SQL运行。仅certain query, DML and TCL commands are valid。其他任何事情都必须被视为动态。

我认为很少需要使用PL / SQL块中的DDL。 TRUNCATE可能是合理的;如果您发现任何动态创建或删除对象,那么这可能更令人担忧,因为它可能会建议一个次优的数据模型。

EXECUTE IMMEDIATE本身不会自动提交;但是如果你执行DDL那么它的行为就像你在PL / SQL之外运行一样,所以它会在你的情况下提交,是的。

顺便说一下,我不确定为什么你的代码使用中间变量来保存语句;如果您想要显示它将要运行的内容,这很有用,但您似乎并没有这样做。你有什么可以完成:

EXECUTE IMMEDIATE 'TRUNCATE TABLE BD_BIDS_EXT_DET';

即。完全不使用V_SQL_1

答案 1 :(得分:1)

它在执行动态SQL语句或匿名PL / SQL块时提供端到端支持。它替换未知值,执行语句,返回数据,然后释放资源。

EXECUTE IMMEDIATE [dynamic SQL string statement without terminator]

 [INTO {define_variable     [, define_variable] ... | record}]

 [USING [IN|OUT|IN OUT] bind_argument [, [IN|OUT|IN OUT] bind_arguments] ];

define_variable是一个PL / SQL变量或记录,用于捕获SELECT查询的结果集

绑定参数是实际值或局部变量,它们将替换SQL字符串语句中的绑定变量。