PHP/OCI - 无法从临时表中的 Oracle 过程中获取结果

标签 php oracle oracle-call-interface

我正在尝试使用 PHP OCI Oracle 函数做两件事:

  • 在 Oracle 数据库中运行包过程。
  • 包运行后,查询临时表以获取过程操作的结果。

  • 我能够使用 Oracle 提供的 SQL Developer 软件成功地做到这一点。我的查询非常基本,如下所示:
    BEGIN
        PKG_KTY_SEARCH.PR_PRICE_LIST();
    END;
    /
    SELECT * FROM kty_web.KTY_PROD_PRICE_TEMP;
    

    上面的代码运行良好,我在 SQL Developer 中得到了完整的结果表。

    我正在尝试使用 OCI 在 PHP 中做同样的事情。我的代码可以在下面看到:
    <?php
    
    // Load up the system.
    require('../../system/init.php');
    
    global $config;
    
    $oracleDb = oci_new_connect($config['oracleDb']['username'], $config['oracleDb']['password'], $config['oracleDb']['connectionString']);
    
    $firstStid = oci_parse($oracleDb, "BEGIN PKG_KTY_SEARCH.PR_PRICE_LIST(); END;");
    oci_execute($firstStid);
    
    $secondStid = oci_parse($oracleDb, "SELECT * FROM kty_web.KTY_PROD_PRICE_TEMP");
    oci_execute($secondStid);
    
    oci_fetch_all($secondStid, $result);
    
    echo json_encode($result);
    
    echo "<br />Import complete!";
    
    ?>
    

    然而,这不会返回错误,并且返回一个空的结果集。我不明白为什么。有人在这里看到我遗漏的任何明显的东西吗?

    PHP 返回的结果集
    {"PRODUCT_ID":[],"CUST_ROLE":[],"MIN_QTY":[],"MAX_QTY":[],"PRICE":[]}
    

    我的连接字符串如下:
    $config['oracleDb']['connectionString'] = "(DESCRIPTION=(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = " . $config['oracleDb']['host'] . ")(PORT = " . $config['oracleDb']['port'] . ")))(CONNECT_DATA=(SID=" . $config['oracleDb']['sid'] . ")))";
    

    我正在使用 PHP7.1.22 , 和 Oracle 11g 数据库。我能够查询普通表并在 PHP 中毫无问题地获得结果并获得完整的结果集。

    最佳答案

    临时表是否定义为 on commit delete rows或作为 on commit preserve rows ?

    默认情况下,oci_execute将隐式发出 commit每次成功调用后。假设您的临时表定义为 on commit delete rows ,这将删除后续查询之前的行。您可以通过传递可选的第二个参数来更改该行为

    oci_execute($firstStid, OCI_DEFAULT);
    

    但是,假设您这样做,您将需要执行显式 oci_commit为了关闭您已打开的交易。

    关于PHP/OCI - 无法从临时表中的 Oracle 过程中获取结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61165554/

    相关文章:

    c++ - windows上qt连接oracle数据库

    PHP7.0 - 无法加载动态库 oci8.so (Ubuntu)

    Java ORA-01034 : ORACLE not available

    sql - 不满足多个条件之一时返回行

    c++ - Oracle OCI、绑定(bind)变量和查询,如 ID IN (1, 2, 3)

    php - [1]+[2] != [1,2](数组联合运算符在非关联数组上的行为)

    php - 使用 PHP 在动态创建表格中应用表格样式

    php - 无法在 PHP 中更新图像源

    php - 如何在 Drupal 中加载父项的标题

    oracle - 我想为 oracle 10 G 中的整个模式生成 DDL?