【问题标题】:Error in postgres Cursorpostgres 游标出错
【发布时间】:2013-09-23 05:43:23
【问题描述】:

请帮我解决这个错误。

CREATE OR REPLACE FUNCTION MYCURSOR () RETURNS VARCHAR AS $$
declare

cur1 refcursor;

col_name varchar (10) ;
hstoredata hstore;
BEGIN

col_name = 'id';
OPEN cur1 FOR execute('select * from datas.tb where id =2');
loop
 fetch cur1 into hstoredata;
 if not found then
 exit ;
 end if;
    Raise Notice '%',hstoredata -> col_name ;

 end loop;
 close cur1;
 return 'r';
 END;
 $$ LANGUAGE plpgsql

当我尝试执行此查询时,它向我显示错误

错误:字符串意外结束 上下文:PL/pgSQL 函数“mycursor”在 FETCH 的第 15 行 ********** 错误 ********** 错误:字符串意外结束 SQL状态:XX000 上下文: PL/pgSQL 函数“mycursor”在 FETCH 的第 15 行

【问题讨论】:

    标签: postgresql plpgsql


    【解决方案1】:

    我认为这是因为光标返回记录类型,而不是 hstore。你可以改变你的功能:

    CREATE OR REPLACE FUNCTION MYCURSOR()
    RETURNS VARCHAR AS 
    $$
    declare
        cur1 refcursor;
        col_name varchar(10);
        rec record;
    begin
        col_name := 'id';
        open cur1 for execute('select 1 as id');
        loop
           if not found then
               exit ;
           end if;
           fetch cur1 into rec;
           Raise Notice '%', rec.<column with hstore>-> col_name;
        end loop;
        close cur1;
        return 'r';
    end;
    $$ LANGUAGE plpgsql;
    

    【讨论】:

    • CREATE OR REPLACE FUNCTION MYCURSOR () RETURNS VARCHAR AS $$ declare cur1 refcursor; var1 varchar (10) ; hstoredata hstore; r 记录; alert_mesg VARCHAR(2000) := '';开始 var1 = 'id'; OPEN cur1 FOR execute('select * from datas.tb where id =2');循环获取 cur1 到 r 中;如果没有找到则退出;万一;选择 hstore(r) 进入 hstoredata;提高通知 '%',hstoredata->'id';结束循环;关闭cur1;返回警报消息;结尾; $$ 语言 plpgsql
    【解决方案2】:
     CREATE OR REPLACE FUNCTION MYCURSOR () RETURNS VARCHAR AS $$
      declare
    
        cur1 refcursor;
        var1 varchar (10) ;
        hstoredata hstore;
        r record;
        alert_mesg VARCHAR(2000) := '';
           BEGIN
    
             var1 = 'id';
             OPEN cur1 FOR execute('select * from datas.tb where id =2');
             loop
                fetch cur1 into r;
                if not found then
                     exit ;
                end if;
            select hstore(r) into hstoredata;
                Raise Notice '%',hstoredata->'id';
    
             end loop;
             close cur1;
             return alert_mesg;
        END;
       $$ LANGUAGE plpgsql
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-02
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多