在Oracle上编写智能查询以查找无效SP

在Oracle上编写智能查询以查找无效SP,oracle,stored-procedures,plsql,oracle10g,oracle11g,Oracle,Stored Procedures,Plsql,Oracle10g,Oracle11g,状况 SP必须存在 它在10g上有效,但在11g上无效 如果他们出现以下错误,我们可以运行一个程序来证明: ORA-00979循环失败:不是11g上的GROUP BY表达式 11g有问题,10g没有问题 CREATE TABLE testing (AAA NUMBER, BBB NUMBER); DECLARE CURSOR curTesting(myGroupID IN NUMBER) IS SELECT DECODE(myGroupID, AAA, 'PP', 'PP_GROUP') AS

状况

SP必须存在 它在10g上有效,但在11g上无效 如果他们出现以下错误,我们可以运行一个程序来证明:

ORA-00979循环失败:不是11g上的GROUP BY表达式 11g有问题,10g没有问题

CREATE TABLE testing (AAA NUMBER, BBB NUMBER);

DECLARE
CURSOR curTesting(myGroupID IN NUMBER) IS
SELECT DECODE(myGroupID, AAA, 'PP', 'PP_GROUP') AS p_type,
      COUNT(DISTINCT BBB) AS num_of
FROM testing
GROUP BY DECODE(myGroupID, AAA, 'PP', 'PP_GROUP')
ORDER BY p_type DESC;

BEGIN
FOR row IN curTesting(0) LOOP
NULL;
END LOOP;
END;

insert into testing values(1,2);
insert into testing values(1,2);

DECLARE
CURSOR curTesting(myGroupID IN NUMBER) IS
SELECT DECODE(myGroupID, AAA, 'PP', 'PP_GROUP') AS p_type,
      COUNT(DISTINCT BBB) AS num_of
FROM testing
GROUP BY DECODE(myGroupID, AAA, 'PP', 'PP_GROUP')
ORDER BY p_type DESC;

BEGIN
FOR row IN curTesting(0) LOOP
NULL;
END LOOP;
END;

ERROR at line 1:
ORA-979: not a GROUP BY expression
ORA-6512: at line 3
ORA-6512: at line 10
select ps_id, product_scores.ps_id ps_id1, productId 
  from product_scores join (select ps_id productId from products_shop ) on
       productId = ps_ps_id     
 where rownum < 10;
出现定义不明确的ORA-918列 11g有问题,10g没有问题

CREATE TABLE testing (AAA NUMBER, BBB NUMBER);

DECLARE
CURSOR curTesting(myGroupID IN NUMBER) IS
SELECT DECODE(myGroupID, AAA, 'PP', 'PP_GROUP') AS p_type,
      COUNT(DISTINCT BBB) AS num_of
FROM testing
GROUP BY DECODE(myGroupID, AAA, 'PP', 'PP_GROUP')
ORDER BY p_type DESC;

BEGIN
FOR row IN curTesting(0) LOOP
NULL;
END LOOP;
END;

insert into testing values(1,2);
insert into testing values(1,2);

DECLARE
CURSOR curTesting(myGroupID IN NUMBER) IS
SELECT DECODE(myGroupID, AAA, 'PP', 'PP_GROUP') AS p_type,
      COUNT(DISTINCT BBB) AS num_of
FROM testing
GROUP BY DECODE(myGroupID, AAA, 'PP', 'PP_GROUP')
ORDER BY p_type DESC;

BEGIN
FOR row IN curTesting(0) LOOP
NULL;
END LOOP;
END;

ERROR at line 1:
ORA-979: not a GROUP BY expression
ORA-6512: at line 3
ORA-6512: at line 10
select ps_id, product_scores.ps_id ps_id1, productId 
  from product_scores join (select ps_id productId from products_shop ) on
       productId = ps_ps_id     
 where rownum < 10;
解决方案:

select t1.ps_id, t1.ps_id ps_id1, productId
  from product_scores t1
       join (select ps_id productId from products_shop) 
         on productId = ps_ps_id
 where rownum < 10;

请写一个查询,以查看由于10G升级到11G/P>的无效SP,如果您不能自己查询元数据,请考虑购买蟾蜍或类似IDE,您可能很快就会需要它。请编辑您的问题并发布导致11g出现ORA-00979错误的查询示例,而10g下没有相同的问题。谢谢。由于您已经发布了bug 9478304的示例代码,名称略有修改,您的意思是想对10g代码运行一些东西,看看升级到11g时会遇到哪些bug/更改?有很多bug,而且很多都是版本相关的;ORA-00979列表见注释18571.1。这可能不是不可能的,但已经很接近了。ORA-00918实际上是10g 5368296中的一个bug,您侥幸逃脱,它在11g中正常工作。我希望您不要试图避免正确地测试和测试升级路径。简单地说,我已经将测试环境从10g更新到11g。现在我正在测试所有环境,看看是否一切正常。当您将平台从10g更新到11g时,这些示例是已知的问题。由于有5000个SP,我需要找到一种方法来作证,并确定在上述条件下是否存在任何SP。