这是我执行的查询:
CREATE OR REPLACE FUNCTION alphabetloop ()
RETURNS RECORD AS $$
DECLARE
counter INTEGER := 64 ;
hsl text := 'select 1';
hasil RECORD;
hasile RECORD;
i INTEGER := 0 ;
j INTEGER := 1 ;
BEGIN
LOOP
EXIT WHEN counter = 90 ;
counter := counter + 1 ;
SELECT j, i + j INTO i, j ;
select concat(hsl,concat(' union all select count(*) FROM public.table_name where field_name like ''',(concat(chr(counter),'%''')))) into hsl;
END LOOP ;
for hasil in EXECUTE hsl
loop
select hasil into hasile;
RAISE NOTICE '% : %', chr(counter),hasil;
END LOOP ;
RETURN hasile;
END ;
$$ LANGUAGE plpgsql;
select alphabetloop();
数据输出: (“((13911)”)
消息输出:
注意:Z:(1)
注意:Z:(3411)
注意:Z:(446)
...
注意:Z:(13)
成功运行。查询总运行时间:52秒47毫秒。 1行受影响。
有没有一种方法可以返回数据输出,如:
A | (1)
B | (3411)
C | (446)
D | (166)
...
Z | (13)
答案 0 :(得分:2)
chr(int) function具有给定代码的字符。对于UTF8,该参数被视为Unicode代码点。对于其他多字节编码,该参数必须指定一个ASCII字符。不允许使用NULL(0)字符,因为文本数据类型无法存储此类字节。
SELECT chr(n)
FROM GENERATE_SERIES(97, 97+25) AS t(n);
答案 1 :(得分:0)
对第二个循环做一些修改:
counter := 64 ;
for hasil in EXECUTE hsl
loop
counter := counter + 1 ;
select hasil into hasile;
select concat(chr(counter), '|', hasil);
END LOOP ;