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

在Oracle中对比一张表的列是否在其他N张表的列

    有个需求,创建一张表,这张表的列包含其余几张表的列,创建好后怎么进行校验对比。

1、创建一个函数,接受列名和目标表名作为参数,并返回一个布尔值,表示该列名是否存在于目标表中。
   CREATE OR REPLACE FUNCTION column_exists_in_target(p_column_name VARCHAR2,p_target_table VARCHAR2) RETURN BOOLEAN ASv_exists NUMBER(1);BEGINSELECT CASE WHEN EXISTS (SELECT 1 FROM user_tab_columns WHERE table_name = p_target_table AND column_name = p_column_name) THEN 1 ELSE 0 END INTO v_exists FROM DUAL;RETURN v_exists = 1;END;
2、创建一个存储过程,遍历其他表的列名,并调用函数来检查列名是否存在于目标表中。将结果插入到临时表中。
   CREATE OR REPLACE PROCEDURE compare_columns ASv_table_name VARCHAR2(100);v_column_name VARCHAR2(100);v_is_matched NUMBER(1);CURSOR cur_tables ISSELECT table_name FROM user_tables WHERE table_name IN ('TABLE1', 'TABLE2', 'TABLE3', 'TABLE4', 'TABLE5', 'TABLE6', 'TABLE7');BEGINFOR table_rec IN cur_tables LOOPv_table_name := table_rec.table_name;-- 查询当前表的列名FOR column_rec IN (SELECT column_name FROM user_tab_columns WHERE table_name = v_table_name) LOOPv_column_name := column_rec.column_name;-- 检查列名是否在目标表中v_is_matched := column_exists_in_target(v_column_name, 'TARGET_TABLE');-- 插入对比结果到临时表INSERT INTO temp_column_comparison (column_name, source_table, is_matched)VALUES (v_column_name, v_table_name, v_is_matched);END LOOP;END LOOP;END;

执行测试

   EXECUTE compare_columns;SELECT * FROM temp_column_comparison;


http://www.mrgr.cn/news/491.html

相关文章:

  • Linux对ubuntu的cuda相关操作
  • 搭建内网开发环境(一)|基于docker快速部署开发环境
  • 【AI趋势6】大模型与游戏共振
  • GitHub每日最火火火项目(8.19)
  • PYQT实现上传图片,保存图片
  • 在PHP中使用file_get_contents提取JSON值
  • 第12天 优惠卷的使用
  • 2024年运营技术与网络安全态势研究报告:遭遇多次网络威胁的比例暴增
  • 克服编程学习中的挫败感,收获满满的成就感
  • 爬虫配置代理:保护隐私有效地抓取数据
  • 超网和无类间路由是什么?
  • 尊享奢睡新境界:康姿百德柔压磁性枕匠心设计引领品质睡眠革命
  • C# VideoCapture 多路视频播放
  • 在亚马逊云科技上部署开源大模型并利用RAG和LangChain开发生成式AI应用
  • vuex的原理和使用方法
  • DDPM | 扩散模型代码详解【较为详细细致!!!】
  • [SWPUCTF 2021 新生赛]babyrce
  • RegFormer:用于大规模点云配准的高效投影感知Transformer网络
  • Cmake编译工程
  • leetcode350. 两个数组的交集 II,哈希表