
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を探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PostgreSQLで表結合+DELETEしたい
-
COPY時のtimestamp型について
-
■一番最初に値が入っている(Nul...
-
DBから日付順に指定件数の削除...
-
constraint と index の違い
-
長いSQL文を実行するには?
-
動的に生成したカラムを使ったF...
-
SQLite:項目が存在しない場合の...
-
INSERTできるレコード数を制限...
-
DB2 「既存カラムへのnot null...
-
SQLで特定データがNULLなら別デ...
-
version7,version8 の型の扱い
-
Excel 2019 のピボットテーブル...
-
「直需」の意味を教えてください
-
エクセルVBAで5行目からオート...
-
Accessでテーブル名やクエリ名...
-
Oracle 2つのDate型の値の差を...
-
INSERT INTO ステートメントに...
-
SQLServer2005のSQL文での別名...
-
少数部の桁数の求め方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
PostgreSQLで表結合+DELETEしたい
-
列が存在しないと言われる
-
長いSQL文を実行するには?
-
INSERTできるレコード数を制限...
-
0の除算
-
alter tableすると、処理が止ま...
-
SQLで特定データがNULLなら別デ...
-
DBから日付順に指定件数の削除...
-
constraint と index の違い
-
大量データを更新したら、処理...
-
動的に生成したカラムを使ったF...
-
SQLite:項目が存在しない場合の...
-
DB2 「既存カラムへのnot null...
-
powergres(postgres)にalter文...
-
INSERTできない
-
postgreSQLの日付を変数にする...
-
SQL における変数の宣言と代入...
-
PostgreSQLの「not null」制約...
-
インデックスの削除と、インデ...
-
UPDATE文について
おすすめ情報