postgresql中的pg_proc中不存在函数

时间:2016-06-26 21:07:29

标签: postgresql

我试图用C#代码

在pgresql中调用我的用户定义函数

我的函数创建脚本如下,

CREATE OR REPLACE FUNCTION public."GetUserDailyData"(
    cid integer,
    hid integer,
    currday integer)
  RETURNS character varying AS
$BODY$
DECLARE
  returndata varchar = '';
BEGIN

SELECT data->20+currday into returndata FROM pops
WHERE hybid = hid and cropid = cid;

return returndata;
END
$BODY$
  LANGUAGE plpgsql
  COST 100;

我调用此函数的方法如下,

public static object ExecuteScalar(string conString, string spName, NpgsqlParameter[] param)
        {
            using (var conn = new NpgsqlConnection(conString))
            {
                conn.Open();
                using (var tran = conn.BeginTransaction())
                using (var command = conn.CreateCommand())
                {
                    command.CommandText = spName;
                    command.CommandType = CommandType.StoredProcedure;

                    for (var i = 0; i < param.Length; i++)
                    {
                        command.Parameters.Add(new NpgsqlParameter());
                        command.Parameters[i] = param[i];
                    }

                    var result = command.ExecuteScalar();
                    return result;
                }
            }
        }

我尝试了所有内容,甚至使用

检查了pg_proc中是否存在此函数
select * from pg_proc where proname = 'GetUserDailyData' 

它反映了功能细节行。

但每次它都会出现同样的错误。

任何建议都将受到高度赞赏。感谢。

1 个答案:

答案 0 :(得分:1)

在PostgreSQL中添加具有区分大小写的名称的对象可能会导致这些并发症;在这种情况下,您需要在引号之间指定存储过程的名称,但是建议不要创建依赖于区分大小写的任何对象,而是使用下划线,或者使用不带引号的CamelCase创建/引用对象时(它创建/引用低帽中的对象)。在任何情况下,您可能还需要将整个接口(而不仅仅是名称)指定为CommandText,并指定参数的数据类型(请参阅this)。

                    ...
                    command.CommandText = "\"" + spName + "\"";
                    ...