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

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

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

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

          --ON COMMIT DELETE ROWS 說(shuō)明臨時(shí)表是事務(wù)指定,每次提交后ORACLE將截?cái)啾恚▌h除全部行)
          --ON COMMIT PRESERVE ROWS 說(shuō)明臨時(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語(yǔ)句來(lái)執(zhí)行
          str:='insert into SETT_DAILYTEST (select naccountid,nsubaccountid from sett_dailyaccountbalance)';
          execute immediate str;
          END temptest;

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

          下面是執(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)航:
           
          主站蜘蛛池模板: 开封县| 乐业县| 怀宁县| 长春市| 嵊泗县| 平江县| 黄骅市| 新密市| 左贡县| 常熟市| 都江堰市| 南丹县| 舒兰市| 甘南县| 嘉祥县| 兴仁县| 德令哈市| 邯郸市| 尚义县| 温州市| 上虞市| 灵丘县| 顺义区| 疏勒县| 工布江达县| 江城| 蒲城县| 濮阳市| 北票市| 阿拉尔市| 永清县| 聂荣县| 阳信县| 大兴区| 万年县| 琼结县| 搜索| 广东省| 唐海县| 交口县| 沾化县|