Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2088520
  • 博文数量: 1647
  • 博客积分: 80000
  • 博客等级: 元帅
  • 技术积分: 9980
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-13 15:15
文章分类

全部博文(1647)

文章存档

2011年(1)

2008年(1646)

我的朋友

分类:

2008-10-28 17:46:30

 1/** 更改表名 **/
 2Begin
 3    declare @tempPoTableName varchar(50)        --性能对象表名
 4    declare @tempPoSpName varchar(50)            --性能过程名
 5    declare @errorInfo varchar(200)             --错误信息
 6    declare @cnt int                            --计数器
 7    
 8    declare @tempSQL    varchar(1000)
 9    
10    --定义表名、同步表名和过程游标
11    set @tempSQL = ' declare allValues_Cursor cursor for '+CHAR(13+ CHAR(10)
12        set @tempSQL =  @tempSQL + ' select POTABLENAME,POSPNAME from PM_NEPODEF_TABLE WHERE POID>110499 and POID<110580'
13    EXEC (@tempSQL)
14
15    OPEN allValues_Cursor
16
17    --判断是否由符合游标条件的行,如果没有则关闭和释放游标,异常返回
18    IF(@@CURSOR_ROWS = 0 )
19    BEGIN
20        CLOSE allValues_Cursor
21        DEALLOCATE allValues_Cursor
22        set @errorInfo = '没有指定表名或过程名!'
23        print @errorInfo
24        return
25    END    
26    
27    print '开始更改原有表名……'
28    FETCH  NEXT FROM allValues_Cursor INTO @tempPoTableName,@tempPoSpName
29    --根据给定的表名、存储过程名 创建相应的数据存储存储过程
30    WHILE  (@@FETCH_STATUS <> -1)
31    BEGIN
32        print @tempPoTableName
33        
34        IF (EXISTS (SELECT name from sysobjects WHERE name=@tempPoTableName))
35        BEGIN
36        set @tempSQL = 'ALTER TABLE '+ @tempPoTableName+' DROP constraint PK_'+@tempPoTableName
37        EXEC (@tempSQL)
38        set @tempSQL = @tempPoTableName+'_TMP'
39        EXEC Sp_rename @tempPoTableName,@tempSQL
40        END
41        ELSE
42        BEGIN
43        print '没有找到表'+@tempPoTableName;
44        END   
45
46        IF (EXISTS (SELECT name from sysobjects WHERE name=@tempPoSpName))
47        BEGIN
48        set @tempSQL = 'DROP PROCEDURE '+@tempPoSpName;
49        EXEC (@tempSQL)
50        END
51        ELSE
52        BEGIN
53        print '没有找到过程'+@tempPoSpName;
54        END
55
56    FETCH  NEXT FROM allValues_Cursor INTO @tempPoTableName,@tempPoSpName
57    END
58    CLOSE allValues_Cursor
59    DEALLOCATE allValues_Cursor
60    print '结束更改原有表名……'
61    print '------------------------'
62END
63GO
--------------------next---------------------
 1BEGIN
 2DECLARE
 3    tempPoTableName varchar2(50);        --性能对象表名
 4    tempPoSpName varchar2(50);            --性能过程名
 5    errorInfo varchar2(200);             --错误信息
 6    tempSQL    varchar2(1000);
 7    cnt1   number(1);
 8    cnt2   number(2);
 9    
10    --定义表名、同步表名和存储过程游标
11    Cursor allValues_Cursor is
12         select UPPER(TRIM(POTABLENAME)),UPPER(TRIM(POSPNAME)) from PM_NEPODEF_TABLE WHERE POID>110499 and POID<110580;
13             
14BEGIN
15    OPEN allValues_Cursor;
16
17    --判断是否由符合游标条件的行,如果没有则关闭和释放游标,异常返回
18    
19    DBMS_OUTPUT.PUT_LINE('开始更改原有表名……');
20    FETCH  allValues_Cursor INTO tempPoTableName,tempPoSpName;
21    --根据给定的表名、存储过程名 创建相应的数据存储存储过程
22    WHILE allValues_Cursor%found LOOP
23    
24    cnt1:=0;
25    cnt2:=0;
26    BEGIN
27        SELECT 1 INTO cnt1 FROM dual WHERE exists(SELECT table_name FROM user_tables WHERE table_name = tempPoTableName);
28        SELECT 1 INTO cnt2 FROM dual WHERE exists(SELECT OBJECT_NAME FROM user_procedures WHERE OBJECT_NAME = tempPoSpName);
29    exception
30    WHEN no_data_found  THEN
31        null;
32    END;
33    
34    IF cnt1 = 1 THEN
35        DBMS_OUTPUT.PUT_LINE(tempPoTableName);
36        tempSQL := 'ALTER TABLE '||tempPoTableName||' DROP constraint PK_'||tempPoTableName;
37        EXECUTE IMMEDIATE tempSQL;
38        tempSQL := 'ALTER TABLE '||tempPoTableName||' RENAME TO '||tempPoTableName||'_TMP';
39        EXECUTE IMMEDIATE tempSQL;
40    ELSE
41        DBMS_OUTPUT.PUT_LINE('没有找到表'||tempPoTableName);
42    END IF;
43    
44    IF cnt2 = 1 THEN
45        tempSQL := 'DROP PROCEDURE '||tempPoSpName;
46        EXECUTE IMMEDIATE tempSQL;
47    ELSE
48        DBMS_OUTPUT.PUT_LINE('没有找到过程'||tempPoSpName);
49    END IF;
50    
51        FETCH allValues_Cursor INTO tempPoTableName,tempPoSpName;
52    END LOOP;
53    CLOSE allValues_Cursor;
54    DBMS_OUTPUT.PUT_LINE('结束更改原有表名……');
55    DBMS_OUTPUT.PUT_LINE('------------------------');
56    END;
57END;
58/
--------------------next---------------------

阅读(163) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~