- 締切済み
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なので並べ替えは使えません…。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- nas02
- ベストアンサー率70% (22/31)
#1さんのやり方は、一見出来そうですが残念ながらエラーとなります。 以下にも説明がありますが、前回のCURRVALを使うのは難しそうです。 http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/appdev.102/B19257-01/sqloperations.html (以下は抜粋です) セッションの中でCURRVALを参照する前に、NEXTVALを使用して数値を生成する必要があります。 NEXTVALを参照すると、現在の順序番号がCURRVALに格納されます。 トリガーで何をされたいのか分かりませんが、別の方法を考えられた方が良いと思います。
- o123459876
- ベストアンサー率59% (19/32)
SELECT NO,DT FROM CTRL WHERE NO = (SELECT SQ_CTRLNO.CURRVAL FROM DUAL) ;
補足
ご回答頂いたSQLはエラーになる事は既に確認済みでした。
お礼
インサート時にトリガにてNEXTVALを実施すると共に他のDBを参照して結果を格納しているのですが、ネットワーク断などでリンクテーブルが参照できない場合にステータスを異常としています。 このステータスを確認する為に最新行の取得を行いたかったのですが、難しいそうなので2行に分ける事にします。 SELECT SQ_CTRLNO.CURRVAL INTO NOWNO FROM DUAL; SELECT NO,DT FROM CTRL WHERE NO=NOWNO; (※上記SQLはイメージです。)