Get data type of field in select statement in ORACLE

后端 未结 7 1623
半阙折子戏
半阙折子戏 2020-12-25 13:04

Can I get data types of each column I selected instead of the values, using a select statement?

FOR EXAMPLE:

SELECT a.name, a.surname, b.ordernum 
FR         


        
7条回答
  •  不思量自难忘°
    2020-12-25 13:21

    you can use the DBMS_SQL.DESCRIBE_COLUMNS2
    
        SET SERVEROUTPUT ON;
    DECLARE
        STMT CLOB;
        CUR NUMBER;
        COLCNT NUMBER;
        IDX NUMBER;
        COLDESC DBMS_SQL.DESC_TAB2;
    BEGIN
        CUR := DBMS_SQL.OPEN_CURSOR;
        STMT := 'SELECT  object_name , to_char(object_id), created FROM    DBA_OBJECTS where rownum<10';
    
        SYS.DBMS_SQL.PARSE(CUR, STMT, DBMS_SQL.NATIVE);
        DBMS_SQL.DESCRIBE_COLUMNS2(CUR, COLCNT, COLDESC);
        DBMS_OUTPUT.PUT_LINE('Statement: ' || STMT);
        FOR IDX IN 1 .. COLCNT
        LOOP
            CASE COLDESC(IDX).col_type
            WHEN 2 THEN
                DBMS_OUTPUT.PUT_LINE('#' || TO_CHAR(IDX) || ': NUMBER');
            WHEN 12 THEN
                DBMS_OUTPUT.PUT_LINE('#' || TO_CHAR(IDX) || ': DATE');
            WHEN 180 THEN
                DBMS_OUTPUT.PUT_LINE('#' || TO_CHAR(IDX) || ': TIMESTAMP');
            WHEN 1 THEN
                DBMS_OUTPUT.PUT_LINE('#' || TO_CHAR(IDX) || ': VARCHAR'||':'|| COLDESC(IDX).col_max_len);
            WHEN 9 THEN
                DBMS_OUTPUT.PUT_LINE('#' || TO_CHAR(IDX) || ': VARCHAR2');
            -- Insert more cases if you need them
            ELSE
                DBMS_OUTPUT.PUT_LINE('#' || TO_CHAR(IDX) || ': OTHERS (' || TO_CHAR(COLDESC(IDX).col_type) || ')');
            END CASE;
        END LOOP;
        SYS.DBMS_SQL.CLOSE_CURSOR(CUR);
    EXCEPTION 
        WHEN OTHERS THEN
            DBMS_OUTPUT.PUT_LINE(SQLERRM(SQLCODE()) || ': ' || DBMS_UTILITY.FORMAT_ERROR_BACKTRACE);
            SYS.DBMS_SQL.CLOSE_CURSOR(CUR);
    END;
    /
    
    
    full example in the below url
    
    https://www.ibm.com/support/knowledgecenter/sk/SSEPGG_9.7.0/com.ibm.db2.luw.sql.rtn.doc/doc/r0055146.html
    

提交回复
热议问题