Thread: Passing table names to PL/PGSQL for SELECT/UPDATE/INSERT
I've written my Dijkstra's algorithm in PL/PGSQL. It didn't turn out to be a big deal at all actually, programming-wise. I understand execution speed will be poor but it shouldn't be any slower than having something else, like PHP or Java, execute logic and query the database. I'd like to generalize my function. As per Richard Huxton's suggestion to create tables named after session ID (thanks Richard)s, I'd like to pass in some table names so that the algorithm can read from and write into tables that I specify as parameters to the function. Sometihng like: select dijkstra(inputtablename, outputtablename); I've tried typing the parameters as TEXT, and then just inserting $1 in the select (e.g. SELECT * from $1 ...) This doesn't work, nor did a number of other ways I tried. How can this be done?
I've found the discussion to which you have referred: http://www.postgresql.org/mhonarc/pgsql-sql/2001-02/msg00157.html but was unable to find the documentation for the EXECUTE command. From the discussion it seemed to me that doing an "INSERT" into a table of variable name cannot be done now. It is unfortunate, but I guess nothing can be done about it now. At 04:40 PM 3/4/2001 -0800, you wrote: >Mr. Gutierrez: > > The EXECUTE command is what you need. Please see the development >documentation, and the list archives for January-Early Feb. > > -Josh Berkus
Gerald Gutierrez wrote: > > I'd like to generalize my function. As per Richard Huxton's suggestion to > create tables named after session ID (thanks Richard)s, I'd like to pass in > some table names so that the algorithm can read from and write into tables > that I specify as parameters to the function. Sometihng like: Known limitation - sorry, should have made things clear. > select dijkstra(inputtablename, outputtablename); > > I've tried typing the parameters as TEXT, and then just inserting $1 in the > select (e.g. SELECT * from $1 ...) This doesn't work, nor did a number of > other ways I tried. Basically, I can think of 3 solutions. Bear in mind it's late here, I've had a few drinks with dinner. 1. Use the EXECUTE statement in 7.1 to run the query 2. Use the EXECUTE statement to construct a custom function, one for each session with the table hard-coded (you could also do this from the application I'd guess) 3. Try pl/Tcl - I _think_ that lets you construct a dynamic query, but I don't know TCL so can't say (it's supposed to be easy enough but I've never got round to it). HTH - Richard Huxton
Unfortunately, PL/PGSQL cannot pass table name. I have same problem, only thing I can do is pass an integer, then use IF .. THEN .. ELSE .. END IF; Jie LIANG St. Bernard Software 10350 Science Center Drive Suite 100, San Diego, CA 92121 Office:(858)320-4873 jliang@ipinc.com www.stbernard.com www.ipinc.com On Sat, 3 Mar 2001, Gerald Gutierrez wrote: > > I've written my Dijkstra's algorithm in PL/PGSQL. It didn't turn out to be > a big deal at all actually, programming-wise. I understand execution speed > will be poor but it shouldn't be any slower than having something else, > like PHP or Java, execute logic and query the database. > > I'd like to generalize my function. As per Richard Huxton's suggestion to > create tables named after session ID (thanks Richard)s, I'd like to pass in > some table names so that the algorithm can read from and write into tables > that I specify as parameters to the function. Sometihng like: > > select dijkstra(inputtablename, outputtablename); > > I've tried typing the parameters as TEXT, and then just inserting $1 in the > select (e.g. SELECT * from $1 ...) This doesn't work, nor did a number of > other ways I tried. > > How can this be done? > > > ---------------------------(end of broadcast)--------------------------- > TIP 2: you can get off all lists at once with the unregister command > (send "unregister YourEmailAddressHere" to majordomo@postgresql.org) >