是否可以在Oracle PL / SQL中执行此操作?

时间:2012-02-24 21:06:47

标签: sql oracle plsql oracle11g

我有一个名为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 数据行返回到集合中!!无论是记录还是对象类型!!,我不在乎......我似乎无法做出这项工作...... !!!!任何人都可以帮忙??

2 个答案:

答案 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的行具有完全相同的类型。