source

Oracle에서 CREATE 명령을 사용하여 열 이름을 큰따옴표로 묶으면 제대로 작동하지 않습니다. 이유는 무엇입니까?

manysource 2023. 10. 7. 12:00

Oracle에서 CREATE 명령을 사용하여 열 이름을 큰따옴표로 묶으면 제대로 작동하지 않습니다. 이유는 무엇입니까?

간단한 표를 생각해 봅시다.products(Oracle 9i를 사용해 보았습니다.)아래 CREATE 문으로 이 테이블을 작성합니다.

CREATE TABLE products

("prod_id" varchar2(7) primary key, "product_name" varchar2(30) NOT NULL);

특별히 주의해야 할 것은, 나는 두개의 따옴표 안에 열 이름을 넣고 있다는 것입니다.""우리가 평소에 그랬던 것처럼.분명히 효과가 있을 것이고 그리고products테이블은 지정된 제약 조건이 있는 두 열로 생성됩니다.


이제 다음 INSERT INTO 명령을 사용하여 일부 행을 이 테이블에 삽입합니다.

INSERT INTO products VALUES('P0001', 'Nokia-N97');
INSERT INTO products VALUES('P0002', 'Nokia-1208');
INSERT INTO products VALUES('P0003', 'Nokia-1115');

3개의 행을 삽입할 것입니다.products테이블.


이러한 행이 실제로 삽입되었는지 확인하기 위해 다음과 같이 SELECT 문을 발행할 수 있습니다.

SELECT * FROM products;

우리가 삽입한 3개의 행을 표시하면 됩니다.


자, 여기 진짜 질문이 있습니다.우리가 아래의 SELECT 문을 발행할 때,

SELECT prod_id, product_name FROM products;

우리가 이 SQL에서 어떤 실수도 하지 않았음에도 불구하고 작동하지 않습니다.오라클은 대신 이러한 열이 존재하지 않는다고 보고할 것입니다.왜 이런 일이 일어날까요?아주 구체적인 이유가 있을 거라고 생각합니다.

제가 방금 한 것처럼 불필요하게 큰따옴표 안에 칼럼 이름을 넣는 것은 최선의 방법이 아닐 수도 있지만, 저는 단지 질문 하나만 떠올랐습니다.

일반적인 생각과는 달리 Oracle은 열 및 테이블 이름에서 대소문자를 구분합니다.기본적으로 모든 것을 대문자로 변환합니다.

그러나 큰따옴표로 된 이름을 사용할 경우 Oracle에서 제공한 정확한 철자로 열을 생성하도록 지시합니다(의 소문자는CREATE성명서).

그 이후로SELECTstatement, 따옴표를 사용하지 않으며, 이름이 대문자로 변환되므로 아래의 소문자 이름과 같지 않습니다.CREATE진술.

따라서 이 작업은 다음과 같이 수행됩니다.

SELECT "prod_id", "product_name" FROM products;

열 또는 테이블 이름이 지정된 방법을 모르는 경우 데이터 사전에서 검색할 수 있습니다.사용자에 대한 소문자 열 이름을 찾을 수 있습니다.product테이블, 그러나 대문자 테이블 이름, 인용되지 않았기 때문입니다.

언급URL : https://stackoverflow.com/questions/8628412/enclosing-column-names-within-double-quoatation-marks-with-create-command-in-ora