oracle中有没有办法获取正在运行的SQL查询的元数据?如同我的查询是:
SELECT fname,
lname,
age,
salary
FROM emp_tab ;
我想获取结果集中返回的每列的元数据(即:age = NUMBER,lname = VARCAR2(25)etc;),这是在DB中定义的。
答案 0 :(得分:2)
一种方法是使用DBMS_SQL.DESCRIBE_COLUMNS
:
表:
CREATE TABLE emp_tab (fname VARCHAR2(25),
lname VARCHAR2(25),
age NUMBER,
salary NUMBER
);
查询:
DECLARE
cur PLS_INTEGER := DBMS_SQL.OPEN_CURSOR;
cols DBMS_SQL.DESC_TAB;
ncols PLS_INTEGER;
BEGIN
DBMS_SQL.PARSE(cur, 'SELECT fname,lname, age, salary FROM emp_tab'
, DBMS_SQL.NATIVE);
DBMS_SQL.DESCRIBE_COLUMNS (cur, ncols, cols);
FOR i IN 1 .. ncols LOOP
DBMS_OUTPUT.PUT_LINE ('Column name:'|| cols(i).col_name || ' Column type:'
|| cols(i).col_type || ' Max column length:' || cols(i).col_max_len);
END LOOP;
DBMS_SQL.CLOSE_CURSOR (cur);
END;
/
输出:
Column name:FNAME Column type:1 Max column length:25
Column name:LNAME Column type:1 Max column length:25
Column name:AGE Column type:2 Max column length:22
Column name:SALARY Column type:2 Max column length:22
答案 1 :(得分:0)
SQL> column column_name format a35;
SQL> column data_type format a20;
SQL> column data_default format a15;
SQL> select column_name, data_type||decode(data_type,'NUMBER',nvl2(data_precision,'('||data_precision||nvl2(data_scale,','||data_scale,'')||')',''),'('|| data_length||')') data_type, data_default
from user_tab_columns
where table_name = upper('&i_table_name'); -- EMP_TAB