【问题标题】:Insert into select query with cursor value插入带有光标值的选择查询
【发布时间】:2014-11-03 18:57:15
【问题描述】:

我想在 Oracle 中编写一个带有插入查询的 SQK 脚本,其中一个值将从游标中获取,其余值将从表中检索。

例如,考虑 Employee 表:

Emp_No | Emp_Name

  1    |  AAA
  ...........

我正在将表格读入光标。

Cursor c1 is select emp_no, emp_name from employee;

我正在迭代光标并添加到一个表以及来自另一个表的信息。

for empCur in c1
loop

insert into employee_info(emp_no, emp_name, address, age, ... ) values (empCur.emp_no, empCur.emp_name, select t.address, t.age, ... from employee_temp_table t where t.emp_no=empCur.emp_no)

end loop;

我的脚本有效吗?如果没有,还有其他方法可以实现吗?由于光标中的值很少,而另一个表中的值很少,我不确定如何处理。

【问题讨论】:

    标签: oracle plsql


    【解决方案1】:

    你的脚本不正确,因为这个

    select t.address, t.age, ... from employee_temp_table t where t.emp_no=empCur.emp_no
    

    不是有效的表达式。您只能使用标量子查询(单行一列子查询),如下所示:

    insert into t1(col1, col2, col3) values (1, (select col1 from t2), (select col2 from t2));
    

    或者您可以尝试从选择中插入:

    for empCur in c1 loop
      insert into employee_info(emp_no, emp_name, address, age, ... ) 
      select empCur.emp_no, empCur.emp_name, t.address, t.age, ... from employee_temp_table t where t.emp_no=empCur.emp_no;
    end loop;
    

    【讨论】:

      【解决方案2】:

      如果你想使用游标,为什么不直接连接游标内的表格呢?

      for empCur in ( select e.emp_no, e.emp_name, t.address, t.age ...
      from employee e join employee_temp_table t on ( t.emp_no = e.emp_no )
      ) loop
      insert into employee_info(...) values ( empCur.emp_no, ...);
      end loop;
      

      或者使用 sql 插入:(如果您可以选择 sql 而不是 pl/sql - T Kyte 说这样做)

      insert into employee_info
      select e.emp_no, e.emp_name, t.address, t.age ...
      from employee e join employee_temp_table t on ( t.emp_no = e.emp_no );
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-30
        • 2020-02-25
        • 1970-01-01
        • 1970-01-01
        • 2018-10-07
        • 1970-01-01
        • 1970-01-01
        • 2012-04-22
        相关资源
        最近更新 更多