Hi
I'm making my first steps in C functions. I want to avoid doing all the SQL job in them, pl/pgsql looks a better choice. I tried to do this by passing opened cursor from pl/pgsql function to C function.


Here is simple C function:
#include <server/postgres.h>
#include <server/executor/spi.h>
PG_FUNCTION_INFO_V1(test2);
Datum test2(PG_FUNCTION_ARGS)
{
  Portal p;
  int n;
  p=SPI_cursor_find("xxx");
  if(!p)
    elog(ERROR,"Cursor error");
  SPI_cursor_fetch(p,true,1);
  n=SPI_processed;
  PG_RETURN_INT32(n);
}

And pl/pgsql one:
CREATE OR REPLACE FUNCTION test() returns integer AS '
DECLARE
  _m CURSOR FOR select id from some_table limit 1;
  n       integer;
BEGIN
  _m=''xxx'';
  open _m;
  n=test2();
  close _m;
  return n;
END;
' language 'plpgsql';

select test();
I don't understand ERROR message at all:
 ERROR:  SPI_prepare() failed on "SELECT   $1 "

This error is raised when trying to execute SPI_cursor_fetch. What does it mean? What does the SPI_prepare have to already opened cursor?
Where can I find better SPI documentation than "Postgresql Server Programming" ?


Regards,
Tomasz Myrta


---------------------------(end of broadcast)--------------------------- TIP 5: Have you checked our extensive FAQ?

http://www.postgresql.org/docs/faqs/FAQ.html

Reply via email to