postgresql – 它可以引用一个PL / pgSQL变量或一个表列
发布时间:2020-12-13 16:32:54 所属栏目:百科 来源:网络整理
导读:我在pgsql中有一个函数 CREATE OR REPLACE FUNCTION core.date_bs_from_ad(date_in_ad date) RETURNS character varying AS$$BEGIN RETURN( SELECT date_in_bs FROM core.date_conversion WHERE date_in_ad = $1 );END$$ LANGUAGE plpgsql; 它创建没有错误,
我在pgsql中有一个函数
CREATE OR REPLACE FUNCTION core.date_bs_from_ad(date_in_ad date) RETURNS character varying AS $$ BEGIN RETURN( SELECT date_in_bs FROM core.date_conversion WHERE date_in_ad = $1 ); END $$ LANGUAGE plpgsql; 它创建没有错误,但是当我使用这个功能它通过以下错误: ERROR: column reference "date_in_ad" is ambiguous LINE 3: WHERE date_in_ad = $1 ^ DETAIL: It could refer to either a PL/pgSQL variable or a table column. QUERY: SELECT ( SELECT MAX(date_in_bs) FROM core.date_conversion WHERE date_in_ad = $1 ) CONTEXT: PL/pgSQL function core.date_bs_from_ad(date) line 3 at RETURN ********** Error ********** ERROR: column reference "date_in_ad" is ambiguous SQL state: 42702 Detail: It could refer to either a PL/pgSQL variable or a table column. Context: PL/pgSQL function core.date_bs_from_ad(date) line 3 at RETURN
SQL标识符和PlpgSQL变量之间存在冲突.没有干净,你想要什么你写了一个谓词,总是真的.
好用: >前缀(通常为“_”)用于局部变量 所以这两种技术(只有一个是必要的) CREATE OR REPLACE FUNCTION core.date_bs_from_ad(_date_in_ad date) RETURNS character varying AS $$ BEGIN RETURN SELECT dc.date_in_bs FROM core.date_conversion dc WHERE dc.date_in_ad = _date_in_ad; END $$ LANGUAGE plpgsql; 对于这些一行函数,SQL语言更好: CREATE OR REPLACE FUNCTION core.date_bs_from_ad(_date_in_ad date) RETURNS character varying AS $$ SELECT dc.date_in_bs FROM core.date_conversion dc WHERE dc.date_in_ad = $1; $$ LANGUAGE sql; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |