如何在Oracle Pro * C中显示包含主机变量值的SQL语句?
在Pro * C代码中,您可以通过
sqlgls() (or even SQLStmtGetText() )获取最后执行的SQL语句.
这对于日志记录非常有用 – 特别是对于动态语句. 但是这些SQLLIB函数返回的SQL语句只包括绑定标记(例如:b1,:b2 ……).不包括使用的主机变量的实际值. 因此,我有以下问题:如何显示包含主机变量值的最后一个SQL语句? 否则我必须在打印sqlgls()返回的字符串后手动打印所有使用过的变量.这根本不比在不使用sqlgls的情况下打印SQL语句更方便. 例如,而不是 INSERT INTO MYTABLE VALUES (:b1,:b2,:b3); 我要打印: INSERT INTO MYTABLE VALUES ("hello","world",12); (除了日志记录之外,还可以更容易地将其“复制”到SQL-shell中 – 即用于测试) 解决方法您可以使用v $sql_bind_capture来跟踪绑定变量值.引入了v $sql_bind_capture来报告有关SQL游标使用的绑定变量的信息.此视图允许检索给定SQL游标的绑定变量的实际值.此外,您可以从v $sqlarea或v $sqltext或v $sqltext_with_newlines获取sql文本. SELECT a.sql_text,b.name,b.position,b.datatype_string,b.value_string FROM v$sql_bind_capture b,v$sqlarea a,v$session c,WHERE c.sid = (select sys_context('USERENV','SID') from dual) AND b.sql_id = c.prev_sql_id AND b.sql_id = a.sql_id; 您需要在此语句上尝试嵌入式sql.并获得获得完整语句所需的变量.你需要一个简单的脚本来获取带有绑定值的sql文本,我认为这不比自己打印绑定值更方便. 另一种方法是run a 10046 level 4 trace,但你需要做一些trics来支持copynpaste功能. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |