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

wa7juj8i  于 2023-10-16  发布在  Oracle
关注(0)|答案(2)|浏览(195)

我有一个存储过程,

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

我想直接在Java控制台中打印相同的输出(直接从存储的proc),而不使用下面的代码来获取outVar

callableStatement.registerOutParameter(1, String);
system.out.println(callableStatement.getString());
xqkwcwgp

xqkwcwgp1#

将您的过程更改为以下函数:

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;
jaql4c8m

jaql4c8m2#

如果你是为了调试而这样做,你可以只使用一个表来存储你想要的值:

...
BEGIN   
    UPDATE MY_TABLE 
    SET MY_COLUMN = 'hello'
    WHERE ID = 123456;
    COMMIT;    
    -- Rest of stored procedure code
END;

然后在运行存储过程后检查该表中的值。

相关问题