我在与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);
在这种情况下,我没有分配参数2为任意值。它是可以空的 - 不应该是一个问题。
我得到的错误是:
ERROR: function func1(unknown, integer) does not exist;
从我所看到的,调用试图以分配参数,忽略了参数名称。
问题:
1 - 我怎样才能调用这个函数来完成这项工作?我是否必须通过“NULL”作为缺失的参数,并确保它们全部合格?
2 - 如果我正在使用ODBC连接,我确实应该调用一个SQL语言函数,然后调用PLPGSQL函数?这有点复杂,但我愿意尝试。
3 - (不是问题)请不要建议“不要使用ODBC”。另外,除非必要,否则请不要尝试更改该功能的内部功能。我现在主要关心的是如何通过ODBC在postgres中进行函数调用。
非常感谢大家花时间阅读本文,并非常感谢所有回答问题的人。
UPDATE:
这里的DboCommand:
DboCommand *cmd;
cmd = new DboCommand(dbConnection, "{call func1 (?) (?)}");
曾经是这个
cmd = new DboCommand(dbConnection, "func1");
现在,错误的是:
the # of binded parameters < the # of parameter markers
感谢您的提示。我没有忘记添加实际的DboCommand对象,该对象具有错误指定的函数调用。我更新了我的代码和问题,并发布了我收到的新错误。 – 2012-03-27 17:57:52