Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Postgresql中不工作的循环的反转_Postgresql_For Loop_Reverse_Pgadmin - Fatal编程技术网

在Postgresql中不工作的循环的反转

在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 $$ ; 输出 ----------------

当我试图在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版

如果您选择,您也必须使用
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>