TimesTenにおける相違点: トランザクション動作

TimesTenでは、トランザクションを終了する操作は、接続と関連付けられているすべてのカーソルをクローズします。

これには次のものがあります。

  • COMMIT文またはROLLBACK

  • DDL文

たとえば、一連のプロシージャを再コンパイルする次のシナリオを検討します。初回のALTER PROCEDUREの実行に、カーソル(pnamecurs)がクローズされるため、これは機能しません。

declare
   cursor pnamecurs is select * from all_objects where object_name like 'MYPROC%';
begin
   for rec in pnamecurs loop
     execute immediate 'alter procedure ' || rec.object_name || ' compile';
   end loop;
end;

そのかわりに、次のようにすると、すべてのプロシージャ名を内部表にフェッチしてから、アクティブなカーソルがないものに対してALTER PROCEDUREを実行することができます。

declare
   cursor pnamecurs is select * from all_objects where object_name like 'MYPROC%';
   type tbl is table of c%rowtype index by binary_integer;
   myprocs tbl;

begin
   open pnamecurs;
   fetch pnamecurs bulk collect into myprocs;
   close pnamecurs;
   for i in 1..myprocs.count loop
     execute immediate 'alter procedure ' || myprocs(i).object_name || ' compile';
   end loop;
end;