PL/SQLの学習を始めたばかりです。stackoverflow の投稿に続いて、以下のように Oracle で特定の値を検索するスクリプトを作成しました。
DECLARE
match_count INTEGER;
v_owner VARCHAR2(255);
v_search_value NUMBER;
BEGIN
v_owner:='USERA USERB';
v_search_value:=4823.0;
EXECUTE IMMEDIATE
'INSERT INTO TMP SELECT owner, table_name, column_name FROM all_tab_cols WHERE instr(:1, owner)>0 AND data_type like ''%NUMBER%''' USING v_owner;
commit;
FOR t IN (SELECT owner, table_name, column_name FROM TMP) LOOP
EXECUTE IMMEDIATE
'SELECT COUNT(*) FROM '||t.owner||'.'||t.table_name||' WHERE '||t.column_name||'= :1'
INTO match_count
USING v_search_value;
IF match_count > 0 THEN
EXECUTE IMMEDIATE
'INSERT INTO RESULT VALUES(:1, :2, :3, :4)'
USING t.owner, t.table_name, t.column_name, match_count;
commit;
END IF;
END LOOP;
END;
スクリプトを実行する前に、テーブル TMP と RESULT が適切に作成されています。しかし、スクリプトを実行すると、12 行目に「connect by 句が必要です」という ORA-01788 エラーが表示されます。コードが原因でこのエラーが発生する理由と、スクリプトが適切に実行されるように変更する方法を知りたいです。ありがとう!