0

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

列に動的に名前を付ける方法を見つけるのに役立ちます。ポインタ、アドバイス、リンク。

4

1 に答える 1

2

動的列エイリアスを使用しようとすると、構文エラーが発生する可能性があると思います。

試す:

s_qry := s_qry||'package.some_function (a.id,''' || pci.id || ''' , ''PC'') AS '|| pci.name || ',' ;

の値にpci.nameスペースが含まれる可能性がある場合は、二重引用符で囲みます。

s_qry := s_qry||'package.some_function (a.id,''' || pci.id || ''' , ''PC'') AS "'|| pci.name || '",' ;

それが役に立てば幸い...

于 2013-09-18T21:45:53.490 に答える