统计当前用户某字段值为something的表

来源:互联网 发布:sketch可以在windows 编辑:程序博客网 时间:2024/05/19 14:51
/**    * 统计当前用户某字段值为something的表  * Mr_Chenph(2014-6-16)    * 调用方式 select QueryColumn('something') from dual   **/CREATE OR REPLACE FUNCTION QueryColumn(content IN VARCHAR2) RETURN VARCHAR2 IS -- 当前function用到的变量   v_expense VARCHAR2(200);   v_tableName VARCHAR2(100);   v_tableNameCol VARCHAR2(100);  v_sql   varchar2(200);   v_count integer;      -- 获取当前数据库中的所有表   CURSOR TABLE_LOOP IS SELECT Table_name FROM User_tables;   -- 获取某表中得所有字段   CURSOR COL_LOOP(v_tableName varchar2) is SELECT column_name FROM user_tab_columns t WHERE t.data_type = 'VARCHAR2' and t.TABLE_NAME=v_tableName;      BEGIN     -- 设置返回值 0正常 其他为异常     v_expense := '0';     -- 打开第一个游标     OPEN TABLE_LOOP;       LOOP         FETCH TABLE_LOOP INTO v_tableName;           EXIT WHEN TABLE_LOOP %NOTFOUND;             -- 打开第二个游标             OPEN COL_LOOP(v_tableName);               LOOP                 FETCH COL_LOOP INTO v_tableNameCol;                   EXIT WHEN COL_LOOP %NOTFOUND;                    v_sql:= 'select count(1) from '||v_tableName||' where '||v_tableNameCol||'='''||content||'''';                   execute immediate v_sql into v_count;                  IF(v_count > 0) THEN                              dbms_output.put_line(v_tableName||':'||v_tableNameCol);                     END IF;               END LOOP;             CLOSE COL_LOOP;       END LOOP;      CLOSE TABLE_LOOP;      -- 异常处理      EXCEPTION         WHEN OTHERS THEN              v_expense := SQLCODE||'---'||SQLERRM;            -- 返回结果      RETURN v_expense;        END QueryColumn;  

0 0
原创粉丝点击