CREATE OR REPLACE FUNCTION UPDATE_GSP_JXQ_WJ(
V_SPBH GSP_JXQ_WJ.SPBH%TYPE,
V_PH GSP_JXQ_WJ.PH%TYPE,
V_CLYJ GSP_JXQ_WJ.CLYJ%TYPE DEFAULT'继续销售',--处理意见
V_RY_YHY GSP_JXQ_WJ.RY_YHY%TYPE,--养护员
V_BZ GSP_JXQ_WJ.BZ%TYPE DEFAULT'--',
V_ZLZK GSP_JXQ_WJ.ZLZK%TYPE DEFAULT'合格'--质量状况
)
RETURN BOOLEAN IS
V_COUNT NUMBER;
V_IS_UPDATE BOOLEAN;
BEGIN
  SELECT COUNT(*)INTO V_COUNT FROM GSP_JXQ_WJ WHERE SPBH = V_SPBH;
  IF V_COUNT<1 THEN
    V_IS_UPDATE :=FALSE;
    INSERT INTO GSP_JXQ_WJ VALUES(sysdate,V_SPBH,V_CLYJ,V_RY_YHY,V_BZ,V_ZLZK,V_PH);
  ELSE
    V_IS_UPDATE :=TRUE;
    UPDATE GSP_JXQ_WJ
       SET RQ     = SYSDATE,
           SPBH   = V_SPBH,
           CLYJ   = V_CLYJ,
           RY_YHY = V_RY_YHY,
           BZ     = V_BZ,
           ZLZK   = V_ZLZK,
           PH     = V_PH
     WHERE GSP_JXQ_WJ.SPBH = V_SPBH;
  END IF;
  RETURN V_IS_UPDATE;
END UPDATE_GSP_JXQ_WJ;pb调用 上边的oracle函数,一直无法执行,求解,本人在线等,谢谢!(刚接触pb+oracle)
DECLARE my_proc PROCEDURE For 
UPDATE_GSP_JXQ_WJ(V_SPBH,V_PH,V_CLYJ,V_RY_YHY,V_BZ,V_ZLZK);
EXECUTE my_proc;

解决方案 »

  1.   

    你写的那个东西叫function  
    你调的那个东西叫procedure调函数就把它当系统函数一样调就好,写在sql语句里调对数据库的操作,写在过程里,不要写函数,要是我拿这个函数查询一个一亿行的表,你就做一亿次操作,你的业务逻辑是这样的吗?
      

  2.   

    1: 添加异常捕捉的SQL,
    2: 单步调试看看
      

  3.   

    用个简单比喻调用存储过程是执行一段代码,调用函数只有一个返回值你的写的那个DECLARE my_proc PROCEDURE For  
       UPDATE_GSP_JXQ_WJ(V_SPBH,V_PH,V_CLYJ,V_RY_YHY,V_BZ,V_ZLZK);
    EXECUTE my_proc;UPDATE_GSP_JXQ_WJ 应该是个存储过程 而不应该是个函数
    就如同
    begin
       a := 5 ;
    end;
    这是个合理的语法
    begin
       5;
    end;
    这个就肯定不对一样