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