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中表现不同的测试用例的例子,我们可能会做一些事情来帮助你。从你的解释中我们不清楚你描述的是什么问题 –