2012-05-07 2 views
2

에서 Oracle 데이터베이스의 날짜 매개 변수입력에 올바른 형식은 무엇입니까 이것은 내가 무엇입니까 오류 메시지가 C#

ORA-06550: line 1, column 15: 
PLS-00306: wrong number or types of arguments in call to 'OBPL_SU_PLAN_UPDATE_PLAN_DTLS' 
ORA-06550: line 1, column 7: 
PL/SQL: Statement ignored 

코드 : 나는 두꺼비에서 프로 시저를 실행할 수 있습니다

OracleCommand cmd = new OracleCommand(); 
cmd.Connection = conn; 
cmd.CommandText = "CWPCDS.OBPL_SU_PROCESS_PKG.OBPL_SU_PLAN_UPDATE_PLAN_DTLS"; 
cmd.CommandType = CommandType.StoredProcedure; 
cmd.Parameters.Add("P_PLAN_DETAIL_ID", OracleDbType.Int32).Value = detailId; 
cmd.Parameters.Add("P_PLAN_USER_DETAIL_ID", OracleDbType.Int32).Value = null; 
cmd.Parameters.Add("P_TRANSACTION_PLAN", OracleDbType.NVarchar2, 20).Value = null; 
cmd.Parameters.Add("P_PLAN_REV_ID", OracleDbType.Int64).Value = planRev;     
cmd.Parameters.Add("P_TRANSACTION_TYPE", OracleDbType.NVarchar2, 20).Value = transType; 
cmd.Parameters.Add("P_PLAN_STATUS", OracleDbType.NVarchar2, 30).Value = status; 
cmd.Parameters.Add("P_DOC_ISSUE_DATE", OracleDbType.Date).Value = pid; 
cmd.Parameters.Add("P_EST_OBLG_DATE", OracleDbType.Date).Value = eod; 
cmd.Parameters.Add("P_AMT_TO_APPLY", OracleDbType.Int32).Value = amtApply; 
cmd.Parameters.Add("P_WBS", OracleDbType.NVarchar2, 20).Value = wbs; 
cmd.Parameters.Add("P_AMT1_TO_APPLY", OracleDbType.Int32).Value = 0; 
cmd.Parameters.Add("P_AMT2_TO_APPLY", OracleDbType.Int32).Value = 0; 
cmd.Parameters.Add("P_UPDATE_USER", OracleDbType.NVarchar2, 50).Value = 
user;    
cmd.Parameters.Add("P_DESC_WORK", OracleDbType.NVarchar2, 50).Value = dow; 
cmd.Parameters.Add("P_RET_CODE", OracleDbType.Int32).Direction = 
ParameterDirection.Output; 
cmd.Parameters.Add("P_RET_MSG", OracleDbType.Varchar2, 50).Direction = 
ParameterDirection.ReturnValue; 
cmd.ExecuteNonQuery(); 

오류없이 Toad의 날짜 형식은 '05 -MAY-2012 '입니다. 코드 - 비하인드에서 날짜 값에 sigle qoute를 추가하려고하면 "문자 리터럴에 너무 많은 문자가 있음"오류가 발생합니다. 어떤 도움이나 지시 사항도 크게 환영합니다!

+0

당신은 [내 질문] (http://stackoverflow.com/questions/15515938/add-date-parameter-to-oracle-query) 당신이 내 문제에 익숙 할 수 있음을 살펴 수 . – BrOSs

답변

1

당신은 사용할 수 있습니다

OracleCommandBuilder.DeriveParameters Method

는 각 매개 변수에 필요한 데이터 유형과 이름 인 추측. 그 사실을 알게되면 그에 따라 방법을 수정할 수 있습니다.

DB 형식에 따라 TimeStamp, Date, SmallDate가 될 수있는 C# DateTime의 경우, 사용하기로 결정한 유형이 데이터베이스에서 예상 한 유형이 아니기 때문에 오류가 발생하는 경우가 있습니다. 매개 변수가 오류를 일으키거나 데이터를자를 수 있음).

값을 문자열로 전달하지 마십시오. 해당 C# 유형으로 전달하십시오. 나는. 날짜를 전달하려면 DateTime 객체를 전달하십시오. 프로그램은 데이터베이스에서 이해할 수있는 형식으로 변환합니다. 문자열을 전달하면 범용 형식이 아닌 한 DB 구성 (기본 언어)을 변경하면 문제가 발생할 수 있습니다. 따라서 시스템이 전환 세부 사항을 처리하도록하는 것이 좋습니다. 그것은 항상 올바른 방법으로 할 것입니다.

+0

나는이 방법에 익숙하지 않다. 고마워, – Cthomas

3

DateTime .Net 값 (변수)을 추가하고 매개 변수를 변수에 할당하는 것이 좋습니다. 이렇게하면 전환이 발생합니다.

DateTime dt = new DateTime(2012, 5, 7, 12, 23, 22, 0); 
cmd.Parameters.Add(dt.ToString("dd-MMM-yyyy"), OracleDbType.Date).Value = dt; 
+0

Toad에서 작동하는 형식은 '07 -MAY-2011 '이지만 코드 매개 변수 값은 아니다. – Cthomas

+0

그것이 내가 당신에게 준 해결책과 무슨 상관이 있습니까? Toad와 ADO.net은 서로 다른 두 가지입니다. 내가 너에게 준 옵션을 시도 했니? – tsells

+0

응답 해 주셔서 감사합니다. 예, 시도했으나 동일한 오류가 발생하지 않았습니다. 05/07/2012 00:00:00 이상으로 생성 된 형식도이 절차의 Toad 환경에서 성공하지 못합니다. Toad에서 실행 된 성공적인 형식을이 절차에 대해 자세히 지적했습니다. 내 생각은 그것이 작동해야합니다. NET 측면에서 해당 형식을 재현 할 수 있다면. – Cthomas

관련 문제