質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Oracle Database

Oracle Databaseは、米オラクルが開発・販売を行うリレーショナルデータベース管理システムです。

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

3回答

6880閲覧

テーブル作成時に、テーブル名に動的に取得した今日の日付を含める方法

maruto

総合スコア7

Oracle Database

Oracle Databaseは、米オラクルが開発・販売を行うリレーショナルデータベース管理システムです。

Oracle

Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

0クリップ

投稿2017/08/21 10:44

編集2017/08/21 10:51

###前提・実現したいこと
データベース、SQL初心者です。
テーブル作成SQL文で、テーブル名の一部に今日の日付を入れるのですが、その日付の部分をSQL文で動的に指定したいです。下記例のyyyymmddの部分です。

SQL

1例) 2create table table_name_yyyymmdd (id, ...);

TO_CHAR関数を使用して下記のように記述してみましたが上手くいかず...

SQL

1create table table_name_ || to_char(sysdate,'yyyymmdd') (id, ...);

どういったSQL文を書けばいいか、そもそもSQL文で書けるのか等ご存知の方おられましたらご教授お願い致します。

###実行環境
接続するDBの種類 ⇒ Oracle

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

pl/sqlで、動的に目的のCREATE文を文字列として作成し、EXECUTE IMMEDIATE文により実行する方法などがあります。

投稿2017/08/21 11:43

sazi

総合スコア25173

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maruto

2017/08/22 01:36

ご回答ありがとうございます。これなら実現できそうです。少し調べて試してみます。
guest

0

SQL 文で当該部分を動的に変更することはできません。
こういう場合はバッチファイルなどで、create table の SQL 自体を動的に作って実施することになります。

投稿2017/08/21 10:57

tacsheaven

総合スコア13703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

maruto

2017/08/21 11:29

そうなんですね。phpのバッチファイルで動的に生成できるように試してみます。 お早い回答ありがとうございます。
tacsheaven

2017/08/21 11:31

PHP であれば、ヒアドキュメントをうまく使えば、だいぶ楽ができます。
guest

0

すでにコメントが付いているように EXECUTE IMMEDIATEで動的SQLで年月日を含んだテーブル名をCREATEできます。問題はテーブル名が変わることによりCREATE TABLE文だけではなく、そのTABLEを使ったSQLが毎回修正を強いられる、たとえば過去3ヶ月分のデータを集計したいといった要求が来るたびにSQLを書きなおさなければなりません。
通常はテーブルにDATE列を追加してその範囲を指定することで、同じSQLを変更することなく使い続ける設計にすることが多いです。
頑張ってください。

投稿2017/08/25 18:21

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sazi

2017/08/26 01:00

横から失礼します。 自前でパーティション分割をやりたいのかと思っていました。 (当然取得のSQLも動的SQLで) お手軽だし、使えないエディションとかが理由かな?と。 今見ると、初心者と言われているし、日付毎ということから、単に設計ミスかもしれませんね。
Orlofsky

2017/08/26 04:25

Oracleは2年前に2回も値上げして500万円だったOracle Enterprise Editionが570万円になって、サポート料金もライセンスに準じて割高感もひとしお。Partitioningを使うならそれなりの規模のDWHでしょういから、熟練者を集めるはずかと。大手のSirerでも能力は無視して頭数で人を揃えることしか考えないところもあるので、使いものにならないシステムを納品されるユーザーは要注意ですが。爆 Oracle価格 http://www.oracle.com/jp/corporate/pricing/price/index.html
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問