0

我正在使用 oracle 数据库和 yii 框架开发一个 Web 应用程序

    $connection = Yii::app()->oo;
    $command = $connection->createCommand("DECLARE V_COD NUMBER; v_Return DATA.FIND.T_REG;
BEGIN
 V_COD := 1529;
 v_Return := FIND.DATA(
   V_COD => V_COD
 );
DBMS_OUTPUT.PUT_LINE('CODE, '|| V_RETURN.CODE ||' WITH SERIE: '||V_RETURN.SERIE);
END;");


        $rows = $command->execute();
        print_r($rows);

执行查询返回 1,我想得到一条消息输出 DBMS_OUTPUT.PUT_LINE。我怎样才能做到这一点?任何想法?提前致谢!!!

4

1 回答 1

0

您真的,真的,真的不想构建依赖于dbms_output. dbms_output如果您碰巧无法使用真正的调试器,则主要作为一种快速而肮脏的调试代码方式存在。您通常不应该假设dbms_output已经声明了一个缓冲区,缓冲区足够大,可以容纳您想要写入的任何内容,或者人类将永远看到写入dbms_output缓冲区的内容。大多数客户端工具不会声明这样的缓冲区,并且如果它们确实创建了缓冲区,则不会从中读取。

将数据返回给客户端的正确方法是让您的代码直接调用该函数(在这种情况下)。如果您的函数返回您的框架无法处理的数据类型,请创建一个单独的包装过程,该过程调用第一个函数并为 and 提供两个OUT参数。在您的调用中使用绑定变量并从代码中绑定值(如 1529)。codeserie

如果您真的,真的,真的想从缓冲区中读取(假设它存在),您需要dbms_output.get_line在同一个会话中调用。

于 2014-09-19T21:24:42.550 回答