DB2有識者の方々へ
マニュアルをみたのですが、alter tableでは駄目なのでしょうか?
すみません。よろしくお願い致します。

<質問1>
既存カラムへnot null制約を付与したいのですが、コマンドを教えてください

<質問2>
既存カラムについた、not null制約を削除したいのですが、コマンドを教えてください

よろしくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

ALTER TABLEでできることは以下の変更なので'not null'の付加・削除はできません。

tableの再作成を行いデータのRELOADが必要になります。

・ 1 つまたは複数の列を表に追加する
・ 主キーの追加、あるいはドロップを行う
・ 1 つまたは複数のユニーク制約、または参照制約の追加、あるいはドロップを行う
・ 1 つまたは複数のチェック制約定義の追加、あるいはドロップを行う
・ 表除去制約の追加、あるいはドロップを行う
・ VARCHAR 列の長さを変更する
・ 参照タイプ列を変更して、有効範囲を追加する
・ 生成される列の生成式を変更する
・ 1 つまたは複数のチェック制約属性、あるいは参照制約属性を変更する
・ 区分化キーの追加、あるいはドロップを行う
・ 表属性(データ・キャプチャー・オプション、pctfree、ロック・サイズ、追加モード
など) を変更する
・ 表を記録されていない初期状態(NOT LOGGED INITIALLY) に設定する
    • good
    • 0
この回答へのお礼

ALTER TABLEでは「NOT NULL」の付加・削除はできませんでした。
教えていただいたとおり、tableの再作成で対処しました。

大変助かりました。どうもありがとうございました。

お礼日時:2005/06/10 22:27

こんにちは。



>>既存カラムへnot null制約を付与したいのですが、コマンドを教えてください
「not null」はオプション項目なので、列の定義情報を便宜的に変更してから付与してください。
ALTER TABLE テーブル名
ALTER COLUMN カラム名
SET DATA TYPE そのまま
NOT NULL WITH DEFAULT デフォルト値

>>既存カラムについた、not null制約を削除したいのですが、コマンドを教えてください
多分ドロップできたはず・・・。
ALTER TABLE テーブル名
ALTER COLUMN カラム名
DROP NOT NULL

今手元にないので、自信ないです・・・。
(^^ゞ
    • good
    • 0
この回答へのお礼

アドバイスありがとうございました。

No2の方が回答してくれたとおり、DB2では
「NOT NULL」の付与・削除はALTER TABLEでは
できないようです。

どうもありがとうございました。

お礼日時:2005/06/10 22:22

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qdb2setupでdb2inst1が作成されない

お世話になります。

redhat9にDB2ver8を導入しようとしています。
db2setupを実行しGUIインストールを行いました。
しかし、セットアップ完了画面でなぜかdb2inst1だけ作成されておらず、db2start等のコマンドができません。新しくdb2inst1とdb2grpを作成して、再度インストールを実行してもうまくいきません。
色々調べてみたのですが、いまいちよい事例が見つからないので、質問させていただきますので、よろしくお願いします。

以下に失敗していると思われるログを抜粋します。

DB2 ファイル・セットのインストール:.......成功
DB2 ライセンスの登録:.......成功
デフォルト・グローバル・プロファイル・レジストリー変数の設定:.......成功
DB2 Administration Server の作成:.......成功
エラー:現在の DB2INSTANCE を "db2inst1"
に切り替えることができませんでした。戻りコードは "-2029059916" です。

インスタンス・リストの初期化:.......成功
DB2 インスタンス構成のカスタマイズ:.......成功
エラー:DBI1131E ユーザー ID db2inst1 が無効です。

説明:

与えられたユーザー ID にアクセスしようとして失敗しました。
次の状態のいずれかが発生していると考えられます。

o このユーザー ID がシステムにない。

o このユーザーのホーム・ディレクトリーが正しく設定されていない。

o DB2 で必要なユーザー属性のいずれかが設定されていない。

o このユーザーの UID が 0 である。

お世話になります。

redhat9にDB2ver8を導入しようとしています。
db2setupを実行しGUIインストールを行いました。
しかし、セットアップ完了画面でなぜかdb2inst1だけ作成されておらず、db2start等のコマンドができません。新しくdb2inst1とdb2grpを作成して、再度インストールを実行してもうまくいきません。
色々調べてみたのですが、いまいちよい事例が見つからないので、質問させていただきますので、よろしくお願いします。

以下に失敗していると思われるログを抜粋します。

DB2 ファイル・セッ...続きを読む

Aベストアンサー

No.3です。

No.4 の、AS400さんの回答と重複しますが、
初回インストール時は、インスタンスは作成されなかったけれども、インスタンスユーザーのホームディレクトリに、sqllibディレクトリが作成され、ひととおりDB2が操作できる環境が整っていたはずなので、AS400さんの回答の通りでよかったと思います。

その後、DB2のアンインストールをされたとのことですが、DB2のCD-ROMメディアに入っている、アンインストール用のシェルスクリプト(db2_deinstall)を実行したということでよいでしょうか?

このシェルスクリプトでアンインストールをかけた場合は、以下の情報が残ったままとなってしまい、完全にDB2をアンインストールすることはできません。

1) DB2の各種ユーザー情報(+ホームディレクトリも)
2) DB2インストール履歴情報
3) DB2サービスポート設定
4) DB2インストールディレクトリ

