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

Oracle 甲骨文:“立即执行”是什么意思?,oracle,plsql,oracle-sqldeveloper,Oracle,Plsql,Oracle Sqldeveloper,当与DML和DDL语句一起使用时,PL/SQL中execute immediate的意义是什么?executeimmediate是否像DDL语句那样隐式提交到数据库 下面是我遇到的一个例子: SELECT 'TRUNCATE TABLE BD_BIDS_APPR_DET' INTO V_SQL1 FROM DUAL; EXECUTE IMMEDIATE V_SQL1; SELECT 'TRUNCATE TABLE BD_BIDS_SYS_DET' INTO V_SQL1 FROM DUAL;

当与DML和DDL语句一起使用时,PL/SQL中execute immediate的意义是什么?executeimmediate是否像DDL语句那样隐式提交到数据库

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

SELECT 'TRUNCATE TABLE BD_BIDS_APPR_DET' INTO V_SQL1 FROM DUAL;
EXECUTE IMMEDIATE V_SQL1;

SELECT 'TRUNCATE TABLE BD_BIDS_SYS_DET' INTO V_SQL1 FROM DUAL;
EXECUTE IMMEDIATE V_SQL1;

SELECT 'TRUNCATE TABLE BD_BIDS_EXT_DET' INTO V_SQL1 FROM DUAL;
EXECUTE IMMEDIATE V_SQL1;

它在执行动态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_变量是捕获SELECT查询结果集的PL/SQL变量或记录

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

它用于运行本机

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

在您的例子中,之所以使用DDL,是因为DDL不能作为静态SQL在PL/SQL中运行。只有其他任何东西都必须视为动态的

我认为很少需要从PL/SQL块使用DDL。截断可能是合理的;如果您发现任何正在动态创建或放置对象的内容,那么这可能更令人担忧,因为它可能会建议使用次优的数据模型

立即执行本身不会自动提交;但是如果您执行DDL,那么它的行为将与在PL/SQL之外运行它时的行为相同,因此在您的情况下它将提交,是的

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

EXECUTE IMMEDIATE 'TRUNCATE TABLE BD_BIDS_EXT_DET';

i、 e.完全没有使用V_SQL_1。

我还没有开发代码。我想这一定有很强的原因。回答得好!