ORA-22905:无法从非嵌套表项访问行
说明,该错误可能产生于在使用
table()
函数的时候,传递的参数不是
schema
级别的
table
类型,而是直接在
PL/SQL
块中定义的
table
类型。
ORA-00932:数据类型不一致:应为UDT,但却获得NUMBER
说明,
UDT(User Define Type)
是指用户自定义的类型,如定义了一个
table
或者
Object
。该错误主要产生在将
Oracle
基本类型放入用户自定义的类型而导致的类型不符,产生的错误。如,给一个自定义的类型名
User
的
Object
类型赋值
2
,就会产生这种错误。如语句:
select a into n from bc_3 where b=1;
其中
n
是用户定义的一个
Object
类型而
a
是一个
number
类型。
ORA-01422:实际返回的行数超出请求的行数
说明
,
错误意思已经很明显啦,比如语句:
select a into b from bc_3 where b=1;
条件
b=1
返回了多行,而
b
一次只能存放一个记录字段,所以就会报错。
PLS-00642:在SQL语句中不允许使用本地收集类型
ORA-06531:引用未初始化的收集
说明,该错误发生在向一个
UDT
的
table
类型中存放数据时,没有初始化导致。错误示例代码
:
declare
type
numbers
is
table
of
number
;
n numbers;
begin
n.extend;
select
a
into
n(
1
)
from
bc_3
where
b=
1
;
for
i
in
1
.. n.count
loop
dbms_output.put_line(n(i));
end
loop
;
end
;
|
解决办法
1
:
declare
type
numbers
is
table
of
number
;
n numbers
:= numbers()
;
--
这一步便对该
table
进行初始化,像
java
吧。
begin
n.extend;
select
a
into
n(
1
)
from
bc_3
where
b=
1
;
for
i
in
1
.. n.count
loop
dbms_output.put_line(n(i));
end
loop
;
end
;
|
解决办法
2
:使用
table
下标自增长添加“
index by binary_integer
”,就不用初始化以及省去每次插入元素都
extend
的苦恼啦!
declare
type
numbers
is
table
of
number
index
by
binary_integer
;
n numbers;
begin
select
a
into
n(
1
)
from
bc_3
where
b=
1
;
select
a
into
n(
2
)
from
bc_3
where
b=
3
;
for
i
in
1
.. n.count
loop
dbms_output.put_line(n(i));
end
loop
;
end
;
|
ORA-06533:下标超数量
说明
,
可能产生在像一个
table
类型的变量中插入元素,而没有提前新增一条记录用于存放元素导致。解决办法是用
extend
,新增一行。
如
:
declare
type
numbers
is
table
of
number
;
n numbers := numbers();
begin
n.extend;
--
这一句加上就不会出错啦
select
a
into
n(
1
)
from
bc_3
where
b=
1
;
for
i
in
1
.. n.count
loop
dbms_output.put_line(n(i));
end
loop
;
end
;
|
转载于:https://blog.51cto.com/wanqiufeng/430980