DICA: Forms_DDL
Com certeza você que trabalha com FORMS já teve problemas com transações DML não comitadas. Isso mesmo utilizando o comando COMMIT no bloco PL/SQL.
Existe um Built in no forms chamado Forms_DDL. Com ele é possível comitar ou dar rollback em todas as transações DML pendentes no FORMS.
Ex: forms_ddl('COMMIT'); forms_ddl('ROLLBACK');
Também é possível executar bloco PL/SQL anônimo com ele:
forms_ddl ('Begin Update_Employee (:emp.empno); End;');
Algumas instruções DDL também são possíveis, como CREATE TABLE
/*** Built-in: FORMS_DDL
** Example: The expression can be a string literal.
*/
BEGIN
Forms_DDL('create table temp(n NUMBER)');
IF NOT Form_Success THEN
Message ('Table Creation Failed'); ELSE Message ('Table Created');
END IF;
END;
Até a versão 6i, o forms_ddl tinha algumas restrições como não efetuar DROP de tabelas ou DATABASE LINKS. Não fiz o teste no 10g ainda para saber se isso se mantém.
Fonte
- Help Forms 6i
Abraço