Ric*_*Hum 3 postgresql for-loop plpgsql
我有以下脚本,我想输出到屏幕.
CREATE OR REPLACE FUNCTION randomnametest() RETURNS integer AS $$
DECLARE
rec RECORD;
BEGIN
FOR rec IN SELECT * FROM my_table LOOP
SELECT levenshtein('mystring',lower('rec.Name')) ORDER BY levenshtein;
END LOOP;
RETURN 1;
END;
$$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)
我想在表中连同rec.Name获取levenshein()函数的输出.我该怎么办?另外,它给我一个关于我称之为levenshtein()的行的错误,说我应该使用perform.
假设您想要insert函数的返回值并rec.name进入另一个表.这是你可以做的(首先create是表格new_tab) -
SELECT levenshtein('mystring',lower(rec.Name)) AS L_val;
INSERT INTO new_tab (L_val, rec.name);
Run Code Online (Sandbox Code Playgroud)
以下用法如下所示.
我想,你可以RAISE INFO 'This is %', rec.name;用来查看这些值.
CREATE OR REPLACE FUNCTION randomnametest() RETURNS integer AS $$
DECLARE
rec RECORD;
BEGIN
FOR rec IN SELECT * FROM my_table LOOP
SELECT levenshtein('mystring',lower(rec.Name))
AS L_val;
RAISE INFO '% - %', L_val, rec.name;
END LOOP;
RETURN 1;
END;
$$ LANGUAGE plpgsql;
Run Code Online (Sandbox Code Playgroud)
注意 - 该FROM子句是可选的,如果您从select中的函数中选择netxval(sequence_name)并且没有任何实际的表可供选择,例如SELECT nextval(sequence_name) AS next_value;,在Oracle术语中它将是SELECT sequence_name.nextval FROM dual;或SELECT function() FROM dual;.有没有dual在postgreSQL.
我也认为ORDER BY没有必要,因为我的假设是你的函数levenshtein()很可能在任何时间点只返回一个值,因此没有足够的数据ORDER.