oracle11g中的临时表并选择多行

时间:2015-01-14 07:34:06

标签: oracle plsql oracle11g

在我的oracle存储过程中,我需要创建临时表。我想基于某些逻辑在临时表中插入行,并从存储过程返回这些行。

我的数据库在oracle 11G中。我正在使用oracle sql developer来创建存储过程。

尝试获取多行时出现以下错误。

错误(6,4):PLS-00428:此SELECT语句中需要INTO子句

CREATE OR REPLACE PROCEDURE TestStoredP AS 
 stmt varchar2(1000);

BEGIN  

  select emp_id,empname INTO AAA,BBB from EMPLOYEE;

   stmt := 'create global temporary table temp(id number(10))';

   EXECUTE IMMEDIATE stmt;  

   stmt := 'insert into temp values(1)';   
   EXECUTE IMMEDIATE stmt;  

   stmt := 'select * from temp';   
   EXECUTE IMMEDIATE stmt;  

   execute immediate ' drop table temp'; 

END TOPS; 

请建议如何实施。

1 个答案:

答案 0 :(得分:2)

使用全局临时表

create global temporary table temp_foo(id number(10));

您插入临时表的值仅在插入它们的会话中可见。

然后程序变为:

CREATE OR REPLACE PROCEDURE TestStoredP AS 

    val number(10);
    aaa emp.emp_id%type;
    bbb emp.empname%type;
BEGIN  

    select emp_id,empname INTO AAA,BBB from EMPLOYEE;

    insert into temp_foo values(1);

    select id into val from temp_foo;

END TOPS; 

现在,您获得的错误(PLS-00428: an INTO clause is expected in this SELECT statement)与您的临时表无关。在存储过程中,当您选择一个值时,您需要告诉您要选择哪些变量。这是通过into子句完成的。