SQL における変数の宣言と代入の仕方
PostgreSQL8.1 を使っております。尻に火がつき始めたので、同じような内容の投稿ですがどうかご容赦下さい。
下記のように記述したのですが、各星座の文字列を重複して記述するのを避けたいので、
変数を宣言するなり何なりして何とかしたいのですが、
"SQL assign" やら "SQL variable" といったキーワードで色々検索しても、どうしても有用な情報に行き当たりませんでした。なにかしらのヒントを頂ければ幸いです。
宜しくお願いいたします。
---
CONSTRAINT myZodiac check ( myZodiac in
('Aries', 'Taurus', 'Gemini', 'Cancer', 'Leo', 'Virgo',
'Libra', 'Scorpio', 'Sagittarius', 'Capricorn', 'Aquarius', 'Pisces') ),
CONSTRAINT yrZodiac check (yourZodiac in
('Aries', 'Taurus', 'Gemini', 'Cancer', 'Leo', 'Virgo',
'Libra', 'Scorpio', 'Sagittarius', 'Capricorn', 'Aquarius', 'Pisces',
'Air', 'Water', 'Fire', 'Earth',) )
---
No.1ベストアンサー
- 回答日時:
タイトルが悪すぎると思いますけど。
「同じような制約を何度も定義する必要がある」ということ自体が、問題なのでは?
同じような定義をたくさん行う必要があるというなら、SQLの動的実行(SQLを文字列で組み立てて前処理(prepare)して実行(execute))をすればいいのでは?
その時に「星座名が必要」、「手作業でやったらタイプミスや重複して書き込むといった人員的なミスがある」といったことなら、事前に星座表(星座名で一意にしておく)を作っておいて、その検索結果をSQLの組み立てに利用(文字連結していく)すればいいと思いますよ。
そもそも、星座表を参照する参照制約にすれば、検査制約で星座名をだらだらと書く必要はないですけど。
No.2
- 回答日時:
ドメインを使うといいと思います。
ドメインというのは既存のデータ型に対して制約を加えて別の名前を付けたものです。
CREATE DOMAIN zodiac AS text
CHECK (VALUE IN ('Aries', 'Taurus', 'Gemini', 'Cancer', 'Leo', 'Virgo',
'Libra', 'Scorpio', 'Sagittarius', 'Capricorn', 'Aquarius', 'Pisces'));
CREATE TABLE t (
c zodiac
);
----
=> INSERT INTO t VALUES ('Aries');
INSERT 0 1
=> INSERT INTO t VALUES ('foo');
ERROR: value for domain zodiac violates check constraint "zodiac_check"
----
もしくは、列挙型を使ってもいいと思います。こちらのほうがより適切かもしれないです。
CREATE TYPE zodiac AS ENUM ('Aries', 'Taurus', 'Gemini', 'Cancer', 'Leo', 'Virgo',
'Libra', 'Scorpio', 'Sagittarius', 'Capricorn', 'Aquarius', 'Pisces');
CREATE TABLE t (
c zodiac
);
----
=> INSERT INTO t VALUES ('Aries');
INSERT 0 1
=> INSERT INTO t VALUES ('foo');
ERROR: invalid input value for enum zodiac: "foo"
LINE 1: INSERT INTO t VALUES ('foo');
----
参考URL:http://www.postgresql.jp/document/current/html/s …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Access VBAで条件を追加する(書き込む)場所 2 2022/03/23 12:05
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- MySQL 書籍の内容はまともでしょうか? 1 2023/01/22 03:07
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- SQL Server SQL 期間内の実施数を合計したい 2 2023/03/03 22:28
- MySQL SQL任意に並び替えをしたい 2 2023/08/28 10:47
- Excel(エクセル) EXCELの「接続」のSQLのコマンド文字列にて、セルから任意の数値を利用したい 2 2023/03/09 16:43
- PostgreSQL DBFluteについて質問です。 環境:PostgreSQL java8 前提:webアプリケーショ 1 2022/07/07 00:49
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Excel(エクセル) エクセル関数の変わった使い方 3 2022/05/13 17:12
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/22】このサンタクロースは偽物だと気付いた理由とは?
- ・お風呂の温度、何℃にしてますか?
- ・とっておきの「まかない飯」を教えて下さい!
- ・2024年のうちにやっておきたいこと、ここで宣言しませんか?
- ・いけず言葉しりとり
- ・土曜の昼、学校帰りの昼メシの思い出
- ・忘れられない激○○料理
- ・あなたにとってのゴールデンタイムはいつですか?
- ・とっておきの「夜食」教えて下さい
- ・これまでで一番「情けなかったとき」はいつですか?
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
長いSQL文を実行するには?
-
列が存在しないと言われる
-
powergres(postgres)にalter文...
-
0の除算
-
constraint と index の違い
-
動的に生成したカラムを使ったF...
-
カラムのデフォルト値に16進数
-
■一番最初に値が入っている(Nul...
-
COPY時のtimestamp型について
-
Excel 2019 のピボットテーブル...
-
Accessでテーブル名やクエリ名...
-
「直需」の意味を教えてください
-
Oracle 2つのDate型の値の差を...
-
エクセルグラフの凡例スペース
-
Accessでコードを入れると名前...
-
エクセルVBAで5行目からオート...
-
SQLでの検索の仕方をご教示くだ...
-
変数が選択リストにありません
-
異なるサーバのDBデータ同士を...
-
Accessでテーブルの値をテキス...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
列が存在しないと言われる
-
INSERTできるレコード数を制限...
-
0の除算
-
長いSQL文を実行するには?
-
constraint と index の違い
-
alter tableすると、処理が止ま...
-
COPY時のtimestamp型について
-
PostgreSQLで表結合+DELETEしたい
-
DBから日付順に指定件数の削除...
-
動的に生成したカラムを使ったF...
-
DB2 「既存カラムへのnot null...
-
Null値を無視してユニークにしたい
-
INSERTできない
-
SQLite:項目が存在しない場合の...
-
大量データを更新したら、処理...
-
null→数値にするには?
-
SQL における変数の宣言と代入...
-
PostgreSQLの「not null」制約...
-
複数キーワードでのあいまい検索
-
postgres ストアドファンクショ...
おすすめ情報