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

标签 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 行数据返回到集合中!!无论是 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/

相关文章:

sql - SQL的count(*)函数中包含0

sql - 如何将 Excel 序列日期数字转换为 Oracle SQL 中的日期

oracle - 什么会影响 Oracle 对字符串表达式数据类型的确定?

oracle - oracle 11g 中的重置序列

mysql - 是否需要关系数据库?

mysql - 如何使用查询结果更新单个列的值?

database - 带有内联注释的 Oracle 存储过程包装编译错误

oracle - PL/SQL 匿名 block 与 PL/SQL 过程 - ORA-01418 : specified index does not exist

sql - 使用 ActiveRecord 和 Rails 3 的复杂连接

c# - 扫描数据库中的新记录