Asking for some PL/pgSQL Tips

From: tankgirl(at)worldonline(dot)es
To: pgsql-general(at)postgresql(dot)org
Subject: Asking for some PL/pgSQL Tips
Date: 2001-07-31 16:14:33
Message-ID: 6659511.996596073797.JavaMail.root@macaca.worldonline.es
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Hello,

Well right now I'm working with PL/pgsql...

I have also faced up to the problem of returning more than one value from
a function, and an array would be the ideal thing for that purpose, but as
long as I wasn't able to find a way of returning or declaring arrays, I played
a kind of trick concatenateing all the values I needed in a Text and filtering
them in the function that receives them.
I mean...I split the String up using some of the support functions of
Postgres (trim(), substr(), ...)

Well, this solution has worked, but I still wonder if there is a better way
of doing it.

Moreover, I have also a big problem with 'dynamic queries'. Basically I try
to generate a query to add a new column to a table...
Fist of all I have to check if the table that I want to alter exists and if
it is not inherited by other tables, this is what I use PL/pgSQL for, but after
checking that everything is allright when I try to generate the query it doesn't
work.

This is more or less what I'm trying to do...

CREATE FUNCTION addColumn(oid, TEXT, TEXT) RETURNS text AS '
DECLARE
-- Alias for the parameters
name_atrib ALIAS FOR $2;
name_type ALIAS FOR $3;
name_table text;

tuples RECORD;

BEGIN
-- I check if the OID belongs to a table
nomb_tabla := oidToText($1);
IF name_table = NULL THEN
RAISE EXCEPTION '' The OID % doesn't belong to any table!!!'', $1;
ELSE
-- I check whether the table is inherited or not.
SELECT INTO tuplas * FROM pg_inherits WHERE inhparent = $1;
IF NOT FOUND THEN
RAISE NOTICE ''This table can be altered'';
EXECUTE ''ALTER TABLE ''||name_table
|| '' ADD COLUMN '' || name_atrib || name_type;
END IF;
END IF;
END;

' LANGUAGE 'plpgsql';

I have tried using PERFOM instead of EXECUTE and also using the functions quote_indent(text)
and quote_literal(text), but they are not even defined in the list of functions.

Test=# \df quote_literal
List of functions
Result | Function | Arguments
--------+----------+-----------
(0 rows)

Test=# \df quote_ident
List of functions
Result | Function | Arguments
--------+----------+-----------
(0 rows)

Up to now, I don't now anything else to do :-(
I look forward to receiving an answer in order to go on working on this.

Sory for such a large, boring (and probably not very clear) message.

Stay Safe & Happy,

:* TankGirl

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Barry Lind 2001-07-31 16:33:20 Re: Please Help JDBC Error!!
Previous Message miguel angel rojas aquino 2001-07-31 15:29:48 problem with triggers