Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP处理中的ORACLE存储过程_Oracle_Procedure - Fatal编程技术网

PHP处理中的ORACLE存储过程

PHP处理中的ORACLE存储过程,oracle,procedure,Oracle,Procedure,我有一个关于存储过程的问题,因此我保存了此过程: CREATE OR REPLACE PROCEDURE WELTESADMIN.TOTALFABRICATION (SUBCONT IN VARCHAR, PROJECT IN VARCHAR, TOTALFABRICATIONRESULT OUT NUMBER) AS BEGIN SELECT FABRICATION.MARKING + FABRICATION.CUTTING + FABRICATION.ASSEMBLY + F

我有一个关于存储过程的问题,因此我保存了此过程:

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:调用“TotalManufacturing”ORA-06550:第1行,第7列:PL/SQL:在第39行的C:\xampp\htdocs\WeltesInformationCenter\newEmptyHP.php中忽略了语句


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

因此,在PHP中,您应该编写:

    $sql = "BEGIN TOTALFABRICATION(:SUBCONT, :PROJECT, :TOTALFABRICATIONRESULT); END;";
    #                                                  ^^^^^^^^^^^^^^^^^^^^^^^
将该输出参数转换为某个变量:

oci_bind_by_name($stmt, "TOTALFABRICATIONRESULT", $result, 300);
#                                                          ^^^
#                                                        maxlength
请注意,根据:

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

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