2011-12-20 18 views
0

PHPでストアドプロシージャを実行しようとしましたが、テーブルにデータを挿入して次のエラーメッセージが表示されます。PHPでOracle挿入プロシージャを実行する際に助けが必要

oci_execute()[function.oci実行]:ORA-01843:無効な月 ORA-06512:行1

で、私は自分自身によって私のINSERTクエリを実行してきた、と受け取りませんこのエラー。ここに手順コードがあります。

CREATE OR REPLACE PACKAGE trans_data AS 
    PROCEDURE INSERT_TRANSACTION_INFO(
    var_FName IN TRANSACTION.FIRST_NAME%type, 
    var_LName IN TRANSACTION.LAST_NAME%type, 
    var_DOB IN TRANSACTION.DOB%type, 
    var_InvoiceDate IN TRANSACTION.INVOICE_DATE%type, 
    var_ServiceCode IN TRANSACTION.SERVICE_CODE%type, 
    var_BilledAmt IN TRANSACTION.BILLED_AMT%type, 
    var_SSN IN TRANSACTION.SSN%type, 
    var_ServiceDate IN TRANSACTION.SERVICE_DATE%type, 
    var_VendorCode IN TRANSACTION.VENDOR_CODE%type, 
    var_TransStatus IN TRANSACTION.TRANS_STATUS%type, 
    var_Comp IN TRANSACTION.COMPANY%type, 
    var_State IN TRANSACTION.STATE%type, 
    var_Return OUT VARCHAR2 
); 
END trans_data; 

CREATE OR REPLACE PACKAGE BODY trans_data AS 
    PROCEDURE INSERT_TRANSACTION_INFO(
    var_FName IN TRANSACTION.FIRST_NAME%type, 
    var_LName IN TRANSACTION.LAST_NAME%type, 
    var_DOB IN TRANSACTION.DOB%type, 
    var_InvoiceDate IN TRANSACTION.INVOICE_DATE%type, 
    var_ServiceCode IN TRANSACTION.SERVICE_CODE%type, 
    var_BilledAmt IN TRANSACTION.BILLED_AMT%type, 
    var_SSN IN TRANSACTION.SSN%type, 
    var_ServiceDate IN TRANSACTION.SERVICE_DATE%type, 
    var_VendorCode IN TRANSACTION.VENDOR_CODE%type, 
    var_TransStatus IN TRANSACTION.TRANS_STATUS%type, 
    var_Comp IN TRANSACTION.COMPANY%type, 
    var_State IN TRANSACTION.STATE%type, 
    var_Return OUT VARCHAR2) 
    IS 
    BEGIN 
    INSERT INTO TRANSACTION 
     (FIRST_NAME, LAST_NAME, DOB, INVOICE_DATE, SERVICE_CODE, BILLED_AMT, 
     SSN, SERVICE_DATE, VENDOR_CODE, TRANSACTION_ID, TRANS_STATUS, COMPANY, 
     STATE) 
    VALUES 
     (var_FName, var_LName, to_date(var_DOB, 'MM/DD/YY'), 
     to_date(var_InvoiceDate, 'MM/DD/YY'), var_ServiceCode, var_BilledAmt, 
     var_SSN, to_date(var_ServiceDate, 'MM/DD/YY'), var_VendorCode, 
     SEQ_TRANSACTION_ID.nextval, var_TransStatus, var_Comp, var_State); 
    var_return := 'PASS'; 
    EXCEPTION 
    WHEN DUP_VAL_ON_INDEX THEN 
    var_return := 'DUPE'; 
    WHEN OTHERS THEN 
    var_return := 'FAIL'; 
    END INSERT_TRANSACTION_INFO; 
END trans_data; 

私のPHPコードは、私はすべてのフィールドが正しく渡している検証し、前のページからのPOSTを受信して​​、変数にそれらをバインドします。

//setup insert statement 
$stmts = OCI_Parse($c,"BEGIN ucs.trans_data.INSERT_TRANSACTION_INFO(
      :var_FName, :var_LName, :var_DOB, :var_InvoiceDate, :var_ServiceCode, :var_BilledAmt, :var_SSN, 
      :var_ServiceDate, :var_VendorCode, :var_TransStatus, :var_Comp, :var_State, :var_return); END;"); 

//bind input and output 
OCI_Bind_By_Name($stmts, ":var_FName", $FName); 
OCI_Bind_By_Name($stmts, ":var_LName", $LName); 
OCI_Bind_By_Name($stmts, ":var_DOB", $DOB); 
OCI_Bind_By_Name($stmts, ":var_InvoiceDate", $InvoiceDate); 
OCI_Bind_By_Name($stmts, ":var_ServiceCode", $ServiceCode); 
OCI_Bind_By_Name($stmts, ":var_BilledAmt", $BilledAmt); 
OCI_Bind_By_Name($stmts, ":var_SSN", $SSN); 
OCI_Bind_By_Name($stmts, ":var_ServiceDate", $ServiceDate); 
OCI_Bind_By_Name($stmts, ":var_VendorCode", $VendorCode); 
OCI_Bind_By_Name($stmts, ":var_TransStatus", $TransStatus); 
OCI_Bind_By_Name($stmts, ":var_Comp", $ComCode); 
OCI_Bind_By_Name($stmts, ":var_State", $State); 
OCI_Bind_By_Name($stmts, ":var_return", $Return, 4); 

//execute statement and add message to Return 
oci_execute($stmts); 
oci_commit($c); 

01/01/11の日付を使用している理由は何ですか?このメッセージは、このメッセージが返されますか?他の情報を投稿する必要がある場合はお知らせください。

+0

これは、 '$ InvoiceDate'と' $ ServiceDate'がエコーしているのでしょうか? – jprofitt

答えて

0

プロシージャのDATE引数に間違った型を宣言しました。

この手順では、to_dateを使用して日付を解析するので、それぞれをVARCHARとして渡す必要があります。しかし、あなたはタイプDATEであるとして、あなたの引数を宣言:

var_DOB IN TRANSACTION.DOB%type, 
var_InvoiceDate IN TRANSACTION.INVOICE_DATE%type, 
var_ServiceDate IN TRANSACTION.SERVICE_DATE%type, 

にそれを変更してみてください:

var_DOB IN VARCHAR2, 
var_InvoiceDate IN VARCHAR2, 
var_ServiceDate IN VARCHAR2, 

、それがその後、動作するかどうかを確認。

+0

パッケージとボディのフィールドを変更すると、そのトリックが行われました。早速のご返事ありがとうございます! – MikeL

関連する問題