如何将此代码转换为PostgreSQL存储过程?
我是PostgreSQL的新手。我想将此代码转换或添加到存储过程中如何将此代码转换为PostgreSQL存储过程?,postgresql,Postgresql,我是PostgreSQL的新手。我想将此代码转换或添加到存储过程中 WITH RECURSIVE t(i) AS ( SELECT * FROM unnest((select regexp_split_to_array('signature',''))::char[]) ), cte AS ( SELECT i AS combo, i, 1 AS ct FROM t UNION ALL SELECT cte.combo || t.i, t.i, ct
WITH RECURSIVE t(i) AS (
SELECT * FROM unnest((select regexp_split_to_array('signature',''))::char[])
), cte AS (
SELECT i AS combo, i, 1 AS ct
FROM t
UNION ALL
SELECT cte.combo || t.i, t.i, ct + 1
FROM cte, t
WHERE ct <= 8
AND position(t.i in cte.combo) = 0
)
SELECT distinct cc.combo,ww.word
FROM cte cc
inner join words ww ON ww.word=cc.combo
WHERE length(combo)>1
AND ww.source_id in(1,2,19,21,24,26,33,34)
ORDER BY cc.combo ASC;
只需将其放入函数中:
create function generate_anagrams(p_word text)
returns table(combo text, word text)
as
$$
WITH RECURSIVE t(i) AS (
SELECT *
FROM unnest((select regexp_split_to_array(p_word,''))::char[])
), cte AS (
SELECT i AS combo, i, 1 AS ct
FROM t
UNION ALL
SELECT cte.combo || t.i, t.i, ct + 1
FROM cte, t
WHERE ct <= 8
AND position(t.i in cte.combo) = 0
)
SELECT distinct cc.combo,ww.word
FROM cte cc
inner join words ww ON ww.word=cc.combo
WHERE length(combo)>1
AND ww.source_id in(1,2,19,21,24,26,33,34)
ORDER BY cc.combo ASC
$$
language sql;
你为什么要这么做?你可以简单地把它放到一个视图中。除了一个集合返回函数可能是更好的选择,实际上,这段代码返回上面代码中给定单词的所有字谜,我已经通过了“签名”。我想写一个过程,在这里我可以通过传递一个单词来简单地执行这个过程。调用Proc_Nameword。它将返回给定单词的所有字谜。
select *
from generate_anagrams('signature');