【问题标题】:PLSQL query to search through table typePLSQL 查询以搜索表类型
【发布时间】:2013-09-09 12:14:52
【问题描述】:

我在一个包中声明了以下类型。

TYPE l_task_type_rec is record (task_id number, creation_date date);

TYPE tas_tab is table of l_task_type_rec;

l_task_rec tas_tab;

我正在尝试使用 for 循环来遍历像这样的表类型对象中的对象。我不确定这是否可能。

for counter in l_task_rec.first ..l_task_rec.last

loop

    select task_id into l_task_id from l_task_rec where rowid = counter;

    select location_id into p_location_id from csf_ct_tasks where task_id = l_task_id;

    OPEN c_location_rec (p_location_id);

                    FETCH c_location_rec

                    BULK COLLECT INTO x_location_rec;

     CLOSE c_location_rec;

end loop;

我想要的是从 for 循环内部调用一个游标,这样我就可以一个一个地获取所有位置的列表,并获取所有数据并将其存储在一个记录类型中。我知道搜索表类型的查询是错误的,因为它说表或视图 l_task_rec 不存在!谁能告诉我我在这里做错了什么或指出我正确的方向?提前谢谢..

【问题讨论】:

    标签: plsql cursor erp


    【解决方案1】:

    这是一个如何迭代表类型中的对象的示例:

    declare
      l_task_rec tas_tab;
      p_location_id number;//Assuming number
    begin
      --Example data
      l_task_rec:=tas_tab( l_task_type_rec (10, sysdate), l_task_type_rec (21, sysdate), l_task_type_rec (35, sysdate));--This should come from somewhere else
    
      for counter in l_task_rec.first .. l_task_rec.last
      loop
        --You can get the data like this
        DBMS_OUTPUT.PUT_LINE('TASK_ID: '||l_task_rec(counter).TASK_ID);
        DBMS_OUTPUT.PUT_LINE('CREATION_DATE: '||l_task_rec(counter).CREATION_DATE);
    
        select location_id into p_location_id from csf_ct_tasks where task_id = l_task_rec(counter).TASK_ID;
       --More code
       --OPEN  ...
       --CLOSE ...
      end loop;
    end;
    

    为了让它工作,我改变了 l_task_type_rec 类型的创建方式:

    create TYPE l_task_type_rec is object (task_id number, creation_date date)
    

    【讨论】:

    • 嗨,使用你的代码我可以遍历循环。但是我需要选择或打印的数据在嵌套表 l_task_rec 中。目前我正在使用以下查询,它返回错误“ORA-21700:对象不存在或被标记为删除” select task_id into l_task_id from table(l_task_rec) where rownum = counter;
    • 在嵌套表l_task_rec 中获取数据在答案中解释:DBMS_OUTPUT.PUT_LINE('TASK_ID: '||l_task_rec(counter).TASK_ID);。但是,为了从另一个表的记录中获取该嵌套表,您可以像任何其他列一样获取它SELECT task_rec into l_task_rec from the_table where id=X
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-22
    • 1970-01-01
    • 2010-11-12
    • 2011-12-14
    • 2011-05-21
    • 2020-08-28
    相关资源
    最近更新 更多