ПРОБЛЕМА:
У меня проблемы с функцией, которую я создал в Postgres (9.1) с языком plpgsql. Я пришел из мира 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;
Сама функция отлично работает при тестировании в среде базы данных, но сейчас я пытаюсь вызвать ее из C++ через соединение ODBC.
Здесь я задаю параметры:
pCmd->paramIn( "param1", (char *)name.getString().c_str() );
pCmd->paramIn( "param3", 100 );
В этом случае я не присвоил param2 никакого значения. Это обнуляется - не должно быть проблемой.
Ошибка, которую я получаю:
ОШИБКА: функция func1(unknown, integer) не существует;
Из того, что я вижу, вызов пытается назначить параметры по порядку, игнорируя имена параметров.
ВОПРОС:
1 - Как я могу вызвать эту функцию, чтобы она работала? Должен ли я передать «NULL» в качестве отсутствующих параметров и убедиться, что они все в порядке?
2 - Если я использую соединение ODBC, что я, безусловно, использую, должен ли я вызывать функцию языка SQL, которая, в свою очередь, вызывает функцию PLPGSQL? Это немного запутанно, но я был бы готов попробовать.
3 - (не вопрос) Пожалуйста, не предлагайте "Не использовать ODBC". Кроме того, пожалуйста, не пытайтесь изменить внутренности функции, если в этом нет необходимости. Моей основной задачей сейчас является изучение того, как сделать вызов функции в postgres через ODBC.
Заранее всем спасибо за то, что нашли время, чтобы прочитать это, и большое спасибо всем, кто ответит.
ОБНОВЛЕНИЕ:
Вот DboCommand:
DboCommand *cmd;
cmd = new DboCommand(dbConnection, "{call func1 (?) (?)}");
Что раньше было этим
cmd = new DboCommand(dbConnection, "func1");
Теперь ошибка:
количество связанных параметров ‹ количество маркеров параметра