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;