我正在尝试将以下内容制作为动态SQL,但是:
字符会导致问题 -
alter session set events 'sql_trace [sql: asasasaass]';
例子:
declare
l_trc_cmd varchar2(500);
l_sql_id varchar2(500) := 'asasasaass';
begin
l_trc_cmd := q'# alter session set events 'sql_trace [sql: :L_SQL_ID]' #';
execute immediate l_trc_cmd using l_sql_id;
end;
/
上述操作失败,出现以下错误:
ERROR at line 1:
ORA-01006: bind variable does not exist
根据SQL语法,需要一个:
,另一个:
是用于绑定变量。
除了将绑定值连接起来,还有什么其他的解决方法吗?
-- 在4月4日下午5点10分CST进行了编辑,以下是证明:
Alter session不是DDL命令。
sqlplus+> select * from t2;
A
----------
1
1 row selected.
sqlplus+> insert into t2 values(2);
1 row created.
sqlplus+> alter session set tracefile_identifier ="umappsperf1" statistics_level=all;
Session altered.
sqlplus+> alter session set events 'sql_trace wait=true';
Session altered.
sqlplus+> select * from t2;
A
----------
2
1
2 rows selected.
sqlplus+> rollback;
Rollback complete.
sqlplus+> select * from t2;
A
----------
1
1 row selected.
ALTER SESSION
不是DDL,以及在SQL*Plus中运行它如何证明它不是DDL? - Jeffrey Kemp