首页 > 解决方案 > Postgresql 函数抛出错误“错误:42702:列引用“lv”不明确”

问题描述

这是我在 postgresql 中使用的函数。我想要这个作为输出数据表。

RETURNS TABLE(lv integer, userid integer, ccode integer, cdate date, corp_id character varying) 

我是 postgresql 的新手。请建议我如何解决此错误。如果需要任何进一步的信息来回答这个问题,请告诉我。先感谢您:)

-- FUNCTION: public.check_login(character varying, character varying)

-- DROP FUNCTION public.check_login(character varying, character varying);

CREATE OR REPLACE FUNCTION public.check_login(
    username character varying,
    password character varying)
    RETURNS TABLE(lv integer, userid integer, ccode integer, cdate date, corp_id character varying) 
    LANGUAGE 'plpgsql'

    COST 100
    VOLATILE 
    ROWS 1000
    
AS $BODY$
begin
drop table if exists temp;                              
create table temp(lv int,userid int,ccode int,cdate date,corp_id varchar(20));                                 
                                              
insert into temp(lv,userid,ccode,cdate,corp_id)      
select lv,userid,code,CONVERT(varchar,cdate,103),corp_id from user_detail 
where uname=username and pwd =Password  and status='Active';     

return query                              
select * from temp;          
end;      
$BODY$;

ALTER FUNCTION public.check_login(character varying, character varying)
    OWNER TO postgres;

标签: asp.netpostgresqlfunction

解决方案


歧义意味着查询引擎无法猜测在一个上下文中有两个同名对象时要操作的对象。代替

select lv,userid,code,CONVERT(varchar,cdate,103),corp_id from user_detail 
 where uname=username and pwd =Password and status='Active';

select ud.lv,ud.userid,ud.code,CONVERT(varchar,ud.cdate,103),ud.corp_id from user_detail AS ud
where ud.uname=username and ud.pwd=Password and ud.status='Active';

这将消除选择和返回结构中同名字段的歧义


推荐阅读