选择Oracle中的临时表
我试着做如下的事情选择Oracle中的临时表,oracle,plsql,sqlplus,Oracle,Plsql,Sqlplus,我试着做如下的事情 select * into temp from (select * from student); 它给了我以下的错误 ERROR at line 1: ORA-00905: missing keyword 在我的实际示例中,子查询select*from student更为复杂 我想在存储过程中使用它,所以我不想创建表本身。我只是想通过使用临时表使代码更具可读性。您不需要选择临时表。如果要从select的结果插入临时表,请执行以下操作: insert into temp s
select * into temp from (select * from student);
它给了我以下的错误
ERROR at line 1:
ORA-00905: missing keyword
在我的实际示例中,子查询select*from student更为复杂
我想在存储过程中使用它,所以我不想创建表本身。我只是想通过使用临时表使代码更具可读性。您不需要选择临时表。如果要从select的结果插入临时表,请执行以下操作:
insert into temp
select * from student;
那么也许你需要做如下的事情:
declare
type t_temp_storage is table of student%rowtype;
my_temp_storage t_temp_storage;
begin
select * bulk collect into my_temp_storage from student;
for i in 1..my_temp_storage.count
loop
dbms_output.put_line('here I am '||my_temp_storage(i).stuid);
end loop;
end;
如果表temp不存在,则必须创建它
CREATE TABLE temp as
SELECT * FROM student;
我发现这样做很有用:
CREATE GLOBAL TEMPORARY TABLE MY_TEMPORARY_TABLE ON COMMIT PRESERVE ROWS AS (
SELECT * FROM MY_TABLE WHERE MY_CONDITION
)
COMMIT PRESERVE ROWS子句覆盖COMMIT DELETE ROWS的默认子句。如果保留默认值,则记录将在每次提交时删除,因此如果使用自动提交客户端,则记录将在创建后立即删除。无论如何,在这两种情况下,表仅在会话期间存在。第1行错误:ORA-00942:表或视图不存在您必须首先创建临时表,就像oracle中的任何其他表一样。如果要基于select创建表,请使用CREATETABLE xxx作为select。。。但那只能做一次,我不想要那张桌子。就编码而言,为我需要的每个临时变量创建表本身是非常昂贵的。我只想在存储过程中有一些动态的东西可以随时填充。在存储过程终止后,将其清除。但我不确定这在甲骨文中是否可行。好吧,我不是这样理解这个问题的。如果您需要一个临时结构来存储pl/sql中的内容,那么可以使用pl/sql集合(也称为表)。不幸的是,我建议您花一些时间阅读文档,以便更清楚地了解。我之所以选择这个答案,是因为在sql Server中可以这样做:将结果集选择到一个不存在的表中,从而创建一个临时表。例如,从StudentSelect*到TEMP如果在Oracle中没有选择到表中,则插入到表中。select into构造用于填充变量。不幸的是,其他供应商对一些不相关的东西也有类似的语法。这个表temp实际上不是一个临时表,而是一个真正的物理表/