programing

MODE COLUM IN oracle - NULL로 설정하기 전에 열이 NULL인지 확인하는 방법

subpage 2023. 2. 28. 23:32
반응형

MODE COLUM IN oracle - NULL로 설정하기 전에 열이 NULL인지 확인하는 방법

오라클 업무를 대행하려고 하는데 문제가 생겼어요.열을 nullable로 변경하는 스크립트를 작성하려고 할 때 사랑스러운 ORA-01451 오류가 발생했습니다.

ORA-01451: column to be modified to NULL cannot be modified to NULL

이 문제는 컬럼이 이미 NULL이기 때문에 발생합니다.업데이트해야 하는 데이터베이스가 몇 개 있기 때문에 잘못된 가정에서는 NULL로 설정하면 수동으로 이 컬럼을 NULL로 설정했는지 여부에 관계없이 모든 사용자가 최신 상태로 유지되도록 해야 한다고 생각했습니다.그러나 이 경우 이미 Nullable로 열이 있는 일부 사용자에게는 오류가 발생할 수 있습니다.

오류를 피하기 위해 열이 이미 null인지 어떤지를 어떻게 확인할 수 있습니까?이 아이디어를 달성할 수 있는 것:

IF( MyTable.MyColumn IS NOT NULLABLE)
   ALTER TABLE MyTable MODIFY(MyColumn  NULL);

PL/SQL에서 다음을 수행할 수 있습니다.

declare
  l_nullable user_tab_columns.nullable%type;
begin
  select nullable into l_nullable
  from user_tab_columns
  where table_name = 'MYTABLE'
  and   column_name = 'MYCOLUMN';

  if l_nullable = 'N' then
    execute immediate 'alter table mytable modify (mycolumn null)';
  end if;
end;

그냥 다른 표를 하고 예외를 잡아라.

DECLARE
   allready_null EXCEPTION;
   PRAGMA EXCEPTION_INIT(allready_null, -1451);
BEGIN
   execute immediate 'ALTER TABLE TAB MODIFY(COL  NULL)';
EXCEPTION
   WHEN allready_null THEN
      null; -- handle the error
END;
/

PL/SQL을 사용하지 않으려면

    set feedback off
    set echo off
    set feedback off
    set pages 0
    set head off

    spool to_null.sql

    select 'alter table TAB modify (COL NULL);' 
    from user_tab_columns
    where table_name = 'TAB'
    and column_name = 'COL'
    and nullable = 'N';

    spool off
    set feedback on
    set echo on
    set termout on
    @@to_null.sql 
    host rm -f to_null.sql

아니면 그냥 다른 표를 하고 오류를 무시하세요.

언급URL : https://stackoverflow.com/questions/1028956/modify-column-in-oracle-how-to-check-if-a-column-is-nullable-before-setting-to

반응형