- ベストアンサー
- すぐに回答を!
Oracle テーブルの列削除
タイトルの通りテーブル(test)の列(retu)を削除したいのですが・・・ Sql*pLUS画面 SQL> alter table test drop(retu); ←この用に入力 alter table test drop(retu) * エラー行: 1: エラーが発生しました。 ORA-00905: キーワードがありません。 となってしまい列を削除できません。 なにか構文の間違いでしょうか?
- imasyu
- お礼率84% (43/51)
- その他(データベース)
- 回答数6
- ありがとう数3
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
- ベストアンサー
- 回答No.4
- bourbon
- ベストアンサー率46% (18/39)
alter table 表名 drop column 列名; はOracleのバージョン8.1.5からです。 それ以前の場合は表を再作成します、 まず、既存の表名を変更して、 create table as select します。その際に削除したい列は抜かします。 1.rename 既存の表名 to 新しい表名; 2.create table 既存の表名 as select 必要な列のみ記述 from 新しい表名; ただ、注意点としては「再作成」ですので、制約はNOT NULL以外全てなくなります。
その他の回答 (5)
- 回答No.6
- bourbon
- ベストアンサー率46% (18/39)
うーん、なるほど・・・。 初めて見ました。。。 申し訳ないんですが、環境を聞かせてもらってもいいですか? OSとかOracleのVersionなど、分かる範囲で構いませんので、 お願いします。 ちょっと調べてみます。 よろしくお願いします。
質問者からのお礼
何度も回答ありがとうございます。 本当にすいません!! 以前Versionを8.16と補足したのですが・・・ 改めて管理担当者に問い合わせたところ8.05ということでした。 もうすでに良回答もらってたんですね、こちらの認識不足でbourbonさんにいらぬ手間をお掛けしてしまいましたね。 もっと慎重に質問しなくてはと反省しております。 超初心者なのでこれからもいろいろと質問することもあると思いますが、またお願いします。
- 回答No.5
- bourbon
- ベストアンサー率46% (18/39)
ORA-00905のエラーは構文に必須項目が抜けているために起こるエラーです。 なので、構文通りにSQL文を記述できていない可能性があります。 ですので、 alter table 表名 drop column 列名; と構文通りに記述して頂ければ、削除はできると思います。 質問されているコメント欄には間違った構文が掲載されていますので↓ > Sql*pLUS画面 > SQL> alter table test drop(retu); ←この用に入力 > alter table test drop(retu) 構文どおりに行ってもできないということでしたら、その状態を 掲載してください。よろしくお願いします。
質問者からの補足
何度も回答ありがとうございます。 実はあれから他のテーブルの列を削除しないといけないことがありまして alter table test drop column retu; と入力したところ Oracle SQL*Plus画面-------------- SQL> alter table test drop column retu; alter table test drop column retu * エラー行: 1: エラーが発生しました。 ORA-00905: キーワードがありません。 SQL> -------------------------------- やはり同じエラーが出るようです。 列の追加や属性の変更はできるのですが・・・ またまれに DROP TABLE 表名; もできません、意味のないこととは知りつつも大文字にしてみたり小文字にしてみたりとそんなこともやってます。 何か思い当たることがありましたらよろしくお願いします。
- 回答No.3
- TMINET
- ベストアンサー率32% (45/140)
バージョンはいくつでしょうか? 列の削除コマンドが使えるのは8i以降のバージョンですが。
質問者からの補足
バージョンは8.16です。いろいろ試したのですができません・・・
- 回答No.2
- madman
- ベストアンサー率24% (612/2465)
すみません。切り貼りしたのでテーブル名を間違えました。 ALTER TABLE test DROP COLUMN retu;
質問者からの補足
さっそく試してみたのですがやはり同じエラーが出てしまいます。oracle自体に原因があるんでしょうか?
関連するQ&A
- SQLserverでの列の削除について
SQLserver2000にてSQL文の練習をしている、データベースの初心者です。 SQLserverでは、直接列の削除ができないと聞きました。 ---------------------------------------- ALTER TABLE テーブル名 DROP 列名 ---------------------------------------- ↑このようにはできませんでした。 そこで、いったん削除したい列以外の列がある別のテーブルをつくってからテーブル名を変更する方法として、 1,新しいテーブルを、元のテーブルからデータをコピーして作る。 2,元のテーブルを削除 3,新しいテーブルの名前を元の名前に変更。 という手段を使えばよいという情報を得ましたが、1の部分がどうしてもできません。 (テーブル削除、テーブル名の変更はできました) ---------------------------------------- CREATE TABLE 新しいテーブル名 AS SELECT 削除した列以外の列名 FROM 元のテーブル名 ---------------------------------------- このようにすると、 ---------------------------------------- サーバー : メッセージ 156、レベル 15、状態 1、行 2 キーワード 'AS' 付近に正しくない構文があります。 ---------------------------------------- といわれてしまいます。 EnterpriseManagerを使わずにやる方法が知りたいです。 正しいSQL文をどうかご教授ください。 どうぞよろしくお願いいたします。 ※ちなみにOSはWIN2000を使っています。
- ベストアンサー
- その他(データベース)
- NOT NULL 制約の削除
MSSQL(SQLServer2000)にて、NOT NULLの列制約をはずすにはどうしたらよいのでしょうか。 ALTER TABLE <テーブル名> ALTER COLUMN <列名> DROP NOT NULL をやってみたのですが、構文エラーになってしまいます。 よろしくお願いします。
- 締切済み
- SQL Server
- Oracleのテーブルのフィールドを削除したい
「総務部.受付ID-1」というフィールドを削除したいと思い以下を実行しました。 alter table VISITOR_SCHDULE drop 総務部.受付ID-1 しかしキーワードがありませんというエラーが表示されてしまいます。 フィールド名に.(ドット)と-(ハイフン)が使用されているからなのでしょうか? 前任者より引継ぎましたので、なぜこのようなフィールド名にしたかは不明です。
- ベストアンサー
- Oracle
- mysqlでのテーブル削除について質問します。
総称名を使ってテーブルを削除することは可能でしょうか? drop table test060301; drop table test060302; drop table test060303; drop table test060304; ↓ drop table test*; このやり方では、うまくいきません。 よろしくお願いします。
- ベストアンサー
- MySQL
- SQL Server(MSDE2000) : ALTER TABLE
SQL Server(MSDE2000) : ALTER TABLE した項目に対し、直後に UPDATE で値をセットできない 既存のテーブルを仕様変更するため、列を追加し、初期値で埋める SQL 文を書こうとしていますが、うまく動かず、エラーとなってしまい、原因が判らず困っています。 サンプル SQL 文: ------ CREATE TABLE TEST_TABLE ( TEST_FIELD1 SMALLINT, TEST_FIELD2 SMALLINT) INSERT INTO TEST_TABLE VALUES( 1, 2 ) ALTER TABLE TEST_TABLE ADD TEST_FIELD3 SMALLINT UPDATE TEST_TABLE SET TEST_FIELD3 = 3 ------ ※テスト毎に、必ず DROP TABLE TEST_TABLE されている事が前提です。 上記 SQL 文のうち、1行目~3行目までを抜粋して実行すると、ちゃんと CREATE TABLE され、INSERT され、ALTER TABLE される事を確認しました。 ところが、4行目までを一気に実行しようとすると、 ------ SQL実行中に以下のエラーが発生しました。 エラーコード:207 [Microsoft][ODBC SQL Server Driver][SQL Server]列名 'TEST_FIELD3' は無効です。 SQLステータス:S0022 ------ となってしまい、UPDATE で初期値を埋める事ができません。 しかも、UPDATE に失敗するどころか、2行目の INSERT から以降が結果に反映されなくなるという状況に陥ってしまいます。 また、既存のテーブルの仕様変更が目的なので、その状況に近づけるために、まず、 ------ CREATE TABLE TEST_TABLE ( TEST_FIELD1 SMALLINT, TEST_FIELD2 SMALLINT) INSERT INTO TEST_TABLE VALUES( 1, 2 ) ------ を実行し、既存のテーブル(とレコード内容)が存在する状態を作り出された事を、ツール等で確認してから、 ------ ALTER TABLE TEST_TABLE ADD TEST_FIELD3 SMALLINT UPDATE TEST_TABLE SET TEST_FIELD3 = 3 ------ の2行を実行してみると、やはり UPDATE は失敗し、前述と同じエラーが発生します。 またこの場合、ALTER TABLE の実行結果も反映されていません。(つまり、TEST_FIELD3 が列追加されていない) もちろん、ALTER TABLE だけを実行した場合には、ちゃんと列は追加されます。 その後に、UPDATE を実行すれば、ちゃんと追加列に初期値がセットされます。 どうやら、「一回の SQL 文の実行の中で、ALTER TABLE によって新設した列に対しては、UPDATE などでのアクセスはすぐにはできない」のではないか?という状況のようなのです。一回の SQL 文の実行の中において、何らかのトランザクション動作っぽい挙動を感じます。 つまり、ALTER TABLE で追加された列は、その時点ではまだ完全にシステムに認知されていないため、直後の UPDATE 文で認識できずに失敗するのではないか?と。そして、そこでのエラー発生が、ロールバック的に実行した処理をキャンセルしてしまうため、結果として、ALTER TABLE が実行されなかった事になったり、INSERT が実行されなかった事になったりしているのではないか?と思う次第です。 考えられる回避策としては、SQL 文を別々に作成し、個別に実行すれば良いだけの事なのですが、できれば、SQL 文一つにまとめたいと考えています。 どなたか、こういった現象に対する原因・理由の説明、或いは回避策など、何か情報をお持ちの方はいらっしゃいませんでしょうか? 宜しくお願いします。
- ベストアンサー
- SQL Server
- SQL テーブル削除
教えてください。 あるテーブルをエクスポートする際にエクスポートエラー が出ます。(このエラーは承知でエラーを出しています。)その際にエクスポートエラーのテーブルが作成されますが、このテーブルをSQLのDROP文で削除したいのですが テーブル名がエクスポートvエラー(v=スペースです。) になってしまいます。 例)T_1_エクスポートvエラー このテーブルを削除しようと DROP TABLE T_1_エクスポートvエラー ってSQLを書くとT_1_エクスポートが見つかりませんとエラーになってしまいます。 どうしたら、このテーブルを削除できるでしょうか? それとも、エクスポートエラーのテーブルを作成させない設定ってあるんでしょうか? わかりにくい説明でごめんなさい。 よろしくお願いします。
- 締切済み
- オフィス系ソフト
- 削除したテーブルを元に戻すことは出来ますか?
SQL server 2005を使っています。 誤ってDrop table ~~を使って必要なテーブルを削除してしまいました。 まだデータの圧縮とかはしていないのですが、 一旦削除したテーブルを元に戻すことは可能でしょうか?
- 締切済み
- SQL Server
- カラムの削除が出来ません
Microsoft SQL2000を使用しているのですが あるテーブル(table_A)のカラム(column_A)を削除したいので 以下のようなクエリ及び、GUIでの削除を実行しました。 ----------------実行クエリ----------------------- ALTER TABLE dbo.table_A DROP COLUMN column_A GO ------------------------------------------------- ところがどちらの削除を方法を実行しても以下のようなエラーメッセージが返されます。 -----------------エラーメッセージ---------------- テーブル 'table_A' - テーブルを修正できません。 ODBC エラー : [Microsoft][ODBC SQL Server Driver][SQL Server] 行 2: 'column_A' の近くに無効な構文があります。 ------------------------------------------------- カラム名の変更などはできるのですが どうしても削除だけ出来ません。 なお、このカラムは主キーとしての設定や 他のテーブルへの外部キーとしての設定を行っていません。 型は[varchar] (20) COLLATE Japanese_BIN NULLです。 どなたか対処方法をご存知の方がおられましたら ご回答よろしくお願いします。 それでは失礼します
- 締切済み
- SQL Server
- フィールドの削除でつまずいています。
フィールドの削除でつまずいています。 Aマシン VineLinux Bマシン RedHat9 同じデータを使っています。データベースもPostgreSQLです。 Aで、alter table test_table drop column test_field;でエラーが発生し Bでは何のエラーも無く実行できました。 考えられる原因は何でしょうか? ちなみに、 update test_table set test_field = null;としています。 SQLの知識が乏しいので、基礎的なことを忘れているかもしれません。
- ベストアンサー
- その他(データベース)
- エクスポートエラーのテーブル削除
お世話になります。 アクセス2000(Win2K)であるテーブル(T_テーブル)をExcelにエクスポートしているのですが、 この時にエクスポートエラーのテーブルが出来ます。 エラーの内容は承知しているのでこのエラーが出るのはいいのですがこのテーブル自体を削除したいのです。 SQLで「DROP TABLE T_テーブル_エクスポート エラー;」とクエリーを作って VBA上でOPENQUERYで上記SQLを実行しました。 ところがエクスポートとエラーの間のスペースが邪魔をして「T_テーブル_エクスポートが見つかりません」 とメッセージがでます。 どうしたらエクスポートエラーのテーブルを削除できるのでしょうか?
- ベストアンサー
- オフィス系ソフト
質問者からの補足
バージョンは8.16です。いろいろ試したのですができません。 とりあえずbourbonさんの解答を参考にしてなんとか思う通りのことは出来ました。列を削除できないことでなにか心当たりがありましたらお願いします。