我可以使用查询在oracle中查看与特定数据类型相关的列吗?

时间:2017-11-03 05:45:48

标签: mysql database oracle

我90%确定这是不可能的,但我需要专家建议。

是否可以使用selectoracle列表中的任何方法或任何其他DBMS,根据数据类型过滤

例如

select datatype('DATE') from my_table;

要查看结果中具有数据类型DATE的所有列。我知道上面的查询是不可能的根据我(特别是datatype函数:))但是确认是否是。

1 个答案:

答案 0 :(得分:1)

在Oracle中,您可能无法直接运行包含特定数据类型的查询。但是,您可以创建一个过程来构造一个包含表名和数据类型作为参数的查询,以包含特定列并将其作为REF CURSOR返回。

CREATE OR REPLACE PROCEDURE proc_getsql(
    p_table_name IN VARCHAR2,
    p_datatype   IN VARCHAR2 ,
    p_query OUT SYS_REFCURSOR )
IS
  v_query VARCHAR2(1000) ;
BEGIN
OPEN p_query FOR
  SELECT 'SELECT '
    || LISTAGG(COLUMN_NAME,',') WITHIN GROUP (
  ORDER BY column_name ) 
    ||' FROM '||p_table_name query_to_run
  FROM USER_TAB_COLUMNS
  WHERE TABLE_NAME = p_table_name
  AND DATA_TYPE LIKE '%'
    ||p_datatype
    ||'%';
END;

然后,您可以根据您的要求致电或取消此CURSOR

VAR x REFCURSOR;
EXEC proc_getsql('EMPLOYEES','DATE', :x);
PRINT :x; 

<强>输出

QUERY_TO_RUN                                  
------------
SELECT HIRE_DATE,DATE_OF_BIRTH FROM EMPLOYEES