データが入っている表の列のデータ型を変更する最適な方法を探しています。 Oracleは、NULL値を持つ列のデータ型の変更のみを許可します。本番データベースの列データ型を変更する
私の解決策は、変更する列のデータをコレクションに格納し、テーブルを変更してコレクションを反復処理し、元のデータをデータ型に変換して復元するPLSQLステートメントです。
-- Before: my_table (id NUMBER, my_value VARCHAR2(255))
-- After: my_table (id NUMBER, my_value NUMBER)
DECLARE
TYPE record_type IS RECORD (id NUMBER, my_value VARCHAR2(255));
TYPE nested_type IS TABLE OF record_type;
foo nested_type;
BEGIN
SELECT id, my_value BULK COLLECT INTO foo FROM my_table;
UPDATE my_table SET my_value = NULL;
EXECUTE IMMEDIATE 'ALTER TABLE my_table MODIFY my_value NUMBER';
FOR i IN foo.FIRST .. foo.LAST
LOOP
UPDATE my_table
SET = TO_NUMBER(foo(i).my_value)
WHERE my_table.id = foo(i).id;
END LOOP;
END;
/
私はそれをもっと熟練した方法で探しています。
これを正しく実行している間、データベースが数時間稼働中に停止するという単純な答えです。 **あなたがDBに書く人を止めない限り、あなたはすべてが正しいことを**保証することはありません。 – Ben
テーブルの大きさはどれくらいですか?この時間にテーブルをアプリケーションで使用できるようにする必要がありますか? –