我有一个名为 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 行数据返回到集合中!!无论是 RECORD 还是 OBJECT TYPE!!,我不在乎......我似乎无法完成这项工作......!!!!谁能帮忙??
最佳答案
可以。你只需要使用对象构造函数
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;
/
关于sql - 是否可以在 Oracle PL/SQL 中执行此操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9438047/