• 締切済み

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なので並べ替えは使えません…。

  • Oracle
  • 回答数2
  • ありがとう数1

みんなの回答

  • 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はエラーになる事は既に確認済みでした。

関連するQ&A

  • TO_NUMBERの結果は、カラムに追加できない?

    いつもお世話になっています。 TO_NUMBER実行時、結果はnumeric型で取得できると思うのですが、 その値をカラムに追加することはできるのでしょうか? insert into number2 values((select numberStr,TO_NUMBER (numberStr,'000.000') from number),'aaa'); 実行すると、 副問い合わせは1列のみを返さなければなりませんというErrorが生じます。 なのでwhere句を追加しましたが、結果は同じです。 実行したsqlは、 create table number ( count integer not null primary key, numberStr varchar(20) not null ); create table number2 ( no numeric not null primary key, numberS varchar(30) not null); insert into number values(5,'555.55000'); insert into number2 values((select numberStr,TO_NUMBER (numberStr,'000.000') from number where count=5),'aaa'); です。 宜しくお願いします。

  • Oracleのシーケンスありのテーブル作成について

    Oracleのテーブルを作るのに、ある列を自動で「全体の通し番号」みたいなユニーク(一意)な番号を振りたいく、 シーケンス(sequence)を作成しテーブルを作ろうとしているのですがうまくいきません。 どこがわるいのでしょうか。 create sequence "yamaaf_seq"; CREATE TABLE TBL_AFFILIATE_SESS( UNIQ_ID NUMBER(11,0) DEFAULT nextval('yamaaf_seq') NOT NULL, ORG_CODE VARCHAR2(64) NOT NULL, primary key("UNIQ_ID"));

  • MySQLのテーブル設計で迷っています(桁数)

    MySQLのテーブル設計で迷っています。 クリエイト文のカッコの中は桁数を表しているのでしょうか?それともバイト数でしょうか?桁数であれば、それぞれの型で何桁まで設定できますでしょうか? int型のnoを18桁に変更したいのですが、調べているうちに迷ってしまいました。 型 バイト 最小値 最大値 TINYINT 1 -128 127 SMALLINT 2 -32768 32767 MEDIUMINT 3 -8388608 8388607 INT 4 -2147483648 2147483647 BIGINT 8 -9223372036854775808 9223372036854775807 CREATE TABLE `user` ( `no` int(8) unsigned NOT NULL auto_increment, `id` varchar(24) NOT NULL default '', `email` varchar(255) NOT NULL default '', `reg_date` datetime NOT NULL default '0000-00-00 00:00:00', PRIMARY KEY (`no`) ) TYPE=MyISAM;

    • ベストアンサー
    • MySQL
  • PL/SQLの文法

    oracle8,windows95を使用しています。 PL/SQLで、シーケンスを削除して再度作成するという処理を書きたいのですが、PL/SQLはまったくの素人のためアドバイスをいただけたら、と思います。 実行したいのは、以下のSQL文です。 1) SQL>DROP SEQUENCE SQC_TEST 2) SQL>CREATE SEQUENCE SQC_TEST INCREMENT BY 1 START WITH 1 MAXVALUE 9999 MINVALUE 1 CYCLE; これを、PL/SQLで実行するにはどうかけばよいでしょうか? CREATE OR REPLACE PROCEDURE HC_CREATE_SEQ BEGIN DROP SEQUENCE SEQ_車両申請 FROM DUAL; CREATE SEQUENCE SQC_TEST INCREMENT BY 1 START WITH 1 MAXVALUE 9999 MINVALUE 1 CYCLE; END; / と書いてみましたがコンパイルに失敗しましたとおこられてしまいます。 ヒントだけでもいただけたら、と思います。 よろしくお願いいたします。

  • 2つのテーブルからデータ取得

    いつもお世話になっております。 以下のようなテーブルがあります。 ---------- CREATE TABLE IF NOT EXISTS `students` ( `id` int(11) NOT NULL AUTO_INCREMENT, `student_number` bigint(20) DEFAULT NULL, `name` varchar(20) COLLATE utf8_unicode_ci DEFAULT NULL, PRIMARY KEY (`id`) ) ---------- CREATE TABLE IF NOT EXISTS `student_upload` ( `student_number` bigint(20) NOT NULL, `upload_id` int(11) NOT NULL ) ---------- データは以下のように登録されています。 students ---------- id|student_number|name 1 |11111     |いちろう 2 |22222     |じろう 3 |33333     |さぶろう student_upload ---------- student_number|upload_id 11111     |1 11111     |2 22222     |1 22222     |2 ---------- student_upload.upload_id=1 のデータを取得したいので 下記のようなSQL文を発行しているのですが、student_upload.upload_id=2 の データも取得されてしまいます。 select * from students s, student_upload up where up.upload_id=1 and up.student_number=s.student_number よろしくご教示お願いいたします。 <環境>  PHP:5.3.5  MySQL:5.0.7

    • ベストアンサー
    • MySQL
  • phpでnot null、a_iでテーブル作成

    PHPで、以下のようなソースで、存在しているデータベースtestに接続し、もしない場合、name_listというテーブルを作り、1カラム目をカラム名がnoで、int型でnot null auto_incrementにして、2カラム目をカラム名がnameで、not nullで作りたいのですが、うまくテーブルが作られません。 どうすればうまく作られるか教えてください。 <?php try{ $pdo = new PDO('mysql:dbname=test; host=localhost; charset=utf8', 'root'); $st = $pdo->prepare("create table if not exists name_list (no int(100) not null auto_increment, name varchar(100) not null);"); $st->execute(); }catch(PDOException $e){ print('Error:'.$e->getMessage()); die(); }

    • ベストアンサー
    • MySQL
  • MySQL table editorについて

    このエラーについて教えてください! Error while executing query CREATE TABELE 'depot_development','products'( 'id'INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, ~~~ ) ENGINE = lnnoDB; MySQL Error Number 1005 Can't create table '.\depot_development\products.frm'(errno: 121)

    • ベストアンサー
    • MySQL
  • NOTNULL制約について

    MYSQL ver4.0.20a 下記のようにNOTNULL制約を付けてテーブルを作成するのですが、 デフォルト値が勝手に設定されてしまいます。 CREATE TABLE TEST_01 ( NO int(8) NOT NULL auto_increment, STATUS int(1) NOT NULL, TOUROKUBI date NOT NULL, MEMO varchar(200) NOT NULL, PRIMARY KEY (NO) INT型だと 0 varchar型だと '' date型だと 0000-00-00 インサートの時に値がNULLの場合、SQLエラーを返してほしいのですが、 デフォルト値が設定されている為、登録されてしまいます。 本当はNOTNULL制約で、DBにチェックを任せたいのですが・・・ どなたかご存知の方、教えてください。 お願いします。

    • ベストアンサー
    • MySQL
  • 最新の1行のみを取得する。

    個人テーブル、身長テーブル、体重テーブルという3つのテーブルがあり、それぞれ以下の通りの構造となっています。 CREATE TABLE T個人 (  番号 NUMBER(4,0) NOT NULL,  名前 VARCHAR(20) NOT NULL, ); CREATE TABLE 身長 (  番号 NUMBER(4,0) NOT NULL,  更新 NUMBER(4,0) NOT NULL,  身長 NUMBER(4,0) NOT NULL, ); CREATE TABLE 体重 (  番号 NUMBER(4,0) NOT NULL,  更新 NUMBER(4,0) NOT NULL,  体重 NUMBER(4,0) NOT NULL, ); これら3つのテーブルを用いて以下のようなViewを作りたいのですが… 番号,名前,身長,体重 身長及び体重テーブルに「更新」というフィールドがあり、同じ番号の場合、上書きではなく更新番号を増やしています。 番号,更新,身長 -------------- 0001,0001,0155 0001,0002,0157 0002,0001,0163 0002,0002,0162 最新の情報のみを引っ張るSQL文はどのように記述すれば良いのでしょうか。 番号,名前,身長,体重 ------------------- 0001,NAME,0157,0038 0002,NAME,0162,0044

  • ODBC経由でMySQL5.0に auto_increment属性などを付加したテーブルを作成したい

    ODBC経由でMySQL5.0に auto_increment属性など付加した以下のテーブルを作成したいのですがODBCのSQL文はどう書けばよいのでしょうか? DROP TABLE IF EXISTS test; CREATE TABLE IF NOT EXISTS test ( a1 int(11) NOT NULL auto_increment, b1 enum('public','group','private') NOT NULL default 'public', c1 date NOT NULL default '0000-00-00', d1 mediumtext NOT NULL, PRIMARY KEY (`a1`) ) TYPE=MyISAM AUTO_INCREMENT=1 ; よろしくお願いします。