首页 > 解决方案 > 选择临时表时出现 Oracle 错误

问题描述

我的最终目标远比这复杂,但这是导致我的错误的简化版本。我想将一些行放入一个临时表(实际上是几个临时表,但我无法通过这第一个障碍)。这是我的 PL/SQL;

DECLARE
    type L1_store is table of MyTable%rowtype;
    L1 L1_store;
BEGIN
    select
        * bulk collect
    into L1
    from MyTable
    WHERE 1=1
    and length(MyColumn1) = 2;

    select 
        L1.MyColumn1 
        ,L1.MyColumn2
    from L1;
END;

这是我得到的错误;

ORA-06550: line 19, column 6:
PL/SQL: ORA-00942: table or view does not exist
ORA-06550: line 16, column 1:
PL/SQL: SQL Statement ignored
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:

行号可能不正确,因为为了清楚起见,我编辑了实际的 PL/SQL

****编辑****

好的,所以我最初接受了下面提供的答案,因为它看起来回答了我的问题,并且我可以看到如何使用它。但是,为了清楚起见,这是我的最终目标,以防有比我脑海中更好的答案。

如果我只是在 SQL 中执行此操作,我会执行以下操作;

with L1 as
(select * from table),
L2 as 
(select * from anothertable)

select L1.Column
from L1
left join L2 on L1.somecolumn = L2.somecolumn

我不知道这是否有帮助或阻碍,但感谢大家期待您继续耐心等待。

标签: oracletemp-tables

解决方案


这里的问题似乎是块中的第二个选择。如果您尝试从记录中选择数据,我倾向于将其放入 FOR 循环中。即,像这样:

for i in 1 .. L1.count() LOOP
   dbms_output.put_line (L1(i).MyColumn1);
end loop;

您可以将 MYColumn1 的值分配给变量或以其他方式使用它。


推荐阅读