我想把我的pl/pgsql脚本输出到屏幕上

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.

Ann*_*awn 5

假设您想要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;.有没有dualpostgreSQL.

我也认为ORDER BY没有必要,因为我的假设是你的函数levenshtein()很可能在任何时间点只返回一个值,因此没有足够的数据ORDER.

  • 我认为问题是PostgreSQL,而不是ORACLE. (2认同)