PL/SQL變量的聲明要求設置長度VARCHAR2像類型:當你試圖避免在字符串長度中使用魔術數字時,是否使用PL/SQL代碼中的錯誤練習的clob類型?
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一個工作代碼(簡化):
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;
在PL/SQL最大將VARCHAR2(32767)的值。如果你生成的動態查詢大於這個,我可能會完全問你的方法。 Clobs可以在技術上拯救你,但我想看看那個查詢看起來像什麼! – tbone
@tbone因此,要以defencive的方式,我只需要聲明每個不可預知的長度** VARCHAR2 **爲32767字節長? – gavenkoa
@tbone我使用這種可變長度的字符串來創建動態查詢,以便它們脫離任何循環並且沒有性能問題(如果您與表格行上的循環進行比較)... – gavenkoa