Oracle 如何从plsql中返回类型为对象的函数插入到表中
我创建了一个类型为对象,如下所示:Oracle 如何从plsql中返回类型为对象的函数插入到表中,oracle,types,plsql,Oracle,Types,Plsql,我创建了一个类型为对象,如下所示: CREATE OR REPLACE TYPE rec_alloc_rate is record ( cu_alloc_rate NUMBER(30,10), au_alloc_rate NUMBER(30,10) ); 然后我创建了一个函数,如下所示 create or replace function fn_get_x(num1 number) return rec_alloc_rate is var1 number; var2 number; begin
CREATE OR REPLACE TYPE rec_alloc_rate is record (
cu_alloc_rate NUMBER(30,10),
au_alloc_rate NUMBER(30,10)
);
然后我创建了一个函数,如下所示
create or replace function fn_get_x(num1 number)
return rec_alloc_rate is
var1 number;
var2 number;
begin
select 1 num1,2 num2 into var1, var2 from dual;
return rec_alloc_rate(var1,var2);
end;
现在我无法插入
create table test_1
(num1 number,
num2 number);
insert into test_1
(num1, num2)
select fn_get_x(1) from dual;
能否请您提供帮助。还不完全清楚您想做什么,但如果您想将对象属性插入到表中的单个标量列中,则需要提取它们:
insert into test_1 (num1, num2)
select fn_get_x(1).cu_alloc_rate, fn_get_x(1).au_alloc_rate
from dual;
但这可能会调用函数两次,因为它不是确定性的,因此您可以通过使用子查询来避免:
insert into test_1 (num1, num2)
select t.x.cu_alloc_rate, t.x.au_alloc_rate
from (select fn_get_x(1) as x from dual) t;
请注意,必须使用表和列别名完全限定值;仅x.cu\u alloc\u rate
将无法识别,您必须指定t.x.cu\u alloc\u rate
.
现在我无法插入
为什么?你有什么错误吗?是的,我有。它表示没有足够的值。类型声明和您在函数中使用的内容不一致;类型应该是对象
而不是记录
,不是吗?但是你必须使用不同的东西才能找到你看到的错误。函数返回一个对象;该表有两个标量列,因此它们自然不匹配。也许你应该解释一下你想要实现什么。