我90%确定这是不可能的,但我需要专家建议。
是否可以使用select
中oracle
列表中的任何方法或任何其他DBMS,根据数据类型过滤列。
例如
select datatype('DATE') from my_table;
要查看结果中具有数据类型DATE
的所有列。我知道上面的查询是不可能的根据我(特别是datatype
函数:))但是确认是否是。
答案 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