ERROR: 42601: a column definition list is only allowed for functions returning "record"

From: "Gopal" <gopal(at)getmapping(dot)com>
To: <pgsql-general(at)postgresql(dot)org>
Subject: ERROR: 42601: a column definition list is only allowed for functions returning "record"
Date: 2006-11-22 13:58:38
Message-ID: A5DE6132B8D812419321747E42710E2204C047@EXCHANGE01.gm.local
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

Hi,

I'm running postgres following version on win2K server (PostgreSQL 8.1.4
on i686-pc-mingw32, compiled by GCC gcc.exe (GCC) 3.4.2 (mingw-special))

I am using c# and npgsql 1.0 (same behaviour with 0.7) to call a
function that has 6 input parameters and 4 output parameters.

When I call .ExecuteNonQuery(), I get the following message

ERROR: 42601: a column definition list is only allowed for functions
returning "record"

Here is my function declaration

CREATE or REPLACE FUNCTION public.usp_hello(

IN centrex float8,

IN centrey float8,

IN pixelwidth int4,

IN pixelheight int4,

IN originaldataset text,

IN originallevel int4,

IN srid int4,

OUT newdataset text,

OUT newlevel int4,

OUT newx float8,

OUT newy float8)

returns record AS

My calling c# code is as follows

NpgsqlCommand sqlCommand1 = new NpgsqlCommand();

sqlCommand1.CommandText = "usp_hello";

sqlCommand1.CommandType =
System.Data.CommandType.StoredProcedure;

sqlCommand1.Connection = sqlConnection1;

sqlCommand1.Parameters.Add(new
NpgsqlParameter("centrex",NpgsqlTypes.NpgsqlDbType.Double));

sqlCommand1.Parameters.Add(new
NpgsqlParameter("centrey",NpgsqlTypes.NpgsqlDbType.Double));

sqlCommand1.Parameters.Add(new
NpgsqlParameter("pixelwidth",NpgsqlTypes.NpgsqlDbType.Integer));

sqlCommand1.Parameters.Add(new
NpgsqlParameter("pixelheight",NpgsqlTypes.NpgsqlDbType.Integer));

sqlCommand1.Parameters.Add(new
NpgsqlParameter("originaldataset",NpgsqlTypes.NpgsqlDbType.Text));

sqlCommand1.Parameters.Add(new
NpgsqlParameter("originallevel",NpgsqlTypes.NpgsqlDbType.Integer));

sqlCommand1.Parameters.Add(new
NpgsqlParameter("srid",NpgsqlTypes.NpgsqlDbType.Integer));

sqlCommand1.Parameters["centrex"].Value = centreX;

sqlCommand1.Parameters["centrey"].Value = centreY;

sqlCommand1.Parameters["pixelwidth"].Value =
pixelWidth;

sqlCommand1.Parameters["pixelheight"].Value =
pixelHeight;

sqlCommand1.Parameters["originaldataset"].Value =
originalDataset;

sqlCommand1.Parameters["originallevel"].Value =
originalLevel;

sqlCommand1.Parameters["srid"].Value = 27700;

NpgsqlParameter newds = new
NpgsqlParameter("newdataset",NpgsqlTypes.NpgsqlDbType.Text);

newds.Direction = ParameterDirection.Output;

sqlCommand1.Parameters.Add(newds);

NpgsqlParameter newlvl = new
NpgsqlParameter("newlevel",NpgsqlTypes.NpgsqlDbType.Integer);

newlvl.Direction = ParameterDirection.Output;

sqlCommand1.Parameters.Add(newlvl);

NpgsqlParameter newx = new
NpgsqlParameter("newx",NpgsqlTypes.NpgsqlDbType.Double);

newx.Direction = ParameterDirection.Output;

sqlCommand1.Parameters.Add(newx);

NpgsqlParameter newy = new
NpgsqlParameter("newy",NpgsqlTypes.NpgsqlDbType.Double);

newy.Direction = ParameterDirection.Output;

sqlCommand1.Parameters.Add(newy);

try

{

sqlConnection1.Open();

sqlCommand1.ExecuteNonQuery();

newDataset =
sqlCommand1.Parameters["newdataset"].Value.ToString();

newLevel =
Convert.ToInt32(sqlCommand1.Parameters["newlevel"].Value);

}

I cannot find any other matching issues, please help!

Gopal

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Magnus Hagander 2006-11-22 13:58:59 Re: MSSQL to PostgreSQL : Encoding problem
Previous Message Matthias.Pitzl 2006-11-22 13:56:20 Re: build for none standard socket