※3)、4)、は残ったままでも、再インストールに影響はないと思いますが、1)、2)の情報が残っていると、場合によってはうまくインストールできません。

今回の原因は、初回インストール時に作成されたユーザー、db2inst1 が存在していたにも関わらず、インスタンスユーザー作成画面で、「新規ユーザー」として db2inst1 を指定した為に、ユーザーが重複している等のエラーにより、インストールが失敗しているのではないでしょうか。
(※ユーザー確認方法 = cat /etc/passwd )
この場合、「既存のユーザー」にして、db2inst1 を指定してインストールを進められると思いますが、気分的にさっぱりしたいという意味も込めて、一旦、DB2を完全に消去して再チャレンジしたほうがよいと思います。

以下の手順でDB2を完全にアンインストールすることができます。

---------------------------------------------

(以下rootユーザーで実行)

1. db2_deinstallの実行(省略します)

2. DB2各種ユーザーの削除

$ userdel -r ユーザー名

3. DB2インストール履歴情報の削除

$ rm -fR /var/db2

4. DB2サービスポート設定の削除

$ vi /etc/services

???等として、ファイルを開き、db2*** のエントリを削除

5. DB2インストールディレクトリの削除

$ rm -fR /opt/IBM/db2

念の為、一度OSを再起動してから、db2setupを実行してみて下さい。

---------------------------------------------

また、既にご覧になられているかもしれませんが、以下の情報が参考になると思います。

「DB2 UDB V8.2 for Linuxクイックインストール」
http://www-6.ibm.com/jp/software/data/developer/library/techdoc/db2v82_install_linux.html

No.3です。

No.4 の、AS400さんの回答と重複しますが、
初回インストール時は、インスタンスは作成されなかったけれども、インスタンスユーザーのホームディレクトリに、sqllibディレクトリが作成され、ひととおりDB2が操作できる環境が整っていたはずなので、AS400さんの回答の通りでよかったと思います。

その後、DB2のアンインストールをされたとのことですが、DB2のCD-ROMメディアに入っている、アンインストール用のシェルスクリプト(db2_deinstall)を実行したということでよいでしょうか?

この...続きを読む

QNOT NULL制約カラムにNULLが格納される

SQLite3でテーブル作成する際、カラムをテキスト型にして、NOT NULL制約をつけているのですが、NULLも普通にINSERTされてしまいます
なんででしょうか?

Aベストアンサー

「その列」をwhere条件に記述して、is null またはis not nullで絞れますか?

どちらもできないなら、nullと空文字を混同しているのかも

QDB2のJDBCを使用したDBコネクションの取得方法の違い

WebSphereとDB2を使用してDB2へアクセスしてテーブルからデータの取得をしたいと思っています。
このとき、DB2のJDBCを使用しますが、getConnectionでコネクションを取得するときに指定するDBのURLに、複数の指定方法があるようです。

その1: jdbc:db2:データベース名
その2: jdbc:db2://ホストIP:ポート番号/データベース名

その1の方法ではコネクションを取得できたのですが、その2の方法では失敗しました。

ホストIPには自分のマシンのIPを、ポート番号にはDB2をインストールしたときに設定した番号を指定しました。

この両者の違いをご存知の方は教えてください。
また、その2の方法でなぜ失敗したのか、見当がつく方がいたらこちらも教えていただきたいと思います。

なお、実行環境は以下の通りです。

