У меня есть пробник, выполняющий хранимую процедуру Oracle через PHP.Я получаю успешное возвращаемое значение, но процедура не обновляет строки.
Вот определение процедуры.
CREATE OR REPLACE PACKAGE trans_data AS
PROCEDURE UPDATE_TRANS_BY_NAME(
var_FName IN TRANSACTION.FIRST_NAME%type,
var_LName IN TRANSACTION.LAST_NAME%type,
var_DOB IN TRANSACTION.DOB%type,
var_PolNum IN TRANSACTION.POLICY_NUMBER%type,
var_TransStatus IN TRANSACTION.TRANS_STATUS%type,
var_Comp IN TRANSACTION.COMPANY%type,
var_LineOfBusiness IN TRANSACTION.LINE_OF_BUSINESS%type,
var_PlanCode IN TRANSACTION.PLAN_CODE%type,
var_AppDate IN TRANSACTION.APP_DATE%type,
var_IssueDate IN TRANSACTION.ISSUE_DATE%type,
var_FaceAmt IN TRANSACTION.FACE_AMT%type,
var_PolicyStatus IN TRANSACTION.POLICY_STATUS%type,
var_PaidAmt IN TRANSACTION.PAID_AMT%type,
var_Return OUT VARCHAR2
);
END trans_data;
CREATE OR REPLACE PACKAGE BODY trans_data AS
PROCEDURE UPDATE_TRANS_BY_NAME(
var_FName IN TRANSACTION.FIRST_NAME%type,
var_LName IN TRANSACTION.LAST_NAME%type,
var_DOB IN TRANSACTION.DOB%type,
var_PolNum IN TRANSACTION.POLICY_NUMBER%type,
var_TransStatus IN TRANSACTION.TRANS_STATUS%type,
var_Comp IN TRANSACTION.COMPANY%type,
var_LineOfBusiness IN TRANSACTION.LINE_OF_BUSINESS%type,
var_PlanCode IN TRANSACTION.PLAN_CODE%type,
var_AppDate IN TRANSACTION.APP_DATE%type,
var_IssueDate IN TRANSACTION.ISSUE_DATE%type,
var_FaceAmt IN TRANSACTION.FACE_AMT%type,
var_PolicyStatus IN TRANSACTION.POLICY_STATUS%type,
var_PaidAmt IN TRANSACTION.PAID_AMT%type,
var_Return OUT VARCHAR2)
IS
BEGIN
UPDATE TRANSACTION
SET
POLICY_NUMBER = var_PolNum,
TRANS_STATUS = var_TransStatus,
COMPANY = var_Comp,
LINE_OF_BUSINESS = var_LineOfBusiness,
PLAN_CODE = var_PlanCode,
APP_DATE = var_AppDate,
ISSUE_DATE = var_IssueDate,
FACE_AMT = var_FaceAmt,
POLICY_STATUS = var_PolicyStatus,
PAID_AMT = var_PaidAmt
WHERE FIRST_NAME = var_FName
AND LAST_NAME = var_LName
AND DOB = var_DOB
AND TRANS_STATUS = 'R'
AND REASON_FOR_REVIEW = 'No Policy Match';
commit;
var_Return := 'PASS';
EXCEPTION
WHEN OTHERS THEN
var_Return := 'FAIL';
END UPDATE_TRANS_BY_NAME;
END trans_data;
Строка обновляется при удалении строки "AND DOB = var_DOB«в процедуре.Я попытался изменить определение переменной на VARCHAR и использовать «AND DOB = to_date (var_DOB, 'DD-MON-YY')», но безуспешно.Я также попытался «И TRUNC (DOB = var_DOB)», но это также не сработало.
Вот код PHP.Я уже проверил, что все передаваемые параметры имеют значения и правильно отформатированы для типов данных базы данных.Я удалил код, который выполняет предыдущий запрос, который заполняет некоторые связанные переменные, чтобы вырезать то, что работает.
function matchWSPolicy($policy, $trans, $status, $amount){
include("../includes/DBConn.php");
if ($Policy == ""){
$message = 'Policy number does not match!';
return $message;
}
$stmt = OCI_Parse($c,"begin ucs.trans_data.UPDATE_TRANS_BY_NAME(:var_FName, :var_LName, :var_DOB, :var_PolNum,
:var_TransStatus, :var_Comp, :var_LineOfBusiness, :var_PlanCode, :var_AppDate, :var_IssueDate, :var_FaceAmt,
:var_PolicyStatus, :var_PaidAmt, :var_Return); end;");
OCI_BIND_BY_NAME($stmt,":var_FName",$FName);
OCI_BIND_BY_NAME($stmt,":var_LName",$LName);
OCI_BIND_BY_NAME($stmt,":var_DOB",$DOB);
}
else {
$message = 'Policy matched, but a valid SSN or (first name, last name, date of birth) was not returned from the WS database';
}
OCI_Bind_By_Name($stmt,":var_PolNum",$Policy);
OCI_Bind_By_Name($stmt,":var_TransStatus",$status);
OCI_Bind_By_Name($stmt,":var_Comp",$ComCode);
OCI_Bind_By_Name($stmt,":var_LineOfBusiness",$LineOfBusiness);
OCI_Bind_By_Name($stmt,":var_PlanCode",$Plan);
OCI_Bind_By_Name($stmt,":var_AppDate",$AppDate);
OCI_Bind_By_Name($stmt,":var_IssueDate",$IssueDate);
OCI_Bind_By_Name($stmt,":var_FaceAmt",$FaceAmount);
OCI_Bind_By_Name($stmt,":var_PolicyStatus",$PolStatus);
OCI_Bind_By_Name($stmt,":var_PaidAmt",$amount);
OCI_Bind_By_Name($stmt,":var_Return",$return, 4);
if ($message == ''){
oci_execute($stmt);
oci_commit($c);
}
else{
$message = 'Record not successfully updated.';
}
return $message;
}
Любые предложения будут с благодарностью.
Спасибо.