【问题标题】:How to declare a cursor inside another cursor如何在另一个游标内声明游标
【发布时间】:2021-08-27 06:59:14
【问题描述】:

如何在游标c_employees内声明另一个游标?

注意:游标c_employees 返回employees_id,并且此id 传递给where 子句中的其他游标。

例如

cursor c_employees
        is
            Select employees_id from employees;
begin
    for e in c_employees loop
        begin
           --How here define other cursor from cursor_employees I get employees_id and put as parameter.

           cursor c_leaves is Select hours from my_table where employees_id = e.employees_id;
           for j in c_leaves loop
                begin
                   Insert into table2(......
                end;
           end loop;

【问题讨论】:

    标签: sql oracle plsql


    【解决方案1】:

    因此游标可以带参数

    cursor c_employees    is
                Select employees_id from employees;
    cursor c_leaves(e_id int)
      is Select hours from my_table where employess_id = e_id;
                
    begin
        for e in c_employees loop
            begin
               for j in c_leaves(e.employees_id) loop
                    begin
                       Insert into table2(......
                    end;
               end loop;
    

    但一般来说,当您开始看到带有游标等的游标时......也是时候看看是否可以用 JOIN 替换查询。例如,可能上面的代码可能只是

    insert into table2
    select ..
    from employees e, my_table m
    where e.employess_id = m.employess_id;
    

    【讨论】:

      【解决方案2】:

      你需要DECLARE变量:

      DECLARE
        cursor c_employees is
          Select employees_id from employees;
      begin
          for e in c_employees loop
            DECLARE
              cursor c_leaves is
                Select hours from my_table where employess_id = e.employess_id;
            begin
              for j in c_leaves loop
                begin
                  Insert into table2(......
                end;
              end loop;
      

      但是,在这种情况下,您可以根据@ConnorMcDonald 的回答(还需要DECLARE 关键字)使用带有变量的光标DECLARE

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-27
        • 2012-02-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多