해당 열이있는 스키마의 각 테이블에서 고유 한 날짜를 "YMDH"라는 열에 가져 오려고합니다. 나는 중첩 된 커서를 사용할 필요가 있다고 생각 (뭔가 내가 해본 적이 없다) 다음 코드를 내놓았다 :Oracle 중첩 커서
CREATE OR REPLACE PROCEDURE DistinctDates AS
sql_statement1 varchar2(200);
sql_statement2 varchar2(200);
results varchar2(15);
ColumnExist integer;
BEGIN
for cursor_rec in (SELECT * FROM user_objects WHERE object_type='TABLE'
AND object_name NOT LIKE 'TM%') loop
sql_statement1 := 'select count (*) from user_tab_columns where table_name=' || '''' || cursor_rec.object_name || '''' || ' and column_name=' || '''' ||'YMDH' || '''';
execute immediate sql_statement1 into ColumnExist;
if ColumnExist = 1 then
for inner_cursor_rec in (select distinct(ymdh) from cursor_rec.object_name) loop
null;
end loop;
end if;
end loop;
END DistinctDates;
SQL 개발자는 내부 커서 SELECT 문에 대해 불평한다. 오류 메시지는 다음과 같습니다
이오류 (18,32) : PL/SQL : SQL 문 무시 오류 (18,70) : PL/SQL은 : ORA-00942 : 테이블 또는 뷰가 존재하지 않는
외부 커서에 대한 참조를 인식하지 못합니다. 내부 커서에 테이블 이름 (cursor_rec.object_name)을 어떻게 전달합니까?
번째 질의 동적되어야한다; 'cursor_rec.object_name'은 _string입니다. 또한 이것은 약간의 SQL Injection-y입니다. – Ben
+1 "SQL Injection-y"only ... – Ollie