Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
选择Oracle中的临时表_Oracle_Plsql_Sqlplus - Fatal编程技术网

选择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实际上不是一个临时表,而是一个真正的物理表/