• 締切済み

テーブルの行を増やしたい・・・。

テーブルの行を増やし、 データを一年文作成したいのですが・・・。 CREATE TABLE CALENDAR_TBL( YYYYMMDD DATE NOT NULL, DayData NUMBER(3) NULL CONSTRAINT CALENDAR_TBL_PKEY PRIMARY KEY(YYYYMMDD)); このテーブルに、2005年のデータ365レコードを挿入したいのですが、 1つのINSERT文(SQL)で、できますでしょうか? (※PL/SQLは除きます。) ※不可能であれば、SELECT文(下記のように)を一年分用意してUNIONで作成するのですが、 これ以外に簡単にできないでしょうか? INSERT INTO CALENDAR_TBL ( (SELECT SYSDATE + 000, DayData FROM CALENDAR_TBL) UNION (SELECT SYSDATE + 001, DayData FROM CALENDAR_TBL) UNION (SELECT SYSDATE + 002, DayData FROM CALENDAR_TBL) UNION (SELECT SYSDATE + 003, DayData FROM CALENDAR_TBL) ・・・(省略)・・・ UNION (SELECT SYSDATE + 365, DayData FROM CALENDAR_TBL) )

みんなの回答

  • MZ-80B
  • ベストアンサー率56% (46/81)
回答No.3

Jianchen さんの USER_TAB_COLUMNS を ALL_CATALOG に変更すれば問題ないと思います。 カタログテーブルはシステム情報を保持していて、 通常 X万件はあるのでオラクルが壊れない限り 365件を下回ることはありません。

hotsummer
質問者

お礼

お礼が遅くなりましたが、ありがとうございます。 やはり、UNIONを日付の数だけ、用意しました。 また、この回答は他でも使用させてもらいますね。

noname#87380
noname#87380
回答No.2

こんにちは。 365以上のレコードが存在するテーブルがある事が大前提ですが…。 仮にUSER_TAB_COLUMNSが365レコード以上ある場合に 下記のようなSQL文を実行する事で実現できます。 ※DayDataには何が入るのかわからないため、とりあえず1を格納。 INSERT INTO CALENDAR_TBL (YYYYMMDD,DayData) SELECT SYSDATE+ROWNUM ,1 FROM USER_TAB_COLUMNS WHERE ROWNUM < 366 ; 参考までにどうぞ。

hotsummer
質問者

補足

回答ありがとうございます。 う~ん、この大前提抜きで 考えないといけないので・・・すいません。 やはり、UNIONを使うしかないのでしょうね。

  • atagonet
  • ベストアンサー率0% (0/2)
回答No.1

こんにちは。 私がよく大量データの試験用にやっていた手法です。 エクセルとかでデータを365件作ります。 この場合ですと日付が可変なのでしょうか? そのデータをテキストエディタのマクロ機能を用い (ひでまるとか) INSERT文をデータ数分作ります。 例 INSERT INTO CALENDAR_TBL VALUES(20050901,001); INSERT INTO CALENDAR_TBL VALUES(20050902,001); INSERT INTO CALENDAR_TBL VALUES(20050903,001); INSERT INTO CALENDAR_TBL VALUES(20050904,001);          ・          ・          ・ INSERT INTO CALENDAR_TBL VALUES(20050831,001); このtxtをファイル名つけて保存して SQLplusのプロンプトで@実行してみてはいかがでしょうか? データの仕様がよくわからないのですが 連番とかであればほんの数分で作成できますよ。

hotsummer
質問者

補足

投稿ありがとうございます、が 1つのINSERT文(SQL)で、行いたいので・・・すいません。 例えば、下記のような感じで(なんの言語がよく分かりませんが・・・。) 1月1日~12月31日までの、365行のデータを入れたいのです。 INSERT INTO CALENDAR_TBL (while i=0,wk_YYYYMMDD = 20050101 to wk_YYYYMMDD > 20060000 i = i + 1 wk_YYYYMMDD = wk_YYYYMMDD + 1 (SELECT wk_YYYYMMDD, i FROM CALENDAR_TBL) )

関連するQ&A