gpt4 book ai didi

PostgreSQL: dblink 查询中没有参数 $1

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

我目前正在使用 PostgreSQL 9.3,我正在尝试处理连接到另一个数据库 (esms) 的这个函数,并且将比较所述函数的结果并在另一个数据库 (seis) 中的另一个函数中使用。

CREATE OR REPLACE FUNCTION lowest_grade_query(varchar) RETURNS numeric AS $$
DECLARE
test numeric(3,2);
BEGIN

PERFORM dblink_connect_u('esms_ref', 'dbname=esms user=postgres password=postgres');

SELECT * INTO test FROM dblink('esms_ref', 'SELECT MAX(to_number(CASE WHEN grade IN (''DRP'', ''INC'')
THEN ''5.00''
ELSE grade END, ''9D99''))
FROM registration
WHERE studid=$1') AS lowest_grade(grade numeric(3,2));

PERFORM dblink_disconnect('esms_ref');

RETURN test;

END;
$$ LANGUAGE plpgsql;

但是当我尝试这个的时候

SELECT lowest_grade_query('2014-0035');

我收到这个错误:

ERROR:  there is no parameter $1
CONTEXT: Error occurred on dblink connection named "esms_ref": could not execute query.
SQL statement "SELECT * FROM dblink('esms_ref', 'SELECT MAX(to_number(CASE WHEN grade IN (''DRP'', ''INC'')
THEN ''5.00''
ELSE grade END, ''9D99''))
FROM registration
WHERE studid=$1') AS lowest_grade(grade numeric(3,2))"

哪里出错了?

最佳答案

您忘记为远程查询转换参数 $1
您的查询是:

 dblink('esms_ref', 'SELECT * FROM registration WHERE studid=$1')

参数 $1 的值是多少? dblink 执行的查询有自己的命名空间,plpgsql 变量不会在那里隐式传播。 plpgsql 函数体中的 $1 与 dblink(或其他动态)查询中的 $1 引用的不同。您必须明确地将参数合并到查询字符串中:

dblink('esms_ref', 
format('SELECT * FROM registration WHERE studid=%L', $1))

关于PostgreSQL: dblink 查询中没有参数 $1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28513017/

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