postgresql - 这个 postgresql 函数有什么问题
问题描述
我做了这个 postgresql 函数,但我得到了这个错误:
错误:不存在游标 «cur_1» 上下文:函数 PL/pgSQL ganancias(text) en la linea 11 en FETCH SQL 状态:34000
CREATE OR REPLACE FUNCTION ganancias(p_jugador text) RETURNS Integer AS
$$
DECLARE
reg1 RECORD;
reg2 RECORD;
cur_1 CURSOR FOR SELECT DISTINCT(id_mano) FROM movimientos where
nombre_jugador=p_jugador;
cur_2 CURSOR FOR SELECT * FROM movimientos where id_mano = reg1.id_mano
and linea =(select min(linea) from movimientos where
id_mano=reg1.id_mano);
v_cont INTEGER =0;
v_contAux INTEGER=0;
BEGIN
OPEN cur_1;
LOOP
FETCH cur_1 INTO reg1;
EXIT WHEN NOT FOUND;
OPEN cur_2;
LOOP
FETCH cur_2 INTO reg2;
EXIT WHEN NOT FOUND;
v_cont=reg2.stack;
v_cont= v_cont - v_contAux;
v_contAux=reg2.stack;
END LOOP;
CLOSE cur_1;
END LOOP;
CLOSE cur_2;
RETURN v_cont;
END
$$
LANGUAGE 'plpgsql';
解决方案
cur_2
是 PL/pgSQL 中的游标变量,如果FETCH
不知道游标本身的名称,就不能在 SQL 命令中使用它。这很令人困惑,如果不描述大量内部信息,我无法更好地解释它。
只要说您不在FETCH
PL/pgSQL 中使用就足够了。这是要走的路:
DECLARE
reg1 record;
BEGIN
FOR reg1 IN
SELECT DISTINCT(id_mano) FROM movimientos
WHERE nombre_jugador=p_jugador
LOOP
/* handle the row */
END LOOP;
END;
我确信您尝试做的事情可以比嵌套游标循环更有效地表达。
推荐阅读
- python - 获取源能力
- vue.js - 部署后某个页面不会加载
- kubernetes - 安装 Kubernetes 仪表板时未找到资源
- firebase - 获取配置文件数据时,使用 Firebase 登录会导致“url!= null”错误
- javascript - 如何使用 jquery 或 javascript 从 div 元素中删除所有以 # 开头的字符?
- typescript - 深度/递归 必需
在特定属性上 - java - 如何获得 onKeyPressed 持续时间?
- angular - Angular 库 VS Angular 自定义元素(Web 组件)有什么不同
- node.js - 从 puppeteer 强制显示模态
- assembly - 如何在 x86 英特尔架构中运行的程序集引导加载程序中将内存从磁盘读取到 RAM?