【问题标题】:Oracle PL/SQL local collection type not allowed errorOracle PL/SQL 本地集合类型不允许错误
【发布时间】:2017-01-13 15:32:50
【问题描述】:

问候!有没有办法在 Oracle SQL 上执行下面代码中的逻辑?我收到错误 PLS-00642:SQL 语句中不允许本地集合类型;对于变量 var1 和 var2...

CREATE OR REPLACE PROCEDURE TEST IS
    CURSOR c1 IS SELECT * FROM Table1;
    TYPE num_arr_type IS TABLE OF NUMBER(5);
    i_rec Table1%ROWTYPE;
    var1 num_arr_type;
BEGIN
    var1:= SELECT num FROM Table3;
    OPEN c1;
      LOOP
        FETCH c1 INTO i_rec;
        EXIT WHEN c1%NOTFOUND;

          SELECT a.num                
            FROM Table2 a
           WHERE a.cod_agt = var1;

      END LOOP;    
    CLOSE c1;

END TEST;

在我的代码中,我想将 SELECT 结果存储到一个变量中,并在另一个 select 语句的 WHERE 子句中使用该变量。那可能吗?

【问题讨论】:

  • 这里有一些问题。如果您可以发布一些示例数据、所需结果并描述您想要实现的逻辑,人们会更容易帮助您。
  • 您的编辑比原始帖子更令人困惑。这应该怎么做?这段代码有什么问题?这是否给出了您发布的错误?
  • 对不起,我重新编辑了我的代码。在我的代码中,我想将 SELECT 结果存储到一个变量中,并在另一个 select 语句的 WHERE 子句中使用该变量。这可能吗?
  • 听起来是 SQL 中的 in (subquery) 构造。

标签: oracle plsql


【解决方案1】:

我想将 SELECT 结果存储到变量中,并使用 另一个 select 语句的 WHERE 子句中的变量。就是它 可能

我不确定你想要达到什么目的,但看看你上面的陈述,我在下面举了一个例子:

CREATE OR REPLACE PROCEDURE TEST IS
    CURSOR c1 IS 
    SELECT * FROM Table1;

    TYPE num_arr_type IS TABLE OF NUMBER(5);

    var1  num_arr_type;

    i_rec Table1%ROWTYPE;
    v_num number;

BEGIN
     --- This is how you store value to a collection
    SELECT num
      bulk collect into  var1
    FROM Table3;

     --- Loop to get individual records from your collection
   For i in 1..var1.count
    loop    
       SELECT a.num  
         into  v_num             
            FROM Table2 a
           --This is how you pass the value stored in your collection one by one in loop.
           WHERE a.cod_agt = var1(i);   

       dbms_output.put_line(v_num);  
    end loop;             

END TEST;

【讨论】:

    猜你喜欢
    • 2012-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-16
    • 2014-12-16
    • 1970-01-01
    相关资源
    最近更新 更多