鍍金池/ 問(wèn)答/數(shù)據(jù)庫(kù)/ 如何oracle的存儲(chǔ)過(guò)程,為什么有兩段相似的代碼,而不是寫(xiě)一段?

如何oracle的存儲(chǔ)過(guò)程,為什么有兩段相似的代碼,而不是寫(xiě)一段?

BEGIN
   AN_O_RET_CODE := 0;
   AC_O_RET_MSG  := '操作成功';
   select COUNT (*) INTO COUNTALL from (
       select kf_id,o.name kf_name,sessionid,decode(score,'1','點(diǎn)贊','2','不點(diǎn)贊','0','放棄',score) as satis,to_char(create_time,'yyyy-mm-dd HH:MM:ss')
       from tb_zxkf_evaluate e
       left join tb_sso_oper o on e.kf_id = o.logincode
       where to_char(create_time,'yyyymmdd') between BEGINDATE and ENDDATE
   );
  limit2:=limit1;
  if limit1<0 then
    limit2:=COUNTALL;
  end if;
  --/* 結(jié)果集返回 */
  OPEN CUR_RET FOR
  SELECT * FROM (SELECT  ROWNUM AS ROW_NUM,WM.* FROM(
         select kf_id,o.name kf_name,sessionid,decode(score,'1','點(diǎn)贊','2','不點(diǎn)贊','0','放棄',score) as satis,to_char(create_time,'yyyy-mm-dd HH:MM:ss') as create_time
         from tb_zxkf_evaluate e
         left join tb_sso_oper o on e.kf_id = o.logincode
         where to_char(create_time,'yyyymmdd') between BEGINDATE and ENDDATE
  )WM order by create_time desc) WHERE ROW_NUM BETWEEN  start1  AND  limit2;
  EXCEPTION
    WHEN OTHERS THEN
        AN_O_RET_CODE := -1;
        AC_O_RET_MSG  := '錯(cuò)誤代碼:' || SQLCODE || CHR(13) || '錯(cuò)誤信息:' || SQLERRM;
END ZXKF_SatisDet;
回答
編輯回答
青裙

雖然兩個(gè)相似,但兩個(gè) sql 語(yǔ)句明顯不是同個(gè)內(nèi)容來(lái)的,一是獲取數(shù)據(jù)總數(shù)量,二是查詢數(shù)據(jù)。至于為什么不寫(xiě)在一起,明顯前面有個(gè)邏輯處理,需要根據(jù)具體情況再進(jìn)行下一步,雖然也可以寫(xiě)成一句,但是明顯不如這個(gè)清晰。

2017年11月12日 12:21