CREATE OR REPLACE function SANITA.INS_ASSISTITO( cognome varchar2, nome varchar2, dataNascita varchar2, sesso varchar2 , codFiscale varchar2, forzatura varchar2, codregionale varchar2, comunascita varchar2, comuresidenza varchar2, indirizzo varchar2, civico varchar2, telefono varchar2, comudomicilio varchar2, indirizzodomicilio varchar2, civicodomicilio varchar2, telefonodomicilio varchar2, cittadinanza varchar2, statocivile varchar2, anonimo varchar2, codicestp varchar2 , data_rilascio_stp varchar2 , distretto_stp varchar2, ute varchar2, term varchar2, prod varchar2 ) return varchar2 is PRAGMA AUTONOMOUS_TRANSACTION; cursor cur_cf is select ana_cod_fisc from sanita.aas_anagrafe where ana_cod_fisc = CodFiscale; cursor cur_comune(a varchar2) is select com_cod_istat from sanita.aas_comuni where com_cod_istat = a; cursor cur_nazionalita is select naz_codice from sanita.aas_nazionalita where naz_codice = decode(cittadinanza,'100','ITA',cittadinanza); verifica boolean := FALSE; progressivo number; messaggio varchar2(100) := NULL; valore varchar2(50); begin for rec1 in cur_cf loop messaggio := 'Codice Fiscale esistente'; end loop; for rec1 in cur_comune(comunascita) loop verifica := TRUE; end loop; if not verifica then messaggio := 'Codice ISTAT Nascita non valido'; else verifica:=FALSE; end if; for rec1 in cur_comune(comuresidenza) loop verifica := TRUE; end loop; if not verifica then messaggio := 'Codice ISTAT Residenza non valido'; else verifica:=FALSE; end if; if comudomicilio is not null then for rec1 in cur_comune(comudomicilio) loop verifica := TRUE; end loop; if not verifica THEN messaggio := 'Codice ISTAT Domicilio non valido'; else verifica:=FALSE; end if; end if; if ute is null or prod is null then messaggio := 'Utente o Prodotto non iserito'; end if; for rec1 in cur_nazionalita loop verifica := TRUE; end loop; if not verifica THEN messaggio := 'Codice Nazionalita non valido'; else verifica:=FALSE; end if; if messaggio is not null then progressivo := 0; valore := rpad(to_char(progressivo),8)||messaggio; return(valore); else select sanita.seq_assistito.nextval into progressivo from dual; insert into AAS_ANAGRAFE ( ANA_ID, ANA_NOME, ANA_COGNOME, ANA_SESSO , ANA_COM_NASC, ANA_DT_NASCITA, ANA_COD_FISC , ANA_ID_OP_M , ANA_DATA_MOD , ANA_NAZIONALITA, ANA_STATO , ANA_FOREIGN_USER ) values ( progressivo, upper(nome), upper(cognome), upper(sesso), comunascita, to_date(datanascita,'dd/mm/yyyy'), upper(codfiscale), upper(ute), trunc(sysdate), decode(cittadinanza,'100','ITA',cittadinanza), 'O', upper(PROD) ); /*insert into appoggio_di_prova (ID_ANA, NOME, COGNOME, DT_NAS) VALUES(progressivo, upper(nome), upper(cognome), to_date(datanascita,'dd/mm/yyyy'));*/ insert into aas_residenza ( res_id, RES_DT_INIZ_VAL, RES_COMUNE, RES_QUARTIERE, RES_INDIRIZZO, RES_TELEFONO, RES_ID_OP_M ) values ( progressivo, trunc(sysdate), comuresidenza, '0', upper(indirizzo), telefono, ute ); if comudomicilio is not null then insert into AAS_domicilio ( DOM_DT_INIZ_VAL, DOM_ID, DOM_COMUNE, DOM_QUARTIERE, DOM_INDIRIZZO, DOM_TELEFONO, DOM_ID_OP_M ) VALUES ( TRUNC(sysdate), progressivo, comudomicilio, '0', upper(indirizzodomicilio), telefonodomicilio, ute ); end if; commit; valore := lpad(to_char(progressivo),8,'0'); return(valore); end if; end; /