4D v16

Princípios para Integração 4D e motor SQL de 4D

Página Inicial

 
4D v16
Princípios para Integração 4D e motor SQL de 4D

Princípios para Integração 4D e motor SQL de 4D  


 

 

Basicamente, o motor SQL de 4D é compatível com SQL-92. Isto significa que para uma descrição detalhada dos comandos, funções, operadores e sintaxes a utilizar, pode se referir a documentação do SQL-92. Múltiplos recursos sobre este tema estão disponíveis em Internet.

No entanto, o motor SQL de 4D não suporta o 100% das funções do SQL-92 e oferece outras funções adicionais específicas.

Esta seção cobre as principais implementações e limitações do motor SQL de 4D.

Uma vez que o motor SQL de 4D foi integrado no coração do banco de dados de 4D, todas as limitações relativas ao número máximo de tabelas, colunas (campos) e registros por base, assim como as regras para dar nomes as tabelas e colunas, são as mesmas as do motor padrão de 4D. São enumeradas a continuação.

  • Número máximo de tabelas: teoricamente dois bilhões, mas por razões de compatibilidade com 4D: 32767.
  • Número máximo de colunas (campos) por tabela: teoricamente dois bilhões de colunas (campos), mas por razões de compatibilidade com 4D: 32767.
  • Número máximo de linhas (registros) por tabela: um bilhão.
  • Número máximo de chaves de índice: 128 bilhões para os tipos alfa, texto e flutuante; 256 bilhões para os outros tipos (escalares)
  • Uma chave primária não pode ser um valor NULL e deve ser única. Não é necessário indexar as colunas (campos) chaves primárias.
  • Número máximo de caracteres permitido para os nomes de tabelas e campos: 31 caracteres (limitação 4D).
Não está permitido criar várias tabelas com o mesmo nome. Aplica o mecanismo de controle padrão de 4D.

A seguinte tabela indica os tipos de dados suportados no SQL de 4D assim como seu tipo correspondente em 4D:

Tipo 4D SQLDescrição4D
VarcharTexto AlfanuméricoTexto ou Alfa
RealNúmero de ponto flutuante no faixa de +/-1.7E308Real
NumericNúmero entre +/- 2E64Inteiro 64 bits
FloatNúmero de ponto flutuante (virtualmente infinito)Float
SmallintNúmero entre -32 768 e 32 767Inteiro
Int Número entre -2 147 483 648 e 2 147 483 647Inteiro longo, Inteiro
Int64 Número entre +/- 2E64Inteiro 64 bits
UUIDNúmero de 16 bytes (128 bits) contém 32 caracteres hexadecimaisAlpha format UUID
Bit Campo que só aceita os valores TRUE/FALSE ou 1/0Booleano
Boolean Campo que só aceita os valores TRUE/FALSE ou 1/0Booleano
BlobHasta 2 GB; todo objeto binário tal como uma imagem, um documento, uma aplicaçãoBlob
Bit varyingAté 2 GB; todo objeto binário tal como uma imagem, um documento, uma aplicaçãoBlob
ClobAté 2 GB de texto. Esta coluna (campo) não pode ser indexada. Não é salvada no registro mesmo.Texto
TextAté 2 GB de texto. Esta coluna (campo) não pode ser indexada. Não é salvada no registro mesmo.Texto
TimestampData em formato 'YYYY/MM/DD' e hora em formato 'HH:MM:SS:ZZ'Partes Data e Hora gerados separadamente (conversão automática)
DurationDuração em formato 'HH:MM:SS:ZZ'Hora
IntervalDuração em formato 'HH:MM:SS:ZZ'Hora
PictureImagem PICT até de 2 GBImagem

A conversão entre os tipos de dados numéricos é automática.
As cadeias que representam um número não se convertem em um número correspondente. Existem funções CAST especiais que converterão os valores de um tipo a outro.
Os seguintes tipos de dados SQL não são implementados:

  • NCHAR
  • NCHAR VARYING.

Os valores NULL se implementam na linguagem SQL de 4D, assim como no motor de banco de dados de 4D. No entanto, não são suportados na linguagem 4D. No entanto, é possível ler e escrever valores NULL em um campo 4D utilizando os comandos Is field value Null e SET FIELD VALUE NULL.

Por razões de compatibilidade em 4D, os valores NULL armazenados nas tabelas do banco de dados 4D se converte automaticamente em valores por padrão quando é manipulado sob a linguagem 4D. Por exemplo, no caso da seguinte instrução:

 mivarAlf:=[minhatabela]MeuCampoAlfa

... se o campo MeuCampoAlfa contém um valor NULL, a variável mivarAlfa conterá "" (cadeia vazia).

