[SQL] 오라클 SQL 구문 : 인용 식별자
SQL오라클 SQL 구문 : 인용 식별자
나는처럼 보였다 SQL 쿼리를 발생
select "hello"
from "foo"."bar"
나는 우리가 오라클에서 인용하고 인용되지 않은 식별자를 가질 수 있음을 발견 : 데이터베이스 개체 이름과 예선
나는 DBA를 요청하고이 이름 바 테이블이다하지만 "바"고 나에게 말했다
왜 그런 겁니까?
해결법
-
==============================
1.테이블은 바 없습니다 BAR 또는 "바"라는 있지만 소문자에 있기 때문에 당신은 단지 큰 따옴표를 사용하여 참조 할 수 있습니다 :
테이블은 바 없습니다 BAR 또는 "바"라는 있지만 소문자에 있기 때문에 당신은 단지 큰 따옴표를 사용하여 참조 할 수 있습니다 :
select * from bar; -- will fail select * from "bar"; -- will succeed
교훈은 다음과 같은 테이블을 생성하지!
-
==============================
2.그것은 그 data_dictionary에서, 개체 이름은 모두 대문자로 저장됩니다 알고하는 데 도움이; 당신이 인용 식별자를 사용하지 않는 한 특별히 "이 문자 그대로의 이름으로이 테이블을 생성", "이 경우 민감하게 이름을 객체 이봐, 우리가 wan't"또는 다른 말로 오라클에게
그것은 그 data_dictionary에서, 개체 이름은 모두 대문자로 저장됩니다 알고하는 데 도움이; 당신이 인용 식별자를 사용하지 않는 한 특별히 "이 문자 그대로의 이름으로이 테이블을 생성", "이 경우 민감하게 이름을 객체 이봐, 우리가 wan't"또는 다른 말로 오라클에게
아래 -라는 테이블 줄을 작성, 당신은 'BAR에서', '바에서', '바에서'사용하여 선택할 수 있습니다. 당신이 오라클에 말을하지 작업 때문에 ''바 '에서'바 '나에게 말 그대로 소문자라는 이름의 테이블에서 결과를 "".
"바"라는 이름의 테이블을 생성, 당신 만이 ''바 '에서'사용을 선택할 수 있습니다. 이는 '에서 바'를 번역에 'BAR에서'입니다.
SQL> create table bar (x varchar2(1)); Table created. SQL> SQL> select * from bar; no rows selected SQL> select * from BAR; no rows selected SQL> select * from "bar"; select * from "bar" * ERROR at line 1: ORA-00942: table or view does not exist SQL> select * from "BAR"; no rows selected SQL> SQL> drop table bar; Table dropped. SQL> SQL> create table "bar" (x varchar2(1)); Table created. SQL> SQL> select * from bar; select * from bar * ERROR at line 1: ORA-00942: table or view does not exist SQL> select * from BAR; select * from BAR * ERROR at line 1: ORA-00942: table or view does not exist SQL> select * from "bar"; no rows selected SQL> select * from "BAR"; select * from "BAR" * ERROR at line 1: ORA-00942: table or view does not exist SQL> SQL> drop table "bar"; Table dropped. SQL> spool off
-
==============================
3.뭔가를 인용하여 데이터베이스 엔티티에 비 부씩 일치를 강제합니다. 그래서 나는 토니의 대답은 거의 잘 생각 :
뭔가를 인용하여 데이터베이스 엔티티에 비 부씩 일치를 강제합니다. 그래서 나는 토니의 대답은 거의 잘 생각 :
select sysdate from dual; -- works select sysdate from DUAL; -- works select sysdate from "DUAL"; -- works select sysdate from "dual"; - FAILS
당신이 인용 테이블이 인용 된 문자열을 사용하여 만든다면, 그때는 아마 그것을 참조하기 위해 인용 된 문자열을 사용해야합니다.
나는 오라클과 실험,하지만 다른 DBMS를에 인용 식별자를 사용하면, 예를 들어 식별자로 예약어를 사용할 수 없습니다했습니다 다음은 유효한 것 (토끼 귀보다는 역 인용 부호를 사용) MySQL은 :
SELECT `SUM` FROM `WHERE`;
HTH
-
==============================
4.당신이 인용 한 텍스트를 나타냅니다 같은 다른,하지만 비슷한 메모에서, 오라클에서 따옴표는 식별자가 아닌 문자열 상수를 나타냅니다. 귀하의 예제는 당신에게 "foo는". "바"가있는 경우에도 오류를 줄 것이다이 의미합니다. 이 간단한 예제를 생각해 봅시다 :
당신이 인용 한 텍스트를 나타냅니다 같은 다른,하지만 비슷한 메모에서, 오라클에서 따옴표는 식별자가 아닌 문자열 상수를 나타냅니다. 귀하의 예제는 당신에게 "foo는". "바"가있는 경우에도 오류를 줄 것이다이 의미합니다. 이 간단한 예제를 생각해 봅시다 :
SQL> SELECT "hello" FROM "DUAL"; SELECT "hello" FROM "DUAL" ORA-00904: "hello": invalid identifier
이 대 :
SQL> SELECT 'hello' FROM "DUAL"; 'HELLO' ------- hello
"DUAL"는 식별자는이 경우에이 테이블을 나타낸다. 그것은 등 사용자, 열을 나타낼 수 있지만, 문자열 상수로 해석되지 않습니다.
from https://stackoverflow.com/questions/6468337/oracle-sql-syntax-quoted-identifier by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 하루에 1 개 이상의 레코드를 선택하려면? (0) | 2020.07.15 |
---|---|
[SQL] 5 세트로 그룹 행 (0) | 2020.07.15 |
[SQL] 오늘 날짜를 기준으로 이전 월요일 및 이전 일요일의 날짜 (0) | 2020.07.15 |
[SQL] SSIS에서 여러 열로 쉼표 구분 기호와 데이터의 단일 열을 분할 (0) | 2020.07.15 |
[SQL] SQL 서버 JDBC와 "NoClassDefFoundError를 모두 javax / XML / 바인드 / DatatypeConverter" (0) | 2020.07.14 |