この実行時エラーはなぜですか?
ERROR: column reference "arrive" is ambiguous LINE 6: case when ( (cast('05:00' as time) >= Arrival)
詳細: PL/pgSQL 変数またはテーブル列のいずれかを参照できます。
問題は、case ステートメントがクエリにあり、「arrive」という列があるテーブルから選択していることです。到着という変数を宣言していません。PG は、そのような変数が宣言されていないことを確認して、参照が列への参照である必要があると結論付けないのはなぜですか?
以下にコードを添付します。私が目にする唯一の表向きの競合は、この関数によって返される送信テーブルの定義にあり、そこには「arrive」という列があり、一時テーブル TT に対する最終的な選択で列名が使用されています。
CREATE or replace function GetHourlyView
(v_whichDate date)
returns TABLE
(
stagecoach,
arrive time,
depart time,
t5am int,t6am int,t7am int,t8am int,t9am int,t10am int, t11am int,
t12pm int, t1pm int, t2pm int t3pm int,t4pm int,t5pm int,t6pm int,
t7pm int, t8pm int, t9pm int, t10pm int, t11pm int
)
as $body$
declare v_dow int := date_part('dow',v_whichDate);
begin
drop table if exists TT;
create temp table TT
(stagecoach varchar(25),
arrive time,
depart time,
t5am int,t6am int,t7am int,t8am int,t9am int,t10am int, t11am int,
t12pm int, t1pm int, t2pm int t3pm int,t4pm int,t5pm int,t6pm int,
t7pm int, t8pm int, t9pm int, t10pm int, t11pm int
) without OIDS on commit drop;
insert into TT
select * from
GetDailySchedule( v_whichDate);
-- (arrive=depart) means 'cancelled'
delete from TT where TT.arrive=TT.depart;
return QUERY
select
TT.stagecoach,
arrive,
depart,
case when ( (cast('05:00' as time) >= arrive) and (cast('05:00' as time) < depart )) then 1 else 0 end as t5am,
case when ( (cast('06:00' as time) >= arrive) and (cast('06:00' as time) < depart )) then 1 else 0 end as t6am,
<snip>
.
.
.
case when ( (cast('23:00' as time) >= arrive) and (cast('23:00' as time) < depart )) then 1 else 0 end as t11pm
from TT
;
drop table TT;
end
$body$
LANGUAGE 'plpgsql'