CPU ペンティアム3 800Mhz
メモリ 512MByte
OS Windows2000 SP2
ブラウザ IE5.5 SP2
AS Websphere 4.0
DB DB2 7.2

※WebshpereとDB2は同一マシンにインストールされています。

WebSphereとDB2を使用してDB2へアクセスしてテーブルからデータの取得をしたいと思っています。
このとき、DB2のJDBCを使用しますが、getConnectionでコネクションを取得するときに指定するDBのURLに、複数の指定方法があるようです。

その1: jdbc:db2:データベース名
その2: jdbc:db2://ホストIP:ポート番号/データベース名

その1の方法ではコネクションを取得できたのですが、その2の方法では失敗しました。

ホストIPには自分のマシンのIPを、ポート番号にはDB2をインストールしたときに設定...続きを読む

Aベストアンサー

まず、
その1: jdbc:db2:データベース名
その2: jdbc:db2://ホストIP:ポート番号/データベース名
の違いですが、
「その1」の方はJava実行マシンとDB2サーバが同じホスト上にある場合(Type2のJDBCドライバ用?)に使うようです。
それに対して、「その2」は、ホスト名とポート番号を指定していることからわかるように、Java実行マシンとDB2サーバが別々のホスト上にある場合(Type4のJDBCドライバ用?)に使うようです。

で、なんで「その2」で接続ができないのかという原因ですが、
(1)サーバー側の設定が足りない
(2)ドライバ名が違う
の2つが考えられます。

(1)の方は、サーバー側で「このポート番号でJDBC接続を待ち受けます」という設定を行う必要があります。これは、"db2jstrt <ポート番号>"というコマンドをサーバー上で実行することで、設定できます。
(2)の方は、"COM.ibm.db2.jdbc.net.DB2Driver"というJDBCドライバを使っているか確認してください。"COM.ibm.db2.jdbc.app.DB2Driver"ではありません。こっちだと、「その1」の方の接続方法しかサポートしていないような気がします。(よく調べていないのでわかりませんが)

以上2点を確認してみては?

まず、
その1: jdbc:db2:データベース名
その2: jdbc:db2://ホストIP:ポート番号/データベース名
の違いですが、
「その1」の方はJava実行マシンとDB2サーバが同じホスト上にある場合(Type2のJDBCドライバ用?)に使うようです。
それに対して、「その2」は、ホスト名とポート番号を指定していることからわかるように、Java実行マシンとDB2サーバが別々のホスト上にある場合(Type4のJDBCドライバ用?)に使うようです。

で、なんで「その2」で接続ができないのかという原因ですが、
(1)サーバー...続きを読む

QテーブルのフィールドにNot null制約を付けたい

お世話になります。

既存テーブルにフィールドを追加する方法は
わかっているのですが、その追加したフィールドに
not null制約を付けるにはどのようなコマンドを
実行する必要があるのでしょうか。

↓のコマンドには制約をつけるオプションはないですよね。。
ALTER TABLE テーブル名 ADD (カラム名 カラム定義)

よろしくお願いします。

Aベストアンサー

ALTER TABLE table_nameMODIFY (field_name NOT NULL)

でできるはずです。

QDB2の名称について(何の略?なんて呼ぶ?)

IBM製品のRDBMSの「DB2 UDB」は、私は主にDB2と呼んでいます。社内でもそう呼んでいる人しか見たことがありません。

しかし、IBMの人と話をすると、UDBと呼ぶ人が結構います。IBMの人は「どっちでもいい」といっていましたが、どちらのほうが一般的なのかなーとか、UDBと言うほうがしっている人っぽいのかなーなどと思っています。

あと「DB2 UDB」は「DB2ユニバーサル・データベース」の略称だそうですが、じゃぁ「DB2」って何の略?って思いました。特にDBのところは「データベース」だと1つの製品名に「データベース」が2つあることになるし、おかしいよなーとか思っています。

疑問をまとめるとこんな感じです。
1)DB2は何の略?データベース?特に2は何の2?
2)「DB2 UDB」はなんと呼ぶのが一般的かなー?
3)UDBと呼ぶ人は何かの名残?

です。よろしくお願いします。

Aベストアンサー

1)IBMのDB2は、元々は汎用機向けのRDBMSであり、RDBMS
の先駆者的役割を果たして来ました。DB2の機能が、その
後、SQLの国際規格になったというものも少なくない
ようです。

