【问题标题】:ORACLE Stored Procedure in PHP processingPHP处理中的ORACLE存储过程
【发布时间】:2014-11-13 15:51:43
【问题描述】:

我有一个关于存储过程的问题,所以我保存了这个过程:

CREATE OR REPLACE PROCEDURE WELTESADMIN.TOTALFABRICATION
    (SUBCONT IN VARCHAR, PROJECT IN VARCHAR, TOTALFABRICATIONRESULT OUT NUMBER) AS
BEGIN
    SELECT FABRICATION.MARKING + FABRICATION.CUTTING + FABRICATION.ASSEMBLY + FABRICATION.WELDING + 
            FABRICATION.DRILLING + FABRICATION.FINISHING
    INTO TOTALFABRICATIONRESULT
    FROM FABRICATION
    WHERE SUBCONT_ID = SUBCONT 
        AND PROJECT_NAME = PROJECT;
END;

我在 PHP 中处理,例如,

    $subcontValue = "RIYANTO";
    $projectValue = "PROCESSHOUSE";

    $sql = "BEGIN TOTALFABRICATION(:SUBCONT, :PROJECT); END;";
    $stmt = oci_parse($conn, $sql);

    oci_bind_by_name($stmt, ":SUBCONT", $subcontValue);
    oci_bind_by_name($stmt, ":PROJECT", $projectValue);
    oci_define_by_name($stmt, "TOTALFABRICATIONRESULT", $result);

    oci_execute($stmt);

    echo $result;

我确信提供的所有变量都是正确的,连接正常并且可以在 SQL PLUS 中处理 相反,我在 php 端遇到了这个错误,

警告:oci_execute():ORA-06550:第 1 行,第 7 列:PLS-00306:调用“TOTALFABRICATION”时参数的数量或类型错误 ORA-06550:第 1 行,第 7 列:PL/ SQL:第 39 行 C:\xampp\htdocs\WeltesInformationCenter\newEmptyPHP.php 中的语句被忽略

【问题讨论】:

    标签: oracle procedure


    【解决方案1】:

    您的过程实际上有三个参数(两个IN和一个OUT):

    CREATE OR REPLACE PROCEDURE WELTESADMIN.TOTALFABRICATION
        (SUBCONT IN VARCHAR, 
         PROJECT IN VARCHAR, 
         TOTALFABRICATIONRESULT OUT NUMBER) AS
    

    所以,在 PHP 中,你应该这样写:

        $sql = "BEGIN TOTALFABRICATION(:SUBCONT, :PROJECT, :TOTALFABRICATIONRESULT); END;";
        #                                                  ^^^^^^^^^^^^^^^^^^^^^^^
    

    还有bind那个输出参数到某个变量:

    oci_bind_by_name($stmt, "TOTALFABRICATIONRESULT", $result, 300);
    #                                                          ^^^
    #                                                        maxlength
    

    请注意根据the documentation:

    在使用 OUT 绑定时必须指定 maxlength,以便 PHP 分配足够的内存来保存返回的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-05
      • 1970-01-01
      • 2011-03-13
      • 2017-05-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多