PL/SQL ブロックによって動的にプルされているクエリのレポートを取得しようとしています。この記事からインスピレーションを得ました 。列の数は動的であり、ループに依存します。
declare
l_qry VARCHAR2(4300);
s_qry VARCHAR2(80) := 0;
v_resort_id NUMBER := 1;
begin
l_qry := 'select a.column1,';
FOR pci in ( select id,name from table_pci where resort_id = v_resort_id) LOOP
s_qry := s_qry||'package.some_function (a.id,''' || pci.id || ''' , ''PC'') Property_type,' ;
END LOOP;
l_qry := l_qry ||s_qry;
l_qry := l_qry||'a.column2 from features a where a.feature_type = ''condition1'' ';
return(l_qry);
end;
Property_type は動的列にハードコードされたエイリアスであるため、ループが回るたびに同じ名前の列を生成しようとし、Apex はエラーとしてフラグを立てます。[ 汎用列名を使用する (実行時にのみクエリを解析する) ] を選択すると、正しい数値が返されます。列のうち、名前は Col1、Col2、Col3...
name のような table_pci から動的なものを取得しようとすると、次のことを試しました。
s_qry := s_qry||'package.some_function (a.id,''' || pci.id || ''' , ''PC'') '''|| pci.name || ''',' ;
エラーが発生します
failed to parse SQL query:
ORA-00923: FROM keyword not found where expected
列に動的に名前を付ける方法を見つけるのに役立ちます。ポインタ、アドバイス、リンク。