Как вызвать функцию, PostgreSQL

Я пытаюсь использовать функцию с PostgreSQL для сохранения некоторых данных. Вот создать сценарий:

-- Function: "saveUser"(integer, character varying, character varying, character varying, character varying, character varying)

-- DROP FUNCTION "saveUser"(integer, character varying, character varying, character varying, character varying, character varying);

CREATE OR REPLACE FUNCTION "saveUser"("pUserID" integer, "pName" character varying, "pLastName" character varying, "pUserName" character varying, "pPassword" character varying, "peMail" character varying)
  RETURNS boolean AS
$BODY$
BEGIN
SELECT 1
FROM "USERS"
WHERE "userID" = $1;

IF FOUND THEN
UPDATE "USERS" 
    SET     "name" = $2,
    "lastName" = $3,
    "userName" = $4,
    "password" = $5,
    "eMail" = $6
WHERE "userID" = $1;
ELSE
    INSERT INTO "USERS"
    ("name", "lastName", "userName", "password", "eMail")
    VALUES
        ($2, $3, $4, $5, $6);
END IF;
END;$BODY$
  LANGUAGE 'plpgsql' VOLATILE
  COST 100;
ALTER FUNCTION "saveUser"(integer, character varying, character varying, character varying, character varying, character varying) OWNER TO postgres;

Документация PostreSQL указывает, что для вызывания функции, которая не возвращает набора результатов это достаточно к только для записи свое имя и свойства. Таким образом, я пытаюсь вызвать функцию как это:

"saveUser"(3, 'asd','asd','asd','asd','asd');

Но я получаю ошибку ниже:

ERROR:  syntax error at or near ""saveUser""
LINE 1: "saveUser"(3, 'asd','asd','asd','asd','asd')
     ^

********** Error **********

ERROR: syntax error at or near ""saveUser""
SQL state: 42601
Character: 1

У меня есть другие функции, которые возвращают набор результатов. Я использую SELECT * FROM "fnc"(...) для вызова их и это работает. Почему я получаю эту ошибку?


Править: Я использую инструментальное средство формирования запросов pgAdmin III и пытаюсь выполнить SQL-операторы там.

42
задан Erkan Haspulat 23 December 2009 в 15:32
поделиться

2 ответа

Вызов функции по-прежнему должен быть корректным SQL-оператором:

SELECT "saveUser"(3, 'asd','asd','asd','asd','asd');
64
ответ дан 26 November 2019 в 23:36
поделиться

вы объявляете свою функцию возвращающей булевой, но она никогда ничего не возвращает.

-1
ответ дан 26 November 2019 в 23:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: