在postgresql中未找到替代项的声明继续处理程序

在postgresql中未找到替代项的声明继续处理程序,postgresql,Postgresql,如何将上面的mysql代码转换成postgresql。 使用PostgreSQL过程语言(plpgsql),您可以在获取后直接测试找到的,而无需特定的处理程序将此状态转换为自定义变量(这显然是MySQL的操作方式) 因此,具体的变化是: DECLARE c_cursor CURSOR FOR SELECT column_name FROM tablename WHERE column_name1 = 0 AND column_name2 = value ; BEGIN

如何将上面的mysql代码转换成postgresql。
使用PostgreSQL过程语言(plpgsql),您可以在
获取后直接测试
找到的
,而无需特定的处理程序将此状态转换为自定义变量(这显然是MySQL的操作方式)

因此,具体的变化是:


DECLARE c_cursor CURSOR FOR  
       SELECT column_name FROM tablename WHERE column_name1 = 0 AND column_name2 = value ;
BEGIN
        DECLARE CONTINUE HANDLER FOR NOT FOUND v_variable1 = 1;
        v_variable2 = 1;
        OPEN c_cursor;
        get_email: 
        LOOP
          FETCH c_cursor INTO v_variable3;
          IF v_variable1 = 1 THEN 
            LEAVE get_email;
          END IF; 
          UPDATE table_name SET column_name1 = v_variable2 WHERE column_name2 = v_variable3;
          v_variable2 := v_variable2 + 1;
        END LOOP get_email;
 CLOSE c_cursor;
:

确定命令效果的第二种方法是检查 名为FOUND的特殊变量,其类型为boolean。建立 在每个PL/pgSQL函数调用中都以false开头。它是由每个人设定的 在以下类型的声明中:

如果指定了行,SELECT INTO语句将设置为true,如果未返回行,则设置为false

如果执行语句生成(并丢弃)一行或多行,则将find设置为true;如果不生成行,则将设置为false

UPDATE、INSERT和DELETE语句集在至少一行受影响时为true,在没有行受影响时为false

如果FETCH语句返回一行,则将FOUND设置为true;如果未返回任何行,则将设置为false。

如果MOVE语句成功重新定位光标,则将FOUND设置为true,否则将设置为false。
[……]


对于那些不了解MySQL的人:这个“处理程序”是做什么的?我的猜测是:你想要一个,我不认为你需要一个游标来开始是的,它是我sql中的异常处理程序,但是如何将上面的代码迁移到PostgreSql中你读过我提供的链接了吗?它解释了如何捕获异常。但正如我所说:我非常确定您根本不需要循环或PL/pgSQL。这可以通过一个简单的UPDATE语句来完成(尽管您的模糊表和列名使您很难理解您在那里做的事情),我认为这是您真正想要的
 FETCH c_cursor INTO v_variable3;
 IF NOT FOUND  THEN
   ...