Actually, the real function name is t_outer and t_inner, a and b is just for convenience. So you can see them as CREATE OR REPLACE FUNCTION a (out ... and CREATE OR REPLACE FUNCTION b (out ... And i call function a by jdbc: ... conn.setAutoCommit(false); CallableStatement cs = conn.prepareCall("{ call a( ?, ? ) }"); cs.registerOutParameter(1, Types.INTEGER); cs.registerOutParameter(2, Types.OTHER); cs.execute(); ResultSet rs = (ResultSet) cs.getObject(2); ... 2010/1/28 Raymond O'Donnell <rod@xxxxxx>: > On 28/01/2010 07:32, 张海峰 wrote: >> i have 2 functions, naming a and b, both outputing a resultset(cursor) >> and a integer. >> a calls b >> >> a: >> CREATE OR REPLACE FUNCTION "public"."t_outer" (out o_rs >> "pg_catalog"."refcursor", out o_i integer) RETURNS record AS >> ... >> select t_inner(o_rs, o_i); >> ... >> >> b: >> CREATE OR REPLACE FUNCTION "public"."t_inner" (out o_rs >> "pg_catalog"."refcursor", out o_i integer) RETURNS record AS >> ... >> >> Compilation is ok, but when i call a, it says: >> ERROR: function b(refcursor, integer) does not exist >> No function matches the given name and argument types. You might need >> to add explicit type casts. > > Can you post the query that calls the outer function? In the above, > you've named your functions t_outer() and t_inner(); so if you're trying > to call a function named b(), then naturally you'll get an error. > > BTW, if your function names are all lower-case, you don't need all the > double-quotes. > > Ray. > > -- > Raymond O'Donnell :: Galway :: Ireland > rod@xxxxxx > -- you are my sunshine, my only sunshine... -- Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-general