복붙노트

[SQL] 정확히 테이블 이름 주위의 인용 부호는 무엇을해야합니까?

SQL

정확히 테이블 이름 주위의 인용 부호는 무엇을해야합니까?

나는 따옴표 ( ") 단순히 마커를 그룹화하는 타입이라고 생각하지만 일부 NHibernate에 코드 통지를 디버깅하고있어 동안 그

SELECT * FROM site WHERE site_id = 3;

작품 벌금

SELECT * FROM "site" WHERE site_id = 3;

테이블에 실패하거나보기는 오류가 존재하지 않습니다.

무슨 준다?

해결법

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

    1.오라클에 식별자 주위에 따옴표를 두는 것은 오라클은 대소 문자를 구분보다는 케이스 - 무감각의 기본을 사용하여 같은 식별자를 치료하게됩니다. 당신이 이름 주위에 따옴표가있는 테이블 (또는 열)를 작성하는 경우, 당신은 항상 큰 따옴표 식별자에 제대로 따옴표는 의미가 모두 대문자 식별자를 제외하고 (케이스를 지정하여 참조해야합니다 ).

    오라클에 식별자 주위에 따옴표를 두는 것은 오라클은 대소 문자를 구분보다는 케이스 - 무감각의 기본을 사용하여 같은 식별자를 치료하게됩니다. 당신이 이름 주위에 따옴표가있는 테이블 (또는 열)를 작성하는 경우, 당신은 항상 큰 따옴표 식별자에 제대로 따옴표는 의미가 모두 대문자 식별자를 제외하고 (케이스를 지정하여 참조해야합니다 ).

    내부적으로, 오라클은 항상 대소 문자를 구분 식별자 매칭을하고있다. 그러나 그것은 항상 일치를 수행하기 전에 대문자로 이중 인용되지 않은 식별자를 캐스팅합니다. 당신이 식별자의 주위에 따옴표를 넣어 경우, 오라클은 대문자로 주조를 건너 뜁니다.

    당신이 뭔가를 할 경우 그래서

    CREATE TABLE my_table( 
      col1 number,
      col2 number
    )
    

    당신은 할 수

    SELECT * FROM my_table
    SELECT * FROM MY_TABLE
    SELECT * FROM My_Table
    SELECT * FROM "MY_TABLE"
    

    하지만 뭔가 같은

    SELECT * FROM "my_table" 
    

    실패합니다.

    다른 한편으로는, 당신은 뭔가를 할 경우

    CREATE TABLE "my_other_table"( 
      col1 number,
      col2 number
    )
    

    당신은 할 수 없어

    SELECT * FROM my_other_table
    SELECT * FROM MY_OTHER_TABLE
    SELECT * FROM My_Other_Table
    SELECT * FROM "MY_OTHER_TABLE"
    

    하지만 이것은

    SELECT * FROM "my_other_table" 
    

    작동

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

    2.인용 부호 식별자, 예를 들어, 특수 문자를 포함 할 수 있다는 것을 추가한다 "A-B의 c.d"은 유효한 식별자이다.

    인용 부호 식별자, 예를 들어, 특수 문자를 포함 할 수 있다는 것을 추가한다 "A-B의 c.d"은 유효한 식별자이다.

  3. from https://stackoverflow.com/questions/563090/what-exactly-do-quotation-marks-around-the-table-name-do by cc-by-sa and MIT license