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喬希:感謝您的快速答案,但它仍然無法正常工作,我仍然得到相同的錯誤 –