ORACLE批量插入数据:
--插数据
DECLARE
--声明函数
v_i INT := 1; --循环的次数
v_counter INT := 1; --控制提交行数
v_loop VARCHAR2(30); --临时变量,组装字段内容
BEGIN
WHILE (v_i <= 1000) LOOP
--设置loop循环
v_loop := LPAD(TO_CHAR(v_i), 6, '0'); --左填充 0
INSERT INTO TABLE_NAME
(ID, COLUMN_A, COLUMN_B, COLUMN_C, COLUMN_D)
VALUES
(SYS_GUID(), SYSDATE, 'TEST' || v_loop, 'TEST', 'TEST');
IF v_counter = 100 --每次提交100个
THEN
v_counter := 0;
COMMIT;
END IF;
v_i := v_i + 1; --循环变量加1
v_counter := v_counter + 1;
END LOOP;
COMMIT; --循环执行完后进行提交
END;
ORACLE批量复制表结构:
--复制表结构
DECLARE
v_temp_table VARCHAR2(200) := 'TABLE_NAME_BAK';
v_i INT := 1; --循环的次数
v_loop VARCHAR2(200); --表名
v_temp VARCHAR2(200) := ' AS SELECT * FROM TABLE_NAME WHERE 1 != 1';
BEGIN
WHILE (v_i <= 5) LOOP
v_loop := v_temp_table || LPAD(TO_CHAR(v_i), 4, '0');
EXECUTE IMMEDIATE 'CREATE TABLE ' || v_loop || v_temp;
DBMS_OUTPUT.PUT_LINE('CREATE TABLE ' || v_loop || v_temp);
v_i := v_i + 1; --循环变量加1
END LOOP;
END;
输出的sql如下图所示:
遇到的坑:
复制表结构时,表名不能过长,会报ORA-00972标识符过长的错误。