1.ORA-06531: 引用未初始化的收集
使用前需要对数组进行初始化
v_ray aaa:=aaa();
2. ORA-06533: 下标超出数量
> edit
已写入 file afiedt.buf
1 DECLARE
2 TYPE emp_ssn_array IS TABLE OF NUMBER;
3 best_employees emp_ssn_array:=emp_ssn_array();
4 BEGIN
5 best_employees(1) := '123456';
6* END;
> /
DECLARE
*
第 1 行出现错误:
ORA-06533: 下标超出数量
ORA-06512: 在 line 5
解决方法:
> edit
已写入 file afiedt.buf
1 DECLARE
2 TYPE emp_ssn_array IS TABLE OF NUMBER;
3 best_employees emp_ssn_array:=emp_ssn_array(5);
4 BEGIN
5 best_employees.extend; 6 best_employees(1) := 1;
7 best_employees(2) := 2;
8* END;
> /
PL/SQL 过程已成功完成。
3 PLS-00642: 在 SQL 语句中不允许使用本地收集类型
> edit
已写入 file afiedt.buf
1 DECLARE
2 TYPE emp_ssn_array IS TABLE OF NUMBER;
3 best_employees emp_ssn_array:=emp_ssn_array(5);
4 BEGIN
5 best_employees.extend;
6 best_employees(1) := 1;
7 best_employees(2) := 2;
8 best_employees(3) := 3;
9 best_employees(4) := 4;
10 best_employees(5) := 5;
11 select max(t) from table(best_employees) t;
12* END;
> /
select max(t) from table(best_employees) t;
*
第 11 行出现错误:
ORA-06550: 第 11 行, 第 26 列:
PLS-00642: 在 SQL 语句中不允许使用本地收集类型
ORA-06550: 第 11 行, 第 20 列:
PL/SQL: ORA-22905: 无法从非嵌套表项访问行
ORA-06550: 第 11 行, 第 1 列:
PL/SQL: SQL Statement ignored
解决方法:在模式中先定义数组,然后在过程中使用.
> create type aaa is table of number;
2 /
类型已创建。
4 PL/SQL: ORA-00932: 数据类型不一致: 应为 -, 但却获得 WF.AAA
> edit
已写入 file afiedt.buf
1 declare
2 v_ray aaa:=aaa();
3 v_max int;
4 v_min int;
5 begin
6 v_ray.extend(3);
7 v_ray(1):=1;
8 v_ray(2):=2;
9 v_ray(3):=3;
10 select max(v_ray) into v_max from table(v_ray); 11 dbms_output.put_line(v_max);
12* end;
> /
select max(v_ray) into v_max from table(v_ray);
*
第 10 行出现错误:
ORA-06550: 第 10 行, 第 12 列:
PL/SQL: ORA-00932: 数据类型不一致: 应为 -, 但却获得 WF.AAA
ORA-06550: 第 10 行, 第 1 列:
PL/SQL: SQL Statement ignored
解决方法:在数组对象中使用伪列"column_value"
> edit
已写入 file afiedt.buf
1 declare
2 v_ray aaa:=aaa();
3 v_max int;
4 v_min int;
5 begin
6 v_ray.extend(3);
7 v_ray(1):=1;
8 v_ray(2):=2;
9 v_ray(3):=3;
10 select max(column_value) into v_max from table(v_ray);
11 select min(column_value) into v_min from table(v_ray); 12 dbms_output.put_line('最大值:'||v_max);
13 dbms_output.put_line('最小值:'||v_min);
14* end;
> /
最大值:3
最小值:1
PL/SQL 过程已成功完成。