1

我有一个使用动态 sql 的存储过程。有没有办法记录在 SQLSTR1从 Java 调用 proc 时编译时发生的编译错误。或者也许记录所涉及的变量。

SQLSTR1:= ' SELECT NVL(SUM(TOTAL_B),0) CURRENT_VAL,' || COL_NAME|| ' 
    FROM view1 WHERE(R_DATE  IS NULL OR R_DATE >:EOQ) 
    AND (LOCATION IN  (' || COMMA_FUNC(LOCATIO) || ') OR :LOCATIO = ''NULL'')
     GROUP BY ' || COL_NAME;  

    OPEN CURRENT_CURSOR FOR SQLSTR1 USING EOQ, LOCATIO;

管理 procs 的人不可用,我需要进行一些调试。请帮忙。

4

1 回答 1

1

至少您可以通过查看 v$sql_bind_capture 来显示绑定变量的值:“V$SQL_BIND_CAPTURE 显示有关 SQL 游标使用的绑定变量的信息。视图中的每一行都包含在游标中定义的一个绑定变量的信息。” 请参阅http://docs.oracle.com/cd/E11882_01/server.112/e40402/dynviews_3044.htm#REFRN30310

简单的例子:

DECLARE
    TYPE ct IS REF CURSOR;
    c ct;
    q VARCHAR2(255);
BEGIN
    q := 'SELECT * FROM dual WHERE dummy = :EOQ OR dummy = :LOCATIO';
    OPEN c FOR q USING 'X', 'Y';
    CLOSE c;
END;
/

SELECT
     sql_id
    ,name
    ,value_string
    ,TO_CHAR(last_captured, 'DD.MM.YYYY HH24:MI:SS')
FROM v$sql_bind_capture
WHERE NAME IN (':EOQ', ':LOCATIO');
--
a2vmmmcumuv5v   :EOQ       X   14.11.2013 22:09:05
a2vmmmcumuv5v   :LOCATIO   Y   14.11.2013 22:09:05
                         ^^^^^
                       as expected
于 2013-11-14T21:20:32.423 回答