2017-11-26 6 views
0

実行中のSQL問合せのメタデータを取得する方法はありますか。私のクエリがある場合のように:私は、各列のメタデータを取得したいoracle SQL問合せのメタデータの取得

SELECT fname, 
     lname, 
     age, 
     salary 
FROM emp_tab ; 

結果セットに返さ(すなわち:年齢= NUM​​BER、LNAME = VARCAR2(25)など;)DBに定義されています。

答えて

1

一つの方法は、使用することです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 
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 
関連する問題