Trabalhando e configurando um banco de dados padrão ANSI

Versão para impressãoEnviar para amigoVersão PDF
  • Para criar uma base que segue o padrão ANSI, utilizar a sintaxe WITH LOG MODE ANSI no CREATE DATABASE, ex.:
    CREATE DATABASE db_teste IN dbsDados WITH LOG MODE ANSI;
  • Para verificar se um banco é ANSI há duas maneiras:
    - SELECT name,is_ansi FROM sysmaster:sysdatabases
    - Logo após conectar no banco , na variavel SQLCA.SQLWARN[3] ="W"
  • Todo banco ANSI é unbuffered para garantir maior segurança para recuperar dados. Não é possível força-lo para buffered nem remover o log de transação.
  • Pode-se converter NÃO-ANSI (log, nolog, buflog) para ANSI basta utilizar o ontape ou ondblog
  • Não é possível trocar um banco ANSI para NÃO-ANSI. Caso seja necessário faze-lo, será preciso exportar o banco e reimportar através de algum utilitário ( dbexport/dbimport, unload/load , HPL).
  • ATENÇÃO: Muito cuidado quando é dado um grant de banco de dados para um usuário em um banco modo ANSI.Devido o padrão de Caixa Alta/Baixa ser diferente do banco NÃO-ANSI, ou seja, quando não é utilizado aspas para descrever o nome do usuário, pode ocorrer diferenças: - O nome cmartins no padrão ANSI não é igual ao cmartins do padrão NÃO-ANSI.
  • Quando um objeto é criado , nenhum privilégio é criado, sendo assim apenas o owner (dono) tem acesso ao objeto.
  • O dono (owner) de um objeto deverá ser sempre informado ao acessa-lo, ex.:
    select * from cesar.tabela_xyz.

    A unica exceção é quando o usuário é dono do objeto que está acessando.
  • Não é necessário utilizar o BEGIN WORK para iniciar uma transação porque nele todo DML é considerado que faz parte de uma transação. Porém é necessãrio executar um COMMIT WORK para informar quando finalizar uma transação.
  • O isolamento de transação padrão é o Repeatable Read.
  • O isolamento de transação possui algumas diferenças do recurso do Informix:
    • Não é permitido mudar o isolamento no meio de uma transação.
    • Ao alterar o isolamento de transação, este é válido apenas até o fim da transação após isso o isolamento volta para o padrão do banco.
      OBSERVAÇÃO: Testado na prática (Linux IDS 11.50 UC1de), isso não ocorreu!
  • SQL
    • O mesmo SQL (DML) deverá executar no NÃO-ANSI e ANSI , mesmo que o comando seja uma extenção do Informix.
    • Todo cursor declarado em um banco ANSI é por padrão um "FOR UPDATE" , limitando assim os recursos utilizados no SELECT em questão (não pode ter funcões de agrupamento como distinct, sum e não pode ter mais de uma tabela. Para um select com estes recursos é necessário especificar o parametro FOR READ ONLY no final do select. Em um banco NÃO-ANSI o padrão é read only.
    • Todos os sinonimos criados em um banco ANSI são PRIVATE e não é possivel mudar isso. Se tentar passar o parametro PUBLIC , irá ocorrer um erro de syntaxe.
    • É possível verificar se um SQL está de acordo com o padrão ANSI quando executado com o DBACCESS. Basta definir a variavel DBANSIWARN=1 ou passar o parametro "-ansi" no dbaccess quando executa-lo por linha de comando. assim o dbaccess retorna um WARNING e o código de SQLSTATE (ver manual SQL Syntax: get diagnostics) exemplo:
            echo "select * from teste" | dbaccess -ansi banco_ansi ; 
            dbaccess -ansi banco_ansi arquivo.sql ;
            

  • Comportamento dos tipos de dados (data type):
    • Em banco ANSI, para campos caractere (CHAR, LVARCHAR,NCHAR,NVARCHAR,VARCHAR) se o usuário informar um valor maior que o especificado no campo o banco retorna erro. Em banco NÃO-ANSI o valor é simplismente truncado.
    • Em banco ANSI para campos DECIMAL, na definição da tabela se não for especificado a parte fracional em um campo o valor padrão será 0 (zero), sendo assim será armazendo apenas numeros inteiros, por exemplo: DEC(10) = DEC(10,0). Em um banco NÃO-ANSI o padrão é 16.
    • Caracteres "escapados" (escape), são válidos apenas para caracteres especiais: "%","_" e o próprio escape "\\"
  • In ANSI-compliant databases, SELECT, DELETE, UPDATE, and INSERT statements all set SQLCODE to 100 if no rows are returned.

0
Ainda não votado
Sua avaliação: Nenhum

Comentar

O conteúdo deste campo é privado não será exibido ao público.
  • Endereços de páginas de internet e emails viram links automaticamente.
  • Você pode usar tags BBCode no texto.
  • Tags HTML permitidas: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>

Mais informações sobre as opções de formatação

CAPTCHA
Este teste é para bloquear programas automatizados e previnir spams
CAPTCHA de Imagem
Digite o texto exibido na imagem.