반응형
Oracle ALTER 문에 하위 쿼리를 사용할 수 있습니까?
테이블 이름과 열 이름을 지정하면 이름을 알 수 없는 Oracle 제약 조건을 동적으로 삭제하려고 합니다.
다음 쿼리를 사용하여 제약 조건 이름을 찾을 수 있습니다.
SELECT CONSTRAINT_NAME
FROM USER_CONS_COLUMNS
WHERE TABLE_NAME = 'MyTable' AND
COLUMN_NAME='MyColumn' AND POSITION IS NULL
처음에 하위 쿼리를 사용하는 것이 생각되었지만, 이 방법은 작동하지 않고 ORA-02250 오류가 발생합니다.
ALTER TABLE MyTable
DROP CONSTRAINT (
SELECT CONSTRAINT_NAME
FROM USER_CONS_COLUMNS
WHERE TABLE_NAME = 'MyTable' AND
COLUMN_NAME='MyColumn' AND POSITION IS NULL)
지금까지 제가 가지고 있는 유일한 해결책은 다음과 같습니다. 하지만 불필요하게 복잡하게 느껴집니다.
DECLARE
statement VARCHAR2(2000);
constr_name VARCHAR2(30);
BEGIN
SELECT CONSTRAINT_NAME INTO constr_name
FROM USER_CONS_COLUMNS
WHERE table_name = 'MyTable' AND
column_name = 'MyColumn' AND position is null;
statement := 'ALTER TABLE MyTable DROP CONSTRAINT '|| constr_name;
EXECUTE IMMEDIATE(statement);
END;
/
원래 의도했던 대로 서브쿼리로 할 수 있는 방법이 있나요?그렇지 않다면, 누가 이것을 하는 더 간결한 방법을 제안할 수 있습니까?
그럴 수 없습니다. SQL과 DDL은 기본적으로 두 개의 분리된 언어입니다.정답입니다.
여러 검사 제약 조건을 삭제하는 방법...
declare
i number;
begin
for I in (select CONSTRAINT_NAME from USER_CONS_COLUMNS B where B.CONSTRAINT_NAME in (
select a.constraint_name from USER_CONSTRAINTS a where a.TABLE_NAME = 'MAHI' and a.CONSTRAINT_TYPE = 'C')
AND B.COLUMN_NAME in ('EMP_NAME','EMP_SAL'))
LOOP
EXECUTE IMMEDIATE('alter table DIM_CHR_LOV DROP CONSTRAINT '|| I.CONSTRAINT_NAME);
end LOOP;
end;
언급URL : https://stackoverflow.com/questions/5903632/can-a-subquery-be-used-in-an-oracle-alter-statement
반응형
'programing' 카테고리의 다른 글
고정된 너비로 줄을 인쇄하는 방법은 무엇입니까? (0) | 2023.07.09 |
---|---|
github에서 풀 요청을 취소하려면 어떻게 해야 합니까? (0) | 2023.07.09 |
AngularJS - 하위 범위에 대한 액세스 (0) | 2023.04.01 |
Angularjs pubsub vs $broadcast (0) | 2023.04.01 |
Ionic / AngularJs 앱에 노드 모듈을 포함 및 사용하는 방법 (0) | 2023.04.01 |