PL-SQL绑定TCL中的变量

时间:2013-06-03 09:34:25

标签: plsql tcl trace bind-variables

有人可以在下面的TCL源代码中解释:

set sql "SELECT PROD.KEY || ' {' || PARAMETERS || '}' \
         FROM PRV_PROD_MAPPING PROD \
         WHERE PROD.SERVICE_ID = :service_id \
         AND (PROD.KEY || ' ' || PROD.KEY_VAL) \
         IN (:keys) "

:service_id :键是什么意思。我能通过简单的追踪看到背后的价值观吗? 我怎样才能找到这些变量的定义?

提前致谢!

4 个答案:

答案 0 :(得分:2)

TCL字符串中嵌入的SQL查询不是TCL,特别是binds a variable,然后将其分配给普通的TCL变量

正如格伦所指出的那样,TCL的这个片段很少。在你的程序中的某个地方,你实际连接到一个数据库,并从这个字符串和其他一些变量传递一个查询

答案 1 :(得分:2)

如果您使用的是TDBC,则可能

# assume the connection has already occured and is named "db"
set sql "SELECT ... WHERE a.b=:service_id IN (:keys)"
set statement [db prepare $sql]

# get the bind variables' values from the local context:
set service_id 42
set keys [join {key1 key2 key3} ,]
set resultset [$statement execute]

# or, without setting the "service_id" and "keys" variables, 
# provide them as an argument to the execute subcommand
unset service_id keys
set resultset [$statement execute {service_id 24 keys "foo,bar,baz"}]

答案 2 :(得分:1)

正如其他人指出的那样,你只需要为变量指定一个字符串*。

更准确地说,您将以下字符串分配给名为sql

的变量
SELECT PROD.KEY || ' {' || PARAMETERS || '}'  FROM PRV_PROD_MAPPING PROD  WHERE PROD.SERVICE_ID = :service_id  AND (PROD.KEY || ' ' || PROD.KEY_VAL)  IN (:keys) 

:service_id:keys的值是稍后传递的绑定值(可能在oraplexec语句中)。

||是SQL中的字符串连接。因此PROD.KEY || ' {' || PARAMETERS || '}'可能是PRODKEY {PARAMETERS}

*一切都是字符串

答案 3 :(得分:0)

我使用痕迹完成了它:

sys.DBMS_SYSTEM.SET_EV(n_sid, n_serial, 10046, 12, '');
DBMS_OUTPUT.put_line('Trace started: ' || to_char(SYSDATE,'dd.mm.yyyy hh24:mi:ss'));