0
我试图在PHP中实现一个简单的存储过程。 即时通讯使用Oracle SQL,我必须使用PDO连接到数据库。使用输入和输出参数从PHP调用Oracle存储过程
的过程是这样的:
create or replace
PROCEDURE RABATTPROZEDUR
(
VAR_KUNDE IN NUMBER
, VAR_RABATT IN NUMBER
, VAR_DATUM IN DATE
, ERGEBNIS OUT NUMBER
) AS
var_volumenBegin NUMBER := 0;
var_volumenEnd NUMBER := 0;
BEGIN
Select SUM(TOTALPRICE) into var_volumenBegin From Orderposition Where Ordid IN (Select Ordid From Orders Where Custid = var_kunde);
Update Orderposition Set TOTALPRICE = (TOTALPRICE * (100 - var_rabatt)/100) Where Ordid IN(Select Ordid From Orders Where Custid = var_kunde And Orderdate >= var_datum);
Select SUM(TOTALPRICE) into var_volumenEnd From Orderposition Where Ordid IN (Select Ordid From Orders Where Custid = var_kunde);
ergebnis := var_volumenBegin-var_volumenEnd;
END RABATTPROZEDUR;
在PHP中,它看起来像这样:
$ergebnis = 0;
$a= ':cid';
$b= ':percent';
$stmt = $conn->prepare("CALL rabattprozedur(:var_kunde,:var_rabatt,to_date(':var_datum'),:ergebnis)");
$stmt->bindParam(':var_kunde',$a,PDO::PARAM_INT);
$stmt->bindParam(':var_rabatt',$b,PDO::PARAM_INT);
$stmt->bindParam(':var_datum',$date,PDO::PARAM_STR,10);
$stmt->bindParam(':ergebnis',$ergebnis,PDO::PARAM_INT|PDO::PARAM_INPUT_OUTPUT);
//$stmt->bindParam($a = ':cid',$b = ':percent',$date,$ergebnis);
$stmt->debugDumpParams();
$stmt->execute();
不幸的是,这并不工作。我得到的错误消息是:
SQLSTATE[HY000]: General error: 1722 OCIStmtExecute: ORA-01722: invalid number (ext\pdo_oci\oci_statement.c:148)
我试过不同的方法和方法,但不能得到它的工作。 感谢您的帮助!
你能确定日期格式吗? –
使用日期('Y-m-d H:i:s',strtotime($ date));而不是$日期 –
@ujash乔希:感谢您的快速答案,但它仍然无法正常工作,我仍然得到相同的错误 –