• ベストアンサー

nextvalについて

Customer_IDに格納する新しい値を取得し、新規顧客に関する情報をCustomer表に格納するストアードファンクションの例 create or replace function Get_New_Customer_ID (Salutation varchar2, Last_Name varchar2, First_Name varchar2, Street_Address varchar2, City varchar2, State varchar2, Zipcode varchar2, Home_Phone varchar2, Work_Phone varchar2) return number is New_Customer_ID number(4); begin select Customer_Sequence.nextval into New_Customer_ID from dual; insert into Customer (Customer_ID, Salutation, Last_Name, First_Name, Street_Address, City, State, Zipcode, Home_Telephone_Number, Work_Telephone_Number) values (New_Customer_ID, Salutation, Last_Name, First_Name, Street_Address, City, State, Zipcode, Home_Phone, Work_Phone); return New_Customer_ID; end; / において、 select Customer_Sequence.nextval into New_Customer_ID from dual; のCustomer_Sequence.nextvalがどういう意味なのかわからくて困っております。dualという表しか使っていないのに、Customer_Sequenceという表のnextvalという列から取り出しているように見えて違和感を感じるのです。また、新しい値を取得というのは、ユーザがキーボードで打ち込むのでしょうか? また、dualはシステムで用意されている表なのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

一意な通し番号を得る仕組みとして、SEQUENCE型というデータ型があります。 このselect文では、次の通し番号を得ています。 表名のdualというのは、「select 関数など from 表名」といった構文で、特定の表名が必要ない場合に指定できるダミーです。

msndance
質問者

お礼

わかりました。ありがとうございます。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.1

Customer_Sequence別の場所で定義されていると思いますが、SEQUENCE型なのでしょう。 SEQUENCE型は順番にユニークな番号を生成する特殊な型で、DUALとはOracleに用意されているダミーの表です。

参考URL:
http://www.mitene.or.jp/~rnk/TIPS_ORCL_SEQ.htm
msndance
質問者

お礼

わかりました。ありがとうございました。

すると、全ての回答が全文表示されます。

関連するQ&A