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

Fel*_*ida 2 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;  
Run Code Online (Sandbox Code Playgroud)

但是PL/SQL:ORA-00947:值不够 ..

这是很令人沮丧......我只是希望能够返回ONE一行数据到一个集合!无论是记录还是对象类型!!,我不在乎......我似乎无法做出这项工作...... !!!! 谁能帮忙?

Jus*_*ave 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.
Run Code Online (Sandbox Code Playgroud)

在你的情况下,它会

SELECT t_mytype( column1, column2 )
  INTO v_obj
  FROM table1 t1
 WHERE t1.num = 9;
Run Code Online (Sandbox Code Playgroud)

如果您要做的只是从表中选择整行到记录类型,那么,您想要像ruakh建议的那样做,只需声明一条%ROWTYPE记录

declare
  l_emp_rec emp%rowtype;
begin
  select *
    into l_emp_rec
    from emp
   where ename = 'KING';
end;
/
Run Code Online (Sandbox Code Playgroud)