[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.그것은 개체 또는 테이블로 할 필요가 없다, 그것은 이러한 개체 / 테이블이 생성 된 방법과 관련이있다.
그것은 개체 또는 테이블로 할 필요가 없다, 그것은 이러한 개체 / 테이블이 생성 된 방법과 관련이있다.
당신이 할 경우 당신이 다음 BLABLA 또는 blabla 또는 bLabLa를 통해이 테이블을 해결할 수있는 테이블 blabla를 생성 할 경우 다음 당신은 항상 "blabla"로이 테이블을 해결해야 테이블 "blabla"을 만들 수 있습니다. "사용"이름이 대소 문자를 구분하고는 대부분의 개발자들이 사용하지 않는 이유입니다 "보통은 대소 문자를 구분 이름을 원하지 않기 때문에".
-
==============================
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.[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.나는 오라클 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;
따옴표없이 나를 위해 그 작업을 잘. 그 귀하의 경우에는 작동하지 않는 이유는 확실하지. 무엇이 당신의 오라클 버전?
from https://stackoverflow.com/questions/38328169/oracle-db-quote-column-names by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 동적 SQL LOOP (0) | 2020.07.12 |
---|---|
[SQL] 여러 값을 FIND_IN_SET (0) | 2020.07.12 |
[SQL] 두 개의 서로 다른 결과 집합을 받고 이러한 두 개의 쿼리의 차이는 무엇입니까? (0) | 2020.07.12 |
[SQL] 어떻게 T-SQL을 사용하여 URL에서 XML을 읽을 수 있습니까? (0) | 2020.07.12 |
[SQL] 동적 SQL을 사용하면 간단한 SQL 쿼리에 변수를 추가하여 열 이름을 지정합니다 (0) | 2020.07.12 |