source

PL/SQL의 기존 테이블에 열을 추가하기 전에 열이 있는지 확인하는 방법은 무엇입니까?

ittop 2023. 4. 2. 11:53
반응형

PL/SQL의 기존 테이블에 열을 추가하기 전에 열이 있는지 확인하는 방법은 무엇입니까?

Oracle DB 테이블에 열을 추가하기 전에 간단한 검사를 추가하려면 어떻게 해야 합니까?열을 추가하는 데 사용하는 SQL을 포함했습니다.

ALTER TABLE db.tablename 
  ADD columnname NVARCHAR2(30);

Oracle Database의 열에 대한 모든 메타데이터는 다음 보기 중 하나를 사용하여 액세스할 수 있습니다.

user_tab_cols; -- 사용자가 소유한 모든 테이블에 대해

all_tab_cols; - 사용자가 액세스할 수 있는 모든 테이블

dba_tab_cols; -- 데이터베이스 내의 모든 테이블.

SCORT에서 ADD_TMS와 같은 컬럼을 찾고 있다면.EMP 테이블과 컬럼이 존재하지 않는 경우에만 이 컬럼을 추가합니다.PL/SQL 코드는 다음 행을 따릅니다.

DECLARE
  v_column_exists number := 0;  
BEGIN
  Select count(*) into v_column_exists
    from user_tab_cols
    where upper(column_name) = 'ADD_TMS'
      and upper(table_name) = 'EMP';
      --and owner = 'SCOTT --*might be required if you are using all/dba views

  if (v_column_exists = 0) then
      execute immediate 'alter table emp add (ADD_TMS date)';
  end if;
end;
/

(순서의 일부가 아닌) 스크립트로 실행할 예정이라면 스크립트에 alter 명령을 포함하여 스크립트의 시작 엔드가 없는 경우 스크립트의 마지막에 오류를 표시하는 것이 가장 쉬운 방법입니다.

file1이 있는 경우.sql

alter table t1 add col1 date;
alter table t1 add col2 date;
alter table t1 add col3 date;

또한 col2가 존재하며 스크립트가 실행되면 나머지 2개의 열이 테이블에 추가되고 로그에 "col2"가 이미 존재하므로 문제가 없습니다.

또는 다음 오류를 무시할 수 있습니다.

declare
    column_exists exception;
    pragma exception_init (column_exists , -01430);
begin
    execute immediate 'ALTER TABLE db.tablename ADD columnname NVARCHAR2(30)';
    exception when column_exists then null;
end;
/

일반적으로 ANSI-92 표준 메타 테이블을 사용해 보는 것이 좋습니다만, Oracle에서는 지원되지 않는 것을 알 수 있습니다.

-- this works against most any other database
SELECT
    * 
FROM 
    INFORMATION_SCHEMA.COLUMNS C 
    INNER JOIN 
        INFORMATION_SCHEMA.TABLES T 
        ON T.TABLE_NAME = C.TABLE_NAME 
WHERE 
    C.COLUMN_NAME = 'columnname'
    AND T.TABLE_NAME = 'tablename'

그 대신 뭔가 해야 할 것 같아요.

-- Oracle specific table/column query
SELECT
    * 
FROM
    ALL_TAB_COLUMNS 
WHERE
    TABLE_NAME = 'tablename'
    AND COLUMN_NAME = 'columnname'

상기 내용을 검증할 Oracle 인스턴스가 없는 점 사과드립니다.만약 안되면 연락주세요.이 게시물을 삭제하겠습니다.

열이 있는지 확인하는 방법

select column_name as found
from user_tab_cols
where table_name = '__TABLE_NAME__'
and column_name = '__COLUMN_NAME__'

참조 링크

언급URL : https://stackoverflow.com/questions/6351823/how-to-check-if-a-column-exists-before-adding-it-to-an-existing-table-in-pl-sql

반응형