隨筆 - 9  文章 - 5  trackbacks - 0
          <2009年1月>
          28293031123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          在ORACLE存儲(chǔ)過程中創(chuàng)建臨時(shí)表

          存儲(chǔ)過程里不能直接使用DDL語句,所以只能使用動(dòng)態(tài)SQL語句來執(zhí)行

          --ON COMMIT DELETE ROWS 說明臨時(shí)表是事務(wù)指定,每次提交后ORACLE將截?cái)啾恚▌h除全部行)
          --ON COMMIT PRESERVE ROWS 說明臨時(shí)表是會(huì)話指定,當(dāng)中斷會(huì)話時(shí)ORACLE將截?cái)啾怼?/p>


          CREATE OR REPLACE PROCEDURE temptest
          (p_searchDate IN DATE)
          IS
          v_count INT;
          str varchar2(300);
          BEGIN
          v_count := 0;
          str:='drop table SETT_DAILYTEST';
          execute immediate str;
          str:='CREATE GLOBAL TEMPORARY TABLE SETT_DAILYTEST (
          NACCOUNTID NUMBER not null,
          NSUBACCOUNTID NUMBER not null)
          ON COMMIT PRESERVE ROWS';
          execute immediate str; ----使用動(dòng)態(tài)SQL語句來執(zhí)行
          str:='insert into SETT_DAILYTEST (select naccountid,nsubaccountid from sett_dailyaccountbalance)';
          execute immediate str;
          END temptest;

          上面建立一個(gè)臨時(shí)表的存儲(chǔ)過程

          下面是執(zhí)行一些操作,向臨時(shí)表寫數(shù)據(jù)。

          CREATE OR REPLACE PROCEDURE PR_DAILYCHECK
          (
          p_Date IN DATE,
          p_Office IN INTEGER,
          p_Currency IN INTEGER,
          P_Check IN INTEGER,
          p_countNum OUT INTEGER)
          IS
          v_count INT;
          BEGIN
          v_count := 0;
          IF p_Date IS NULL THEN
          dbms_output.put_line('日期不能為空');
          ELSE
          IF P_Check = 1 THEN
          insert into SETT_DAILYTEST (select naccountid,nsubaccountid from sett_dailyaccountbalance
          where dtdate = p_Date);

          select
          count(sd.naccountid) into v_count
          from sett_subaccount ss,sett_account sa,sett_dailytest sd
          where sd.naccountid = sa.id and sd.nsubaccountid = ss.id and sa.id = ss.naccountid
          AND sa.nofficeid = p_Office AND sa.ncurrencyid = p_Currency
          and rownum < 2;
          COMMIT;
          p_countNum := v_count;
          dbms_output.put_line(p_countNum);
          END IF;
          IF P_Check = 2 THEN
          insert into SETT_DAILYTEST (select naccountid,nsubaccountid from sett_dailyaccountbalance
          where dtdate = p_Date);

          select
          count(sd.naccountid) into v_count
          from sett_cfsubaccount ss,sett_account sa,sett_dailytest sd
          where sd.naccountid = sa.id and sd.nsubaccountid = ss.id and sa.id = ss.naccountid
          AND sa.nofficeid = p_Office AND sa.ncurrencyid = p_Currency
          and rownum < 2;
          COMMIT;
          p_countNum := v_count;
          dbms_output.put_line(p_countNum);
          END IF;
          END IF;
          END PR_DAILYCHECK;

          posted on 2009-01-13 21:23 依然Fantasy 閱讀(17363) 評(píng)論(0)  編輯  收藏 所屬分類: Oracle

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 余干县| 汉川市| 上高县| 孟州市| 郓城县| 榆中县| 舞阳县| 古田县| 东乡族自治县| 涞水县| 阜城县| 龙川县| 梓潼县| 新宁县| 茂名市| 郸城县| 尼玛县| 平昌县| 濮阳县| 淅川县| 巨鹿县| 米林县| 栖霞市| 安国市| 云南省| 固镇县| 读书| 宣城市| 祁连县| 吉林市| 习水县| 喀喇沁旗| 彩票| 永顺县| 宽甸| 视频| 开原市| 通辽市| 曲周县| 读书| 辽阳市|