DBはデータベースでしょうね。2は想像でしかないで
すが、1というプロトタイプを作り、2で製品化したの
かも知れません。あるいは汎用機での製品化当時は、
DBMSといえば階層型、ネットワーク型が主だったので、
「新しいDB」という意味だったのかも知れません。

2)「デービーツー」か「ユーデービー」
 「D」を「ディー」でなく、「デー」と呼ぶのは、SE・
 プログラマなど開発経験がある人なら分かると思い
 ます。「B」と発音が似ていて、混同しやすいのです。

3)5年以上前ですが、IBM関連の仕事をしている時、IBM
 のマニュアルでは、「UDB」とは書かれていましたが、
「DB2」とは書かれていませんでした。
 当時は、汎用機ではDB2、クライアント&サーバーでは
 UDBと別製品群だったのではないかと思います。
 その後、汎用機自体をDBサーバとして使ったりと、
 汎用機とクライアント&サーバーの垣根が無くなった
 ため、DB2という製品名が全体を表すようになったと
 受け取っています。

1)IBMのDB2は、元々は汎用機向けのRDBMSであり、RDBMS
の先駆者的役割を果たして来ました。DB2の機能が、その
後、SQLの国際規格になったというものも少なくない
ようです。

DBはデータベースでしょうね。2は想像でしかないで
すが、1というプロトタイプを作り、2で製品化したの
かも知れません。あるいは汎用機での製品化当時は、
DBMSといえば階層型、ネットワーク型が主だったので、
「新しいDB」という意味だったのかも知れません。

2)「デービーツー」か「ユーデービー」
 「D」を「ディー」...続きを読む

QPostgreSQLのカラムに"user"という名前のカラムがある場合のデータ表示について

PostgreSQLを使い始めたのですが、わからないことがあるので知恵をおかしください。
ユーザー名を管理するテーブルを以下のように作成しました。
テーブル:table
 |No|user|from |
 |1 |Atom|tokyo|
 |2 |Boss|izu |
 |3 |Cat |chiba|
このテーブルのデータをuser部分のみ表示するに以下のSQL文を作成しました。
 SELECT user FROM table
上記のSQLを実行したのですが、userのカラム部分がcurrent_userとテーブルのカラムではなくセッションの情報を取得してきてしまいます。
試しに
 SELECT * FROM table
で実行するとテーブルのデータを取得でき、
 SELECT table.user FROM table
で実行するとsyntax errorとエラー表示されデータが結果が表示されません。
userをセッション情報としてではなく、テーブル(table)のデータとして取得したい場合はどのようにしたらいいのでしょうか?

よろしくお願いします。

PostgreSQLを使い始めたのですが、わからないことがあるので知恵をおかしください。
ユーザー名を管理するテーブルを以下のように作成しました。
テーブル:table
 |No|user|from |
 |1 |Atom|tokyo|
 |2 |Boss|izu |
 |3 |Cat |chiba|
このテーブルのデータをuser部分のみ表示するに以下のSQL文を作成しました。
 SELECT user FROM table
上記のSQLを実行したのですが、userのカラム部分がcurrent_userとテーブルのカラムではなくセッションの情報を取得してきてしまいます。
試...続きを読む

Aベストアンサー

「user」が予約語になっているからでしょう。

「select "user" from table」のように、「"」(ダブルクォーテーション)で囲んでみて下さい。

QDB2 9とOracle10g なぜDB2はマイナーなの?

DB2がマイナーとは言い過ぎだとは思いますが、Oracleと
DB2を比較したとき、機能はほぼ互角、対象としている
プラットホームもほぼ同じだと思います。

しかし名前が薄いのかOracleの影に隠れてしまっている
ような感じがします。ちなみにうちの会社はOracleと
MS SQLを使っていますが、なぜかDB2は使っていません。

なぜ機能がいいのにDB2は影がうすいんでしょう?

Aベストアンサー

>プラットホームもほぼ同じだと思います。

DB2は、PC~メインフレームまでを対象。
オラクルは、PC~サーバクラスを対象。
MSSQLは、Windowsサーバを対象。

DB2がサポートするプラットフォームは非常に広いです。
ただし、プラットフォームごとにクセがあり、同一製品と考えるのには、ちょっと無理があります。

Windowsサーバやunixサーバクラスだと、オラクルが圧倒的シェアを持っており、技術者の数もノウハウも
シェアに比例して多いわけで、これを覆すだけのセールスポイントがDB2には、見つからないから・・としか言えません。

