PL/SQL 変数の宣言では、varchar2のような型の長さを設定する必要があります。
declare
query varchar2(2000);
begin
for i in 1..100 loop
query := query || to_char(i);
end loop;
dbms_output.put_line(query);
end;
/
製品要件が変更されてループ範囲が大きくなり (私の例では範囲を1..1000に設定)、エラーが発生したときにトラップが実行されました。
ORA-06502: PL/SQL: : буфер символьных строк слишком маленький ошибка числа или значения ORA-06512: на line 5
したがって、どこでもクエリの長さを増やす必要があり、将来を述語するためにさらに大きな数を使用する必要があります。
これは醜いです。私は PL/SQL の専門家ではありませんが、公式ドキュメントを読むことで、長さを必要としないclob型を見つけ、簡単なチェックでコードが機能することがわかりました!
PL/SQL コードは、Pascal のようではなくなり、Python/Ruby/Perl のようになります。私は本当にそれが好き。
集中的にループを使用しない、動的に構築された文字列に対してのみ型変換を適用します。
そのようなテクニックは正しいですか、それとも間違っていますか?
PS私はPL / SQLプログラミングの初心者なので、そのようなばかげた質問をしてください...
PPS作業コードの 1 つ (簡略化):
queryStr := 'create or replace view "DATA_VIEW" ("DT", "MONEY", "EVENT") as ( ';
for eventRec in eventCur
loop
queryStr := queryStr || 'select DT, MONEY, ' || eventRec.ID
|| ' EVENT from ' || eventRec.tbl || ' union ';
end loop;
queryStr := rtrim(queryStr, ' union ') || ')';
execute immediate queryStr;
commit;