gpt4 book ai didi

node.js - pg-promise 创建函数包含带有 $ 参数的执行

转载 作者:行者123 更新时间:2023-11-29 13:15:48 25 4
gpt4 key购买 nike

我正在尝试通过 pg-promise 运行数据库创建脚本。在nodeJS中执行命令的位如下:

        this.db.any(sql, [])
.then((data: any) => {
resolve(data);
})
.catch((error: any) => {
console.log(sql);
reject(error);
});

函数代码可能包含一个或多个直接在函数内部使用的 $variables(这就是为什么我在上面的任何一个中传递一个空数组的原因)。 execute 语句中的参数有几种不同的类型。一个例子如下:


CREATE OR REPLACE FUNCTION ze_function(i_a_parameter TEXT, i_a_value INTEGER, i_another_value TEXT)
RETURNS integer
AS $function$
DECLARE
v_rows_saved integer := 0;
BEGIN
EXECUTE format('UPDATE %I_table
SET
the_field = $1
the_other_field = $2', i_a_parameter)
USING i_a_value, i_another_value;
GET DIAGNOSTICS v_rows_saved = ROW_COUNT;
RETURN v_rows_saved;
END;
$function$
LANGUAGE plpgsql;

它产生的错误如下:
RangeError:变量 $1 超出范围。参数数组长度:0

我试图找到逃避美元符号的方法,但到目前为止没有运气。是完全不行,还是有一些我还不知道的方法?

最佳答案

pg-promise ,为了像这样执行预格式化的 SQL,您需要确保查询方法不会尝试格式化它。

这意味着要么传入 undefined 作为值,要么什么都不传入:

this.db.any(sql)

传入 [] 导致方法尝试使用 $1, $2, ... 格式格式化 SQL,因此您得到的错误与它发现的一样那些。

关于node.js - pg-promise 创建函数包含带有 $ 参数的执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49294380/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com