oracle 批量改表名/插入记录

 

 

declare
  v_sql  varchar2( 1000);
   cursor cur  is  select  ' alter table " ' ||t1.table_name || ' " rename to  ' || upper(t1.table_name)  as sqlstr
               from user_tables t1 
              where table_name <> upper(table_name) 
                and  not  exists ( select  1  from user_tables t2  where t2.table_name = upper(t1.table_name) );
begin
   for rur  in cur loop
    v_sql : = rur.sqlstr;
     execute immediate v_sql;
   end loop;
end;

 

 

测试代码:

scott @SZTYORA >  create  table "ttt"  as  select  *  from t;

表已创建。

已用时间:   000000.07
scott @SZTYORA >  create  table ttt  as  select  *  from t;

表已创建。

已用时间:   000000.06
scott @SZTYORA >  commit;

提交完成。

已用时间:   000000.01
scott @SZTYORA >  select  ' alter table " ' ||t1.table_name || ' " rename to  ' || upper(t1.table_name)  as sqlstr
   2                 from user_tables t1
   3                where table_name <> upper(table_name)
   4                  and  not  exists ( select  1  from user_tables t2  where t2.table_name = upper(t1.table_name) );

未选定行

已用时间:   000000.06
scott @SZTYORA >  drop  table ttt;

表已删除。

已用时间:   000000.01
scott @SZTYORA >  commit;

提交完成。

已用时间:   000000.00
scott @SZTYORA >  select  ' alter table " ' ||t1.table_name || ' " rename to  ' || upper(t1.table_name)  as sqlstr
   2                 from user_tables t1
   3                where table_name <> upper(table_name)
   4                  and  not  exists ( select  1  from user_tables t2  where t2.table_name = upper(t1.table_name) );

SQLSTR
-- ----------------------------------------------------------------------------------------------------------------------
alter  table "ttt" rename  to TTT

已用时间:   000000.07
scott @SZTYORA >  declare
   2    v_sql  varchar2( 1000);
   3     cursor cur  is  select  ' alter table " ' ||t1.table_name || ' " rename to  ' || upper(t1.table_name)  as sqlstr
   4                 from user_tables t1
   5                where table_name <> upper(table_name)
   6                  and  not  exists ( select  1  from user_tables t2  where t2.table_name = upper(t1.table_name) );
   7   begin
   8     for rur  in cur loop
   9      v_sql : = rur.sqlstr;
  10       execute immediate v_sql;
  11     end loop;
  12   end;
  13   /

PL /SQL 过程已成功完成。

已用时间:   000000.39
scott @SZTYORA >  desc "ttt";
ERROR:
ORA - 04043: 对象 "ttt" 不存在


scott @SZTYORA >  desc ttt;
 名称                                                              是否为空? 类型
  -- --------------------------------------------------------------- -------- --------------------------------------------
  COL_NAME                                                                    VARCHAR2( 20)

scott @SZTYORA >

 

改成存储过程:

 

create  or  replace  procedure alertTableName
AS  
    v_sql  varchar2( 1000);
    counter  number;
     cursor cur  is  select  ' alter table  ' ||t1.table_name || '  rename to old_ ' || upper(t1.table_name)  as sqlstr
                 from user_tables t1 
                where table_name <> ' old_ ' ||table_name 
                  and  not  exists ( select  1  from user_tables t2  where t2.table_name = ' old_ ' ||table_name );
   begin
    counter: = 1;            
     for rur  in cur loop
      v_sql : = rur.sqlstr;
       execute immediate v_sql;
      DBMS_OUTPUT.PUT_LINE(counter || ' --- ' ||v_sql);
      counter: =counter + 1;
     end loop; 

  EXCEPTION

     WHEN OTHERS  THEN
    DBMS_OUTPUT.PUT_LINE(SQLCODE || ' --- ' ||SQLERRM);

      ROLLBACK ;
      RETURN;  
   end;

 

http://topic.csdn.net/u/20100705/16/f3a3301d-7759-4fca-9138-f1406e195196.html?177234244

 


 

 

批量插入数据,每500条commit一次~

 

CREATE  OR  REPLACE  PROCEDURE insert_tbl_cus_proc(info_list     IN  tbl_cus_table_type,
                              out_message  OUT  VARCHAR2IS
BEGIN
    FOR i  IN  1.. info_list. count LOOP
       INSERT  INTO tbl_cus(ID,cusname,phone,state)
       VALUES (info_list(i).id,info_list(i).cusname,info_list(i).phone,info_list(i).state);

       IF MOD(i, 500=  0  THEN
          COMMIT;
       END  IF;
    END LOOP;

    COMMIT;

EXCEPTION
    WHEN OTHERS  THEN
      out_message : =  ' ERROR! ';
       ROLLBACK;
END;

 

http://topic.csdn.net/u/20100823/16/b68064fd-1b93-41ce-b3b7-a7e679993958.html

 


insert into TABLE1
(a, b, c, d)
select id1,id2,id3,id4 
from TABLE2;

 

转载于:https://www.cnblogs.com/neru/archive/2012/06/28/2567011.html

Oracle数据库中,如果你需要批量替换表名,可以使用PL/SQL脚本或者SQL*Plus命令结合字符串函数来完成这个任务。这里提供一种基本的方法: 1. **PL/SQL脚本**: 使用`DBMS_REPAIR.REPLACE_NAME()`过程,创建一个存储过程,传入原始表名列表、新的表名以及模式名称。例如: ```sql CREATE OR REPLACE PROCEDURE batch_rename_tables ( original_names VARCHAR2(4000), new_names VARCHAR2(4000), schema_name VARCHAR2 DEFAULT USER ) IS BEGIN FOR i IN 1..LENGTH(original_names) - LENGTH(' ') LOOP EXECUTE IMMEDIATE 'ALTER TABLE ' || schema_name || '.' || SUBSTR(original_names, i, INSTR(original_names, ' ', i) - i) || ' RENAME TO ' || SUBSTR(new_names, i, INSTR(new_names, ' ', i) - i); END LOOP; END batch_rename_tables; / ``` 然后你可以通过运行`BEGIN batch_rename_tables('old_table_1 old_table_2, ...', 'new_table_1 new_table_2, ...'); END; /` 来调用该过程。 2. **SQL*Plus命令**: 如果表名之间有逗号分隔,可以直接在SQL*Plus环境中运行SQL语句: ```sql SET LINESIZE 300 REPLACE TABLE (old_table_1, old_table_2, ...)新名 (new_table_1, new_table_2, ...) WHERE EXISTS (SELECT * FROM ALL_TABLES WHERE OWNER = USER AND TABLE_NAME IN ('old_table_1', 'old_table_2', ...)); ``` 但是请注意,这种方法可能不会改变表的数据字典信息,只会在用户会话级别生效。 **注意事项**: - 一定要谨慎操作,因为错误的表名替换可能会导致数据丢失或混乱。 - 验证新的表名是否已经存在,如果存在,需要先删除再插入
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值