Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oracle 如何从plsql中返回类型为对象的函数插入到表中_Oracle_Types_Plsql - Fatal编程技术网

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


.

现在我无法插入
为什么?你有什么错误吗?是的,我有。它表示没有足够的值。类型声明和您在函数中使用的内容不一致;类型应该是
对象
而不是
记录
,不是吗?但是你必须使用不同的东西才能找到你看到的错误。函数返回一个对象;该表有两个标量列,因此它们自然不匹配。也许你应该解释一下你想要实现什么。