problem with Pl/Pgsql function

From: "Matteo Centenaro" <gente_che_mixa(at)hotmail(dot)com>
To: pgsql-sql(at)postgresql(dot)org, pgsql-general(at)postgresql(dot)org, pgsql-admin(at)postgresql(dot)org
Subject: problem with Pl/Pgsql function
Date: 2001-06-05 11:17:24
Message-ID: F295LqN33HFnwpGR88100003067@hotmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-admin pgsql-general

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.

Browse pgsql-admin by date

  From Date Subject
Next Message Rick van Dijk 2001-06-05 15:36:34 Re: What CASE tools and clients for Postgres?
Previous Message Hamid Ounajma 2001-06-05 09:20:16 Rserv ?

Browse pgsql-general by date

  From Date Subject
Next Message Alessio Bragadini 2001-06-05 12:38:10 Re: FYI: status of native language support
Previous Message Penguin 2001-06-05 08:57:25 psql , stored procedure, triggers and errors