0
CREATE OR REPLACE FUNCTION public.create_user(_name TEXT, _pass TEXT, _iconid INTEGER)
RETURNS user_info
LANGUAGE sql
AS $$
DECLARE
_newid INTEGER;
BEGIN
INSERT INTO users(name, password, iconid) VALUES (_name, crypt(_pass, gen_salt('bf')), _iconid);
SELECT _newid = currval(pg_get_serial_sequence('users', 'id'));
SELECT u.id, u.name, u.rating, t.name, i.path, i.name FROM users u
LEFT OUTER JOIN usertypes t ON t.id = u.typeid
LEFT OUTER JOIN usericons i ON i.id = u.iconid
WHERE u.id = _newid;
END
$$;
я получаю:Почему функция Postgres не правильная?
ERROR: syntax error at or near "INTEGER"
Line 6: _newid INTEGER;
^
Я уверен, что есть что-то я отсутствую, но это было действительно расстраивает до сих пор, потому что инструменты некачественные по сравнению с почти все другой крупной БД - MySQL, SQL Server, Oracle и т. д.
Теперь функция создает, но я получаю эту ошибку при выполнении: 'выберите * из public.create_user ('DerpDerp5678', 'пароль', 1); ОШИБКА: запрос не имеет адресата для данных результата СОВЕТ. Если вы хотите отменить результаты SELECT, вместо этого используйте PERFORM. КОНТЕКСТ: PL/pgSQL function create_user (текст, текст, целое число) строка 6 в операторе SQL – MonkRocker
Отметьте это как ответ, но - не имеет значения на данный момент. Меня тошнит от борьбы с дерьмовыми инструментами. Вернемся к mySQL, где таинственные задачи с короткими задачами, такие как EDITING A FUNCTION, не скрываются в пыльных углах. – MonkRocker
Вам нужен отдельный вопрос для этой ошибки. Хотя это, вероятно, будет дублировать. – Flimzy