説明
このステートメントは、既存のテーブルの構造を変更するために使用されます。これには、テーブルおよびテーブル属性の変更、列の追加、列および属性の変更、列の削除などが含まれます。
構文
ALTER TABLE table_name alter_table_actions;
| ALTER TABLE EXTERNAL table_name alter_table_actions;
| ALTER TABLE table_name alter_column_group_option;
| ALTER TABLE EXTERNAL table_name ADD PARTITION '(' add_external_table_partition_actions ')' LOCATION STRING_VALUE;
| ALTER TABLE EXTERNAL table_name DROP PARTITION LOCATION STRING_VALUE;
alter_table_actions:
alter_table_action
| alter_table_actions ',' alter_table_action
| exclude_alter_table_action
exclude_alter_table_action:
alter_partition_option
| modify_partition_info
| auto_split_range_partition_option
alter_table_action:
table_option_list_space_seperated
| SET table_option_list_space_seperated
| opt_alter_compress_option
| alter_column_option
| alter_tablegroup_option
| RENAME relation_factor
| RENAME TO relation_factor
| alter_index_option
| DROP CONSTRAINT constraint_name
| enable_option ALL TRIGGERS
| REFRESH
| enable_macro_block_bloom_filter
| DYNAMIC_PARTITION_POLICY [=] (dynamic_partition_policy_list)
dynamic_partition_policy_list:
dynamic_partition_policy_option [, dynamic_partition_policy_option ...]
dynamic_partition_policy_option:
ENABLE = {true | false}
| PRECREATE_TIME = {'-1' | '0' | 'n {hour | day | week | month | year}'}
| EXPIRE_TIME = {'-1' | '0' | 'n {hour | day | week | month | year}'}
alter_partition_option:
DROP PARTITION drop_partition_name_list
| DROP PARTITION drop_partition_name_list UPDATE GLOBAL INDEXES
| RENAME PARTITION relation_name TO relation_name
| add_range_or_list_partition
| SPLIT PARTITION relation_factor split_actions
| TRUNCATE PARTITION name_list
| TRUNCATE PARTITION name_list UPDATE GLOBAL INDEXES
| MODIFY PARTITION relation_factor add_range_or_list_subpartition
| RENAME SUBPARTITION relation_name TO relation_name
| DROP SUBPARTITION drop_partition_name_list
| DROP SUBPARTITION drop_partition_name_list UPDATE GLOBAL INDEXES
| TRUNCATE SUBPARTITION name_list
| TRUNCATE SUBPARTITION name_list UPDATE GLOBAL INDEXES
| EXCHANGE {PARTITION partition_name
| SUBPARTITION subpartition_name} WITH TABLE origin_table_name INCLUDING INDEXES WITHOUT VALIDATION
alter_column_group_option:
ADD COLUMN GROUP '(' column_group_list ')' alter_column_group_delayed_desc
| DROP COLUMN GROUP '(' column_group_list ')' alter_column_group_delayed_desc
modify_partition_info:
MODIFY hash_partition_option
| MODIFY list_partition_option
| MODIFY range_partition_option
auto_split_range_partition_option:
PARTITION BY RANGE '(' ')' opt_auto_split_tablet_size_option
| PARTITION BY RANGE '(' column_name_list ')' subpartition_option opt_auto_split_range_partition_info
| MODIFY PARTITION BY RANGE '(' ')' opt_auto_split_tablet_size_option
| MODIFY PARTITION BY RANGE '(' column_name_list ')' subpartition_option auto_split_tablet_size_option
| MODIFY PARTITION BY RANGE '(' column_name_list ')' subpartition_option auto_split_tablet_size_option opt_range_partition_list
add_external_table_partition_actions:
add_external_table_partition_action
| add_external_table_partition_actions ',' add_external_table_partition_action
| /* empty */
opt_auto_split_tablet_size_option:
| AUTO_SPLIT_TABLET_SIZE '(' integer_value ')'
| /* empty */
構文の説明
| パラメータ | 説明 |
|---|---|
ALTER TABLE table_name alter_table_actions |
通常のテーブルを変更します。 |
ALTER TABLE EXTERNAL table_name alter_table_actions |
外部テーブルを変更します。 |
ALTER TABLE table_name alter_column_group_option |
列グループを変更します。 |
ALTER TABLE EXTERNAL table_name ADD PARTITION (...) LOCATION STRING_VALUE |
外部テーブルにパーティションを追加します。 |
ALTER TABLE EXTERNAL table_name DROP PARTITION LOCATION STRING_VALUE |
外部テーブルのパーティションを削除します。 |
table_option_list_space_seperated |
テーブルのさまざまなオプションを設定します。 |
SET table_option_list_space_seperated |
SETステートメントを使用してテーブルオプションを設定します。 |
opt_alter_compress_option |
テーブルの圧縮オプションを変更します。 |
alter_column_option |
列定義を変更します。 |
alter_tablegroup_option |
テーブルグループオプションを変更します。 |
RENAME relation_factor |
テーブルの名前を変更します。 |
DROP CONSTRAINT constraint_name |
约束を削除します。 |
REFRESH |
テーブルをリフレッシュします。 |
enable_macro_block_bloom_filter |
マクロブロックレベルのブルームフィルターを永続化するかどうかを指定します。値は以下のとおりです:
説明OceanBaseデータベースV4.3.5バージョンでは、 |
DROP PARTITION partition_name |
指定されたパーティションを削除します。 |
RENAME PARTITION old_name TO new_name |
パーティションの名前を変更します。パーティションまたはサブパーティションの名前を変更する場合、new_name は変更後のパーティション名を指定します (大文字と小文字は区別されません)。パーティションの名前変更操作は、メインテーブルの関連パーティションを変更しますが、ローカルインデックスのパーティション名には影響しません。パーティション名の変更結果は、ビュー USER_TAB_PARTITIONS および USER_TAB_SUBPARTITIONS を使用して確認できます。詳細については、パーティションの名前の変更参照してください。パーティションの名前を変更する際、関連するパーティションロックリソースを保持するDMLと競合が発生した場合、DMLが関連するパーティションロックリソースを解放するまで、パーティション名の変更操作がブロックされます。 |
SPLIT PARTITION partition_name split_actions |
パーティションを分割します。手動でパーティションを分割するために使用され、split_at_format と split_into_format の2種類の形式があります。詳細については、以下の split_partition_option参照してください。 |
TRUNCATE PARTITION partition_name |
パーティションデータを削除します |
MODIFY PARTITION partition_name ... |
パーティションのプロパティを変更します。これは、サブパーティションを追加することを示します。
注意Hash型のサブパーティションに対しては、サブパーティションの追加はサポートされていません。 |
ADD COLUMN GROUP (column_list) [DELAYED] |
列グループを追加します。テーブルをカラムストアテーブルに変更します。詳細は以下のとおりです:
|
DROP COLUMN GROUP (column_list) [DELAYED] |
列グループを削除します。テーブルのストレージ形式を削除します。詳細は以下のとおりです:
|
MODIFY hash_partition_option |
ハッシュパーティションを変更します |
MODIFY list_partition_option |
リストパーティションを変更します |
MODIFY range_partition_option |
レンジパーティションを変更します |
PARTITION BY RANGE (...) opt_auto_split_tablet_size_option |
レンジパーティションの自動分割を設定します |
AUTO_SPLIT_TABLET_SIZE (size) |
パーティションの自動分割のサイズしきい値を設定します |
add_external_table_partition_action |
外部テーブルパーティションの具体的なプロパティを定義します |
add_external_table_partition_actions ',' action |
複数の外部テーブルパーティションを定義します |
ADD |
列を追加します。現在、主キー列の追加はサポートされていません |
MODIFY COLUMN |
列のプロパティを変更します |
MODIFY CONSTRAINT |
约束の状態を有効または無効に変更します。外部キー制約と CHECK 制約のみサポートされています |
DROP PRIMARY KEY |
主キーを削除します。
説明Oracleモードでは、テーブルが外部キー情報の親テーブルである場合、主キーの削除は許可されません。 |
EXCHANGE {PARTITION partition_name \| SUBPARTITION subpartition_name} WITH TABLE origin_table_name INCLUDING INDEXES WITHOUT VALIDATION |
パーティション交換を指定します。その中で:
|
| DYNAMIC_PARTITION_POLICY [=] (dynamic_partition_policy_list) | テーブルの動的パーティション管理プロパティを変更します。dynamic_partition_policy_list は動的パーティションポリシーの構成可能なパラメータのリストであり、各パラメータは英語のカンマで区切られています。詳細については、以下の dynamic_partition_policy_option を参照してください。
説明OceanBaseデータベースV4.3.5バージョンでは、V4.3.5 BP2バージョンからテーブルの動的パーティション管理プロパティを指定することがサポートされています。 |
split_partition_option
SPLIT PARTITION partition_name AT (value) [INTO (PARTITION split_partition_name1, PARTITION [split_partition_name2])]:この構文を使用してパーティションを分割する場合、指定されたvalueを境界としてソースパーティションを2つのパーティションに分割します。また、INTO句を使用して分割されたパーティションに名前を設定することもできます。SPLIT PARTITION partition_name INTO (PARTITION split_partition_name VALUES LESS THAN (value) [, PARTITION split_partition_name VALUES LESS THAN (value) ...], PARTITION split_partition_name):この構文を使用してパーティションを分割する場合、1つのパーティションを複数のパーティションに分割できます。パーティション分割で定義されるvalueの範囲は、ソースパーティションのvalueの範囲と同一である必要があり、かつvalueは昇順で定義する必要があります(最後のパーティション分割の定義は不要であり、そのvalueはソースパーティションと同じです)。
手動でパーティションを分割する方法の詳細については、手動でのパーティション分割を参照してください。
dynamic_partition_policy_option
ENABLE = {true | false}:動的パーティション管理を有効にするかどうかを示します。値は以下のとおりです:true:デフォルト値で、動的パーティション管理を有効にすることを示します。false:動的パーティション管理を無効にすることを示します。
PRECREATE_TIME = {'-1' | '0' | 'n {hour | day | week | month | year}'}:事前作成時間を示します。動的パーティション管理をスケジュールするたびに、パーティションが事前作成され、最大パーティションの上限 > now() + precreate_time となります。値は以下のとおりです:-1:デフォルト値で、パーティションを事前作成しないことを示します。0:現在のパーティションのみを事前作成することを示します。n {hour | day | week | month | year}:指定された時間範囲のパーティションを事前作成することを示します。例えば、3 hourは3時間以内のパーティションを事前作成することを意味します。
説明
- 複数のパーティションを事前作成する必要がある場合、パーティション境界の間隔は
TIME_UNITとなります。 - 最初に事前作成されるパーティションの境界は、既存の最大パーティションの境界から
TIME_UNITで切り上げられます。
EXPIRE_TIME = {'-1' | '0' | 'n {hour | day | week | month | year}'}:オプションで、パーティションの有効期限を示します。動的パーティション管理をスケジュールするたびに、パーティションの上限 < now() - expire_time のすべての期限切れパーティションが削除されます。変更可能で、値は以下のとおりです:-1:デフォルト値で、パーティションが永遠に期限切れにならないことを示します。0:現在のパーティション以外のすべてのパーティションが期限切れになることを示します。n {hour | day | week | month | year}:パーティションの有効期限を示します。例えば、1 dayはパーティションの有効期限が1日であることを示します。
動的パーティションテーブルを変更する方法の詳細については、動的パーティションテーブルの変更を参照してください。
例:
ALTER TABLE tbl2 SET DYNAMIC_PARTITION_POLICY(
ENABLE = true,
PRECREATE_TIME = '1 day',
EXPIRE_TIME = '-1'
);
例
テーブル
tbl1内のフィールドcol1のフィールドタイプを変更します。obclient> CREATE TABLE tbl1(col1 VARCHAR(3)); obclient> ALTER TABLE tbl1 MODIFY col1 CHAR(10); obclient> DESCRIBE tbl1;テーブル
tbl1内の列col1の名前をcol2に変更します。obclient> ALTER TABLE tbl1 RENAME COLUMN col1 TO col2; obclient> DESCRIBE tbl1;列を追加および削除します。
テーブル
tbl2を作成します。obclient> CREATE TABLE tbl2 (col1 NUMBER(30) PRIMARY KEY,col2 VARCHAR(50));テーブル
tbl2にcol3列を追加します。obclient> ALTER TABLE tbl2 ADD col3 NUMBER(30); obclient> DESCRIBE tbl2;テーブル
tbl2のcol3列を削除します。obclient> ALTER TABLE tbl2 DROP COLUMN col3; obclient> DESCRIBE tbl2;テーブル
tbl2に一意のインデックスを作成します。obclient> CREATE TABLE tbl2 (col1 NUMBER(30) PRIMARY KEY,col2 VARCHAR(50), col3 INT); obclient> ALTER TABLE tbl2 ADD CONSTRAINT constraint_TBL2 UNIQUE (col2, col3); obclient [SYS]> DESC tbl2; obclient> INSERT INTO tbl2 VALUES('1','2','2'); obclient> INSERT INTO tbl2 VALUES('2','2','2'); obclient> INSERT INTO tbl2 VALUES('2','3','2');
テーブル
ref_t2に外部キーを追加し、DELETE操作がサブテーブルとマッチする行の親テーブル内のキー値に影響を与える場合は、SET NULL操作を実行します。obclient> CREATE TABLE ref_t1(c1 INT PRIMARY KEY,C2 INT); obclient> CREATE TABLE ref_t2(c1 INT PRIMARY KEY,C2 INT); obclient> ALTER TABLE ref_t2 ADD CONSTRAINT fk1 FOREIGN KEY (c2) REFERENCES ref_t1(c1) ON DELETE SET NULL;テンプレート化されていないパーティションテーブル
tbl3のパーティションp1にパーティションp1_r4を追加します。obclient> ALTER TABLE tbl3 MODIFY PARTITION p1 ADD SUBPARTITION p1_r4 VALUES LESS THAN(2022);テンプレート化されていないパーティションテーブル
tbl3のパーティションp3_r3を削除します。obclient> ALTER TABLE tbl3 DROP SUBPARTITION p2_r3;テンプレート化されていないパーティションテーブル
tbl3にパーティションp4を追加します。パーティションの定義とそのパーティション内のサブパーティションの定義を同時に指定する必要があります。obclient> ALTER TABLE tbl3 ADD PARTITION p4 VALUES LESS THAN (400) ( SUBPARTITION p4_r1 VALUES LESS THAN (2019), SUBPARTITION p4_r2 VALUES LESS THAN (2020), SUBPARTITION p4_r3 VALUES LESS THAN (2021) );テンプレート化されたパーティションテーブル
tbl4にパーティションp3を追加します。パーティションの定義のみを指定する必要があり、サブパーティションの定義はテンプレートに従って自動的に埋め込まれます。obclient> CREATE TABLE tbl4(col1 INT, col2 INT, PRIMARY KEY(col1,col2)) PARTITION BY RANGE(col1) SUBPARTITION BY RANGE(col2) SUBPARTITION TEMPLATE ( SUBPARTITION p0 VALUES LESS THAN (50), SUBPARTITION p1 VALUES LESS THAN (100) ) ( PARTITION p0 VALUES LESS THAN (100), PARTITION p1 VALUES LESS THAN (200), PARTITION p2 VALUES LESS THAN (300) ); obclient> ALTER TABLE tbl4 ADD PARTITION p3 VALUES LESS THAN (400);テーブル
tbl5の並列度を3に変更します。obclient> CREATE TABLE tbl5(col1 int primary key, col2 int) PARALLEL 5; obclient> ALTER TABLE tbl5 PARALLEL 3;または:
obclient> CREATE TABLE tbl5(col1 int primary key, col2 int) PARALLEL 5; obclient> ALTER /*+ parallel(3) */ TABLE tbl5;外部キー制約の状態を変更します。
obclient> CREATE TABLE MMS_GROUPUSER ( "ID" VARCHAR2(254 BYTE) NOT NULL, "GROUPID" VARCHAR2(254 BYTE), "USERID" VARCHAR2(254 BYTE), CONSTRAINT "PK_MMS_GROUPUSER" PRIMARY KEY ("ID"), CONSTRAINT "FK_MMS_GROUPUSER_02" FOREIGN KEY ("GROUPID") REFERENCES MMS_GROUPUSER ("ID") ON DELETE CASCADE DISABLE ); obclient> SELECT CONSTRAINT_NAME,CONSTRAINT_TYPE,TABLE_NAME,STATUS FROM user_constraints WHERE CONSTRAINT_NAME LIKE 'FK_MMS_GROUPUSE%'; obclient> ALTER TABLE MMS_GROUPUSER ENABLE CONSTRAINT FK_MMS_GROUPUSER_02; obclient> SELECT CONSTRAINT_NAME,CONSTRAINT_TYPE,TABLE_NAME,STATUS FROM user_constraints WHERE CONSTRAINT_NAME LIKE 'FK_MMS_GROUPUSE%';パーティションテーブル
tbl6のパーティションM202001とM202002からすべてのデータをクリアします。obclient> CREATE TABLE tbl6 (log_id number NOT NULL,log_value varchar2(50),log_date date NOT NULL DEFAULT sysdate) PARTITION BY RANGE(log_date) ( PARTITION M202001 VALUES LESS THAN(TO_DATE('2020/02/01','YYYY/MM/DD')) , PARTITION M202002 VALUES LESS THAN(TO_DATE('2020/03/01','YYYY/MM/DD')) , PARTITION M202003 VALUES LESS THAN(TO_DATE('2020/04/01','YYYY/MM/DD')) , PARTITION M202004 VALUES LESS THAN(TO_DATE('2020/05/01','YYYY/MM/DD')) , PARTITION M202005 VALUES LESS THAN(TO_DATE('2020/06/01','YYYY/MM/DD')) , PARTITION MMAX VALUES LESS THAN (MAXVALUE) ); obclient> ALTER TABLE tbl6 TRUNCATE PARTITION M202001, M202002 UPDATE GLOBAL INDEXES;テーブル
tbl7のCHECK制約tbl7_equal_check1を削除します。obclient> CREATE TABLE tbl7 (col1 INT, col2 INT, col3 INT,CONSTRAINT tbl7_equal_check1 CHECK(col2 = col3 * 2) ENABLE VALIDATE); obclient> SELECT CONSTRAINT_NAME,CONSTRAINT_TYPE,TABLE_NAME,STATUS FROM user_constraints WHERE TABLE_NAME LIKE 'TBL%'; obclient> ALTER TABLE tbl7 DROP CONSTRAINT tbl7_equal_check1; obclient> SELECT CONSTRAINT_NAME,CONSTRAINT_TYPE,TABLE_NAME,STATUS FROM user_constraints WHERE TABLE_NAME LIKE 'TBL%';テーブル
tbl8をテーブルグループtblgroup1からテーブルグループtblgroup2に移動します。obclient> SHOW TABLEGROUPS; obclient> ALTER TABLE tbl8 SET TABLEGROUP tblgroup2; obclient> SHOW TABLEGROUPS;テーブル
primary_tableに外部キー制約cons_fk1を追加します。obclient> CREATE TABLE primary_table (id NUMBER PRIMARY KEY, names VARCHAR(100) NOT NULL, foreign_col NUMBER); obclient> CREATE TABLE reference_table (id NUMBER PRIMARY key, comments VARCHAR2(100) NOT NULL); obclient> ALTER TABLE primary_table ADD CONSTRAINT cons_fk1 FOREIGN KEY(foreign_col) REFERENCES reference_table(id);テーブル
tbl9に主キー制約tbl1_pkを追加します。obclient> CREATE TABLE tbl9 (col1 NUMBER, col2 INT,col3 VARCHAR2(100)); obclient> ALTER TABLE tbl9 ADD CONSTRAINT tbl1_pk PRIMARY KEY (col1);テーブル
tbl9の主キーをcol2列に変更します。obclient> ALTER TABLE tbl9 MODIFY PRIMARY KEY(col2);テーブル
tbl9の主キーを削除します。obclient> ALTER TABLE tbl9 DROP PRIMARY KEY;パーティションとサブパーティションの名前を変更します。
/* パーティションテーブル range_range_table を作成し、col1 に基づいてローカルインデックスを作成 */ CREATE TABLE range_range_table(col1 INT, col2 INT, col3 INT) PARTITION BY RANGE(col1) SUBPARTITION BY RANGE(col2) (PARTITION p0 VALUES LESS THAN(100) (SUBPARTITION sp0 VALUES LESS THAN(100), SUBPARTITION sp1 VALUES LESS THAN(200) ), PARTITION p1 VALUES LESS THAN(200) (SUBPARTITION sp2 VALUES LESS THAN(100), SUBPARTITION sp3 VALUES LESS THAN(200), SUBPARTITION sp4 VALUES LESS THAN(300) ) ); CREATE INDEX local_idx_for_range_range_tb ON range_range_table (col1) LOCAL; /* パーティションの名前を変更しますが、この変更はローカルインデックスのパーティション名には影響しません */obclient> SELECT partition_name FROM SYS.USER_TAB_PARTITIONS WHERE table_name = 'RANGE_RANGE_TABLE'; obclient> ALTER TABLE range_range_table RENAME PARTITION p0 TO p10; obclient> SELECT partition_name FROM SYS.USER_TAB_PARTITIONS WHERE table_name = 'RANGE_RANGE_TABLE'; obclient> SELECT partition_name FROM SYS.USER_IND_PARTITIONS WHERE index_name = 'LOCAL_IDX_FOR_RANGE_RANGE_TB'; /* サブパーティションの名前を変更しますが、この変更はローカルインデックスのパーティション名には影響しません */ obclient> SELECT partition_name, subpartition_name FROM SYS.USER_TAB_SUBPARTITIONS WHERE table_name = 'RANGE_RANGE_TABLE'; obclient> ALTER TABLE range_range_table RENAME SUBPARTITION sp0 TO sp10; obclient> SELECT partition_name, subpartition_name FROM SYS.USER_TAB_SUBPARTITIONS WHERE table_name = 'RANGE_RANGE_TABLE'; obclient> SELECT partition_name, subpartition_name FROM SYS.USER_IND_SUBPARTITIONS WHERE index_name = 'LOCAL_IDX_FOR_RANGE_RANGE_TB';テーブルのカラムストアプロパティを変更します。
以下のSQLステートメントを使用してテーブル
tbl1を作成します。CREATE TABLE tbl1 (col1 INT PRIMARY KEY, col2 VARCHAR(50));テーブル
tbl1を行ストアとカラムストアの冗長テーブルに変更し、次に行ストアとカラムストアの冗長プロパティを削除します。ALTER TABLE tbl1 ADD COLUMN GROUP(all columns, each column);ALTER TABLE tbl1 DROP COLUMN GROUP(all columns, each column);テーブル
tbl1をカラムストアテーブルに変更し、次にカラムストアプロパティを削除します。ALTER TABLE tbl1 ADD COLUMN GROUP(each column);ALTER TABLE tbl1 DROP COLUMN GROUP(each column);
テーブル内の列のSkip Indexプロパティを変更します。
以下のSQLステートメントを使用してテーブル
test_skidxを作成します。CREATE TABLE test_skidx( col1 NUMBER SKIP_INDEX(MIN_MAX, SUM), col2 FLOAT SKIP_INDEX(MIN_MAX), col3 VARCHAR2(1024) SKIP_INDEX(MIN_MAX), col4 CHAR(10) );テーブル
test_skidx内の列col2のSkip IndexプロパティをSUMSkip Indexタイプに変更します。ALTER TABLE test_skidx MODIFY col2 FLOAT SKIP_INDEX(SUM);テーブル作成後に新しい列のSkip Indexプロパティを追加します。テーブル
test_skidx内の列col4にMIN_MAXSkip Indexタイプを追加します。ALTER TABLE test_skidx MODIFY col4 CHAR(10) SKIP_INDEX(MIN_MAX);テーブル作成後に列のSkip Indexプロパティを削除します。テーブル
test_skidx内の列col1のSkip Indexプロパティを削除します。ALTER TABLE test_skidx MODIFY col1 NUMBER SKIP_INDEX();
テーブルプロパティを変更し、永続化マクロブロックレベルのブルームフィルターを無効にするために、以下のコマンドを実行します。
ALTER TABLE tb SET enable_macro_block_bloom_filter = False;
Oracleテナントにおける読み取り専用および読み書き可能なテーブル
Oracleテナントでは、CREATE TABLE ステートメントを使用して READ ONLY および READ WRITE タイプのテーブルを作成できます。また、ALTER TABLE ステートメントを使用してテーブルの読み書き属性を変更することもできます。
注意
SUPER 権限を持つユーザーは関連する操作を正常に実行できません。通常のユーザーを使用することを推奨します。
操作手順:
通常のユーザーを作成します:
CREATE USER test1 IDENTIFIED BY "12345";ユーザーに接続およびテーブル作成権限を付与します:
GRANT CREATE SESSION TO test1; GRANT CREATE TABLE TO test1;通常のユーザーでOceanBaseデータベースに接続します:
obclient -hxxx.xx.xxx.xxx -P2881 -utest1@oracle001 -A読み取り専用テーブルを作成します:
CREATE TABLE tb_readonly1(id INT) READ ONLY;読み取り専用テーブルにデータを挿入しようとします(失敗が予想されます):
INSERT INTO tb_readonly1 VALUES (1); -- 期待されるエラー:ORA-00600: internal error code, arguments: -5235, The table 'TEST1.TB_READONLY1' is read only so it cannot execute this statement読み書き可能なテーブルを作成します:
CREATE TABLE tb_readwrite1(id INT) READ WRITE;読み書き可能なテーブルにデータを挿入します(成功が予想されます):
INSERT INTO tb_readwrite1 VALUES (99),(98); -- 期待される結果:Query OK, 2 rows affected (0.002 sec) -- Records: 2 Duplicates: 0 Warnings: 0読み書き可能なテーブルを読み取り専用テーブルに変換します:
ALTER TABLE tb_readwrite1 READ ONLY;変換後の読み取り専用テーブルにデータを挿入しようとします(失敗が予想されます):
INSERT INTO tb_readwrite1 VALUES (96),(97); -- 期待されるエラー:ORA-00600: internal error code, arguments: -5235, The table 'TEST1.TB_READWRITE1' is read only so it cannot execute this statement