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

lf3rwulv  于 5个月前  发布在  PostgreSQL
关注(0)|答案(1)|浏览(80)

我试图在Redshift中创建一个存储过程,它在一个表中计数名称的数量,并将此计数存储在另一个表中,添加日期时间和计数中的寄存器数量。
例如,我的源表是这样的:
| 名称|姓|电话|
| --|--|--|
| 将|史密斯| 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
我尝试过其他程序,如

CREATE OR REPLACE PROCEDURE test_procedimientos.test_sp1(f1 int, f2 varchar(20))
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;


这个能用,所以我不明白为什么我的手术不能用
有什么建议吗?

5t7ly7z5

5t7ly7z51#

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

相关问题