PL/SQL:SELECT INTO 引发 ORA-00947

Posted

技术标签:

【中文标题】PL/SQL:SELECT INTO 引发 ORA-00947【英文标题】:PL/SQL: SELECT INTO raises ORA-00947 【发布时间】:2013-05-24 09:51:51 【问题描述】:

我正在使用 Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production

我已经创建了一个对象类型:

SQL> create or replace type TestObject as Object (
  2  id INTEGER,
  3  name VARCHAR2(10)
  4  );
  5  /

然后我创建一个包含该类型对象的表:

SQL> CREATE TABLE TestTable of TestTable;

然后我用一些数据填充表格:

SQL> INSERT INTO TestTable VALUES (10, 'John');

现在,如果我想在 PL/SQL 中执行 SELECT:

SQL> declare
  2  aTest TestObject;
  3  begin
  4  select * into aTest from TestTable;
  5  end;
  6  /

我收到错误 ORA-00947(没有足够的值):

select * into aTest from TestTable;
                    *
ERROR en línea 4:
ORA-06550: línea 4, columna 21:
PL/SQL: ORA-00947: no hay suficientes valores
ORA-06550: línea 4, columna 1:
PL/SQL: SQL Statement ignored

但是 TestTable 包含 TestObject 类型的对象,并且变量 aTest 也是 TestObject 类型... ¿值的数量不匹配在哪里?

【问题讨论】:

【参考方案1】:

对我来说这很有效:

declare
 ta TestObject;
begin
 select TestObject(t.id, t.name) into ta from TestTable t;
end;
/

【讨论】:

【参考方案2】:

试试这个..

select TestObject(id,name)  from TestTable
/

【讨论】:

以上是关于PL/SQL:SELECT INTO 引发 ORA-00947的主要内容,如果未能解决你的问题,请参考以下文章

PL/SQL ORA-01422 SELECT INTO 错误,Oracle 匿名块(NOVA 环境)

Oracle PL/SQL - ORA-01403 使用“SELECT INTO”时“未找到数据”

ORA-00904 在 DATE 列上使用“MERGE INTO”和“SELECT FROM dual”时出现“无效标识符”错误

Oracle PL/SQL SELECT INTO 子句认为它需要另一个 INTO

PL/SQL MERGE INTO 编译错误

如何在 Oracle PL SQL 中将 INTO 与 SELECT AS 一起使用?