Anda di halaman 1dari 3

create or replace function get_PK(nomeTabella VARCHAR2) return varchar2 IS err_ exception; --pragma exception_init(err_,-20668); elencoPK VARCHAR2(300) := ' ';

v_tab varchar2(30); u_file utl_file.file_type; BEGIN v_tab := upper(nomeTabella); declare cursor pk is select cons.constraint_name, colu.column_name, tab.data_type,tab.data_length, ta b.data_precision --into v_t_name,v_c_name,v_type,v_len,v_prec from all_constraints cons join all_cons_columns colu on cons.constraint_name = colu.constraint_name join all_tab_columns tab on tab.column_name = colu.column _name where cons.constraint_type = 'P' and cons.table_name = v_tab and colu.table_name = tab.table_name group by cons.constraint_name, cons.table_name, colu.column_name, tab.data_type, tab.data_length, tab.data_precision ; r_record pk%rowtype; cursor exist is select table_name,table_type from all_catalog where table_name = v_tab and table_type = 'TABLE'; r_exist exist%rowtype; begin open exist; fetch exist into r_exist; close exist; if r_exist.table_name != v_tab or r_exist.table_name is null then raise err_; end if; open pk; fetch pk into r_record; --for r_record in pk loop --exit when pk%notfound; if pk%notfound then u_file := utl_file.fopen('OUTPUT','log','A'); utl_file.put_line(u_file,trim(elencoPK)); utl_file.fclose(u_file);

elencoPK := rpad(elencoPK,length(elencoPK)+24,'No Primary Key for table'); return trim(elencoPK); end if; if ; if if if if r_record.constraint_name is null then r_record.constraint_name := '0'; end if r_record.column_name is null then r_record.column_name := '0'; end if; r_record.data_type is null then r_record.data_type := '0'; end if; r_record.data_length is null then r_record.data_length := '0'; end if; r_record.data_precision is null then r_record.data_precision := '0'; end if;

if(pk%rowcount) > 0 then elencoPK := rpad(elencoPK,length(elencoPK)+length(r_record.constraint_name),r_re cord.constraint_name); elencoPK := rpad(elencoPK,length(elencoPK)+1,','); elencoPK := rpad(elencoPK,length(elencoPK)+length(r_record.column_name),r_record .column_name); elencoPK := rpad(elencoPK,length(elencoPK)+1,','); elencoPK := rpad(elencoPK,length(elencoPK)+length(r_record.data_type),lower(r_re cord.data_type)); elencoPK := rpad(elencoPK,length(elencoPK)+1,'('); elencoPK := rpad(elencoPK,length(elencoPK)+length(r_record.data_length),r_record .data_length); elencoPK := rpad(elencoPK,length(elencoPK)+1,','); elencoPK := rpad(elencoPK,length(elencoPK)+length(r_record.data_precision),r_rec ord.data_precision); elencoPK := rpad(elencoPK,length(elencoPK)+1,')'); --elencoPK := rpad(elencoPK,length(elencoPK)+1,';'); --elencoPK := rpad(elencoPK,length(elencoPK)+1,' --'); else elencoPK := rpad(elencoPK,length(elencoPK)+1,','); elencoPK := rpad(elencoPK,length(elencoPK)+1,'e'); elencoPK := rpad(elencoPK,length(elencoPK)+1,' '); elencoPK := rpad(elencoPK,length(elencoPK)+length(r_record.data_type),lower(r_re cord.data_type)); elencoPK := rpad(elencoPK,length(elencoPK)+1,'('); elencoPK := rpad(elencoPK,length(elencoPK)+length(r_record.data_length),r_record .data_length); elencoPK := rpad(elencoPK,length(elencoPK)+1,','); elencoPK := rpad(elencoPK,length(elencoPK)+length(r_record.data_precision),r_rec ord.data_precision); elencoPK := rpad(elencoPK,length(elencoPK)+1,')'); end if;

close pk; --end loop; end;

u_file := utl_file.fopen('OUTPUT','log','A'); utl_file.put_line(u_file,trim(elencoPK)); utl_file.fclose(u_file); return trim(elencoPK); exception when err_ then u_file := utl_file.fopen('OUTPUT','log','A'); utl_file.put_line(u_file,'Impossibile analizzare la tabella '||v_tab||' : input NULL o tabella inesistente'); utl_file.fclose(u_file); raise_application_error(-20668,'Impossibile analizzare la tabella '||v_tab||' : input NULL o tabella inesistente'); END get_PK; /

declare var varchar2(300); begin var := get_PK('employees'); dbms_output.put_line(var); end; /

Anda mungkin juga menyukai