Oracleデータベースは、データが完全な場合にフィールドの精度を変更することを保証します.

7097 ワード

orderテーブルのtotalフィールドの精度を変更するとします。

  • フィールドが空の場合
  • alter table order modify (total NUMBER(24,4) NOT NULL);
    
  • フィールドにデフォルト値がある場合、すなわちデフォルト値が与えられた場合、業務の下にライン上の実際の書き方に影響を与えない.もしこの表に千万のデータ量があれば、このようなスクリプトを実行するのに時間がかかる.SqlUpgradeLogでこのスクリプトが1回しか実行されないことを保証する.ライン上で何度もアップグレードを実行しても、初めてシステムに影響を与え、システムの安定性を高める
  • .
    declare
      size Int;
    Begin
      size := 0;
      Select Count(1) Into size From SqlUpgradeLog Where ID = '  id';
      If size = 0 Then
      	--total   tmp_total
    	execute immediate 'alter table order rename column total to tmp_total';
    	
    	--  total  ,           
    	execute immediate 'alter table order add total NUMBER(24,4) default 0 NOT NULL';
    	
    	--       total
    	execute immediate 'update order set total = tmp_total';
    	
    	--  tmp_total
    	execute immediate 'alter table order drop column tmp_total';
    	
        Insert Into SqlUpgradeLog(id,time,desc) values('  id',sysdate,'  ');
    	commit;
      End If;
    End;
    
  • フィールドがデフォルト値を与えられない場合、nullを先に与え、not nullに変更する必要があります.注意:このフィールドに空の値がないことを確認しなければなりません.下に線の実際の書き方を与えなければなりません.もしこの表に千万のデータ量があれば、このようなスクリプトを実行するのに時間がかかります.SqlUpgradeLogでスクリプトが1回しか実行されないことを保証します.線上で何度もアップグレードを実行しても、1回だけシステムに影響を与え、システムの安定性を高めます.
    declare
      size Int;
    Begin
      size := 0;
      Select Count(1) Into size From SqlUpgradeLog Where ID = '  id';
      If size = 0 Then
     	--total   tmp_total
    	execute immediate 'alter table order rename column total to tmp_total';
    	
    	--  total  ,           
    	execute immediate 'alter table order add total NUMBER(24,4) NULL';
    	
    	--       total
    	execute immediate 'update order set total = tmp_total';
    	
    	-- total  not null
    	execute immediate 'alter table order modify (total NUMBER(24,4) NOT NULL)';
    	
    	--  tmp_total
    	execute immediate 'alter table order drop column tmp_total';
    	
        Insert Into SqlUpgradeLog(id,time,desc) values('  id',sysdate,'  ');
    	commit;
      End If;
    End;