Removed -hackers from the mailing-lists. Just noticed it, and I think this is probably fine on the general list. Gurjeet Singh wrote: > On Thu, Feb 12, 2009 at 6:18 PM, Richard Huxton <dev@xxxxxxxxxxxx> wrote: >> CREATE OR REPLACE FUNCTION f1(IN a integer, INOUT b integer, OUT c >> integer) RETURNS RECORD AS $$ > You see, you did not pass the third (OUT) parameter when calling the > function: > > r := f1(a, b); > > This differs from Oracle syntax where you _need_ to pass the third > parameter. That's because pl/pgsql isn't pl/sql. If you want to keep close, you can just declare "c" as INOUT. The original problem was that it was a pain to declare types for every function that returned more than just a simple scalar. The alternative was to say you returned RECORD, but then you needed to list column-names when calling the function. Finally, IN/OUT/INOUT was abused to provide an implicit record-type declaration for you. It's convenient for simple cases, but it's not actually what I think of as IN/OUT parameters. > And what if the Oracle function actually returns a value too? How do we > handle that in the application, because we can't declare RECORD vars in > Java/perl/python etc. You can always do something like: SELECT b,c FROM f1(1, 2); Realistically, I don't think you're going to get one set of queries running against both RDBMS. -- Richard Huxton Archonet Ltd -- Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-general