Stored procedure error - Mailing list pgsql-bugs
| From | Valaki Valahol |
|---|---|
| Subject | Stored procedure error |
| Date | |
| Msg-id | SNT126-W44D1E9499DA5F703883E29BA20@phx.gbl Whole thread Raw |
| Responses |
Re: Stored procedure error
Re: Stored procedure error |
| List | pgsql-bugs |
Dear Sirs,
My name is Zolt=E1n =D6tv=F6s and I'm from Hungary.=20
Im using PostgreSQL database server from many years and I'm very satisfied =
with this
database.=20
I'm wanted to write a little financial routine in Linux under Lazarus but f=
or the first I've
tested it under pgAdmin. Because I didn't wanted to overload the network tr=
affic with=20
data manipulation I've thought that make all the data manipulation routine =
on the server
side in a stored procedure. The main goal is to create the MoneyTable table=
dynamically
every time and fill it with the actual data. I have to create the table eve=
ry time, because
its structure, the number of the columns and rows may vary every time. Here=
are the=20
two stored procedures I wrote:=20
/****************************************************************/
/* create the emtpy table =
*/
/****************************************************************/
drop function CreateMoneyTable();
create function CreateMoneyTable()
returns integer as
$$
declare=20
cmt integer;
NewId integer;
begin
cmt:=3D0;
begin
drop table MoneyTable;
cmt:=3D1;
exception
when Others then
cmt:=3D-1;
end;
begin
select Max(mtid) into NewId
from MoneyTable;
cmt:=3D2;
exception
when Others then
cmt:=3D-2;
end;
if cmt=3D-2 then
begin
create global temporary table MoneyTable (
mtid serial,
mtdate char(10),
primary key (mtid)
)
on commit preserve rows;
cmt:=3D3;=20
exception
when Others then
cmt:=3D-3;
end;
end if;
return cmt;
end;
$$
LANGUAGE 'plpgsql' VOLATILE;
/****************************************************************/
/* fill the table with start data =
*/
/****************************************************************/
drop function FillMoneyTable(d1 char(10), d2 char(10));
create function FillMoneyTable(d1 char(10), d2 char(10))
returns integer as
$$
declare=20
cmt integer;
i integer;
dt0 date;=20
dt1 date;
NewId integer;
begin
cmt:=3D0;
=20
begin
select Max(MTID) into NewId
from MoneyTable;
cmt:=3D1;
exception
when Others then
cmt:=3D-1;
end;=20
if cmt =3D 1 then
dt0:=3Dto_date(d1,'YYYY-MM-DD');
dt1:=3Dto_date(d2,'YYYY-MM-DD');
i:=3D0;
while ((dt0+i)<=3Ddt1) loop
insert into MoneyTable (MTDATE) values=20
(to_char(dt0+i,'YYYY-MM-DD'));=20=20
i:=3Di+1;
end loop;
end if;
return cmt;
end;
$$
LANGUAGE 'plpgsql' VOLATILE;
/****************************************************************/
/* check if it works =
*/
/****************************************************************/
select CreateMoneyTable();
select FillMoneyTable('2009-09-01','2009-09-13');
select * from MoneyTable;
=20
/****************************************************************/
Everything works fine for the first time. But if I call it for the second t=
ime in the same=20
query window under pgAdmin then it gives the following error messages:
ERROR: relation with OID 28461 does not exist
CONTEXT: SQL statement "INSERT INTO MoneyTable (MTDATE) values (to_char( $=
1 + $2 ,'YYYY-MM-DD'))"
PL/pgSQL function "fillmoneytable" line 18 at SQL statement
********** Error **********
ERROR: relation with OID 28461 does not exist
SQL state: 42P01
Context: SQL statement "INSERT INTO MoneyTable (MTDATE) values (to_char( $1=
+ $2 ,'YYYY-MM-DD'))"
PL/pgSQL function "fillmoneytable" line 18 at SQL statement
I can't understand that why it returns with error. It seems that for the se=
cond time the create table
command it's unable to complete when it gets to the insert command so the i=
nsert command doesn't=20
finds the target table. Like the database server internal execution it shou=
ld be too fast, I guess...
Naturally I've tried all these scripts as the postgres superuser.=20
After filling the dates in this temporary table I would like to add the col=
umns which contains the=20
financial datas.=20
I would prefer to use temporary tables, because this program it's used in a=
network enviroment.=20
So my first question is that what do I make wrong that I can't run these sc=
ripts for many times?
Second question is that how it should work ? What's the solution ?
Please help!....
Thank You for Your help in advance!
Best regards
Zolt=E1n =D6tv=F6s
Hungary
=20=09=09=20=09=20=20=20=09=09=20=20
_________________________________________________________________
Windows Live: Make it easier for your friends to see what you=92re up to on=
Facebook.
http://www.microsoft.com/middleeast/windows/windowslive/see-it-in-action/so=
cial-network-basics.aspx?ocid=3DPID23461::T:WLMTAGL:ON:WL:en-xm:SI_SB_2:092=
009=
pgsql-bugs by date: