복붙노트

[SQL] ORA-00933은 : SQL이 제대로 종료되지] 명령

SQL

ORA-00933은 : SQL이 제대로 종료되지] 명령

나는 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

내가 무엇을 잘못하고 있지?

해결법

  1. ==============================

    1.나에게 당신이를 놓치고있는 것 같다; 두 문 사이에 : ps_tl_compleave_tbl 삽입 값 ( '2626899'0 TO_DATE ('01 / / 2,002 01 '', MM / DD / YYYY ')'LTKN ','LTKN ','52 ', TO_DATE ('01 / 01 / 2002 ','MM / DD / 24.000 YYYY '), 16.000000) ; ps_tl_compleave_tbl 삽입 값 ( '4327142'0 TO_DATE ('03 / / 2,002 23 '', MM / DD / YYYY ')'LTKN ','LTKN ','51 ', TO_DATE ('03 / 23 / 2002 ','MM / DD / 0.000 YYYY '), 0.000000) ; 를 추가하십시오; 우리가 알 수 있습니다.

    나에게 당신이를 놓치고있는 것 같다; 두 문 사이에 : ps_tl_compleave_tbl 삽입 값 ( '2626899'0 TO_DATE ('01 / / 2,002 01 '', MM / DD / YYYY ')'LTKN ','LTKN ','52 ', TO_DATE ('01 / 01 / 2002 ','MM / DD / 24.000 YYYY '), 16.000000) ; ps_tl_compleave_tbl 삽입 값 ( '4327142'0 TO_DATE ('03 / / 2,002 23 '', MM / DD / YYYY ')'LTKN ','LTKN ','51 ', TO_DATE ('03 / 23 / 2002 ','MM / DD / 0.000 YYYY '), 0.000000) ; 를 추가하십시오; 우리가 알 수 있습니다.

  2. ==============================

    2..NET에서, 때 우리는 마지막에 세미콜론 (;)으로 하나의 오라클 SQL 문을 실행하려고합니다. 결과는 오라클 오류가있을 것입니다 : ORA-00911 : 잘못된 문자. OK, 당신은 하나의 SQL 문이 예를 들어 하나 개의 문자열에 2 SQL 문을 실행에 대한 세미콜론,하지만 필요하지 않습니다 도표 :

    .NET에서, 때 우리는 마지막에 세미콜론 (;)으로 하나의 오라클 SQL 문을 실행하려고합니다. 결과는 오라클 오류가있을 것입니다 : ORA-00911 : 잘못된 문자. OK, 당신은 하나의 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 : 잘못된 문자.

    이 문제에 대한 해결책은 시작과 끝으로 2 오라클 SQL 문을 래핑하는 것입니다; 구, 예를 들어 :

    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

  3. ==============================

    3.오라클 세미콜론에서 ';' 단지 SQLPLUS 사용된다. 당신이 ODBC / JDBC, OLEDB 등을 사용하는 경우 당신은 당신의 문장의 끝에 세미콜론 (;)을 붙이지 않습니다. 문제를 처리하는 가장 좋은 방법은 대신 당신은 세미콜론을 사용할 수 없기 때문에 하나의 문장으로 결합하는 노력의이 문을 사용하므로 위의 경우 당신은 실제로 2 개의 다른 문을 실행하고 있습니다.

    오라클 세미콜론에서 ';' 단지 SQLPLUS 사용된다. 당신이 ODBC / JDBC, OLEDB 등을 사용하는 경우 당신은 당신의 문장의 끝에 세미콜론 (;)을 붙이지 않습니다. 문제를 처리하는 가장 좋은 방법은 대신 당신은 세미콜론을 사용할 수 없기 때문에 하나의 문장으로 결합하는 노력의이 문을 사용하므로 위의 경우 당신은 실제로 2 개의 다른 문을 실행하고 있습니다.

  4. ==============================

    4.첫 번째 삽입 후 세미콜론?

    첫 번째 삽입 후 세미콜론?

  5. ==============================

    5.오라클 SQL은 세미콜론을 사용합니다; 문 마커의 끝으로.

    오라클 SQL은 세미콜론을 사용합니다; 문 마커의 끝으로.

    당신은 추가해야합니다; 후 삽입 문을 귀찮게.

    NB : 또한 ADODB를 가정 한 번의 호출 2 개 삽입을 허용합니다.

    대안은 블록 모두 호출을 래핑 할 수 있습니다,

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

    6.내 루프에서 나는 내 StringBuilder에 ... 내가 게시 따라서 여러 INSERT 문을 다시 초기화되지 않았습니다.

    내 루프에서 나는 내 StringBuilder에 ... 내가 게시 따라서 여러 INSERT 문을 다시 초기화되지 않았습니다.

    어쨌든 당신의 도움을 주셔서 감사합니다!

  7. ==============================

    7.그것은 장거리 슛이다하지만 SQL 날짜 형식 삽입 처음에 모두 영국 / 우리를 위해 유효합니다, 두 번째 삽입 오라클 DB는 영국의 날짜 형식에 대한 설정이 있다면, 난 당신이 TO_DATE 함수를 사용하고 실현 유효하지만 난하지 않습니다 다른 아무것도 볼 ...

    그것은 장거리 슛이다하지만 SQL 날짜 형식 삽입 처음에 모두 영국 / 우리를 위해 유효합니다, 두 번째 삽입 오라클 DB는 영국의 날짜 형식에 대한 설정이 있다면, 난 당신이 TO_DATE 함수를 사용하고 실현 유효하지만 난하지 않습니다 다른 아무것도 볼 ...

  8. ==============================

    8.세미콜론은 OLE_DB에서 필요한가? 그것은 대부분의 API 년대에서 필요하지 않은거야?

    세미콜론은 OLE_DB에서 필요한가? 그것은 대부분의 API 년대에서 필요하지 않은거야?

  9. ==============================

    9.ADO.NET OLE DB 공급자를 사용하면 데이터베이스에 대한 특정의 프로 바이더가없는 일반 데이터 액세스를위한 것입니다. Oracle 데이터베이스 연결되어 OleDbConnection에 우선 사용 OracleConnection 등.

    ADO.NET OLE DB 공급자를 사용하면 데이터베이스에 대한 특정의 프로 바이더가없는 일반 데이터 액세스를위한 것입니다. Oracle 데이터베이스 연결되어 OleDbConnection에 우선 사용 OracleConnection 등.

  10. ==============================

    10.세미콜론 문제뿐만 아니라, 나는 강하게 당신이 바인드 변수 들여다 좋습니다. 도로 아래로 데이터베이스 성능 문제를 일으킬 수를 사용하는 실패. 또한 코드 청소기 경향이있다.

    세미콜론 문제뿐만 아니라, 나는 강하게 당신이 바인드 변수 들여다 좋습니다. 도로 아래로 데이터베이스 성능 문제를 일으킬 수를 사용하는 실패. 또한 코드 청소기 경향이있다.

  11. ==============================

    11.문제는 당신이 널 (null) 쿼리에 삽입하는 매개 변수를 가지고있을 수 있습니다. 그건 내 문제가 무엇인지했다. 내가 매개 변수를 빈 문자열의 기본 값을 준 후에는했다.

    문제는 당신이 널 (null) 쿼리에 삽입하는 매개 변수를 가지고있을 수 있습니다. 그건 내 문제가 무엇인지했다. 내가 매개 변수를 빈 문자열의 기본 값을 준 후에는했다.

  12. from https://stackoverflow.com/questions/72151/ora-00933-sql-command-not-properly-ended by cc-by-sa and MIT license