Esta parte do curso tratará de como inserir, alterar e excluir registros em tabelas. É estritamente necessário que a parte anterior do curso já tenha sido dominada. Para que os comandos sejam bem fixados, recomendo que esse módulo seja estudado em três dias. Estou disponibilizando um tópico adicional, "Controle de Transações". Como o tópico "Trabalhando com Conjuntos" da seção anterior, ele consta aqui mais por caráter informativo.

    Inserindo Registros

    • 01. A forma abaixo é muito conveniente para tabelas com poucos campos, mas nos demais casos é notório a sua inadequação.

      INSERT INTO aluno VALUES (1,"MARCOS",NULL,NULL,"6.245.664-7",NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,"M","S",NULL,NULL);

    • 02. A inclusão seguinte tem faz a mesma coisa que o exemplo anterior, mas atribuindo valores apenas para os campos especificados. Os demais serão assumidos como nulos. Além de ser mais curto, não precisamos nos preocupar em ver a ordem dos campos na tabela nem se foram inseridos novos campos nela desde a última vez que realizamos a mesma operação.

      INSERT INTO aluno(codaluno,nome,identidade,sexo,estadocivil) VALUES (1,"MARCOS","6.245.664-7","M","S");

    • 03. Os exemplos acima inserem um registro de cada vez. Em alguns casos, é interessante selecionar alguns registros e inserí-los diretamente em uma única operação. Neste caso, estou dizendo que os alunos ativos em 2003 terão como data de vencimento da parcela o último dia do mês. E informo qualquer número não repetido como chave primária da tabela em questão.

      INSERT INTO findesconto(codigo,codmatricula,dia) SELECT codmatricula,codmatricula,31 FROM matricula WHERE anoletivoatual=2003 AND status="A"

    Atualizando Registros

    • 01. Altera o estado civil de TODOS os alunos para solteiro

      UPDATE aluno SET estadocivil="S"

    • 02. O aluno passa a ser identificado pelo documento de reservista, se for do sexo masculino e tiver o documento.

      UPDATE aluno SET identidade=docreservista, identidadeorgao=docorgao, identidadeestado='DF' WHERE sexo="M" AND docreservista IS NOT NULL

    Excluindo Registros

    • 01. Exclui todos os registros de aluno. Naturalmente, basta que um aluno tenha matriculas para que a operação não seja permitida.

      DELETE FROM aluno

    • 02. Exclui todos os alunos que não tenham matricula. Novamente, esta operação não se realizará se um dos alunos a ser excluído tiver fiador, por exemplo. Verificar na modelagem do sistema se existem outros relacionamentos. Relacionamentos são um tipo de restrição de integridade. Não faz sentido ter uma matrícula em que não sabemos qual é o aluno.

      DELETE FROM aluno WHERE NOT codaluno IN SELECT codaluno FROM matricula

    Controle de Transações

      Considero que o Controle de Transações é a característica que diferencia um RDMS de coisas como Access, Fox-pro ou Clipper. Esse é outro tópico em que visualizei diferenças significativas entre os dialetos. No caso, comparo funcionamento do Oracle com o Interbase. No Oracle, apenas os comandos de DML iniciam uma transação. No Interbase, um SELECT também o faz. Isso implica que, no Interbase, uma vez iniciada a transação, será necessário efetivá-la ou cancelá-la para que possamos ver os dados já atualizados e efetivados por outras transações, feitas por outros usuários em outros computadores. No Oracle, temos acesso às atualizações tão logo elas sejam efetivadas por outros. Isso dá um caráter mais "monousuário" ao Interbase, isto é, ele não consegue trabalhar muito bem quando muitos usuários estão acessando a base de dados. Em compensação, exige menos recursos do servidor e a sua instalação é menor. Três disquetes contra um CD inteiro do Oracle. Neste tópico, explanarei superficialmente sobre o Controle de Transações do Interbase.

    • 01. Iniciando uma transação. Toda vez em que não há nenhuma transação ativa e ocorre um comando de SELECT, INSERT, UPDATE ou DELETE; automaticamente uma transação é iniciada.

      DELETE FROM finparcelas WHERE codmatricula IN (SELECT codmatricula FROM matricula WHERE codaluno=29967)

    • 02. Incluindo mais operações à transação. Quando a transação já está ativada, qualquer modificação nos dados dos tipos acima passam a fazer parte da transação.

      DELETE FROM matricula WHERE codaluno=29967

    • 03. A idéia principal da transação é a sequinte: ou todas as alterações da transação são efetivadas com sucesso ou nenhuma alteração será feita. A transação é UNA. Se ocorre um erro em uma das operações, toda a transação é automáticamente desfeita, sem que nenhum dos outros usuários percebam o que ocorreu.

      DELETE FROM aluno WHERE codaluno=26697

    • 03. Efetivando a transação. Se não houve nenhum erro, o comando abaixo grava efetivamente todas as alterações.

      COMMIT

    • 04. Ainda, mesmo não havendo nenhum erro para o Interbase, o programador pode desfazer toda a transação usando o comando abaixo. Esses dois comandos encerram a transação. Nenhuma transação ativa passa a existir. Também enquanto a transação estiver ativa, os demais usuários enxergam os dados como eles estavam no início de SUAS transações ou de sua transação: a que houver iniciado primeiro.

      ROLLBACK

      E assim finalizamos a segunda parte do curso.