有人可以在下面的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 和:键是什么意思。我能通过简单的追踪看到背后的价值观吗? 我怎样才能找到这些变量的定义?
提前致谢!
答案 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'));