Oracle 批量插入数据怎么做

 我来答
就烦条0o
2016-04-18 · 知道合伙人软件行家
就烦条0o
知道合伙人软件行家
采纳数:33315 获赞数:46488
从事多年系统运维,喜欢编写各种小程序和脚本。

向TA提问 私信TA
展开全部

一个例子你看看

create or replace procedure p_test is
    v_day                varchar2(20);
    nextday              varchar2(20);
    cur_value            number;
    yes_value            number;
    thismonth_totalvalue number;
    lastmonth_totalvalue number;
    i                    number;
    tempday              varchar2(20);
    day_count            integer;
begin
    execute immediate 'truncate table DM_KPID_IW_AREA';
    v_day := '20070101';
    -- lastmonth_totalvalue := 0;
    for k in 0 .. 11 loop
        tempday              := to_char(add_months(to_date(v_day,
                                                           'yyyymmdd'),
                                                   k),
                                        'yyyymmdd');
        yes_value            := 0;
        thismonth_totalvalue := 0;
    
        -- 这里好像有一个比较方便的函数吧,记不清了
        day_count := to_char(last_day(to_date(tempday, 'yyyymmdd')), 'dd');
    
        for i in 0 .. day_count - 1 loop
            nextday              := to_char(to_date(tempday, 'yyyymmdd') + i,
                                            'yyyymmdd');
            cur_value            := trunc(dbms_random.value(1, 100), 0);
            thismonth_totalvalue := thismonth_totalvalue + cur_value;
        
            begin
                select t.thismonth_totalvalue
                  into lastmonth_totalvalue
                  from dm_kpid_iw_area t
                 where t.day_id =
                      --考虑如3月30日之类这样的情况,前一月没有对应的日子的情况,
                      --如果此时上月值为0的话,则应该为:
                      --to_char(add_months(to_date(nextday, 'yyyymmdd'), -1),
                      --'yyyymm') || substr(nextday, 7, 2);                      
                       to_char(add_months(to_date(nextday, 'yyyymmdd'), -1),
                               'yyyymmdd');
            exception
                when no_data_found then
                    lastmonth_totalvalue := 0;
            end;
        
            insert into dm_kpid_iw_area
                (day_id,
                 cur_value,
                 yes_value,
                 thismonth_totalvalue,
                 lastmonth_totalvalue)
            values
                (nextday,
                 cur_value,
                 yes_value,
                 thismonth_totalvalue,
                 lastmonth_totalvalue);
            yes_value := cur_value;
            commit;
        end loop;
    end loop;
end;
育知同创教育
2016-04-22 · 百度知道合伙人官方认证企业
育知同创教育
1【专注:Python+人工智能|Java大数据|HTML5培训】 2【免费提供名师直播课堂、公开课及视频教程】 3【地址:北京市昌平区三旗百汇物美大卖场2层,微信公众号:yuzhitc】
向TA提问
展开全部
Oracle 批量插入数据的方法:
1 创建表
create table emp (id number(4),name varchar2(10));

2 创建序列
create sequence my_seq increment by 1 start with 1 maxvalue 1000;

3 创建获取序列的函数
create or replace function get_seq return number
as
seq number;
begin
select my_seq.nextval into seq from dual;
return seq;
end get_seq;
/

4 创建匿名块
DECLARE
i INT;
testid number(4);
BEGIN
i := 0;
WHILE(i < 1000)
LOOP
i := i + 1;
testid := get_seq;
INSERT INTO EMP(ID,NAME) VALUES(testid, 'Zheng');
END LOOP;
COMMIT;
END;
/

注:第4步也可以使用存储过程
create or replace procedure my_proc as
BEGIN
DECLARE
i INT;
testid number(4);
BEGIN
i := 0;
WHILE(i < 1000)
LOOP
i := i + 1;
testid := get_seq;
INSERT INTO EMP(ID,NAME) VALUES(testid, 'Zheng');
END LOOP;
COMMIT;
END;
END;
/

exec my_proc;
5 检验结果:
select count(*) from emp;

COUNT(*)
----------
1000
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式