直接将存储过程消息打印到Java控制台

4

我有一个存储过程,其中我正在使用

dbms_output.put_line(' output' || outVar);

我希望能够直接在Java控制台中打印相同的输出(直接从存储过程中打印),而无需使用下面的代码获取outVar:
callableStatement.registerOutParameter(1, String);
system.out.println(callableStatement.getString());

1
你为什么不想在过程中使用“OUT”变量?否则,变量如何通过JDBC移动? - Mick Mnemonic
1
你做不到。但是你的目标似乎没有意义。存储过程在数据库服务器上运行。它只能写入客户端的内存缓冲区。如果你不暴露一个API来将数据返回给客户端(例如使用OUT参数),客户端就无法访问服务器内部的内存。你可以想出更加隐晦/复杂的方法来返回数据,但我不明白为什么你要这样做。 - Justin Cave
2个回答

2
将您的过程更改为函数,如下所示:
FUNCTION SOME_FUNCTION
RETURN VARCHAR2
IS
BEGIN
 -- Do some processing here....
 RETURN 'output:' || ....;
END;

回到Java领域:

CallableStatement cs = connection.prepareCall("{? = call SOME_FUNCTION}");
cs.registerOutParameter(1, String);
cs.executeUpdate();
system.out.println(cs.getString(1));

没有其他方法。你有ORACLE,你有IDE控制台。两者之间没有关系。要从数据库中获取数据,您必须使用函数返回值,您可以争辩说将返回值作为输出参数是同样的事情,虽然两者都会得到一个值,但您的代码对其他人来说更加直观。它表示这个调用返回了某些内容。

话虽如此,您可以在SQL Developer中调用该方法并打印如下:

DECLARE
    result varchar2;
BEGIN
    result := SOME_FUNCTION;
    DBMS_OUTPUT.PUTLINE(result);
END;

1
请查看此链接 - https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:45027262935845 - JavaTec

0
如果你只是为了调试目的而这样做,你可以使用一个表来存储你想要的值。
...
BEGIN   
    UPDATE MY_TABLE 
    SET MY_COLUMN = 'hello'
    WHERE ID = 123456;
    COMMIT;    
    -- Rest of stored procedure code
END;

运行存储过程后,请检查该表中的值。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接