source

Oracle: DBMS_UTILITY.EXEC_DDL_STATION 대 즉시 실행

manycodes 2023. 6. 10. 09:31
반응형

Oracle: DBMS_UTILITY.EXEC_DDL_STATION 대 즉시 실행

어떤 것들이 다른가요?DBMS_UTILITY.EXEC_DDL_STATEMENT그리고.EXECUTE IMMEDIATE?

기본적으로 PL/SQL에서 DDL 문을 실행하는 메커니즘을 제공하는 것과 같은 작업을 수행하지만 기본적으로 지원되지는 않습니다.메모리를 사용할 수 있다면 EXEC_DDL_STATION은 Oracle 7 버전의 DBMS_UTILITY 패키지에서 사용할 수 있는 반면 Native Dynamic SQL(EXECUTE ImmEDITY)은 8 버전에서만 도입되었습니다.

몇 가지 차이점이 있습니다.EXECUMENT Immediate는 주로 동적 SQL을 실행하는 것입니다(NDS 별칭에서 알 수 있음).DDL에 사용할 수 있다는 사실은 부수적인 것입니다.반면 EXEC_DDL_STATION()은(는) DDL만 실행할 수 있습니다.

그러나 DBMS_UTILITY 버전은 이전 버전과의 호환성을 위해 유지되는 것이 아니라 분산 방식으로 DDL을 실행하는 EXECUTE Immediate로는 할 수 없는 한 가지 깔끔한 트릭이 있습니다.로컬 데이터베이스에서 이 문을 실행하여 원격 데이터베이스에 테이블을 만들 수 있습니다(사용자에게 필요한 권한이 있는 경우).

SQL>  exec DBMS_UTILITY.EXEC_DDL_STATEMENT@remote_db('create table t1 (id number)');

저는 이것을 추천하는 것이 아니라 단지 할 수 있다고 말하는 것입니다.

제가 답장이 9년 늦었다는 것을 알지만 한 가지 더 차이가 있습니다.

dbms_message.exec_ddl_statement는 DDL 이외의 다른 항목을 실행하지 않습니다.삽입을 하려고 하면 삽입이 되지 않습니다.또한 오류를 반환하지 않으므로 삽입하지 않은 것을 알 수 없습니다.

-- drop table kevtemp1;

create table kevtemp1 (a integer);

insert into kevtemp1 values (1);
commit;

begin
    insert into kevtemp1 values (2);
end;
/
commit;

begin
   DBMS_UTILITY.EXEC_DDL_STATEMENT('insert into kevtemp1 values (3)');
end;
/
commit;


select * from kevtemp1;

언급URL : https://stackoverflow.com/questions/6973003/oracle-dbms-utility-exec-ddl-statement-vs-execute-immediate

반응형