복붙노트

[SQL] 오라클 DB 인용 열 이름

SQL

오라클 DB 인용 열 이름

일반 테이블을 사용하는 경우, 그것의 벌금 다음 오라클 SQL 쿼리를 사용합니다 :

SELECT max(some_primary_key) FROM MyTable

그러나, 데이터베이스의 개체 (즉, 개체의 테이블) 다음 오류 수율이 사용시 :

ORA-00904: "SOME_PRIMARY_KEY": invalid identifier

때 다음과 같이 열 이름을 인용 :

SELECT max("some_primary_key") FROM MyTable

이 작품은 예상 좋아합니다. 왜 객체로 작업 할 때하지만 테이블과 열 이름을 탈출하는 것이 필요하다?

해결법

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

    1.그것은 개체 또는 테이블로 할 필요가 없다, 그것은 이러한 개체 / 테이블이 생성 된 방법과 관련이있다.

    그것은 개체 또는 테이블로 할 필요가 없다, 그것은 이러한 개체 / 테이블이 생성 된 방법과 관련이있다.

    당신이 할 경우 당신이 다음 BLABLA 또는 blabla 또는 bLabLa를 통해이 테이블을 해결할 수있는 테이블 blabla를 생성 할 경우 다음 당신은 항상 "blabla"로이 테이블을 해결해야 테이블 "blabla"을 만들 수 있습니다. "사용"이름이 대소 문자를 구분하고는 대부분의 개발자들이 사용하지 않는 이유입니다 "보통은 대소 문자를 구분 이름을 원하지 않기 때문에".

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

    2.때 당신이 할 :

    때 당신이 할 :

    SELECT max(some_primary_key) FROM MyTable
    

    오라클은 당신의 열은 다음과 같이 선언되었다고 가정합니다 :

    CREATE TABLE MyTable (
        some_primary_key INT,
        ...
    )
    

    결과 오류보고, 그것은 그렇지 않다. 당신은 분명 이런 식으로 선언 :

    CREATE TABLE MyTable (
        "some_primary_key" INT,
        ...
    )
    

    그리고 당신은 이렇게 항상 따옴표 따라서 적절한 케이스를 사용하여 해당 열을 참조해야합니다 :

    SELECT max("some_primary_key") FROM MyTable
    

    성경 : 오라클 데이터베이스 개체 이름과 예선

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

    3.[TL; DR]는 가장 간단한 것은 개체 이름을 큰 따옴표를 사용하지 그냥 오라클은 기본 방식으로 대소 문자 구분을 관리 할 수 ​​있도록 않을 것입니다.

    [TL; DR]는 가장 간단한 것은 개체 이름을 큰 따옴표를 사용하지 그냥 오라클은 기본 방식으로 대소 문자 구분을 관리 할 수 ​​있도록 않을 것입니다.

    오라클 데이터베이스입니다, 기본적으로 대소 문자를 구분합니다; 그러나, 그들은 또한 기본적으로 대문자로 변환 모든 있도록 대소 문자 구분은 사용자, 당신에게서 추출되는 것입니다.

    CREATE TABLE Test ( column_name NUMBER );
    

    그때:

    SELECT COUNT(column_name) FROM test;
    SELECT COUNT(Column_Name) FROM Test;
    SELECT COUNT(COLUMN_NAME) FROM TEST;
    SELECT COUNT(CoLuMn_NaMe) FROM tEsT;
    SELECT COUNT("COLUMN_NAME") FROM "TEST";
    

    모두 같은 출력을 줄 것이다 :

    DESCRIBE test;
    

    출력 :

    Name        Null Type
    ----------- ---- ------
    COLUMN_NAME      NUMBER
    

    (참고 : 오라클의 기본 동작은 대문자로 이름을 변환하는 것입니다.)

    큰 따옴표를 사용하는 경우 오라클은 객체의 이름으로 사건의 사용을 존중 (당신은 다음 항상 같은 케이스를 사용하는 데 필요한)

    CREATE TABLE "tEsT" ( "CoLuMn_NaMe" NUMBER );
    

    (참고 :. 테이블 및 열 이름은 모두 따옴표로 둘러싸인 지금 당신이 그 (것)을 참조 할 때, 정확히 같은 경우, 따옴표를 사용하도록 요구하고 있습니다)

    (당신은 대소 문자 구분을 존중해야하기 때문에) 그럼 당신은 할 수 있습니다 :

    SELECT COUNT("CoLuMn_NaMe") FROM "tEsT";
    

    DESCRIBE "tEsT";
    

    출력 :

    Name        Null Type
    ----------- ---- ------
    CoLuMn_NaMe      NUMBER
    

    (참고 : 오라클은 대소 문자 구분을 존중하고있다.)

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

    4.나는 오라클 11g에서 하나 개의 객체를 생성 :

    나는 오라클 11g에서 하나 개의 객체를 생성 :

    CREATE OR REPLACE TYPE MyType AS OBJECT (
       some_property NUMBER(20),
      CONSTRUCTOR FUNCTION MyType(some_property number default 123) RETURN SELF AS RESULT
    ) NOT FINAL;
    /
    
    CREATE OR REPLACE TYPE BODY MyType AS
      CONSTRUCTOR FUNCTION MyType(some_property number default 123)
        RETURN SELF AS RESULT
      AS
      BEGIN
        SELF.some_property := some_property;
        RETURN;
      END;
    END;
    /
    

    --- 내 객체의 테이블을 생성

    CREATE TABLE MYTABLE OF MYTYPE ;
    

    --- 성명을 발표했다.

    SELECT max(some_property) FROM MYTABLE;
    

    따옴표없이 나를 위해 그 작업을 잘. 그 귀하의 경우에는 작동하지 않는 이유는 확실하지. 무엇이 당신의 오라클 버전?

  5. from https://stackoverflow.com/questions/38328169/oracle-db-quote-column-names by cc-by-sa and MIT license