【发布时间】:2015-03-12 08:03:07
【问题描述】:
在我的 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;
请建议如何实施。
【问题讨论】:
-
该错误与临时表无关;正如错误所示,您的动态选择没有
into子句。您不应在过程中创建表(或通常执行任何 DDL)。如果您确实需要临时存储临时结果或 SQL 类型,则可以使用 PL/SQL 集合,具体取决于您想要“返回”的内容和方式。您没有输出参数,而且您通常会从函数而不是过程返回数据,因此不清楚您真正需要什么。 -
This might be useful too,如果您来自另一个使用临时表的 DBMS;您可能还会找到合适的pipelined function。但这取决于你真正在做什么。