10g平臺上有大量的存儲過程。 (差不多500個SP) 每個SP可能有循環,提取等。升級10 g到11g清單
我想問你是否有一個很酷的方法來控制當前在10g上運行的所有SP,並保證它可以工作在11克。
我有一個10克的開發服務器1,另一個開發服務器是11克。 我可以使用他們兩個來證明上述建議。
舉例來說,我知道如果你使用循環,在10g的時候,在循環期間更新語句不會影響循環數據,但是11g。 我可能會考慮更多的案例。請告訴我,如果你有任何明智的想法,否則我會手動一個一個地檢查它們,這是很多時間和人力控制可能有時弱。
重要提示:據說如果從一個或多個表中選擇一些數據,並且如果在循環中使用它,那麼在de循環期間,如果在循環情況下更新和提交,它會影響選定的數據在光標中。(@ 11g)但是這並沒有發生@ 10g版本。如果你聽到這樣的話,請糾正我。
示例;
CREATE TABLE vty_musteri(
musterino NUMBER NOT NULL,
subeadi VARCHAR2(61),
kayitzamani VARCHAR2(20)
);
INSERT INTO vty_musteri (musterino, subeadi, kayitzamani)
VALUES (12345, 'AMSTERDAM', '05/30/2012 15:11:13');
COMMIT;
CREATE UNIQUE INDEX vty_musteri_idx ON vty_musteri (musterino);
SELECT * FROM vty_musteri;
CREATE OR REPLACE PROCEDURE krd_upd_silseomusteri_sp(RC1 in out SYS_REFCURSOR) AS
v_musterino NUMBER := 12345;
BEGIN
OPEN RC1 FOR
SELECT m.musterino, m.subeadi, m.kayitzamani
FROM vty_musteri m
WHERE m.musterino = v_musterino;
update vty_musteri
set subeadi = 'PORTO',
kayitzamani = (SELECT TO_CHAR(SYSDATE, 'MM/DD/YYYY HH24:MI:SS')
FROM dual)
where musterino = v_musterino;
COMMIT;
畢竟在PLSQL運行這個測試:
DECLARE
--test
vRecTip SYS_REFCURSOR;
TYPE vRecTipK IS RECORD(
musterino NUMBER,
subeadi VARCHAR2(61),
kayitzamani VARCHAR2(20)
);
v_SeoTip vRecTipK;
BEGIN
krd_upd_silseomusteri_sp(rc1 => vRecTip);
IF vRecTip%ISOPEN THEN
LOOP
FETCH vRecTip
INTO v_SeoTip;
EXIT WHEN vRecTip%NOTFOUND;
dbms_output.put_line('The Value : ' || v_SeoTip.musterino || ' - ' || v_SeoTip.subeadi || ' - ' || v_SeoTip.kayitzamani);
END LOOP;
END IF;
COMMIT;
END;
END;
如果您在10g中,你會看到阿姆斯特丹運行它,但11G,這是波爾圖。
修復它;我在sp中提示如下:
SELECT /*+ full(m)*/ m.musterino, m.subeadi, m.kayitzamani
難道不是很奇怪嗎?任何取代AMSTERDAM的選擇?
爲什麼關閉:(... – theklc
你真的應該爲你的應用程序有一個測試套件 – steve
如果你發佈了一個在10g和11g中表現不同的測試用例的例子,我們可能會做一些事情來幫助你。從你的解釋中我們不清楚你描述的是什麼問題 –