解决方案 »

  1.   


    没什么冗余的代码啊,逻辑很清晰啊,执行很慢?第二段UPDATE 的这里 字段 replytime
    如果可以写成这样就好了。字段 asktime 和 replytime 这里  /* Formatted on 2014/9/12 16:33:25 (QP5 v5.227.12220.39754) */
    CREATE OR REPLACE PROCEDURE DEMO.PR_HELP_CONTENT (
       vID          IN     TB_HELP.ID%TYPE,
       vTITLE       IN     TB_HELP.TITLE%TYPE,
       vKEYWORD     IN     TB_HELP.KEYWORD%TYPE,
       vHELPID      IN     TB_HELP.HELPID%TYPE,
       vCONTENT     IN     TB_HELP.CONTENT%TYPE,
       vADDUSERID   IN     TB_HELP.ADDUSERID%TYPE,
       vHOT         IN     TB_HELP.HOT%TYPE,
       vGameId      IN     TB_HELP.GAMEID%TYPE,
       vSortId      IN     TB_HELP.SORTID%TYPE,
       oResInt         OUT INT,
       oResStr         OUT VARCHAR2)
    IS
       /******************************************************************************
          NAME:       PR_HELP_CONTENT
          PURPOSE:      REVISIONS:
          Ver        Date        Author           Description
          ---------  ----------  ---------------  ------------------------------------
          1.0        2014/7/28   myTEST       1. Created this procedure.      NOTES:      Automatically available Auto Replace Keywords:
             Object Name:     PR_HELP_CONTENT
             Sysdate:         2014/7/28
             Date and Time:   2014/7/28, 18:29:39, and 2014/7/28 18:29:39
             Username:        myTEST (set in TOAD Options, Procedure Editor)
             Table Name:       (set in the "New PL/SQL Object" dialog)   ******************************************************************************/
       i              INT;
       newId          INT;
       newReplyTime   DATE;
    BEGIN
       SELECT COUNT (1)
         INTO i
         FROM TB_HELP
        WHERE ID = vID;   IF i = 0 THEN
          SELECT NVL (MAX (ID), 0) + 1 INTO newId FROM TB_HELP;      newReplyTime := ifnull (vContent, '', SYSDATE);
          INSERT INTO TB_HELP (ID,
                               HELPID,
                               KEYWORD,
                               TITLE,
                               CONTENT,
                               ADDUSERID,
                               HOT,
                               GAMEID,
                               SortId,
                               AskTime,
                               ReplyTime)
               VALUES (newId,
                       vHELPID,
                       vKEYWORD,
                       vTITLE,
                       vCONTENT,
                       vADDUSERID,
                       vHOT,
                       vGameId,
                       vSortId,
                       SYSDATE,
                       newReplyTime);      COMMIT;      oResInt := 1;
          oResStr := '插入成功';
       ELSE
          SELECT ifnull (content, ifnull (vContent, '', SYSDATE), replytime)
            INTO newReplyTime
            FROM tb_help
           WHERE id = vId;      UPDATE TB_HELP
             SET HELPID = vHELPID,
                 KEYWORD = vKEYWORD,
                 TITLE = vTITLE,
                 CONTENT = vCONTENT,
                 ADDUSERID = vADDUSERID,
                 HOT = vHOT,
                 GameId = vGameId,
                 SortId = vSortId,
                 REPLYTIME = newReplyTime
           WHERE ID = vID;      COMMIT;      oResInt := 1;
          oResStr := '更新成功,ID:' || vID;
       END IF;
    EXCEPTION
       WHEN OTHERS THEN
          oResInt := 0;
          oResStr := '系统错误';
    END PR_HELP_CONTENT;
    /
      

  2.   


    你的问题是什么?还是你已经解决了?oracle 不支持ifnull …… 
      

  3.   


    你的问题是什么?还是你已经解决了?oracle 不支持ifnull …… 
    oracle可以用NVL或者NVL2来实现NVL2(expr1,expr2,expr3)Oracle在NVL()的功能上扩展,提供了NVL2函数。功能:oracle中常用函数,如果参数表达式expr1值为NULL,则NVL2()函数返回参数表达式expr3的值;如果参数表达式expr1值不为NULL,则NVL2()函数返回参数表达式expr2的值。即:NVL2(表达式,不为空设值,为空设值)。
      

  4.   


    你的问题是什么?还是你已经解决了?oracle 不支持ifnull …… 
    oracle可以用NVL或者NVL2来实现NVL2(expr1,expr2,expr3)Oracle在NVL()的功能上扩展,提供了NVL2函数。功能:oracle中常用函数,如果参数表达式expr1值为NULL,则NVL2()函数返回参数表达式expr3的值;如果参数表达式expr1值不为NULL,则NVL2()函数返回参数表达式expr2的值。即:NVL2(表达式,不为空设值,为空设值)。原来如此