CREATE OR REPLACE FUNCTION public.get_locations(
location_word varchar(50)
)
RETURNS TABLE
(
country varchar(50),
city varchar(50)
)
AS $$
DECLARE
location_word_ varchar(50);
BEGIN
location_word_:=concat(location_word, '%');
RETURN QUERY EXECUTE format(' (SELECT c.country, ''::varchar(50) as city FROM webuser.country c
WHERE lower(c.country) LIKE %L LIMIT 1)
UNION
(SELECT c.country,ci.city FROM webuser.country c
JOIN webuser.city ci ON c.country_id=ci.country_id
WHERE lower(ci.city) LIKE %L LIMIT 4)',
location_word_,
location_word_) ;
END
$$ language PLPGSQL STABLE;
這是我得到的錯誤;使用Union子句postgresql時出錯9.5
- 錯誤:在語法錯誤或接近 「%」
- LINE 2:WHERE較低(c.country)LIKE '百分比' LIMIT 1)
爲什麼我得到這個錯誤?
編輯
當我剛剛更換''::varchar(50)
與''''::varchar(50)
它的工作!
'%L'是應該是什麼''%L'',在引號中的錯字。也可能有其他問題,但這應該可以解決您報告的錯誤。 –
爲什麼使用PL/pgSQL函數?爲什麼動態SQL?這可以通過簡單的SQL函數並且不需要動態SQL來簡化。 http://dpaste.com/1A96R5C –
@a_horse_with_no_name我不知道,我通常使用這種方式...以及如果我不能解決這個問題,我會用你的代碼... – lowdegeneration