我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