Oracle では、「ALTER TABLE MODIFY」ステートメントを使用してフィールドを変更できます。構文は「ALTER TABLE テーブル名 MODIFY フィールド名 実行する必要がある操作」です。一般的な操作には次のものが含まれます: 列の可視性の変更、列のデフォルト値の変更、仮想列を変更する式など。
このチュートリアルの動作環境: Windows 7 システム、Oracle 11g バージョン、Dell G3 コンピューター。
Oracle では、「ALTER TABLE MODIFY
」ステートメントを使用してフィールドを変更し、既存のフィールドの値。定義。
テーブル内の列の定義を変更するには、次のように ALTER TABLE MODIFY
column 構文を使用します。
ALTER TABLE 表名 MODIFY 字段名 需要执行的操作;
ステートメントは簡単です。テーブルの列を変更するには、列名、テーブル名、および実行する操作を指定する必要があります。
Oracle ではさまざまな操作を実行できますが、一般的に使用される主な操作は次のとおりです。
列の表示/非表示を変更する
NULL 値を許可または禁止する
列のサイズを短縮または拡大する
列のデフォルト値を変更する
仮想列を変更する式
複数の列を変更するには、次の構文を使用します:
ALTER TABLE 表名 MODIFY ( 字段名1 action, 字段名2 action, ... );
最初に、デモ用に accounts という名前の新しいテーブルを作成します。
-- 12c语法 CREATE TABLE accounts ( account_id NUMBER GENERATED BY DEFAULT AS IDENTITY, first_name VARCHAR2(25) NOT NULL, last_name VARCHAR2(25) NOT NULL, email VARCHAR2(100), phone VARCHAR2(12) , full_name VARCHAR2(51) GENERATED ALWAYS AS( first_name || ' ' || last_name ), PRIMARY KEY(account_id) );
2 番目に、新しいテーブルを作成します。テーブルを accounts テーブルにいくつかの行を挿入します: <pre class="brush:php;toolbar:false">INSERT INTO accounts(first_name,last_name,phone)
VALUES('Trinity',
'Knox',
'410-555-0197');
INSERT INTO accounts(first_name,last_name,phone)
VALUES('Mellissa',
'Porter',
'410-555-0198');
INSERT INTO accounts(first_name,last_name,phone)
VALUES('Leeanna',
'Bowman',
'410-555-0199');</pre>
、次の SELECT ステートメントを使用して挿入操作を確認します: <pre class="brush:php;toolbar:false">SELECT
*
FROM
accounts;</pre>
上記のクエリ ステートメントを実行すると、次の結果が得られます -
#1. 列の表示/非表示を変更しますOracle 12c では、テーブル列を非表示または表示として定義できます。非表示の列は、
SELECT * FROM table_name;
や
DESCRIBE table_name;
などのクエリには使用できません。非表示の列は見つかりません。
ただし、非表示の列をクエリで明示的に指定することで、非表示の列をクエリすることは可能です。
SELECT invisible_column_1, invisible_column_2 FROM table_name;
デフォルトでは、テーブルの列は表示されます。非表示の列は、テーブルの作成時、または
ALTER TABLE MODIFY 列ステートメントを使用するときに定義できます。 たとえば、次のステートメントは
列を非表示にします: <pre class="brush:php;toolbar:false">ALTER TABLE accounts
MODIFY full_name INVISIBLE;</pre>
テーブル内のクエリ データを再度実行すると、次の結果が得られます-
次のステートメントは、
full_name 列を除く accounts
テーブルのすべての列のデータを返します。 <pre class="brush:php;toolbar:false">SELECT
*
FROM
accounts;</pre>
これは ## のためです。 #full_name
ALTER TABLE accounts MODIFY full_name VISIBLE;
2. null を許可または禁止する例次のステートメント 変更email
列は空ではない (not null) 値を受け入れます:
ALTER TABLE accounts MODIFY email VARCHAR2( 100 ) NOT NULL;
ただし、Oracle は次のエラーを発行します:
SQL Error: ORA-02296: cannot enable (OT.) - null values found列を
null
からnot null に変更する場合は、既存のデータが新しい制約に準拠していることを確認する必要があります (つまり、
NULL が許可されていない場合)元のデータ)。
この問題を解決するには、まず
email
UPDATE accounts SET email = LOWER(first_name || '.' || last_name || '@oraok.com') ;
LOWER() 関数は文字列を変換することに注意してください。小文字にします。 次に、email
列の制約を変更します:ALTER TABLE accounts MODIFY email VARCHAR2( 100 ) NOT NULL;
これで、期待どおりに動作するはずです。
3. 列のサイズを拡大または縮小する例国際コードを phone## に追加するとします。 # 列 (例:
86 をプレフィックスとして付けます)。列の値を変更する前に、次のステートメントを使用して phone
列のサイズを拡張する必要があります: <pre class="brush:php;toolbar:false">ALTER TABLE accounts
MODIFY phone VARCHAR2( 24 );</pre>
これで、電話番号データを更新できます: <pre class="brush:php;toolbar:false">UPDATE
accounts
SET
phone = '+86 ' || phone;</pre>
次のステートメント検証更新:
上記のクエリ ステートメントの実行結果では、元の電話番号の国際市外局番の前に
86が付いていることが確認できるはずです。 。
たとえば、
phone列のサイズを
12 文字に削減しようとすると、<pre class="brush:php;toolbar:false">ALTER TABLE accounts
MODIFY phone VARCHAR2( 12 );</pre>
Oracle Database は次のエラーを発行します: <pre class="brush:php;toolbar:false">SQL Error: ORA-01441: cannot decrease column length because some value is too big</pre>
この問題を解決するには、まず電話番号から国際コードを削除する必要があります (例:
):
UPDATE accounts SET phone = REPLACE( phone, '+86 ', '' );
REPLACE() 関数は部分文字列を次のように置き換えます。新しい文字列。この場合、 86
は空の文字列に置き換えられます。
次に、phone
列のサイズを短くします:
4. 仮想列
# を変更します。 ##前提条件 次の 2 列形式でフルネームを入力します: last_name, first_name
これを行うには、仮想列 full_name
ALTER TABLE accounts MODIFY full_name VARCHAR2(52) GENERATED ALWAYS AS (last_name || ', ' || first_name);
以下语句验证修改:
<pre class="brush:php;toolbar:false">SELECT * FROM accounts;</pre>执行上面查询语句,可以看到以下结果
5. 修改列的默认值
添加一个名为status
的新列,默认值为1
到accounts
表中。参考以下语句 -
ALTER TABLE accounts ADD status NUMBER( 1, 0 ) DEFAULT 1 NOT NULL ;
当执行了该语句,就会将accounts
表中的所有现有行的status
列中的值设置为1
。
要将status
列的默认值更改为0
,请使用以下语句:
ALTER TABLE accounts MODIFY status DEFAULT 0;
可以在accounts
表中添加一个新行来检查status
列的默认值是0
还是1
:
INSERT INTO accounts ( first_name, last_name, email, phone ) VALUES ( 'Julia', 'Madden', 'julia.madden@oraok.com', '410-555-0200' );
现在,查询accounts
表中的数据:
SELECT * FROM accounts;
执行上面查询语句,应该看类似下面的结果
正如所看到的那样,ID
为4
的账户的status
列的值是0
。
推荐教程:《Oracle教程》
以上がOracleデータベースのフィールドを変更する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。