我有一个名为TABLE1
的常规表格,其中包含NUMBER(8)
列和varchar2(100)
列。
现在我创建了一个OBJECT TYPE
T_MYTYPE
,其中包含两个属性:一个NUMBER
和另一个varchar2
。
简而言之,它们完全相同。
现在我想做以下事情。
v_obj T_MYTYPE;
begin
select * into v_obj from TABLE1 t1 where t1.num = 9;--guaranteed to return only ONE row!!
end;
但 PL / SQL:ORA-00947:值不够 ..
这非常令人沮丧...我只是希望能够将 ONE 数据行返回到集合中!!无论是记录还是对象类型!!,我不在乎......我似乎无法做出这项工作...... !!!!任何人都可以帮忙??
答案 0 :(得分:7)
你可以。您只需要使用对象构造函数
SQL> create type t_simple_emp
2 as object
3 (
4 empno number,
5 ename varchar2(100)
6 );
7 /
Type created.
SQL> declare
2 l_simple_emp t_simple_emp;
3 begin
4 select t_simple_emp( empno, ename )
5 into l_simple_emp
6 from emp
7 where ename = 'KING';
8 end;
9 /
PL/SQL procedure successfully completed.
在你的情况下,它将是
SELECT t_mytype( column1, column2 )
INTO v_obj
FROM table1 t1
WHERE t1.num = 9;
如果您要做的只是从表中选择整行到记录类型,那么您需要像ruakh建议的那样做,只需声明%ROWTYPE
记录
declare
l_emp_rec emp%rowtype;
begin
select *
into l_emp_rec
from emp
where ename = 'KING';
end;
/
答案 1 :(得分:3)
而不是:
v_obj T_MYTYPE;
试试这个:
v_obj table1%ROWTYPE;
声明它与table1
的行具有完全相同的类型。