oracle语句优化pl sql语句,求oracle插入初始数据pl/sql语句优化,该怎么处理(2)
SQL codeCREATE OR REPLACE PROCEDURE thi_pro AS
randomnum NUMBER;
randomnum2 NUMBER;
randomnum3 NUMBER;
randomnum4 NUMBER;
randomnum5 NUMBER;
randomnum6 NUMBER;
BEGIN
--插入數據
FOR i IN REVERSE 1 .. 7 LOOP
randomnum := round(dbms_random.value(0, 100)); --基本通話費
randomnum2 := round(dbms_random.value(0, 100)); --長途費
randomnum3 := round(dbms_random.value(0, 100)); --短信費
randomnum4 := round(dbms_random.value(0, 100)); --漫游費
randomnum5 := round(dbms_random.value(0, 100)); --增值業務費
randomnum6 := round(dbms_random.value(0, 100)); --其他費用
INSERT /*+append*/
INTO VIP_RECKONING
SELECT seq_VIP_RECKONING.nextval,
v_phone_num,
trunc(add_months(SYSDATE, -i), 'MM'),
10,
randomnum,
randomnum2,
randomnum3,
randomnum4,
randomnum5,
randomnum6,
650,
0
FROM VIP_CUS_BASEINFO NOLOGGING;
END LOOP;
--建立索引
EXECUTE IMMEDIATE 'create index idx_PHONE_NUM on VIP_RECKONING(VIP_RECKONING)';
--更新
FOR i IN REVERSE 1 .. 7 LOOP
IF i = 7 THEN
UPDATE VIP_RECKONING v
SET v.n_live = 800 - 10 - N_BASERATE - N_LONGRATE - N_NOTERATE -
N_RAMBLERATE - N_INCREMENTRATE - N_OTHERRATE;
ELSE
UPDATE VIP_RECKONING v
SET v.n_live =
(SELECT 800 - 10 - v.N_BASERATE - v.N_LONGRATE - v.N_NOTERATE -
v.N_RAMBLERATE - v.N_INCREMENTRATE - v.N_OTHERRATE +
v1.n_live
FROM VIP_RECKONING v1
WHERE v1.phone_num = v.phone_num
AND v1.d_accountdate =
trunc(add_months(SYSDATE, -i - 1), 'MM'))
WHERE v.d_accountdate = trunc(add_months(SYSDATE, -i), 'MM');
END IF;
END LOOP;
COMMIT;
END;
------解決方案--------------------
這句就是:INSERT /*+append*/
是一種優化指示,寫法類似注釋
告訴ORACLE在插入數據時使用新塊
總結
以上是生活随笔為你收集整理的oracle语句优化pl sql语句,求oracle插入初始数据pl/sql语句优化,该怎么处理(2)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: aix oracle 内存限制,请教 A
- 下一篇: oracle join 嵌套,誰能真正理