Oracle 11g에서 열 이름을 정규화하십시오
문제
스키마의 많은 테이블에서 열의 이름에서 따옴표를 제거해야합니다. 이 프로세스를 자동화하는 방법은? 나는 Oracle 11g를 사용하고 있습니다.
업데이트
죄송합니다. 질문을 다시 제출해야했습니다.
미리 감사드립니다.
해결책
모든 경우 민감한 열 이름을 제거하려면
SQL> create table foo ( "x" number );
Table created.
SQL> ed
Wrote file afiedt.buf
1 begin
2 for x in (select *
3 from user_tab_cols
4 where column_name != UPPER(column_name))
5 loop
6 execute immediate 'ALTER TABLE ' || x.table_name ||
7 ' RENAME column "' || x.column_name || '"' ||
8 ' TO ' || upper(x.column_name);
9 end loop;
10* end;
SQL> /
PL/SQL procedure successfully completed.
SQL> desc foo
Name Null? Type
----------------------------------------- -------- ----------------------------
X NUMBER
다른 팁
나는 여기서 "필드"당신은 "열 이름"을 의미한다고 가정합니다.
테이블을 만들 때 인용구에 넣지 않으면 Oracle의 열 이름은 대용품에 민감하지 않습니다. 일반적으로 테이블을 만들 때 열 이름 주위에 따옴표를 사용하는 것은 좋은 생각이 아닙니다. 다시 말해, 다음과 같은 테이블을 만들면 다음과 같습니다.
CREATE TABLE FOO (
colUMN1 varchar2(10),
CoLumn2 number(38)
)
그런 다음 여전히 다음과 같은 선택 설명을 실행할 수 있습니다.
SELECT column1, column2 FROM FOO
당신은 또한 이것을 할 수 있습니다 :
SELECT COLUMN1, COLUMN2 FROM FOO
또한이 쿼리를 실행하면 Oracle이 칼럼 이름을 데이터 사전에서 대문자로 저장 한 것을 볼 수 있습니다.
SELECT * FROM ALL_TAB_COLUMNS WHERE TABLE_NAME = 'FOO'
따라서이 열의 이름을 모든 대문자로 바꿀 필요가 없습니다. 당신이 쓴 쿼리는 모든 대문자 열 이름을 사용할 수 있으며 (열 이름 주위에 따옴표를 사용하여 테이블이 생성되지 않았다고 가정) 잘 작동합니다. 일반적으로 사례에 민감하도록 강요하는 것은 나쁜 생각입니다.
제휴하지 않습니다 StackOverflow