gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 15:08:17 25 4
gpt4 key购买 nike

在 Pro*C 代码中,您可以通过 sqlgls() (or even SQLStmtGetText()) 获取最后执行的 SQL 语句.

这对于日志记录很有用 - 特别是对于动态语句。

但这些 SQLLIB 函数返回的 SQL 语句仅包含绑定(bind)标记(即类似 :b1:b2 ...)。不包括所用主机变量的实际值。

因此,我有以下问题:如何显示包含主机变量值的最后一个 SQL 语句?

否则我必须在打印 sqlgls() 返回的字符串后手动打印所有使用的变量。这并不比根本不使用 sqlgls 打印 SQL 语句更方便。

例如代替

INSERT INTO MYTABLE VALUES (:b1, :b2, :b3);

我要打印:

INSERT INTO MYTABLE VALUES ("hello", "world", 12);

(除了日志记录,为了更容易将其复制'n'粘贴到 SQL-shell - 即用于测试)

最佳答案

您可以使用 v$sql_bind_capture 来跟踪绑定(bind)变量值。

已引入 v$sql_bind_capture 以报告有关 SQL 游标使用的绑定(bind)变量的信息。此 View 允许检索给定 SQL 游标的绑定(bind)变量的实际值。此外,您还可以从 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。并获取获取完整语句所需的变量。而且你需要一个简单的脚本来获取带有绑定(bind)值的 sql 文本,我认为这并不比你自己打印绑定(bind)值更方便。

另一种方法是run a 10046 level 4 trace ,但您同样需要做一些技巧来支持 copynpaste 功能。

关于sql - 如何在 Oracle Pro*C 中显示包含主机变量值的 SQL 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14768688/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com