• 締切済み

CURRVALで絞り込み

CREATE TABLE CTRL ( NO NUMBER    NOT NULL, DT NUMBER(8,0) NOT NULL ) CREATE SEQUENCE SQ_CTRLNO   START WITH 1   INCREMENT BY 1   NOMAXVALUE   NOMINVALUE   CYCLE; というテーブルがあり、トリガにてNOに自動採番します。 この時、現在の最新行を取得する為にシーケンスのCURRVALにて絞り込みを行いたいのですが、1行でSELECTする方法は無いでしょうか。 エラーにはなりますが、やりたい事は以下の通りです。 SELECT NO,DT FROM CTRL WHERE NO=SQ_CTRLNO.CURRVAL; ちなみにシーケンスはCYCLEなので並べ替えは使えません…。

みんなの回答

  • nas02
  • ベストアンサー率70% (22/31)
回答No.2

#1さんのやり方は、一見出来そうですが残念ながらエラーとなります。 以下にも説明がありますが、前回のCURRVALを使うのは難しそうです。 http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/appdev.102/B19257-01/sqloperations.html (以下は抜粋です) セッションの中でCURRVALを参照する前に、NEXTVALを使用して数値を生成する必要があります。 NEXTVALを参照すると、現在の順序番号がCURRVALに格納されます。 トリガーで何をされたいのか分かりませんが、別の方法を考えられた方が良いと思います。

yamaj_biz
質問者

お礼

インサート時にトリガにてNEXTVALを実施すると共に他のDBを参照して結果を格納しているのですが、ネットワーク断などでリンクテーブルが参照できない場合にステータスを異常としています。 このステータスを確認する為に最新行の取得を行いたかったのですが、難しいそうなので2行に分ける事にします。 SELECT SQ_CTRLNO.CURRVAL INTO NOWNO FROM DUAL; SELECT NO,DT FROM CTRL WHERE NO=NOWNO; (※上記SQLはイメージです。)

回答No.1

SELECT NO,DT FROM CTRL WHERE NO = (SELECT SQ_CTRLNO.CURRVAL FROM DUAL) ;

yamaj_biz
質問者

補足

ご回答頂いたSQLはエラーになる事は既に確認済みでした。