如何在Oracle动态SQL中转义":"并且还有绑定变量?

l0l*_*ll1 7 sql oracle escaping

我正在尝试使下面的动态SQL,但:角色搞砸了 -

alter session set events 'sql_trace [sql: asasasaass]';
Run Code Online (Sandbox Code Playgroud)

例:

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;
/
Run Code Online (Sandbox Code Playgroud)

以上失败:

ERROR at line 1:
ORA-01006: bind variable does not exist
Run Code Online (Sandbox Code Playgroud)

:根据SQL的语法需要一个,另一个:是绑定变量.

关于如何解决这个问题除了连接绑定值以外的任何想法?

- 于4月4日中部标准时间下午5点10分编辑,增加以下内容:

更改会话不是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.
Run Code Online (Sandbox Code Playgroud)

Jef*_*emp 4

对于这个语句,我只是忘记使用绑定变量,例如:

declare
 l_trc_cmd   varchar2(500);
 l_sql_id    varchar2(500) := 'asasasaass';
begin
  l_trc_cmd := REPLACE(
    q'# alter session set events 'sql_trace [sql: %SQLID%]' #'
    ,'%SQLID%',l_sql_id);
  execute immediate l_trc_cmd;
end;
/
Run Code Online (Sandbox Code Playgroud)