加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何在Oracle Pro * C中显示包含主机变量值的SQL语句?

发布时间:2020-12-12 13:14:34 所属栏目:百科 来源:网络整理
导读:在Pro * C代码中,您可以通过 sqlgls() (or even SQLStmtGetText() )获取最后执行的SQL语句. 这对于日志记录非常有用 – 特别是对于动态语句. 但是这些SQLLIB函数返回的SQL语句只包括绑定标记(例如:b1,:b2 ……).不包括使用的主机变量的实际值. 因此,我有以
在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功能.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读