加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

FORALL循环中的多个SQL语句

发布时间:2020-12-12 07:45:21 所属栏目:MsSql教程 来源:网络整理
导读:我想在oracle中只插入单个FORALL循环的不同表中插入.但FORALL不支持它.任何想法我该怎么办? create or replace PROCEDURE test IS TYPE avl_web_details IS TABLE OF available_web_details%ROWTYPE; var_avl_web_details avl_web_details := avl_web_detail
我想在oracle中只插入单个FORALL循环的不同表中插入.但FORALL不支持它.任何想法我该怎么办?
create or replace PROCEDURE test IS
      TYPE avl_web_details IS TABLE OF available_web_details%ROWTYPE;
      var_avl_web_details avl_web_details := avl_web_details();
      UNIONTABLE VARCHAR2(30000);
      TYPE RepCurTyp IS REF CURSOR; 
      Rep_cv RepCurTyp; 
   BEGIN
      UNIONTABLE := '';
  execute immediate 'update tbl_used_webuda1 set flag=1';
  FOR tbl IN (SELECT tablename FROM tbl_used_webuda1 where flag=1)
      LOOP             
    UNIONTABLE := UNIONTABLE || 'select *' || ' from ' || tbl.tablename || 'union all ';     
END LOOP;

       IF (LENGTH(UNIONTABLE) > 10) THEN
      UNIONTABLE := '( ' || SUBSTR(UNIONTABLE,1,length(UNIONTABLE)-10) || ' ) ';            
     end if;
      OPEN Rep_cv FOR 'select from_unixtime("5mintime") as "5mintime",username,host,src_zone,domain,dst_zone,content,category,url,hits,bytes,appid,application,categorytype,usergroup from'|| uniontable;
LOOP 
    FETCH Rep_cv BULK COLLECT INTO var_avl_web_details LIMIT 200000;
        FORALL i IN 1..var_avl_web_details.COUNT
            insert into available_web_details values var_avl_web_details(i);
    insert into web_ap_ca_co_do_ur_us_5min values(ts,var_avl_web_details(i).application,var_avl_web_details(i).category,var_avl_web_details(i).content,var_avl_web_details(i).domain,var_avl_web_details(i).dst_zone,var_avl_web_details(i).url,var_avl_web_details(i).username,var_avl_web_details(i).hits,var_avl_web_details(i).bytes,var_avl_web_details(i).appid);     
    insert into web_user_5min values(ts,var_avl_web_details(i).appid);
    EXIT WHEN Rep_cv%NOTFOUND; 
end loop; 
close rep_cv; 
end;**

解决方法

FORALL不是“循环命令”,它是批量插入语句的语法的一部分.所以正确的解决方案是使用每个插入编写FORALL子句:
FORALL i IN 1..var_avl_web_details.COUNT
    insert into available_web_details values var_avl_web_details(i);

FORALL i IN 1..var_avl_web_details.COUNT 
    insert into web_ap_ca_co_do_ur_us_5min values(ts,var_avl_web_details(i).appid);      

FORALL i IN 1..var_avl_web_details.COUNT
    insert into web_user_5min values(ts,var_avl_web_details(i).appid);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读