postgresql 使用存储过程将值存储在变量中

lbsnaicq  于 12个月前  发布在  PostgreSQL
关注(0)|答案(1)|浏览(155)

我试图在Redshift中创建一个存储过程,它在一个表中计数名称的数量,并将此计数存储在另一个表中,添加日期时间和计数中的寄存器数量。
从示例mi源表中可以看出:
| 名称|姓|电话|
| --|--|--|
| 将|史密斯| 1234 |
| 将|史密斯| 1234 |
| 马修|佩里| 5678 |
新表中的所需输出:
| 名称|姓|电话|计数|日期|
| --|--|--|--|--|
| 将|史密斯| 1234 | 2 |2023-11-02 12:39:41.181 +0100|
我的代码来创建这个过程是:

CREATE OR REPLACE PROCEDURE test_procedimientos.insertar_registro (name VARCHAR(255), surname VARCHAR(255), phone VARCHAR(20))
AS $$
DECLARE
    total_registros bigint;
BEGIN
    SELECT INTO total_registros COUNT(name) FROM test_procedimientos.registro;
    INSERT INTO test_procedimientos.registro_inserciones1(total_registros, name, surname, phone, date)
    VALUES (total_registros, name, surname, phone, CURRENT_TIMESTAMP);
end;
$$ LANGUAGE plpgsql;

字符串
我尝试用SELECT COUNT(*) INTO total_registros FROM test_procedimientos.registro;更改我的选择
但我面临着以下错误:错误:语法错误或附近的“$1”其中:SQL语句在PL/PgSQL函数“insertar_registro”附近的第6行我已经尝试与其他程序,如这

AS $$
DECLARE
  min_val int;
BEGIN
  DROP TABLE IF EXISTS tmp_tbl;
  CREATE TEMP TABLE tmp_tbl(id int);
  INSERT INTO tmp_tbl values (f1),(10001),(10002);
  SELECT INTO min_val MIN(id) FROM tmp_tbl;
  RAISE INFO 'min_val = %, f2 = %', min_val, f2;
END;
$$ LANGUAGE plpgsql;```


and this works so i don`t understand why my procedure doesn't work 
Any suggestions?

kokeuurv

kokeuurv1#

Postgres count()函数返回一个bigint。你试图把它变成一个整数。这两个是不一样的。你的另一个函数工作是因为Min()返回的类型和输入的类型相同。
编辑:然后下一部分是简化你的过程.注解掉插入.检查插入本身的工作(因为我认为你想要的是current_date,而不是查询中的date).等等,你可能会认为问题出在select上,而实际上是insert语句。

相关问题