例えば、IBMメインフレームユーザが、ダウンサイジングをするようなケースだと、サーバ上のDB2を
使うケースは多いように思います。

Qalter table でチェックボックスの追加

accessにて・・・
alter table でカラム追加したいのですが・・・
追加したい属性がチェックボックスなんです・・・・
いろいろやってるのですが、うまくいきません・・・
チェックボックスは追加できないのでしょうか?

Aベストアンサー

#3です。
フィールドの追加はできているようなので
あとは、この辺りを参考に。

既存テーブルのフィールドプロパティをVBから変更したい
http://www.accessclub.jp/bbs2/0087/beginter26979.html
表示コントロールをチェックボックスに
http://www.accessclub.jp/bbs/0072/beginers27212.html

QDB2 CLIについて

以下内容について認識に誤りがあればご指摘頂けないでしょうか?初心者なので的外れになっているかもしれません…なにとぞ宜しくお願い致します。

【質問1】 
 「組み込みSQL」「ODBC」「DB2 CLI」の3つに
限定するのであれば.以下組み合わせが想定
出来る事を確認させてください。
  <1> 組み込みSQL + ODBC 
<2> 組み込みSQL + DB2 CLI
<3> 組み込みSQLのみ
  <4> ODBCのみ
  <5> DB2 CLIのみ

【質問2】 
ODBCの場合、クライアント端末上でGUIにより
  DB接続に関する設定をいろいろしなくてはいけ
  ませんがDB2 CLIに関しても同様でしょうか?
  DB2 CLIドライバのインストールだけでなく
  ODBCのようにクライアント端末にて何か
  明示的に設定をする必要はあるでしょうか?

Aベストアンサー

#2です。

ODBCドライバをインストールすると、
コントロールパネル→
管理ツール→
データソース(ODBC)→
で、DB2用のODBC設定が追加できるようになります。
すでに追加されているかもしれませんが、
追加されていない場合は、
システムDSN→
追加ボタン→
DB2用のデータソースドライバを選択→
各種設定項目を入力→
で、接続できるはずです。

DB2はちょこっと設定をした記憶がありますが、
詳しく覚えていないので自信無しです。

QALTER TABLE文の書き方について

お世話になります。

今、以下のような列からなるテーブルがあります。

・A(主キー)
・B(主キー)
・C(主キー)
・D(主キー)
・E(NOT NULL)
・F

列A、B、C、Dが複数列の組み合わせで主キーです。

このテーブルを以下のように変更したい場合、
どのようなALTER TABLE文を書けばできますでしょうか。

※列A、B、C、Dの主キーはやめて、列A、B、C、D、G、H、Iの
 複数列によるUNIQUE制約を設定。

・A(UNIQUE&NOT NULL)← 主キーはやめる
・B(UNIQUE&NOT NULL)← 主キーはやめる
・C(UNIQUE&NOT NULL)← 主キーはやめる
・D(UNIQUE&NOT NULL)← 主キーはやめる
・E(NOT NULL)
・F
・G(UNIQUE)← 追加
・H(UNIQUE)← 追加
・I(UNIQUE)← 追加

やりたいことは、列G、H、Iを追加して、
A、B、C、D、G、H、IでUNIQUEにしたく、かつ、
追加したG、H、IはNULLを許容したいということです。

A、B、C、D、G、H、Iの複数列の組み合わせで主キーも
考えましたが、主キーにするとNULLが許容できないと
いうことで、上記のようなレイアウトを考えました。

他に上手い方法があればご教授いただけると幸いです。

ちなみに列のデータ型はすべて可変長の文字列です。

お世話になります。

今、以下のような列からなるテーブルがあります。

・A(主キー)
・B(主キー)
・C(主キー)
・D(主キー)
・E(NOT NULL)
・F

列A、B、C、Dが複数列の組み合わせで主キーです。

このテーブルを以下のように変更したい場合、
どのようなALTER TABLE文を書けばできますでしょうか。

※列A、B、C、Dの主キーはやめて、列A、B、C、D、G、H、Iの
 複数列によるUNIQUE制約を設定。

・A(UNIQUE&NOT NULL)← 主キーはやめる
・B(UNIQUE&NOT NULL)← 主キーはやめる
・C(UNIQUE&NOT NU...続きを読む

Aベストアンサー

RDBMS名とバージョンは、何ですか?

DDL(定義)は、RDBMSによる機能差、仕様差が多い部分です。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング