Thread: Computed table name in function
I have a problem that I don't know where to look to understand the problem. I have a function that I first select to get a table name followed by another select into on that table name. If someone could tell me where to look to solve this problem I would appreciate it. It is something like DECLARE rec1 Record; rec2 Record; SELECT aName INTO rec1 FROM tableA WHERE new.xxx = ?; IF FOUND THEN SELECT * INTO rec2 FROM rec1.aName where new.xxx = ?; Thanks
On 10/10/07, Ray Madigan <ray@madigans.org> wrote: > I have a problem that I don't know where to look to understand the problem. > > I have a function that I first select to get a table name followed by > another select into on that table name. If someone could tell me where to > look to solve this problem I would appreciate it. > > It is something like > > DECLARE rec1 Record; > rec2 Record; > > SELECT aName INTO rec1 FROM tableA WHERE new.xxx = ?; > > IF FOUND THEN > > SELECT * INTO rec2 FROM rec1.aName where new.xxx = ?; You have to build your query as a string then use execute on it.
I thought that the documentation said I couldn't use EXECUTE on a SELECT INTO? -----Original Message----- From: pgsql-sql-owner@postgresql.org [mailto:pgsql-sql-owner@postgresql.org]On Behalf Of Scott Marlowe Sent: Wednesday, October 10, 2007 11:10 AM To: Ray Madigan Cc: Pgsql-Sql Subject: Re: [SQL] Computed table name in function On 10/10/07, Ray Madigan <ray@madigans.org> wrote: > I have a problem that I don't know where to look to understand the problem. > > I have a function that I first select to get a table name followed by > another select into on that table name. If someone could tell me where to > look to solve this problem I would appreciate it. > > It is something like > > DECLARE rec1 Record; > rec2 Record; > > SELECT aName INTO rec1 FROM tableA WHERE new.xxx = ?; > > IF FOUND THEN > > SELECT * INTO rec2 FROM rec1.aName where new.xxx = ?; You have to build your query as a string then use execute on it. ---------------------------(end of broadcast)--------------------------- TIP 7: You can help support the PostgreSQL project by donating at http://www.postgresql.org/about/donate
On Wed, 10 Oct 2007, Ray Madigan wrote: > I thought that the documentation said I couldn't use EXECUTE on a SELECT > INTO? Try "for record_var in select ..." Look for 36.7.4 Looping Through Query Results in the docs. Daniel
Ray Madigan wrote: > I thought that the documentation said I couldn't use EXECUTE on a SELECT > INTO? "37.6.5. Executing Dynamic Commands Oftentimes you will want to generate dynamic commands inside your PL/pgSQL functions, that is, commands that will involve different tables or different data types each time they are executed. PL/pgSQL's normal attempts to cache plans for commands will not work in such scenarios. To handle this sort of problem, the EXECUTE statement is provided: EXECUTE command-string [ INTO [STRICT] target ]; where command-string is an expression yielding a string (of type text) containing the command to be executed and target is a record variable, row variable, or a comma-separated list of simple variables and record/row fields. " There's also a FOR..IN EXECUTE loop too -- Richard Huxton Archonet Ltd