2012-03-01 128 views
0
Name    Null  Type   
------------------ -------- -------------- 
RESOURCE_ID  NOT NULL NUMBER(38)  
RESOURCE_FIRST_NM NOT NULL VARCHAR2(30) 
RESOURCE_MIDDLE_NM   VARCHAR2(30) 
RESOURCE_LAST_NM NOT NULL VARCHAR2(30) 
RESOURCE_TYPE_CD NOT NULL VARCHAR2(10) 
EMPLOYEE_ID     VARCHAR2(20) 
EMPLOYEE_TYPE_CD   VARCHAR2(10) 
FUNCTIONAL_LEAD_CD   VARCHAR2(10) 
PHONE_1      VARCHAR2(15) 
PHONE_2      VARCHAR2(15) 
FAX_NR      VARCHAR2(15) 
EMAIL_DE     VARCHAR2(50) 
RESOURCE_STATUS_CD NOT NULL VARCHAR2(10) 
HIRING_DT   NOT NULL DATE   
LEAVE_START_DT    DATE   
LEAVE_END_DT    DATE   
TERMINATED_DT    DATE   
ADDRESS1     VARCHAR2(50) 
ADDRESS2     VARCHAR2(50) 
CITY      VARCHAR2(15) 
STATE      VARCHAR2(15) 


int i=statement.executeUpdate(" 
    insert into RAS_T_RESOURCES(
     RESOURCE_ID, 
     RESOURCE_FIRST_NM, 
     RESOURCE_MIDDLE_NM, 
     RESOURCE_LAST_NM, 
     RESOURCE_TYPE_CD, 
     EMPLOYEE_ID, 
     FUNCTIONAL_LEAD_CD, 
     ADDRESS1, 
     ADDRESS2, 
     PHONE_1, 
     PHONE_2, 
     FAX_NR, 
     EMAIL_DE, 
     RESOURCE_STATUS_CD, 
     HIRING_DT, 
     LEAVE_START_DT, 
     LEAVE_END_DT, 
     TERMINATED_DT, 
     CITY, 
     STATE) 
    values(
     2, 
     '"+strFirstname+"', 
     '"+strMiddlename+"', 
     '"+strLastname+"', 
     '"+strResourceType+"', 
     '"+strEmpId+"', 
     '"+strHiringMngr+"', 
     '"+strAddress1+"', 
     '"+strAddress2+"', 
     '"+strPhone1+"', 
     '"+strPhone2+"', 
     '"+strFax+"', 
     '"+strEMail+"', 
     '"+strstatus+"', 
     "+strHiringDate+", 
     "+strStartDate+", 
     "+strEndDate+", 
     "+strTerminatedDate+", 
     '"+strCity+"', 
     '"+strState+"');"); 

いずれかを助けてください。何が問題ですか?ORA-00917:カンマがありません

答えて

3

私の推測では、問題はバインド変数を使用していないことと、文字列を連結する際にエラーが発生していることです。たとえば、データにカンマがあると、問題が発生します。 Java文字列がセッションのNLS_DATE_FORMATと一致しない場合、Oracle DATE列のいずれかで問題が発生します。

パフォーマンス、ユーザビリティ、セキュリティ上の理由から、私はバインド変数を代わりに使用することを強く推奨します。コンパイラとして純粋に考える

+0

------------文字列strDate = request.getParameter(" txtHiringDate "); SimpleDateFormat formater = new SimpleDateFormat(" MM/dd/yyyy "); SimpleDateFormat sdfDestinati on =新しいSimpleDateFormat( "MM-dd-yyyy"); –

+0

おそらく、この問題は日付文字列の不一致から発生します。実行前に変数にinsert文を入れてから、変数をデバッグするのはどうですか?したがって、ステートメントに含まれるエラーを確認することができます。 – asdr

3

は、このような式:

 '"+strFirstname+"' 

はリテラル文字列として解釈されるだろう。 (それはあなたが考えているものだと、どんな変数置換は、行われないだろう。)

ここで、このビットは問題おそらくです:

 "+strHiringDate+", 
    "+strStartDate+", 
    "+strEndDate+", 
    "+strTerminatedDate+", 

これらは識別子ではなく文字列としてOracleによって解析されるだろうが - あなたのために一重引用符( ')を省略し、Oracle識別子は二重引用符( ")で区切ってもかまいません。

+0

日付strHiringDate = null; 日付strStartDate = null; 日付strEndDate = null; 日付strTerminatedDate = null; –

+0

こんにちはuser1241779、あなたは私の要点を得ていません。あなたのクエリでは、二重引用符で囲まれているため、クエリは文字通り '+ strHiringDate +'、* '*'を含む識別子を探しているので、これらの変数は使用されません。 –

関連する問題