Re: Linked List
От | Ben K. |
---|---|
Тема | Re: Linked List |
Дата | |
Msg-id | Pine.GSO.4.64.0604302327350.27523@coe.tamu.edu обсуждение исходный текст |
Ответ на | Re: Linked List ("Gregory S. Williamson" <gsw@globexplorer.com>) |
Список | pgsql-sql |
> The pgsql function is compiled and wouldn't know how to handle a table >name as a variable. > If you rewrite the SQL to use the 'EXECUTE' statement I think you could >do this, something along the lines of (untested): > EXECUTE ''INSERT INTO '' || quote_ident(tmplist) || '' (SELECT * FROM >links WHERE p=x)''; Thanks. Yet, if I give the table name as the argument, I get the same error. drop function traverse(integer, text); create or replace function traverse (integer, text) returns integer as $$ declare x int; tname alias for $2; begin x := $1; while x is not null loop select n into x from linkswhere p = x; insert into tmplink (select * from links where p=x); EXECUTE ''INSERT INTO '' || quote_ident(tname)|| '' (SELECT * FROM links WHERE p=x)''; end loop; return 1 ; end; $$ language plpgsql; The above gives the following error. Please note that the first and second args are mixed up now. I tested it only on 8.0 (FC 4) and didn't on 8.1 and wonder whether it's a bug or I may be doing something wrong. Using tname or $2 doesn't change the result. ======================================================================== # select traverse(0, 'links2'); ERROR: syntax error at or near "INSERT" at character 11 QUERY: SELECT ''INSERT INTO '' || quote_ident( $1 ) || '' (SELECT * FROM links WHERE p= $2 )'' CONTEXT: PL/pgSQL function "traverse" line 10 at execute statement LINE 1: SELECT ''INSERT INTO '' || quote_ident( $1 ) || '' (SELECT ... ======================================================================== Regards, Ben K. Developer http://benix.tamu.edu
В списке pgsql-sql по дате отправления: