문제

Oracle 데이터베이스에 연결하는 ADO.Net용 OLEDB 공급자를 사용하고 있습니다.내 루프에서 삽입을 수행하고 있습니다.

insert into ps_tl_compleave_tbl values('2626899', 0, TO_DATE('01/01/2002', 'MM/DD/YYYY'), 'LTKN', 'LTKN', '52', TO_DATE('01/01/2002', 'MM/DD/YYYY'), 16.000000, 24.000)insert into ps_tl_compleave_tbl values('4327142', 0, TO_DATE('03/23/2002', 'MM/DD/YYYY'), 'LTKN', 'LTKN', '51', TO_DATE('03/23/2002', 'MM/DD/YYYY'), 0.000000, 0.000)

첫 번째 삽입은 성공했지만 두 번째 삽입에서는 오류가 발생했습니다.

ORA-00933: SQL command not properly ended

내가 도대체 ​​뭘 잘못하고있는 겁니까?

도움이 되었습니까?

해결책

내가 보기엔 당신이 뭔가를 놓치고 있는 것 같아요 ; 두 진술 사이 :
insert into ps_tl_compleave_tbl values('2626899', 0, TO_DATE('01/01/2002', 'MM/DD/YYYY'), 'LTKN', 'LTKN', '52', TO_DATE('01/01/2002', 'MM/DD/YYYY'), 16.000000, 24.000)
;
insert into ps_tl_compleave_tbl values('4327142', 0, TO_DATE('03/23/2002', 'MM/DD/YYYY'), 'LTKN', 'LTKN', '51', TO_DATE('03/23/2002', 'MM/DD/YYYY'), 0.000000, 0.000)
;
추가해 보세요 ; 그리고 우리에게 알려주세요.

다른 팁

.net에서 끝에 세미콜론이 있는 단일 Oracle SQL 문을 실행하려고 할 때.결과는 oracle 오류입니다.ora-00911:잘못된 문자.좋아, 하나의 SQL 문에는 세미콜론이 필요하지 않다고 생각하지만, 예를 들어 하나의 문자열에서 2개의 SQL 문을 실행하는 것은 어떻습니까?

Dim db As Database = DatabaseFactory.CreateDatabase("db")
Dim cmd As System.Data.Common.DbCommand
Dim sql As String = ""

sql = "DELETE FROM iphone_applications WHERE appid = 1; DELETE FROM iphone_applications WHERE appid = 2; "

cmd = db.GetSqlStringCommand(sql)
db.ExecuteNonQuery(cmd)

위의 코드는 동일한 Oracle 오류를 제공합니다.ora-00911:잘못된 문자.

이 문제에 대한 해결책은 두 개의 Oracle SQL 문을 다음과 같이 래핑하는 것입니다. BEGIN 그리고 END; 예를 들면 다음과 같습니다.

sql = "BEGIN DELETE FROM iphone_applications WHERE appid = 1; DELETE FROM iphone_applications WHERE appid = 2; END;"

예의: http://www.lazyasscoder.com/Article.aspx?id=89&title=ora-00911%3A+invalid+character+when+executing+multiple+Oracle+SQL+statements

오라클에서 세미콜론; ' sqlplus에서만 사용됩니다.ODBC/JDBC, OLEDB 등을 사용하는 경우 명령문 끝에 세미콜론을 넣지 마십시오.위의 경우 실제로 2개의 서로 다른 문을 실행하고 있으므로 문제를 처리하는 가장 좋은 방법은 세미콜론을 사용할 수 없으므로 단일 문으로 결합하는 대신 2개의 문을 사용하는 것입니다.

첫 번째 삽입 후 세미콜론?

Oracle SQL은 세미콜론을 사용합니다.명령문 마커의 끝으로 사용됩니다.

;를 추가해야 합니다.귀찮은 삽입 문 후에.

참고:이는 또한 ADODB가 단일 호출에서 2개의 삽입을 허용한다고 가정합니다.

대안은 두 호출을 모두 블록으로 래핑하는 것일 수 있습니다.

BEGIN
      insert (...) into (...);
      insert (...) into (...);
END;

내 루프에서는 StringBuilder를 다시 초기화하지 않았으므로 게시한 다중 삽입 문이 있었습니다.

어쨌든 도와주셔서 감사합니다!!

긴 시도이지만 첫 번째 삽입에서 SQL 날짜 형식은 영국/미국 모두에 유효하고 Oracle DB가 영국 날짜 형식으로 설정된 경우 두 번째 삽입은 유효하지 않습니다. TO_DATE 함수를 사용했다는 것을 알고 있지만 그렇지 않습니다. 다른 것도 보고 ...

OLE_DB에서 세미콜론이 필요합니까?대부분의 API에서는 필요하지 않습니까?

ADO.NET OLE DB 공급자는 데이터베이스에 대한 특정 공급자가 없는 일반 데이터 액세스를 위한 것입니다.Oracle 데이터베이스 연결에는 OleDbConnection보다 OracleConnection 등을 사용하십시오.

세미콜론 문제 외에도 바인드 변수를 살펴보는 것이 좋습니다.이를 사용하지 않으면 향후 데이터베이스 성능 문제가 발생할 수 있습니다.코드도 더 깔끔해지는 경향이 있습니다.

문제는 쿼리에 삽입되는 null 매개 변수 변수가 있다는 것일 수 있습니다.내 문제는 바로 그것이었다.매개 변수에 빈 문자열의 기본값을 지정하면 제대로 작동했습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top