首页 > 代码库 > pl/sql declare loop if

pl/sql declare loop if

-- 1.判断表是否存在,如果存在则drop表
-- 2.创建表
-- 3.插入1W条数据
-- 4.每1K条commit一次
declare
    v_table varchar2(222):=STUDENT;   --表名
    v_table_exists number:=0;           --如果大于0,则表存在
    v_sql_create varchar2(2222);        --create table sql
    v_number number:=500000;              --插入的数据
    v_id number:=0;                     --id字段
    v_age number:=100000;               --age字段
    v_i number:=0;                      --记录插入的条数
    v_start_time varchar2(22);          --执行命令开始时间
    v_end_time varchar2(22);            --执行命令结束时间
    v_exec_time varchar(22);

begin
    --判断表是否存在,如果存在最删除
    select to_char(sysdate,yyyy-mm-dd hh24:mi:ss) into v_start_time from dual;
    select count(1) into v_table_exists from tab where tname=upper(student);
    if v_table_exists > 0
    then
        execute immediate drop table ||v_table|| purge;
        dbms_output.put_line(drop table ||v_table|| sucessfuly);
    else
        dbms_output.put_line(table ||v_table||  is not exists);
    end if;
    --create table student
    v_sql_create:=create table ||v_table|| (id number,age number);
    execute immediate v_sql_create;
    commit;
    -- insert data to student
    loop
        exit when v_number<=0;
        v_number:=v_number-1;
        insert into student values(v_id,v_age);
        v_id:=v_id+1;
        v_age:=v_age+1;
        v_i:=v_i+1;
        --commit / 10000 line data
        if mod(v_i,10000)=0
        then
            select to_char(sysdate,yyyy-mm-dd hh24:mi:ss) into v_exec_time from dual;
            dbms_output.put_line(v_i|| ||v_exec_time);
            commit;
        end if;
    end loop;
    select to_char(sysdate,yyyy-mm-dd hh24:mi:ss) into v_end_time from dual;
    dbms_output.put_line(execute sucess ||v_start_time|| -> ||v_end_time);
end;
/

 

pl/sql declare loop if