我在我的机器上在c#中用call调用存储过程没问题.
一样的程序到别人的机器上却出现错误,但是用select * from 能调用,用call才出问题.
请问是什么原因呢?
谢谢了~很急

解决方案 »

  1.   

    好象是我的函数里的return next 问题,但是在我的机器上为什么就没问题呢?
      

  2.   

    CREATE OR REPLACE FUNCTION "PC_GetORGINFO"()
      RETURNS SETOF "ORG_INFO" AS
    $BODY$ 
    DECLARE 
        r "ORG_INFO"%rowtype;
    BEGIN 
       for r in select "ID","ORGNAME" from "ORG_INFO" 
    loop 
    return next r; 
    end loop;  return; 
    END; 
    $BODY$
      LANGUAGE 'plpgsql' VOLATILE;
    ALTER FUNCTION "PC_GetORGINFO"() OWNER TO postgres;
    我的存储过程ORG_INFO是表名
      

  3.   

    错误信息我看了~
    ERROR [0A000] Error while executing the query;
    ERROR:  set-valued function called in context that cannot accept a set
    背景:  PL/pgSQL function "PC_GetMONITOR_POINT_INFO" line 7 at return next
    我在他的机器上随便用一个没有返回的存储过程就正确~但是用返回return next的就错误,看了原因,说是没有返回类型?
    但是我的返回类型就是那个表~
    求原因
      

  4.   

    postgresql是不支持call语句,所有的存储过程都是用select语句。
    所以不是服务端的问题。最大的可能是接口问题。
    你的那台能用call调用成功,说明你的接口具有将call转换为select的这个功能。而另外那台的接口可能和你的不一样,(如版本等),缺乏这种转换功能,所以出错了。解决方法:全部改为select语句,不要让接口做太多的工作。这是最好的解决方法。
      

  5.   

    好的,谢谢了,只能全部用select了