将查询输出分配给 postgres 存储过程中的变量

Assigning query output to variable in postgres stored proc

我正在尝试将 postgres 存储过程中的查询结果分配给一个变量。 这是我正在尝试的 运行:

CREATE OR Replace PROCEDURE schema.MyProcedure() 
AS $$

DECLARE 
    RowCount int = 100;
    
BEGIN
    
    select cnt into RowCount 
    from (
        Select count(*) as cnt
        From schema.MyTable
        ) ;
    
    RAISE NOTICE 'RowCount: %', RowCount;
    
END;
$$
LANGUAGE plpgsql;

schema.MyTable 只是一些任意的 table 名称,但脚本没有显示任何内容,甚至没有我将 RowCount 分配给 (100) 的随机值.

我做错了什么?

谢谢

您需要子查询的别名,例如:as sub

CREATE OR Replace PROCEDURE schema.MyProcedure() 
AS $$

DECLARE 
    RowCount int = 100;
    
BEGIN
    
    select cnt into RowCount 
    from (
        Select count(*) as cnt
        From schema.MyTable
        ) as sub ;
    
    RAISE NOTICE 'RowCount: %', RowCount;
    
END;
$$
LANGUAGE plpgsql;

您还可以将查询结果放在括号中,为任意变量赋值。

CREATE OR REPLACE PROCEDURE schema.my_procedure()
AS
$$
DECLARE
    row_count BIGINT;
BEGIN

    row_count = (SELECT COUNT(*) FROM schema.my_table);

    RAISE NOTICE 'RowCount: %', row_count;

END;
$$ LANGUAGE plpgsql;

您应该使用 BIGINT 而不是 INT。

而且最好用 snake_case 风格编写代码和 table 定义。