Oracle中通过某个值查询属于哪张表,哪个字段

本文介绍了一种通过存储过程在数据库中查找特定值的方法。该过程首先检查是否存在一个临时表,若不存在则创建之;接着遍历所有字符类型字段,将包含目标字符串的字段及其所在表的信息插入到临时表中;最后返回这些信息供查询使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过输入某个值查询数据库中哪个表,哪个字段包含。
1.创建存储过程

CREATE OR REPLACE PROCEDURE PROC_FindValueInDB (str in VARCHAR,results out sys_refcursor)AUTHID CURRENT_USER
AS
  --执行SQL语句
  sqlStr VARCHAR(4000);
  --判断表是否存在
  tableExist number;
BEGIN
  --查询表是否存在
  select count(1) into tableExist from user_tables where table_name=upper('temp_Table');
  if tableExist = 0  then
     --创建表
     sqlStr := 'CREATE TABLE temp_Table ( 
     tablename VARCHAR(64), 
     columnname VARCHAR(64) 
     )';
     execute immediate sqlStr;
  else
     --清空表数据
     sqlStr := 'delete temp_Table';
     execute immediate sqlStr;
  end if;

  --定义游标 
  declare  
  CURSOR tables is 
    SELECT o.table_name, c.column_name 
    FROM user_tab_columns c
    INNER JOIN user_tables o ON c.table_name = o.table_name 
    WHERE c.data_type in ('NVARCHAR2','CHAR','VARCHAR2') 
    AND o.TABLESPACE_NAME in('ME2_DATA')
    ORDER BY o.table_name, c.column_name;
    --定义当前行
    table_row tables%rowtype;
    BEGIN    
      --打开游标
      OPEN tables;

      --遍历游标
      LOOP
        --当没有数据的时候就退出循环
        EXIT WHEN tables%NOTFOUND;
        --游标赋值给变量
        FETCH tables INTO table_row;
        sqlStr := 'insert ';
        sqlStr := sqlStr || 'when (exists(SELECT NULL FROM ' || table_row.table_name || ' WHERE RTRIM(LTRIM("'|| table_row.column_name ||'")) LIKE ''%' || str || '%'')) ';
        sqlStr := sqlStr || 'then into temp_Table select ''' || table_row.table_name || ''', ''' || table_row.column_name || ''' from dual ';
        execute immediate sqlStr;

      --结束循环
      END LOOP;
      --提交事务
      commit;
      --关闭游标
      CLOSE tables;
    END;

--返回结果集
open results for 'select * from temp_Table';

End PROC_FindValueInDB;

2.执行存储过程
这里写图片描述

3查看结果
这里写图片描述

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值