PostgreSQL:dblink查询中没有参数$1
我目前正在使用PostgreSQL 9.3,我正在尝试使用连接到另一个数据库(esms)的此函数,并且所述函数的结果将在另一个数据库(seis)中的另一个函数中进行比较和使用 但是当我尝试这个的时候PostgreSQL:dblink查询中没有参数$1,postgresql,stored-procedures,parameters,postgresql-9.3,dblink,Postgresql,Stored Procedures,Parameters,Postgresql 9.3,Dblink,我目前正在使用PostgreSQL 9.3,我正在尝试使用连接到另一个数据库(esms)的此函数,并且所述函数的结果将在另一个数据库(seis)中的另一个函数中进行比较和使用 但是当我尝试这个的时候 SELECT lowest_grade_query('2014-0035'); 我得到这个错误: ERROR: there is no parameter $1 CONTEXT: Error occurred on dblink connection named "esms_ref": cou
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变量不会隐式传播到其中$1
不同。必须将参数显式合并到查询字符串中:
dblink('esms_ref',
format('SELECT * FROM registration WHERE studid=%L', $1))
dblink('esms_ref',
format('SELECT * FROM registration WHERE studid=%L', $1))