Как запустить функцию postgresql (ошибка во время работы) - PullRequest
0 голосов
/ 10 декабря 2018

Я создал функцию Postgresql следующим образом.И пробовал разные способы запустить его, как указано в этом вопросе.Ни одна из работ.

CREATE OR REPLACE FUNCTION func_update_count(
  updateType text,
  userid     text
)
  RETURNS integer AS $$
DECLARE
    _qry char(1024);
    l_rows integer;
BEGIN
    RAISE NOTICE 'Running ++';
    IF updateType = '+' THEN
        RAISE NOTICE 'Running ++';
        UPDATE user_account SET tptcount = tptcount + 1 WHERE useridcode = '@userid';
    ELSIF updateTYpe = '-' THEN
        RAISE NOTICE 'Running --';
        UPDATE user_account SET tptcount = tptcount - 1 WHERE useridcode = '@userid';
    ELSE
        RAISE NOTICE 'Not running any';
    END IF;

    GET DIAGNOSTICS l_rows = ROW_COUNT; 
    RETURN l_rows;  
END;
$$
LANGUAGE 'plpgsql';

Пытался выполнить такую ​​функцию:

Успешно работает:

UPDATE user_account SET tptcount = tptcount + 1 WHERE useridcode = 'chris_32'; 

=====

Ошибка просмотра: ERROR: prepared statement "func_update_count" does not exist для запроса ниже.

EXECUTE func_update_count("+", "chris_32"); -- Does not work

=====

Ошибка просмотра: ERROR: column "+" does not exist LINE 1: SELECT func_update_count("+", "chris_32"); -- Does not work для запроса ниже

SELECT func_update_count("+", "chris_32"); -- Does not work

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

Ошибка просмотра: ОШИБКА: подготовленный оператор "func_update_count" не существует для запроса ниже.

EXECUTE используется для выполнения подготовленных операторов, а не для выполнения функций postgresql.См. ВЫПОЛНИТЬ в руководстве.

Вы могли бы выполнить функцию, вызвав ее из запроса (согласно вашей второй попытке).

Ошибка просмотра: ОШИБКА: столбец "+" не существует

Двойные кавычки " используются для кавычек идентификаторов, если в них есть пробелы (например, "my column"), или для сохранения регистра (например, "MyColumn").

См. Синтаксис для идентификаторов и ключевых слов .

Одиночные кавычки (') могут использоваться для строковых литералов, а также других стилей - см. Константы в руководстве.

0 голосов
/ 10 декабря 2018

В PostgreSQL значения в двойных кавычках интерпретируются как ссылки на столбцы, а не как строковые литералы.Таким образом:

SELECT func_update_count("+", "chris_32"); 
 --pulls values from the column named + and column named chris_32

Вероятно, должно быть:

SELECT func_update_count('+', 'chris_32'); 
...