DECLARE l_cursor INTEGER; l_col_cnt INTEGER; l_desc_tab DBMS_SQL.DESC_TAB; l_sql_query VARCHAR2(1000) := 'SELECT * FROM orders'; l_data_type VARCHAR2(50); BEGIN l_cursor := DBMS_SQL.OPEN_CURSOR; DBMS_SQL.PARSE(l_cursor, l_sql_query, DBMS_SQL.NATIVE); DBMS_SQL.DESCRIBE_COLUMNS(l_cursor, l_col_cnt, l_desc_tab); DBMS_OUTPUT.PUT_LINE('Column Details:'); DBMS_OUTPUT.PUT_LINE('----------------------------------------------------------------------------------------'); DBMS_OUTPUT.PUT_LINE(RPAD('Column Name', 20) || RPAD('Type', 15) || RPAD('Length', 10) || RPAD('Precision', 12) || RPAD('Scale', 10) || 'Nullable'); DBMS_OUTPUT.PUT_LINE('----------------------------------------------------------------------------------------'); FOR i IN 1 .. l_col_cnt LOOP -- 将数字类型代码转换为可读的名称 l_data_type := CASE l_desc_tab(i).col_type WHEN 1 THEN 'VARCHAR2' WHEN 2 THEN 'NUMBER' WHEN 12 THEN 'DATE' WHEN 96 THEN 'CHAR' WHEN 180 THEN 'TIMESTAMP' WHEN 112 THEN 'CLOB' ELSE 'UNKNOWN(' || l_desc_tab(i).col_type || ')' END; DBMS_OUTPUT.PUT_LINE( RPAD(l_desc_tab(i).col_name, 20) || RPAD(l_data_type, 15) || RPAD(NVL(TO_CHAR(l_desc_tab(i).col_max_len), 'N/A'), 10) || RPAD(NVL(TO_CHAR(l_desc_tab(i).col_precision), 'N/A'), 12) || RPAD(NVL(TO_CHAR(l_desc_tab(i).col_scale), 'N/A'), 10) || CASE WHEN l_desc_tab(i).col_null_ok THEN 'Y' ELSE 'N' END ); END LOOP; DBMS_SQL.CLOSE_CURSOR(l_cursor); END; /

浙公网安备 33010602011771号