当你试图避免使用魔术数字作为字符串长度时,是否使用PL/SQL代码中的错误练习clob类型?

gav*_*koa 2 oracle types plsql

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;
/
Run Code Online (Sandbox Code Playgroud)

当产品需求发生变化时我在陷阱中运行,因此循环范围变大(在我的示例中将范围设置为1..1000)并且我收到错误:

ORA-06502: PL/SQL: : ????? ?????????? ????? ??????? ????????? ?????? ????? ??? ???????? ORA-06512: ??  line 5
Run Code Online (Sandbox Code Playgroud)

所以我需要在任何地方增加查询长度,甚至用更大的数字来预测未来.

这很难看.我不是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;
Run Code Online (Sandbox Code Playgroud)

Vin*_*rat 5

CLOB数据类型是你唯一的选择,如果你想操作比SQL 4000个字节或PL/SQL 32 KB的字符串.

但是对于小字符串来说,操作CLOB比使用VARCHAR2小字符串要贵一些,因此CLOB在处理大字符串时只应使用数据类型.因此VARCHAR2数据类型仍有其用途,不要过分用CLOB替换所有字符串.