我试图在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;
型
这个能用,所以我不明白为什么我的手术不能用
有什么建议吗?
1条答案
按热度按时间5t7ly7z51#
Postgres count()函数返回一个bigint。你试图把它变成一个整数。这两个是不一样的。你的另一个函数工作,因为Min()返回与输入相同的类型。
编辑:然后下一部分是简化你的过程.注解掉插入.检查插入本身的工作(因为我认为你想要的是current_date,而不是查询中的date).等等,你可能会认为问题出在select上,而实际上是insert语句。