【问题标题】:ORA-21560: argument 2 is null, invalid, or out of rangeORA-21560: 参数 2 为空、无效或超出范围
【发布时间】:2016-12-28 16:24:19
【问题描述】:
create table test_clob
(
    id number,
    text clob
);

insert into test_clob values
(2,'Hi This can be a value that is too much old');

select * from test_clob;

SET serveroutput ON;
DECLARE
  vlength pls_integer;
  text_cbl CLOB;
  Var_temp1 VARCHAR2(1024);
  starti    number := 1;
  offset number:= 1;
  val pls_integer;
  amt pls_integer := 0;
BEGIN
  SELECT text INTO text_cbl FROM test_clob WHERE id = 2;
  vlength     := SYS.DBMS_lob.getlength(text_cbl);
  WHILE(starti < vlength)
  LOOP
      val := sys.dbms_lob.instr(text_cbl,chr(32),offset);
      amt := val - offset;
      sys.dbms_lob.read(text_cbl,amt,starti,Var_temp1);
      dbms_output.put_line(Var_temp1);
      offset := val;
      starti := val + 1;
  END LOOP;
END;

【问题讨论】:

  • 我正在尝试使用 dbms_lob 包函数和过程从 clob 类型字段中提取每个单词。
  • 错误信息有什么不清楚的地方?另外,请贴出完整的错误信息,以便人们知道错误发生在哪里
  • ORA-21560:参数 2 为空、无效或超出范围 ORA-06512:在“SYS.DBMS_LOB”,第 1081 行 ORA-06512:在第 16 行 ORA-06512:在“SYS .DBMS_SQL",第 1721 行
  • 尝试调试你的代码而不调用出错的过程,而只是简单地假脱机你的变量;这将帮助您理解问题。我猜你这里可能有一个永无止境的循环
  • 我把代码改成了

标签: oracle plsql


【解决方案1】:

在某些时候会有行尾或文本没有空格 ch ( 32) 所以在那个时候它返回 val offset then read。

【讨论】:

  • 能否请您详细说明一下或标记我可以更改代码的位置。
  • 其实第一个词出来的很好,然后就失败了
  • 谢谢它似乎在工作,我输入了 if 来检查条件并更改了要搜索的空间的位置。它工作正常
  • 我将部分代码放在要更改的位置 WHILE(starti 0 则 amt := val - 偏移; sys.dbms_lob.read(text_cbl,amt,starti,Var_temp1); dbms_output.put_line(Var_temp1);偏移量:= 值;开始 := val + 1;万一;结束循环;这可能会帮助你
  • 请不要使用 cmets 来澄清答案,而是在答案中写下所有有用的内容。这将使答案更好(并会导致投票:))
猜你喜欢
  • 2014-01-25
  • 2020-02-21
  • 2018-08-09
  • 1970-01-01
  • 2022-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多