批量修改视图的定义
来源:互联网 发布:五子棋打谱软件 编辑:程序博客网 时间:2024/05/10 18:44
在数据库迁移的过程中,可能要更改一些user_objects的DDL,但是这些DDL存在着规律,而且量很大,再说了搞IT的都是些懒人,能批量搞定,肯定不会去一个一个修改这些objects的DDL。
今天我就遇到了这样的问题,tsybdd的schema中有好多的视图名称都是CS_开头的,而且这些视图都是在基于同一个数据库上的另外一个用户hbjb_kf_ts的表,因此他们的DDL语句后面都是from hbjb_kf_ts.**,现在在另外一台计算机上装了一个服务器,把hbjb_kf_ts的数据全部移到新装的这一台机器上了,因此原来的视图都要通过数据链重建,这样一来,就要改很多视图的DDL,为了做这件事,我写了一个过程,来批量的完成这项工作。下面给出我的代码:
CREATE OR REPLACE PROCEDURE prc_changeViewDDL IS TYPE type_user_views IS TABLE OF USER_views%ROWTYPE INDEX BY BINARY_INTEGER; collect_views TYPe_user_views; v_sql VARCHAR2(32767); v_tablename VARCHAR2(2000); v_viewname VARCHAR2(2000); n_dotposition NUMBER;BEGIN SELECT * BULK COLLECT INTO collect_views FROM USER_views WHERE view_name LIKE 'CS_%'; FOR view_index IN 1 .. collect_views.COUNT LOOP v_sql := collect_views(view_index).text; --得到脚本 v_viewname := collect_views(view_index).view_name; v_sql := REPLACE(v_sql, '"', ''); --去掉双引号 n_dotposition := instr(v_sql, '.', -1, 1); --得到最后面一个点的位置 IF n_dotposition = 0 THEN GOTO nextview; -- 表示是当前用户,不用改。 END IF; n_dotposition := n_dotposition + 1; --加1 v_tablename := substr(v_sql, n_dotposition); --得到远端的表名字 v_sql := REPLACE(lower(v_sql), 'hbjb_kf_ts.' || lower(v_tablename), ' ' || v_tablename || '@to_center'); --生成最新的SQL EXECUTE IMMEDIATE ' create or replace view ' || v_viewname || ' as ' || v_sql; --执行 << nextview >> NULL; END LOOP;END prc_changeViewDDL;如果执行时提示权限不足 ,需要显示授权:grant create any view to tsybdd ;
- 批量修改视图的定义
- oracle 视图的定义修改查询
- MySQL数据库视图:视图定义、创建视图、修改视图
- 视图的定义
- 视图的定义
- MOSS : 如何动态修改列表视图定义
- SQL Server修改表结构后批量更新所有视图的存储过程
- 批量导入的修改
- ORACLE视图的修改
- 视图的修改
- 视图修改的学习
- 视图的定义以及优缺点
- 定义视图的小例子
- 视图的定义与使用
- SQL Server修改表结构后批量更新所有视图
- SQL Server修改表结构后批量更新所有视图
- mysql的批量新增和批量修改
- oracle物化视图的批量更新
- Keil C 编译器常见警告与错误信息的解决方法
- Ext ajax 后台操作
- Android开发之旅:组件生命周期(三)
- XML和Oracle数据相互导出
- javascript(JS)表单验证大全
- 批量修改视图的定义
- 当你嫌弃你的父母时,请你读读这段话!
- 基于Visual Studio2010开发office2010办公自动化应用(12)自定义VisioAddIn插件
- NLog文章系列——系列文章目录以及简要介绍
- 终于明白了异地恋为什么那么难
- Hello World
- div+css实现页面局部打印
- 网络广告尺寸
- NLog文章系列——入门教程(上)