1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > oracle语句优化pl sql语句 求oracle插入初始数据pl/sql语句优化 该怎么处理(2)

oracle语句优化pl sql语句 求oracle插入初始数据pl/sql语句优化 该怎么处理(2)

时间:2022-05-20 08:29:35

相关推荐

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在插入数据时使用新块

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。