问题:
我在使用 plpgsql 语言在 Postgres (9.1) 中创建的函数时遇到问题。我来自 SQL Server 的世界,所以这里有一点语言差距。
我的问题是 postgres 似乎没有分配我正确传递的参数。
这是我的函数定义:
CREATE OR REPLACE FUNCTION func1 (
IN param1 character varying,
IN param2 character varying DEFAULT NULL::character varying,
IN param3 int DEFAULT NULL::int)
RETURNS void
AS $$
BEGIN
INSERT INTO table1
(
col1
, col2
, col3
)
VALUES
(
$1
, $2
, $3
)
END;
$$ LANGUAGE plpgsql;
该函数本身在数据库环境中测试时工作正常,但我目前正试图通过 ODBC 连接从 C++ 调用它。
这里是我设置参数的地方:
pCmd->paramIn( "param1", (char *)name.getString().c_str() );
pCmd->paramIn( "param3", 100 );
在这种情况下,我没有将 param2 分配给任何值。它是可空的 - 不应该是一个问题。
我得到的错误是:
错误:函数 func1(unknown, integer) 不存在;
从我所见,调用试图按顺序分配参数,忽略参数名称。
问题:
1 - 我怎样才能调用这个函数来完成这项工作?我是否必须将“NULL”作为缺少的参数传递,并确保它们都井然有序?
2 - 如果我使用的是 ODBC 连接,我肯定是,我应该调用一个 SQL 语言函数,而该函数又调用一个 PLPGSQL 函数吗?这有点令人费解,但我愿意尝试。
3 - (不是问题)请不要建议“不要使用 ODBC”。另外,除非必要,否则请不要尝试更改函数的内部结构。我现在主要关心的是学习如何通过 ODBC 在 postgres 中进行函数调用。
提前感谢大家花时间阅读本文,并非常感谢任何回答的人。
更新:
这是 DboCommand:
DboCommand *cmd;
cmd = new DboCommand(dbConnection, "{call func1 (?) (?)}");
曾经是这个
cmd = new DboCommand(dbConnection, "func1");
现在,错误是:
绑定参数的数量 < 参数标记的数量