- SQL
- PL/SQL
- PL/SQL Avanzato
- DBA
- Forms
- Tips and Tricks
 
 
 

 
 
> Area Sorgenti Oracle  
 

DESC command (DBMS_SQL)
di Barbara Vozzi

-> DESC Command (Repository)

Avete presente il comando DESC di SQL*PLUS???
Abbiamo creato ua procedura che fa esattamente la stessa cosa
.perche??? ...per puro divertimento.

In realta e' un esercizio molto interessente per cominciare ad avventurarsi nel package DBMS_SQL .l'inizio dell'SQL dinamico

create or replace procedure DESC_TABLE(p_table in varchar2) is

v_length_column integer;
v_desc_tab dbms_sql.desc_tab;
v_count_col integer;
v_vc2_tab dbms_sql.varchar2_table;
v_date_tab dbms_sql.date_table;
v_num_tab dbms_sql.number_table;
v_string varchar2(50);
v_execute integer;


BEGIN

v_string := 'select * from ' || p_table;
v_string := 'select * from ' || p_table;
v_length_column := dbms_sql.open_cursor;
v_length_column := dbms_sql.open_cursor;

dbms_sql.parse( v_length_column, v_string , dbms_sql.native);
dbms_sql.describe_columns ( v_length_column, v_count_col, v_desc_tab);

--titoli dell'output su SQL*PLUS
dbms_output.put_line(rpad('FIELD NAME',40)||rpad('TYPE',20)||rpad('LENGTH',20)); dbms_output.put_line(rpad('-',80,'-'));

for j in 1..v_count_col loop
v_vc2_tab(j)     :=null;
v_num_tab(j)    :=null;
v_date_tab(j)   :=null;


--stampa a video il nome,il tipo e la lungezza delle colonne
if      v_desc_tab(j).col_type =1  THEN

--tipo della colonna:VARCHAR2
dbms_output.put_line(rpad(v_desc_tab(j).col_name,40) || rpad('VARCHAR2',20) || rpad(v_desc_tab(j).col_max_len,20));

elsif 
v_desc_tab(j).col_type =96 THEN 
 
--tipo della colonna:CHAR dbms_output.put_line(rpad(v_desc_tab(j).col_name,40)||rpad('CHAR',20)||rpad(v_desc_tab(j).col_max_len,20));

elsif  
v_desc_tab(j).col_type =12 THEN

--tipo della colonna:DATE
dbms_output.put_line(rpad(v_desc_tab(j).col_name,40)||rpad('DATE',20));--dat_tab(j));

elsif
v_desc_tab(j).col_type =2  THEN
--tipo della colonna:NUMBER
dbms_output.put_line(rpad(v_desc_tab(j).col_name,40)||rpad('NUMBER',20)||rpad(v_desc_tab(j).col_precision,20));

end if;
end loop;

v_execute :=DBMS_SQL.EXECUTE(v_length_column);
dbms_sql.close_cursor(v_length_column);

end;

-> DESC Command (Repository)