ホームページ  >  記事  >  データベース  >  Oracleデータベースのフィールドを変更する方法

Oracleデータベースのフィールドを変更する方法

青灯夜游
青灯夜游オリジナル
2022-03-02 18:13:5118210ブラウズ

Oracle では、「ALTER TABLE MODIFY」ステートメントを使用してフィールドを変更できます。構文は「ALTER TABLE テーブル名 MODIFY フィールド名 実行する必要がある操作」です。一般的な操作には次のものが含まれます: 列の可視性の変更、列のデフォルト値の変更、仮想列を変更する式など。

Oracleデータベースのフィールドを変更する方法

このチュートリアルの動作環境: Windows 7 システム、Oracle 11g バージョン、Dell G3 コンピューター。

Oracle データベースのフィールドを変更する方法

Oracle では、「ALTER TABLE MODIFY」ステートメントを使用してフィールドを変更し、既存のフィールドの値。定義。

テーブル内の列の定義を変更するには、次のように ALTER TABLE MODIFYcolumn 構文を使用します。

ALTER TABLE 表名 
MODIFY 字段名 需要执行的操作;

ステートメントは簡単です。テーブルの列を変更するには、列名、テーブル名、および実行する操作を指定する必要があります。

Oracle ではさまざまな操作を実行できますが、一般的に使用される主な操作は次のとおりです。

  • 列の表示/非表示を変更する

  • NULL 値を許可または禁止する

  • 列のサイズを短縮または拡大する

  • 列のデフォルト値を変更する

  • 仮想列を変更する式

複数の列を変更するには、次の構文を使用します:

ALTER TABLE 表名
MODIFY (
    字段名1 action,
    字段名2 action,
    ...
);

Oracle ALTER TABLE MODIFY列の例

最初に、デモ用に 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>

Third

、次の SELECT ステートメントを使用して挿入操作を確認します: <pre class="brush:php;toolbar:false">SELECT     * FROM     accounts;</pre>上記のクエリ ステートメントを実行すると、次の結果が得られます -

Oracleデータベースのフィールドを変更する方法

#1. 列の表示/非表示を変更しますOracle 12c では、テーブル列を非表示または表示として定義できます。非表示の列は、

SELECT
    *
FROM
    table_name;

DESCRIBE table_name;

などのクエリには使用できません。非表示の列は見つかりません。

ただし、非表示の列をクエリで明示的に指定することで、非表示の列をクエリすることは可能です。

SELECT
    invisible_column_1,
    invisible_column_2
FROM
    table_name;

デフォルトでは、テーブルの列は表示されます。非表示の列は、テーブルの作成時、または

ALTER TABLE MODIFY

列ステートメントを使用するときに定義できます。 たとえば、次のステートメントは

full_name

列を非表示にします: <pre class="brush:php;toolbar:false">ALTER TABLE accounts  MODIFY full_name INVISIBLE;</pre> テーブル内のクエリ データを再度実行すると、次の結果が得られます-

Oracleデータベースのフィールドを変更する方法次のステートメントは、

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>次のステートメント検証更新:

<pre class="brush:php;toolbar:false">SELECT     * FROM     accounts;</pre>

上記のクエリ ステートメントの実行結果では、元の電話番号の国際市外局番の前に

86

が付いていることが確認できるはずです。 。

#列のサイズを短くするには、列内のすべてのデータが新しいサイズに適合することを確認してください。

Oracleデータベースのフィールドを変更する方法たとえば、

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>この問題を解決するには、まず電話番号から国際コードを削除する必要があります (例:

86

):

UPDATE
    accounts
SET
    phone = REPLACE(
        phone,
        '+86 ',
        ''
    );

REPLACE() 関数は部分文字列を次のように置き換えます。新しい文字列。この場合、 86 は空の文字列に置き換えられます。

次に、phone 列のサイズを短くします:

<pre class="brush:php;toolbar:false">ALTER TABLE accounts  MODIFY phone VARCHAR2( 12 );</pre>

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>

执行上面查询语句,可以看到以下结果 

Oracleデータベースのフィールドを変更する方法

5. 修改列的默认值

添加一个名为status的新列,默认值为1accounts表中。参考以下语句 -

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;

执行上面查询语句,应该看类似下面的结果 

Oracleデータベースのフィールドを変更する方法

正如所看到的那样,ID4的账户的status列的值是0

推荐教程:《Oracle教程

以上がOracleデータベースのフィールドを変更する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。