在Postgresql中不工作的循环的反转
当我试图在PostgreSQL中使用Reverse for循环时,编译器似乎无法识别单词“Reverse”。 它完全跳过了循环在Postgresql中不工作的循环的反转,postgresql,for-loop,reverse,pgadmin,Postgresql,For Loop,Reverse,Pgadmin,当我试图在PostgreSQL中使用Reverse for循环时,编译器似乎无法识别单词“Reverse”。 它完全跳过了循环 DO $$ BEGIN RAISE NOTICE 'LOOP STARTING......' ; FOR I IN REVERSE 1..10 LOOP RAISE NOTICE 'INSIDE LOOP......' ; RAISE NOTICE 'NUMBER IS %', I; END LOOP; END $$ ; 输出 ----------------
DO $$
BEGIN
RAISE NOTICE 'LOOP STARTING......' ;
FOR I IN REVERSE 1..10 LOOP
RAISE NOTICE 'INSIDE LOOP......' ;
RAISE NOTICE 'NUMBER IS %', I;
END LOOP;
END $$ ;
输出-------------------
注意:循环开始……
但是当我省略单词reverse时,编译器工作正常。 你知道为什么会这样吗 我使用的是PgAdmin 1.20.0版如果您选择,您也必须使用
1
来查看10
。因此,您必须替换:
FOR I IN REVERSE 1..10 LOOP
借
谢谢你们的帮助 我还面临一个问题 根据你的建议,我已经整理好了我关于反循环的概念 我正在尝试使用PgAdmin中的reverse for循环来反转数字,比如说“1234”
DO $$
DECLARE
L_NO VARCHAR(5) := '1234';
L_LEN NUMERIC(5);
L_REV_NO VARCHAR(5);
BEGIN
L_LEN := CHAR_LENGTH(L_NO) ;
RAISE NOTICE 'STRING LENGTH IS %' , L_LEN ;
FOR CNTR IN REVERSE L_LEN..1 LOOP
L_REV_NO = L_REV_NO||SUBSTRING(L_NO,CNTR,1);
END LOOP;
RAISE NOTICE 'NUMBER IS %' ,L_NO ;
RAISE NOTICE 'REVERSE NUMBER IS %' ,L_REV_NO ;
END $$ ;
输出
注意:字符串长度为4
注意:号码是1234
注意:反向编号为
为什么反向编号显示为
。
即使我检查了子字符串func Synatx是否正确?如果选择“反转”,则必须使用
1
重新设置10
,实际上,它确实运行循环,但它看到开始条件1已经低于结束条件10,因此它停止。这就像在10..1中为I运行。“编译器”与此无关。而且,pgadmin
与此无关。它只是一个连接Postgres
数据库的工具如果你面临另一个问题,你应该在上面单独发布一个问题,而不是对你的实际问题的回答,只是让你知道,如果你在Postgres中使用连接运算符|
,并且你的任何值都是NULL
,然后结果将是NULL
。将其初始化为空字符串,或改用CONCAT
。
DO $$
DECLARE
L_NO VARCHAR(5) := '1234';
L_LEN NUMERIC(5);
L_REV_NO VARCHAR(5);
BEGIN
L_LEN := CHAR_LENGTH(L_NO) ;
RAISE NOTICE 'STRING LENGTH IS %' , L_LEN ;
FOR CNTR IN REVERSE L_LEN..1 LOOP
L_REV_NO = L_REV_NO||SUBSTRING(L_NO,CNTR,1);
END LOOP;
RAISE NOTICE 'NUMBER IS %' ,L_NO ;
RAISE NOTICE 'REVERSE NUMBER IS %' ,L_REV_NO ;
END $$ ;
NOTICE: STRING LENGTH IS 4
NOTICE: NUMBER IS 1234
NOTICE: REVERSE NUMBER IS <NULL>