如何运行postgresql函数(运行时看到错误)

时间:2018-12-09 22:19:28

标签: postgresql plpgsql

我这样创建了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 :(得分:2)

在PostgreSQL中,双引号内的值被解释为对列的引用,而不是字符串文字。因此:

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

应该是:

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

答案 1 :(得分:1)

  

看到错误:错误:以下查询不存在准备好的语句“ func_update_count”。

EXECUTE用于执行准备好的语句,而不运行postgresql函数。参见手册中的EXECUTE

您可以通过从查询中调用函数来执行函数(根据您的第二次尝试)。

  

看到错误:错误:列“ +”不存在

双引号"用于在标识符中包含空格(例如"my column")或保留大小写(例如"MyColumn")。

请参见Syntax for Identifiers and Keywords

单引号(')可以用于字符串文字以及其他样式-请参见手册中的Constants