Os valores por padrão dependem do tipo de dado:

  • Para os tipos Alfa e Texto: ""
  • Para os tipos Real, Inteiro e Inteiro longo: 0
  • Para o tipo Data: "00/00/00"
  • Para o tipo Hora: "00:00:00"
  • Para o tipo Booleano: Falso
  • Para o tipo Imagem: Imagem vazia
  • Para o tipo BLOB: BLOB vazio

Por outra parte, este mecanismo, em princípio, não se aplica aos tratamentos realizados a nível do motor do banco de dados 4D, tais como as consultas. Na verdade, a pesquisa de um valor "vazio" (por exemplo meuvalor = 0) não encontra registros que armazenem o valor NULL e vice-versa. Quando os dois tipos de valores (valores por padrão e NULL) estão presentes nos registros para um mesmo campo, alguns processos podem ser alterados ou necessitar código adicional.

Para evitar estes inconvenientes, uma opção permite padronizar todos os procedimentos da linguagem 4D: Mapear valores NULOS a valores vazios. Esta opção, que é encontrada na janela Inspetor de campos do editor de estrutura, permite estender o princípio de utilizar os valores por padrão em todos os tratamentos. Os campos que contenham valores NULL se consideram sistematicamente que contém valores por padrão. Esta opção está selecionada por padrão.

A propriedade Mapear valores NULOS a valores vazios é levado em conta a um nível muito baixo do motor do banco de dados. Atua mais particularmente no comando Is field value Null.

A propriedade de campo Rejeitar valor NULO de entrada permite evitar o armazenamento de valores NULL:

Quando este atributo está selecionado para um campo, não será possível armazenar o valor NULL neste campo. Esta propriedade de baixo nível corresponde exatamente ao atributo NOT NULL de SQL.
Geralmente, se deseja poder utilizar os valores NULL em seu banco de dados 4D, se recomenda utilizar exclusivamente a linguagem SQL de 4D.

Nota: Em 4D, os campos também podem ter o atributo "Obrigatório". Os dois conceitos são similares, mas seu alcance é diferente: o atributo "obrigatório" é um controle de entrada, ainda que o atributo "Rejeitar valor NULO de entrada" trabalha ao nível do motor do banco de dados.
Se um campo com este atributo recebe um valor NULL, é gerado um erro.

O servidor SQL integrado de 4D suporta as constantes data e hora de acordo ao API ODBC. Esta é a sintaxe para as sequências de constantes data e hora ODBC:

{constant_type 'value'}

tipo_constantevalorDescrição
daaaa-mm-ddData unicamente
thh:mm:ss[.fff]Hora unicamente
tsaaaa-mm-dd hh:mm:ss[.fff]Data e hora (timestamp)

Note: fff indica milissegundos.

Por exemplo, pode utilizar as seguintes constantes:

{ d '2013-10-02' }
{ t '13:33:41' }
{ ts '1998-05-02 01:23:56.123' }

O SQL date parser rejeita qualquer expressão de dada especificando "0" como o dia ou mês. Expressões como  {d'0000-00-00'} ou CAST('0000-00-00' AS TIMESTAMP) gera um erro. Para realizar pesquisas SQL em datas blank (não deve ser confundido com datas null), deve usar uma expressão 4D intermediária. Por exemplo:

 C_LONGINT($count)
 $nullDate:=!00-00-00!
 Begin SQL
            SELECT COUNT(*) FROM Table_1
            WHERE myDate = :$nullDate
            INTO :$count;
 End SQL

Uma propriedade de segurança foi adicionada para os métodos projeto 4D: Disponível via SQL:

Quando está selecionada, esta opção permite a execução do método de projeto pelo motor SQL de 4D. Não está selecionada por padrão, o que significa que os métodos projeto 4D estão protegidos e não podem ser chamados pelo motor SQL de 4D a menos que tenha sido expressamente autorizado ao selecionar esta opção.

Esta propriedade se aplica a todas as consultas SQL, tanto internas como externas, se executada via o driver ODBC, o código SQL inserido entre as etiquetas Begin SQL/End SQL, ou via o comando QUERY BY SQL.

