【问题标题】:Oracle PL/SQL SUBSTR errorOracle PL/SQL SUBSTR 错误
【发布时间】:2014-05-11 17:03:22
【问题描述】:

我需要使用 pl/sql 将 varchar 转换为数组,但是当我使用 SUBSTR 函数时,我收到此错误:

错误报告 - ORA-06550:第 12 行,第 3 列: PLS-00330:类型名称或子类型名称的无效使用 ORA-06550:第 12 行,第 3 列: PL/SQL:语句被忽略 06550. 00000 - “第 %s 行,第 %s 列:\n%s” *原因:通常是 PL/SQL 编译错误。

这是我的代码:

SET SERVEROUTPUT ON;
DECLARE
  v_string varchar2(20) := 'hello';
  type array_string is varray(5) of varchar2(10);
  v_length number;
  cnt number;
  v_char char(1);
BEGIN
  v_length := length(v_string);
  while (cnt < v_length)
  loop
    v_char := SUBSTR(v_string, cnt, 1);
    array_string(cnt) := v_char;
    cnt := cnt + 1;
  end loop;
END;

当我(部分)输入“SUBSTR”时,它会自动完成为 SUBSTR(SQLERRM, 1, 64) 所以它应该知道命令,对吧?

我做错了什么?我是 pl/sql 的新手

问候,

【问题讨论】:

    标签: plsql substr


    【解决方案1】:

    您必须先初始化变量cnt,然后才能在substr 中使用它。
    您必须在 array_string(cnt) 中使用变量名而不是类型名。
    在向它写入新值之前,您必须 extend 您的 varray。

    【讨论】:

    • 谢谢!就我在 substr 上遇到另一个错误而言,这有效,所以我不是全部在那里,而是在路上!现在这是我的代码:编辑:也许我应该将代码放在此处的答案中,这样您就可以更好地监督它新错误:下标超出限制
    • cnt 必须用1 初始化。
    【解决方案2】:

    在 oracle 环境中,可变数组的起始索引始终为 1。

    你的cnt是从0开始的。所以在第一次执行循环时,

    a_string(cnt) := v_char;
    

    cnt 为 0。

    初始化cnt为1,循环for

    while (cnt < 5)
    

    这将消除您遇到的错误

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-06-07
      • 1970-01-01
      • 1970-01-01
      • 2012-11-20
      • 2016-05-28
      • 2014-04-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多