存储过程如下 CREATE OR REPLACE PROCEDURE VSMATCHCREATE(
    p_MATCHID         IN NUMBER ,
    p_MSGNR           IN NUMBER ,
    p_MATCHINIT       IN NUMBER ,
    p_MATCHACTIVE     IN NUMBER ,
    p_MATCHSTATUS     IN NUMBER ,
    p_BETSTATUS       IN NUMBER ,
    p_MATCHSEASONNO   IN NUMBER ,
    p_MATCHSEASONNAME IN VARCHAR2 ,
    p_ROUNDNUMBER     IN NUMBER ,
    p_TOURNAMENTNAME  IN VARCHAR2 ,
    p_SPORTID         IN NUMBER ,
    p_CATEGORYID      IN NUMBER ,
    p_HOMEID          IN NUMBER ,
    p_HOMELANGID      IN NUMBER ,
    p_AWAYID          IN NUMBER ,
    p_AWAYLANGID      IN NUMBER ,
    p_MATCHDATE       IN DATE ,
    p_MATCHSCORE      IN VARCHAR2 ,
    p_ResultOutPut    IN OUT NUMBER )
AS
  p_Now         TIMESTAMP;
  p_WorkingDate NUMBER;
  p_Count       NUMBER;
BEGIN
  SELECT COUNT(*)
  INTO p_Count
  FROM DUAL
  WHERE EXISTS
    (SELECT "MatchID" FROM MATCHES WHERE "MatchID"=p_MATCHID
    );
  IF p_Count=0 THEN
     SELECT SYSTIMESTAMP INTO p_Now FROM DUAL;
    select FN_WORKINGDATE(p_Now) into p_WorkingDate from DUAL;
    INSERT
    INTO MATCHES
      (
        "MatchID" ,
        "MSGNR" ,
        "MatchInit" ,
        "MatchActive" ,
        "MatchStatus" ,
        "BetStatus" ,
        "MatchSeasonNo" ,
        "MatchSeasonName" ,
        "RoundNumber" ,
        "TournamentName" ,
        "SportID" ,
        "CategoryID" ,
        "HomeID" ,
        "HomeLangID" ,
        "AwayID" ,
        "AwayLangID" ,
        "MatchDate" ,
        "MatchScore" ,
        "WorkingDate" ,
        "BetClear" ,
        "BetClearTS" ,
        "CreateTS" ,
        "UpdateTS"
      )
      VALUES
      (
        p_MATCHID ,
        p_MSGNR ,
        p_MatchInit ,
        p_MatchActive ,
        p_MatchStatus ,
        p_BetStatus ,
        p_MatchSeasonNo ,
        p_MatchSeasonName ,
        p_RoundNumber ,
        p_TournamentName ,
        p_SportID ,
        p_CategoryID ,
        p_HomeID ,
        p_HomeLangID ,
        p_AwayID ,
        p_AwayLangID ,
        p_MatchDate ,
        p_MatchScore ,
        p_WorkingDate ,
        0 ,
        p_Now ,
        p_Now ,
        p_Now
      );
    p_ResultOutPut:=0;
  ELSE
    p_ResultOutPut:=0;
  END IF;
END VSMATCHCREATE;
调用的过程如下:SET SERVEROUTPUT ON
declare 
ret NUMBER;
nn TIMESTAMP;
BEGIN
SELECT SYSTIMESTAMP INTO nn FROM dual;
VSMATCHCREATE
(
  3,         --IN NUMBER ,
    0,           --IN NUMBER ,
    0,       --IN NUMBER ,
    0,     --IN NUMBER ,
    0,     --IN NUMBER ,
    0,       --IN NUMBER ,
    1,   --IN NUMBER ,
    '123', --IN VARCHAR2 ,
    0,     --IN NUMBER ,
    '123',  --IN VARCHAR2 ,
    1,         --IN NUMBER ,
    1,      --IN NUMBER ,
    1,          --IN NUMBER ,
    1,      --IN NUMBER ,
    1,          --IN NUMBER ,
    1,      --IN NUMBER ,
    nn,       --IN DATE ,
    '-',      --IN VARCHAR2 ,
    ret     --IN OUT NUMBER
);
  DBMS_OUTPUT.PUT_LINE(ret);
end;
我表示很疑惑, 求解.

解决方案 »

  1.   

    在行: 2 上开始执行命令时出错 -
    declare 
    ret NUMBER;
    nn TIMESTAMP;
    BEGIN
    SELECT SYSTIMESTAMP INTO nn FROM dual;
    VSMATCHCREATE
    (
      3,         --IN NUMBER ,
        0,           --IN NUMBER ,
        0,       --IN NUMBER ,
        0,     --IN NUMBER ,
        0,     --IN NUMBER ,
        0,       --IN NUMBER ,
        1,   --IN NUMBER ,
        '123', --IN VARCHAR2 ,
        0,     --IN NUMBER ,
        '123',  --IN VARCHAR2 ,
        1,         --IN NUMBER ,
        1,      --IN NUMBER ,
        1,          --IN NUMBER ,
        1,      --IN NUMBER ,
        1,          --IN NUMBER ,
        1,      --IN NUMBER ,
        nn,       --IN DATE ,
        '-',      --IN VARCHAR2 ,
        ret     --IN OUT NUMBER
    );
      DBMS_OUTPUT.PUT_LINE(ret);
    end;
    错误报告 -
    ORA-01722: 无效数字
    ORA-06512: 在 "TEST01.VSMATCHCREATE", line 26
    ORA-06512: 在 line 6
    01722. 00000 -  "invalid number"
    *Cause:    The specified number was invalid.
    *Action:   Specify a valid number.
    我表示淡淡的忧伤啊
      

  2.   

    唉 解决了  if else 也写反了 郁闷 
      

  3.   

    这个过程的目的是若不存在指定的MatchID值,则插入该数据,那应该直接用merge语句应该可以很简洁。不必要存储过程。