Hi I have a problem with this function:

Declare

        rec_struttura record;
        rec_camp record;
        prov int;
        estra_capo int;
        id_lista int;
        estra_non int;
        rand int8;
        count int;
        count_estra int;
        count_id int;
        rand_doub float8;
        row int8;
        occ boolean;
        note varchar;
        pre char(4) /*NOT NULL := '02'*/;
        tel char(13) /*NOT NULL := '342522'*/;
        com int;
        citta char(35);
        nome varchar;
        num int4;
        data_oggi date;
        capo int;
        cap char(5);
        capo_bool boolean;

Begin

        For rec_struttura in Select * From struttura_campione Loop

                /* estraggo i dati della provincia considerata */

                prov := rec_struttura.cod_prov;
                estra_capo := rec_struttura.num_capo;
                estra_non := rec_struttura.num_non_capo;

                /* estrazione dei nominativi nel capoluogo */
                capo := 1;
                count_estra := 0;

                        /* modificato andrea*/
                        <<caso>>
                        while (count_estra < estra_capo) Loop

                        count_estra := count_estra + 1;


                        /*modificato andrea*/
                        /*Select into rand PERFORM random ();*/
                        /* in ogni caso bisogna rimappre rand da o al ROW_COUNT della 
select, 
immagino che cosė vada piu'
                                veloce il tutto anche perche' rand arriva fino a 
2^31-1 ;) */

                        rand_doub:= random() ;
          count := 0;

                        /* Questa select quante volte viene ripetuta? tante volte 
quanti sono i 
soggetti da estrarre? */

                        For rec_camp in Select 
note,prefisso,telefono1,cod_com,cod_prov,citta,nome_cogno,capoluo,estrazione,num_estra,cap
 
>From nominativi inner join comuni on citta = nome_com Where ((cod_prov = 
prov) and (capoluo=capo)) Loop

                                /* bisogna trovare un modo piu' figo per beccare il 
record
                                        altrimenti fa troppi giri dentro sti cicli */
                                GET DIAGNOSTICS row = ROW_COUNT;
                                rand := round (rand_doub * row);

                                if (rand > row) then

                                        /*questo l'ho messo perche' altrimenti alla 
fine ne estrae meno di 
quelli che servono*/

                                        exit caso;
                                end if;

                                count := count + 1;
                                if count = rand then
                                                /* modificato andrea, prima la 
condizione "not occ" */
                                        if not rec_camp.occupato then
                                                        note := rec_camp.note;
                                                        pre := rec_camp.prefisso;
                                                        tel := rec_camp.telefono1;
                                                        if pre IS NULL or tel IS NULL 
then
                                                                exit caso;
                                                        end if;
                                                        com := rec_camp.cod_com;
                                                        citta := rec_camp.citta;
                                                        cap := rec_camp.cap
                                                        nome := rec_camp.nome_cogno;
                                                        num := rec_camp.num_estra;
                                                        capo := rec_camp.capoluo;
                                                        exit;

                                        else count_estra := count_estra -1; exit caso;
                                        end if;
                                end if;

                        End Loop; /* end del for*/


                        /* estraggo i dati dal record prescelto */
                        /*note := rec_camp.note;
                        pre := rec_camp.prefisso;
                        tel := rec_camp.telefono1;
                        com := rec_camp.cod_com;
                        citta := rec_camp.citta;
                        nome := rec_camp.nome_cogno;*/

                        /* faccio l'update di occupato */

                        /*num := rec_camp.num_estra;*/
                        num := num + 1;
                        data_oggi := now();

                        update nominativi set occupato = TRUE, num_estra = num, 
estrazione = 
data_oggi Where ((prefisso = pre) and (telefono1 = tel));

                        /* faccio l'insert su tab_estrazioni */

                        id_lista := nextval('tab_estrazioni_id_seq');
                        insert into tab_estrazioni values (id_lista, pre, tel);
                        Get Diagnostics count_id = RESULT_OID;

                        /* prendo l'ultimo id utilizzata */

                        /*Select into id_lista id From tab_estrazioni Where oid = 
count_id;*/


                        /* inserisco il record nella tabella campione_out */

                        if capo = 1 then
                                capo_bool := True;
                        else capo_bool := False;
                        end if;

                        insert into campione_out values 
(note,pre,tel,cap,com,prov,citta,nome,capo_bool,NULL,NULL,id_lista);

                End Loop; /* end del while*/

        End Loop; /*del primo FOR ? */

        return count_id;

End;


The error riported is:

Fail to add null value in not null attribute prefisso

The line which the error refere is:

id_lista := nextval('tab_estrazioni_id_seq');
insert into tab_estrazioni values (id_lista, pre, tel);

Has Anybody any suggest? Thanks!
_________________________________________________________________________
Get Your Private, Free E-mail from MSN Hotmail at http://www.hotmail.com.


---------------------------(end of broadcast)---------------------------
TIP 6: Have you searched our list archives?

http://www.postgresql.org/search.mpl

Reply via email to