Oracle中根据列名的值,查询同值同列名的表

--根据列名的值,查询同值同列名的表
CREATE OR REPLACE FUNCTION GETTABLES(PRM_BAZ002 IN VARCHAR2)
  RETURN VARCHAR2 IS
  N_COUNT     NUMBER(10);
  V_RESULT    VARCHAR2(300);
  V_TABLE     VARCHAR2(300);
  V_TABLE_ALL VARCHAR2(300);
  V_SQL       VARCHAR2(1000);
BEGIN
   FOR AREC IN (SELECT T.TABLE_NAME
                 FROM ALL_TAB_COLS T
                 --业务用户名称
                WHERE T.OWNER = 'SCOTT'
                 --查询列
                  AND T.COLUMN_NAME = 'BAZ002'
                  AND LENGTH(T.TABLE_NAME) = 4
                  --去除视图
                  AND EXISTS
                (SELECT 1
                         FROM USER_OBJECTS A
                        WHERE A.OBJECT_TYPE = 'TABLE'
                          AND A.OBJECT_NAME = T.TABLE_NAME)) LOOP

    BEGIN
      V_TABLE := AREC.TABLE_NAME;
      V_SQL   := 'SELECT COUNT(1) FROM ' || V_TABLE ||
                 ' WHERE BAZ002 = ' || PRM_BAZ002 || ' ';
      EXECUTE IMMEDIATE V_SQL INTO N_COUNT;

      IF N_COUNT > 0 THEN
        V_TABLE := V_TABLE || ';';
      ELSE
        V_TABLE := '';
      END IF;
      V_TABLE_ALL := V_TABLE_ALL || V_TABLE;
    EXCEPTION
      WHEN OTHERS THEN
        V_RESULT := AREC.TABLE_NAME || ' 表查询出错!';
        RETURN V_RESULT;
    END;
  END LOOP;
  V_RESULT := V_TABLE_ALL;
  RETURN(V_RESULT);
END GJ_GETTABLES;

转载于:https://my.oschina.net/u/242479/blog/115586

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值