Oracle 将10G升级为11g清单
10g平台上有大量的存储过程。(近500个SP) 每个SP可能有循环、提取等功能 我想问一下,是否有一种很酷的方法来控制当前运行在10g上的所有SP,并保证它在11G上工作 我有一个开发服务器1,它是10g,另一个开发服务器是11g。 我可以用它们来证明上述建议 例如,我知道在10g上,如果使用循环,那么在循环期间update语句不会影响循环数据,而是影响11g。 我可能需要考虑更多的情况。如果你有什么高明的想法,请告诉我,否则我会一个接一个地手动检查,时间很长,有时人的控制可能很弱Oracle 将10G升级为11g清单,oracle,oracle11g,oracle10g,upgrade,Oracle,Oracle11g,Oracle10g,Upgrade,10g平台上有大量的存储过程。(近500个SP) 每个SP可能有循环、提取等功能 我想问一下,是否有一种很酷的方法来控制当前运行在10g上的所有SP,并保证它在11G上工作 我有一个开发服务器1,它是10g,另一个开发服务器是11g。 我可以用它们来证明上述建议 例如,我知道在10g上,如果使用循环,那么在循环期间update语句不会影响循环数据,而是影响11g。 我可能需要考虑更多的情况。如果你有什么高明的想法,请告诉我,否则我会一个接一个地手动检查,时间很长,有时人的控制可能很弱 重要提示:
重要提示:据说,如果您从一个或多个表中选择一些数据,并且在循环中使用这些数据,那么在反循环过程中,如果您在循环大小写之间更新并提交,则会影响游标中选定的数据。(@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
这不是很奇怪吗?任何获得阿姆斯特丹的替代建议?基本PLSQL结构的工作原理应该完全相同。以下列出了一些陷阱:
基本PLSQL结构的工作原理应该完全相同。以下列出了一些陷阱:
在迁移过程中,我们偶然发现了一件事,那就是那些本不应该在10.x上工作的查询(但无论如何都是这样的)在11.x上不再工作 如果查询中有歧义的列引用,则会发生这种情况 大概是这样的:
SELECT name,
f.some_col,
b.other_col
FROM foo f,
JOIN bar b ON f.id = b.fid
如果两个表中都存在列name
,则10.x将运行该语句-这是一个错误
这个bug(BugID:6760937)已经修复,并使语句(正确地)在11.x中失败。我们在迁移过程中偶然发现的一件事是,本不应该在10.x上工作的查询(但无论如何)在11.x上不再工作 如果查询中有歧义的列引用,则会发生这种情况 大概是这样的:
SELECT name,
f.some_col,
b.other_col
FROM foo f,
JOIN bar b ON f.id = b.fid
如果两个表中都存在列name
,则10.x将运行该语句-这是一个错误
这个bug(BugID:6760937)已经修复,并在11.x中使语句(正确地)失败
修复它;我在sp中添加了如下提示:
选择/+完整(m)/m.musterino、m.subeadi、m.Kayizamani
修复它;我在sp中添加了如下提示:
选择/+full(m)/m.musterino、m.subeadi、m.kayizamani最近我已经完成了到Oracle 11g的迁移。他几乎没有遇到什么前所未有的问题。我写了一篇关于这个的博客文章。看看。最近我已经完成了到Oracle 11g的迁移。他几乎没有遇到什么前所未有的问题。我写了一篇关于这个的博客文章。看看。你真的应该为你的应用程序准备一个测试套件。如果你发布了一个在10g和11g中表现不同的测试用例示例,我们可能会提供一些帮助。从你的解释中不清楚你在描述什么问题。我把它放在上面。请参阅添加的注释。您应该为您的应用程序准备一个测试套件。如果您发布了一个在10g和11g中表现不同的测试用例示例,我们可能会提供一些帮助。从你的解释中不清楚你在描述什么问题。我把它放在上面。请参阅添加的注释。据说,如果您从一个或多个表中选择一些数据,并且如果您在循环中使用这些数据,那么在反循环过程中,如果您在循环大小写之间进行更新和协调,则会影响光标中的所选数据。(@11g),但在@10g版本中不会发生这种情况。如果你听到这样的话,请纠正我…据说如果你从一个或多个表中选择一些数据,并且如果你在循环中使用它,那么在反循环过程中,如果你在循环大小写之间更新和协调,它会影响游标中所选的数据。(@11g),但在@10g版本中不会发生这种情况。如果你听到这样的话,请纠正我。。。