아래의 PLSQL 블록에 문제가 있습니다. 코드가 아래와 같이 (루프없이) 실행되면 스크립트가 성공합니다. 그러나 루프의 주석을 제거 할 때 select 문에있는 테이블을 찾을 수 없다는 오류가 발생합니다. 내가 확인할 때, 실제로 테이블이 전혀 만들어지지 않았다는 것을 알았습니다. 루프가 실행 바로 전에 실행하려고하는 것과 거의 같습니다.create table via execute immediate가 작동하지 않습니다.
예 어쨌든 테이블이 채워지지 않으므로 print 명령문은 관계없이 표시되지 않지만 쿼리가 실패하지는 않을 것이라고 알고 있습니다.
begin
execute immediate 'create table tbl_temp (oid_value number(20) ,rowid_field varchar2(20))';
/*for nullval in (select oid_value from tbl_temp)
loop
DBMS_OUTPUT.PUT_LINE('something');
end loop;*/
end;
이와 같은 테이블을 만드는 것은 좋은 아이디어는 아니지만 타이밍 문제입니다. EXECUTE IMMEDIATE에 테이블을 작성 중입니다. 커서 루프는 실행될 때까지 컴파일시에 유효성이 검사됩니다. 따라서 코드가 실행될 때 테이블이 존재하지 않습니다. –
두 개의 시작과 두 개의 끝이있는 경우 작동 할 수 있습니다. 실행을 위해 한 번, 루프를 위해 한 번. – xQbert
좋아요. 또한 이유를 설명하기 위해 적어도 잠시 시간을내어 주시면 감사하겠습니다. 나는 PLSQL에 익숙하지 않지만 이것을 알아 내려고 노력했지만 간단히 할 수 없었다. – NenadK