0

条件

  • SP が存在している必要があります
  • 10g では有効でしたが、11g では有効ではありませんでした
  • 次のエラーが発生したかどうかを証明する手順を実行できます。

    • ORA-00979 でループが失敗しました: 式によるグループではありません (11 g)

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
  • ORA-918 列が曖昧に定義されています

11g では問題あり、10g では問題ありません

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 へのアップグレードによる無効な SP を確認するには、クエリを作成してください

4

0 に答える 0