【问题标题】:run plsql and get DBMS_OUTPUT.PUT_LINE (yii)运行 plsql 并获取 DBMS_OUTPUT.PUT_LINE (yii)
【发布时间】:2014-11-14 13:19:13
【问题描述】:

我正在开发一个带有 oracle 数据库和 yii 框架的网络应用程序

    $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。 我怎样才能做到这一点? 任何想法? 提前谢谢!!!

【问题讨论】:

    标签: php oracle yii package dbms-output


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-06
      • 1970-01-01
      • 1970-01-01
      • 2013-08-19
      • 1970-01-01
      • 2022-11-29
      相关资源
      最近更新 更多