반응형
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
반응형
'programing' 카테고리의 다른 글
봄철 목록 페이지 전환 (0) | 2023.03.05 |
---|---|
React가 DOM을 직접 관리하지 않는 지역에서는 브라우저에서 ReactDOMServer.renderToString을 사용해도 됩니까? (0) | 2023.03.05 |
'문서 지향'과Key-Value는 MongoDB와 Cassandra에 대해 이야기할 때 의미합니까? (0) | 2023.02.28 |
리액트 라이브러리의 리액트 후크에서 잘못된 후크 호출 오류가 발생함 (0) | 2023.02.28 |
값을 반복하기 전에 jq에 'key'가 있는지 확인하는 방법 (0) | 2023.02.28 |