0

このクエリを Oracle 8i で実行しようとしていますが、うまくいきません!

SELECT DECODE(seqnum, 1, t.ID1,cnt,'0') PI_VALUE1,
  DECODE(seqnum, 1, t.STARTTIME,cnt,t.ENDTIME) timestamp,
  '090.'
  || t2.APP
  || '.BATCH' tagname
FROM
  (SELECT t.*,
    row_number() over(partition BY t.ID1, t.PLANT_UNIT order by t.STARTTIME) AS seqnum,
    COUNT(*) over(partition BY t.ID1, t.PLANT_UNIT) cnt
  FROM tb_steps t
  ) t
INNER JOIN tb_equipments t2
ON t2.plant_unit = t.plant_unit
WHERE (seqnum    = 1
OR SEQNUM        = CNT)
AND (T.STARTTIME  > '15-jul-2013'
AND t.ENDTIME    < '15-aug-2013') ;

すでに多くの変更を行っていますが [の変更case whenなどdecode]、まだ問題があります...

Oracle 8i でサポートされるクエリの作成を手伝ってもらえますか?

PS .: このバージョンが Oracle によって AGES に対してサポートされていないことはわかっていますが、.NET アプリケーションのデータのみを照会しているため、DB をアップグレード/タッチすることはできません。

バージョンは 8.1.7 で、特定のエラー:

ORA-00933: SQL command not properly ended.

どうもありがとう、

4

1 に答える 1

3

ANSI結合は、Oracle Database 9iR1 (9.0.1)まで導入されていませんでした。8.1.7 ではサポートされていません。

ANSI スタイルの結合を使用せずにクエリを書き直してください。

このようなものがうまくいくかもしれません:

SELECT DECODE(seqnum, 1, t.ID1,cnt,'0') PI_VALUE1,
  DECODE(seqnum, 1, t.STARTTIME,cnt,t.ENDTIME) timestamp,
  '090.'
  || t2.APP
  || '.BATCH' tagname
FROM
  (SELECT t.*,
    row_number() over(partition BY t.ID1, t.PLANT_UNIT order by t.STARTTIME) AS seqnum,
    COUNT(*) over(partition BY t.ID1, t.PLANT_UNIT) cnt
  FROM tb_steps t
  ) t, tb_equipments t2
WHERE t2.plant_unit = t.plant_unit
  AND   (t.seqnum    = 1
      or t.seqnum        = t.cnt)
AND (T.STARTTIME  > '15-jul-2013'
AND t.ENDTIME    < '15-aug-2013') ;

まったく未検証……。

それが役立つことを願っています。

于 2014-02-21T00:47:01.100 に答える