首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在匹配条件时显示数据库中的表名

如何在匹配条件时显示数据库中的表名
EN

Stack Overflow用户
提问于 2013-05-24 13:13:39
回答 1查看 132关注 0票数 0

我的表结构如下:

代码语言:javascript
复制
 tabble_name_temp1


    col_up      col_down

    akash      kavita 

    kavita     aruhi

    aruhi      Akash



 tabble_name_temp2


    col_up      col_down

    akash      kavita 

    kavita     simran

    jyoti     Akash


   tabble_name_temp3


    col_up      col_down

    akash      kavita 

    kavita     simran

    jyoti     Akash

我想要选择表的名称

值例如:如果我输入

代码语言:javascript
复制
        akash and simran

那么这应该看起来像这样

代码语言:javascript
复制
       tabble_name_temp2

       tabble_name_temp3

提前感谢!

EN

回答 1

Stack Overflow用户

发布于 2013-05-24 17:26:20

Oracle具有存储表/列相关数据的all_objectsall_tab_columns表。您可以从这些表中进行选择,然后形成动态查询,以检查这些表中是否存在给定的数据。下面是单个输入的示例代码。如果有多个输入,则必须多次重复此操作。

代码语言:javascript
复制
DECLARE
   l_chr_query   VARCHAR2 (2000);
   l_num_count   NUMBER (1);
BEGIN
   FOR i IN (SELECT table_name, column_name
               FROM all_tab_columns
              WHERE table_name IN (
                       SELECT object_name
                         FROM all_objects
                        WHERE object_name LIKE 'SA_%' AND object_type = 'TABLE')
                AND data_type = 'VARCHAR2') --modify the where clause as per your needs
    LOOP
      l_num_count := 0;
      l_chr_query :=
            'select count(1) from ' || i.table_name || ' where ' || i.column_name
         || ' = ''akash'' and rownum = 1';

      --execute the query
      EXECUTE IMMEDIATE l_chr_query INTO l_num_count;

      IF l_num_count > 0
      THEN
         DBMS_OUTPUT.put_line (i.table_name);
      END IF;
   END LOOP;
EXCEPTION
   WHEN OTHERS
   THEN
      DBMS_OUTPUT.put_line (SQLERRM);
END;

一旦找到表,您可以将其保存在数组中,并在下一次迭代相同表但不同列时跳过对同一表的检查。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16728063

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档