Dúvida de como funciona rollback e commit.

Estou tentando usar o sc_commit_trans(); e sc_rollback_trans(); porém não esta funcionando, tenho inserção no banco no afterinsert e no beforeinsert, porém forcei o erro no beforeinsert quando ele executa o “sc_exec_sql($insert_sql);” ele não cai no catch e da um erro do sc_exec_sql, caso ocorra um erro no afterinsert, preciso que ele faça o rollback das informações inserida no beforeinsert.

Exemplo de como estou fazendo (beforeinsert):

[b]sc_begin_trans()

// Insere os dados na TB_CAD_Tipo_Sanguineo após inserir o TB_CAD_CIDADAO (bloco6)

	sc_lookup(dataset,"SELECT SEQ_TB_CAD_TIPO_SANGUINEO.NEXTVAL FROM DUAL");

	if(!empty({dataset})):
		$ID_TIPO_SANG = {dataset[0][0]};
	endif;	
	
	try
	{

	// Monta SQL
	$insert_table  = 'TB_CAD_TIPO_SANGUINEO';      // Table name
	$insert_fields = array(   // Field list, add as many as needed
 		'ID_TIPO_SANG' => "$ID_TIPO_SANG",
 		'TIPO' => "'{TIPO_SANGUINEO}'",
		'RH' => "'{RH}'",
		'DOADOR' => "'{DOADOR}'",
	);

	// Insert record
	$insert_sql = 'INSERT INTO ' . $insert_table
		. ' ('   . implode(', ', array_keys($insert_fields))   . ')'
		. ' VALUES ('    . implode(', ', array_values($insert_fields)) . ')';
	sc_exec_sql($insert_sql);
	sc_commit_trans();
	}
	catch (Exception $e)
	{
	sc_rollback_trans();
	echo "Ocorreu o seguinte erro : ", $e->getMessage(), "\n";
	}

	// Atribuindo o valor para ser inserido no TB_CAD_CIDADAO
	{FK_ID_TIPO_SANG} = $ID_TIPO_SANG;[/b]

Verifique antes se na configuração de conexões, está configurado como Transacional.