0

有人可以在以下 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:keys是什么意思。我可以通过简单的跟踪查看背后的值吗?我怎样才能找到这些变量的定义位置?

提前致谢!

4

4 回答 4

2

它不是 TCL,它是嵌入在 TCL 字符串中的 SQL 查询,特别是绑定变量的 SQL 查询,然后将其分配给普通的 TCL 变量

正如 glenn 指出的那样,TCL 的这个片段本身并没有什么作用。大概在你程序中的某个地方,你实际上连接到一个数据库,并从这个字符串和一些其他变量向它传递一个查询

于 2013-06-03T10:09:24.963 回答
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"}]
于 2013-06-03T15:58:30.830 回答
1

正如其他人指出的那样,您只需将 string* 分配给变量。

更准确地说,您将以下字符串分配给一个名为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}

*一切都是字符串

于 2013-06-03T20:35:31.067 回答
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'));
于 2013-06-04T11:22:31.303 回答