Notas:

  • Inclusive quando um método tem o atributo "Disponível via SQL", os direitos de acesso definidos a nível das Propriedades da base e as propriedades do método são levadas em consideração durante sua execução.
  • A função ODBC SQLProcedure devolve unicamente os métodos projeto que têm o atributo "Disponível via SQL".

  • Transações Auto-commit: esta opção permite ativar o mecanismo de auto-commit no motor SQL. O propósito do modo auto-commit é preservar a integridade referencial dos dados. Quando esta opção estiver selecionada, toda pesquisa SELECT, INSERT, UPDATE e DELETE (SIUD) não realizada dentro de uma transação se inclui automaticamente em uma operação ad hoc. Isso garante que as consultas se executarão em sua totalidade ou em caso de erro, se cancelarão totalmente.
  • As consultas incluídas em uma transação (gestão personalizada da integridade referencial) não se verão afetadas por esta opção.
    Quando esta opção não estiver selecionada, não se geram transações automáticas (exceto para as consultas SELECT... FOR UPDATE, consulte o comando SELECT). Como padrão, esta opção não está selecionada.
    Também pode administrar esta opção por programação utilizando o comando SET DATABASE PARAMETER.
    Nota
    : somente os bancos locais consultados pelo motor SQL de 4D se vêm afetados por este parâmetro. No caso das conexões externas a outros bancos de dados SQL, o mecanismo de auto-commit é manejado pelos motores SQL remotos.
  • Levar em consideração as maiúsculas e minúsculas nas comparações de cadeias de caracteres: esta opção permite modificar a sensibilidade às maiúsculas e minúsculas dos caracteres nas consultas SQL. Está selecionada como padrão, o que significa que o motor SQL diferencia entre maiúsculas e minúsculas quando se comparam strings (ordenações e pesquisas). Por exemplo, "ABC" = "ABC", mas "ABC" # Abc "."
    Em alguns casos, por exemplo para alinhar o funcionamento do motor SQL com o do motor 4D, é possível que deseje que as comparações de cadeias de caracteres não sejam sensíveis às maiúsculas ("ABC" = "Abc"). Para isso, apenas deve desmarcar esta opção.
    Também pode administrar esta opção por programação utilizando o comando  SET DATABASE PARAMETER.

4D implementa o conceito de esquemas. Um esquema é um objeto virtual que contém as tabelas da base. No SQL, o propósito dos esquemas é atribuir direitos de acesso específicos aos diferentes conjuntos de objetos da base. Os esquemas dividem a base em entidades independentes que em conjunto formam toda a base. Em outras palavras, uma tabela sempre pertence a um só esquema.

  • Para criar um esquema, deve utilizar o comando CREATE SCHEMA. A continuação, pode utilizar os comandos GRANT e REVOKE para configurar os tipos de acesso aos esquemas.
  • Para associar uma tabela a um esquema, pode chamar aos comandos CREATE TABLE ou ALTER TABLE. Também pode usar o menu pop-up "Esquemas"  do Inspetor do editor de estrutura de 4D, que lista todos os esquemas definidos na base:
  • O comando DROP SCHEMA permite eliminar um esquema

Nota: O controle de acesso sob os esquemas somente é aplicado as conexões desde o exterior. O código SQL executado em 4D via as etiquetas Begin SQL/End SQL, SQL EXECUTE, QUERY BY SQL, sempre têm acesso total.

A arquitetura multi-bases se implementa a nível do servidor SQL de 4D. Desde 4D é possível:

  • Conectar-se a uma base existente utilizando o comando SQL LOGIN.
  • Passar de uma a outra utilizando os comandos SQL LOGIN e SQL LOGOUT.
  • Para abrir e utilizar outra base 4D em lugar da base atual utilizando o comando USE DATABASE.

Na linguagem SQL, uma chave primária permite identificar em uma tabela a(s) coluna(s) (campos) responsáveis de designar de maneira única os registros (linhas). A definição de uma chave primária é particularmente necessária para a função de replicação dos registros de uma tabela de 4D (ver a seção Replicação via SQL) e para o histórico das tabelas 4D a partir da v14.

4D lhe permite administrar a chave primária de uma tabela de duas formas:

  • Via a linguagem SQL
  • Utilizando o editor de estrutura de 4D.
Nota:

Pode definir uma chave primária durante a criação de uma tabela (via o comando CREATE TABLE) ou ao agregar ou modificar uma coluna (via o comando ALTER TABLE). A chave primária se define utilizando a cláusula PRIMARY KEY seguida pelo nome da coluna ou de uma lista de colunas. Para obter mais informação, consulte a seção .

4D lhe permite criar e excluir diretamente chaves primárias via o menu contextual do editor da estrutura.

Para saber mais, consulte, Definir ou eliminar uma chave primária no manual de Desenho 4D.

O motor SQL integrado de 4D suporta vistas SQL padrão. Uma vista é uma tabela virtual com dados que podem proceder de várias tabelas das bases de dados. Uma vez que se define uma vista, pode utilizar em uma instrução SELECT como uma tabela real.

Os dados se encontram em uma vista se definem mediante uma petição de definição baseada no comando SELECT. As tabelas reais utilizadas na consulta de definição são chamadas "tabelas fontes". Uma vista SQL contém colunas e linhas como uma tabela estandarte, mas em realidade não existe, mas é só uma representação resultante do processamento e se armazena na memória. Só a definição da vista é realmente salva temporáriamente.

Dois comandos SQL se utilizam para administrar vistas em 4D v14: CREATE VIEW e DROP VIEW.



Ver também 

tipo_datos_sql

 
PROPRIEDADES 

Produto: 4D
Tema: Utilizar SQL em 4D

 
HISTÓRIA 

 
ARTICLE USAGE

Manual de SQL ( 4D v16)