当我尝试在 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 $$ ;
输出
-------------------
注意:循环开始......
但是当我省略“reverse”这个词时,编译器工作正常。 知道为什么会发生这种情况吗?
我使用的是 PgAdmin 版本 1.20.0
医生说如下:
如果下限大于上限(或小于,在 REVERSE 情况下),则根本不执行循环体。没有出现错误。
所以,下面这两个有效:
DO $$
BEGIN
FOR num IN 1..3 LOOP
RAISE INFO '%', num;
END LOOP;
END
$$;
DO $$
BEGIN
FOR num IN REVERSE 3..1 LOOP
RAISE INFO '%', num;
END LOOP;
END
$$;
但是,下面这两个不起作用:
DO $$
BEGIN
FOR num IN 3..1 LOOP
RAISE INFO '%', num;
END LOOP;
END
$$;
DO $$
BEGIN
FOR num IN REVERSE 1..3 LOOP
RAISE INFO '%', num;
END LOOP;
END
$$;
谢谢大家的帮助。
我还面临一个问题。
根据您的建议,我已经整理出了我的反向 for 循环概念..
我正在尝试在 PgAdmin 中使用反向循环来反转数字“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 $$ ;
NOTICE: STRING LENGTH IS 4
NOTICE: NUMBER IS 1234
NOTICE: REVERSE NUMBER IS <NULL>
为什么相反的数字是
<Null>
。
即使我检查了 SUBSTRING func Synatx 它是否正确?