使用knex.js的psql中的CREATE FUNCTION语句中的语法错误

时间:2019-07-13 14:18:30

标签: javascript postgresql knex.js

我正在尝试使用postgresknex中创建一个函数,但是会出现此错误:

  

错误:“ BEGIN”处或附近的语法错误       在Connection.parseE(E:\ apps \ node \ api_moto_na_veia \ node_modules \ pg \ lib \ connection.js:553:11)       在Connection.parseMessage(E:\ apps \ node \ api_moto_na_veia \ node_modules \ pg \ lib \ connection.js:378:19)       在套接字。 (E:\ apps \ node \ api_moto_na_veia \ node_modules \ pg \ lib \ connection.js:119:22)       在Socket.emit(events.js:182:13)       在addChunk(_stream_visible.js:283:12)       在可读AddChunk(_stream_visible.js:264:11)       在Socket.Readable.push(_stream_visible.js:219:10)       在TCP.onStreamRead [阅读时](internal / stream_base_commons.js:94:17)

我不知道语法有什么问题。

exports.up = function(knex, Promise) {
    return knex.raw(`
        CREATE FUNCTION maxV(val1 numeric, val2 numeric) RETURNS numeric AS
            BEGIN
                IF (val1 > val2) THEN
                    RETURN val1;
                ELSE
                    RETURN val2;
                END IF
                RETURN NULL;
        END
    `);
};

2 个答案:

答案 0 :(得分:1)

缺少分号。如果语句以END IF结尾;

答案 1 :(得分:1)

正如@Belayer指出的那样,您需要分号,而您缺少$$来包装函数定义和语言规范:

CREATE FUNCTION maxV(val1 numeric, val2 numeric) RETURNS numeric AS $$
BEGIN
  IF (val1 > val2) THEN
    RETURN val1;
  ELSE
    RETURN val2;
  END IF;
  RETURN NULL;
END; 
$$
LANGUAGE plpgsql;