在我的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;
请建议如何实施。
答案 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
子句完成的。