- 締切済み
テーブルの行を増やしたい・・・。
テーブルの行を増やし、 データを一年文作成したいのですが・・・。 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) )
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- MZ-80B
- ベストアンサー率56% (46/81)
Jianchen さんの USER_TAB_COLUMNS を ALL_CATALOG に変更すれば問題ないと思います。 カタログテーブルはシステム情報を保持していて、 通常 X万件はあるのでオラクルが壊れない限り 365件を下回ることはありません。
こんにちは。 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 ; 参考までにどうぞ。
補足
回答ありがとうございます。 う~ん、この大前提抜きで 考えないといけないので・・・すいません。 やはり、UNIONを使うしかないのでしょうね。
- atagonet
- ベストアンサー率0% (0/2)
こんにちは。 私がよく大量データの試験用にやっていた手法です。 エクセルとかでデータを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のプロンプトで@実行してみてはいかがでしょうか? データの仕様がよくわからないのですが 連番とかであればほんの数分で作成できますよ。
補足
投稿ありがとうございます、が 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) )
お礼
お礼が遅くなりましたが、ありがとうございます。 やはり、UNIONを日付の数だけ、用意しました。 また、この回答は他でも使用させてもらいますね。