|
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)
|