PHPを使用してOracleストアドプロシージャを実行するprobemがあります。私は成功した戻り値を取得していますが、プロシージャは行を更新していません。日付基準を持つOracle Procが実行されますが、更新されません。
プロシージャの定義は次のとおりです。
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')"を使用して成功しませんでした。私も "AND 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;
}
ご意見をいただければ幸いです。
ありがとうございます。
私も試してみました "とTRUNC(DOB = var_DOB)" - しかし、あなたはしてみてくださいでした: "AND TRUNC(DOB)= TO_DATE(var_DOB、 'DD-MON-YY')"? – Ollie
はい。それも私にとってはうまくいきませんでした。 – MikeL
DOB varをダンプするとどうなりますか?比較値がDOB varの日付の形式とまったく同じであることを確認してください。少なくとも、あなたは問題が日付の比較にあることを知っています。これを試すhttp://www.dba-oracle.com/f_to_date.htm – jamesTheProgrammer