当前位置: 首页 > news >正文

虚谷中使用PL/SQL改变模式下所有表的大小写

一、将表名转换为小写

1、原理和思路

      首先,我们需要查询出指定模式下的所有表名,在xugu中,数据字典dba_tables包含了当前库下的所有表信息,我们可以使用游标(CURSOR)来遍历这些表名。

2、代码示例如下:

declare
--定义游标cursor cur is select table_name from dba_tables where schema_id = (select schema_id from dba_schemas where schema_name = 'TRIPARTITE-DATA');tab_name varchar;schema_name VARCHAR;datemark VARCHAR;
BEGINschema_name := 'SCHEMA_NAME';datemark := to_char(sysdate,'yyyymmdd')||'_bak';
--打开游标if not cur%isopen then open cur;end if;
--从游标获取表名fetch cur into tab_name;while cur%found loop
--执行重命名操作send_msg('alter table '||'"'||schema_name||'"'||'.'||tab_name||' rename to '||'"'||lower(tab_name)||'_'||datemark||'"'||';');send_msg('alter table '||'"'||schema_name||'"'||'.'||'"'||lower(tab_name)||'_'||datemark||'"'||' rename to '||'"'||lower(tab_name)||'"'||';');fetch cur into tab_name;end loop;
--输出表的数量send_msg('共'||cur%rowcount||'张表');
--关闭游标
end;

在这个示例中:

我们首先定义了一个游标cur ,它从dba_tables里获取表名。

在循环中,对于每个获取到的表名tab_name,使用lower函数将其转换成小写形式

二、将表名转换为大写

1、原理和思路

      方式一:与转换小写类似,同样是查询出表名,然后构建动态SQL进行重命名操作,只是使用upper函数来转换大写。

      方式二:使用FOR-IN循环的方式

代码示例:

方式二:

DECLARE
tab varchar;
sql varchar;
sql1 varchar;
begin
for i in (select s.schema_name,t.table_name from dba_tables t,dba_schemas s where t.schema_id=s.schema_id and schema_name='schema_name') loop beginselect upper(i.table_name) into tab;sql:='alter table '| i.schema_name |'."'|i.table_name |'" rename to "' |tab |'111111111";';send_msg(sql);execute immediate SQL;sql1:='alter table '| i.schema_name |'."'|tab |'111111111' |'" rename to "' | tab |'";';send_msg(sql1);execute immediate sql1;EXCEPTION WHEN OTHERS THEN send_msg('上面这个语句有问题!请单独执行查看错误!');END;
end loop;
END

在这个示例中使用FOR - IN循环直接遍历由dba_tables和dba_schemas关联查询得到的结果集。关联查询通过WHERE子句筛选出特定模式(这里是名为schema_name的模式)下的表名及其所属的模式名。
表名转换与重命名操作,在循环内部,对于每个表,首先使用SELECT UPPER(i.table_name) INTO tab FROM dual;将表名转换为大写形式并存储到变量tab中。
然后构建两个动态的ALTER TABLE语句。第一个语句sql := 'alter table ' || i.schema_name || '."' || i.table_name || '" rename to "' || tab || '111111111";';将原始表名重命名为大写形式并添加一个特定的后缀(这里是111111111)。这可能是为了避免直接修改表名时可能出现的一些冲突或依赖问题。接着通过send_msg(sql);发送这个SQL语句(假设send_msg是用于记录日志或显示操作的自定义过程),并使用EXECUTE IMMEDIATE sql;执行该语句。
第二个语句sql1 := 'alter table ' || i.schema_name || '."' || tab || '111111111' || '" rename to "' || tab || '";';将带有后缀的表名再重命名为纯粹的大写表名,同样先发送再执行。
异常处理,在内部的BEGIN - END块中,使用EXCEPTION WHEN OTHERS THEN send_msg('上面这个语句有问题!请单独执行查看错误!');来捕获在执行动态SQL语句过程中可能出现的任何错误。这种异常处理方式相对简单,只是提示用户单独检查有问题的语句。

http://www.lryc.cn/news/450385.html

相关文章:

  • 数据挖掘的基本步骤和流程解析:深入洞察与策略实施
  • BCJR算法——卷积码的最大后验译码
  • 系统架构设计师论文《论SOA在企业集成架构设计中的应用》精选试读
  • ceph rgw 桶分片之reshard
  • 开放原子开源基金会网站上的开源项目Opns存在缓冲区溢出缺陷
  • 未来前端发展方向:深度探索与技术前瞻
  • 前端工程规范-2:JS代码规范(Prettier + ESLint)
  • Tomcat为什么要打破双亲委派?怎么保证安全
  • 【C++篇】启航——初识C++(下篇)
  • Elasticsearch快速入门
  • uniapp微信小程序遮罩层u-popup禁止底层穿透
  • 【RocketMQ】秒杀设计与实现
  • 高级架构师面试题
  • phpstudy简易使用
  • ubuntu server 常用配置
  • [Day 82] 區塊鏈與人工智能的聯動應用:理論、技術與實踐
  • 微信小程序map组件自定义气泡真机不显示
  • 数据结构之链表(2),双向链表
  • STL之list篇(下)(从底层分析实现list容器,逐步剥开list的外表)
  • 视频去水印的3个技巧,教你无痕去水印
  • LSTM模型改进实现多步预测未来30天销售额
  • 八LAMP搭建
  • Windows——解除Windows系统中文件名和目录路径的最大长度限制
  • 黑名单与ip禁令是同一个东西吗
  • FuTalk设计周刊-Vol.075
  • PE节表中是否存在misc.VirtualSize 比SizeofRawData还要大的情况
  • 栈及笔试题
  • 【工程测试技术】第3章 测试装置的基本特性,静态特性和动态特性,一阶二阶系统的特性,负载效应,抗干扰性
  • ireport 5.1 中文生辟字显示不出来,生成PDF报字体找不到
  • 给Ubuntu虚拟机设置静态IP地址(固定IP)