10g平台上有大量的存储过程。 (差不多500个SP) 每个SP可能有循环,获取等等。
我想问你是否有一种很酷的方法可以控制当前在10g上运行的所有SP,并保证它可以在11g上运行。
我有一个10克的开发服务器1,另一个开发服务器是11克。 我可以用它们来证明上面提出的建议。
例如,我知道如果使用循环,则在10 g上,并且在循环期间,update语句不会影响循环数据,但会影响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上运行,你会看到AMSTERDAM,但在11G上,它是PORTO。
修复它;我在sp中提示如下:
SELECT /*+ full(m)*/ m.musterino, m.subeadi, m.kayitzamani
不是很奇怪吗?获得AMSTERDAM的其他选择吗?
答案 0 :(得分:2)
我们在迁移期间偶然发现的一件事是那些不应该在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将运行该语句 - 这是一个错误。
此错误(错误ID:6760937)已修复并使声明(正确地)在11.x中失败
答案 1 :(得分:1)
基本的PLSQL结构应该完全相同。这里列出了一些陷阱:
答案 2 :(得分:0)
修复它;我在sp中提示如下:
SELECT / + full(m) / m.musterino,m.subeadi,m.kayitzamani
答案 3 :(得分:0)
最近我完成了向Oracle 11g的迁移。面对前所未有的几个问题。我写了一篇博文。看看http://learncodewrite.blogspot.in/2017/04/migrating-to-oracle-11g-from-oracle-10g.html?m=1。