복붙노트

[SQL] 어떻게 PL / SQL에서 기존 테이블에 추가하기 전에 열이 존재하는지 확인?

SQL

어떻게 PL / SQL에서 기존 테이블에 추가하기 전에 열이 존재하는지 확인?

어떻게 오라클 DB의 테이블에 열을 추가하기 전에 간단한 검사를 추가하는 방법은 무엇입니까? 나는 열을 추가하기 위해 사용하고있는 SQL을 포함 시켰습니다.

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

해결법

  1. ==============================

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

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

    user_tab_cols; - 사용자가 소유 한 모든 테이블의 경우

    all_tab_cols; - 사용자에게 접근 가능한 모든 테이블의 경우

    dba_tab_cols; - 데이터베이스의 모든 테이블하십시오.

    당신은 SCOTT.EMP 테이블에 ADD_TMS 같은 열을 찾고가 존재하지 않는 경우에만 열을 추가하는 경우 따라서는 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가 존재 스크립트가 실행될 때, 다른 두 개의 열이 테이블에 추가 될 및 로그가 이미 존재하면 확인을해야하므로, "COL2"을 말하는 오류를 보여줄 것입니다.

  2. ==============================

    2.또는, 당신은 오류를 무시할 수 있습니다 :

    또는, 당신은 오류를 무시할 수 있습니다 :

    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;
    /
    
  3. ==============================

    3.일반적으로, 나는 이런 일에 대한 ANSI-92 표준 메타 테이블을 시도하는 게 좋을 것 그러나 나는 오라클을 지원하지 않는 지금을 참조하십시오.

    일반적으로, 나는 이런 일에 대한 ANSI-92 표준 메타 테이블을 시도하는 게 좋을 것 그러나 나는 오라클을 지원하지 않는 지금을 참조하십시오.

    -- 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'
    

    내가 할 내가 위의 내용을 확인하기 위해 오라클 인스턴스를 필요가 없다는 점에서 죄송합니다. 그것이 작동하지 않는 경우, 알려 주시면이 게시물을 삭제하겠습니다.

  4. ==============================

    4.열이 있는지 확인하려면

    열이 있는지 확인하려면

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

    참조 링크

  5. from https://stackoverflow.com/questions/6351823/how-to-check-if-a-column-exists-before-adding-it-to-an-existing-table-in-pl-sql by cc-by-sa and MIT license