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工作代码之一(简化):
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;