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

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

例如。

select datatype('DATE') from my_table;


要查看结果中所有列的数据类型为DATE。我知道上述查询对我来说是不可能的(特别是datatype函数:)),但确认是否可以。

最佳答案

在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

10-04 11:21
查看更多