Download pdf - Apostila Do FireBird 2.0

Transcript
Page 1: Apostila Do FireBird 2.0

Apostila do FireBird 2.0com IBExpert

1

Page 2: Apostila Do FireBird 2.0

Criando o banco de dados no IbExpert

Um novo banco de dados pode ser criado simplesmente usando o menu Database/Create DataBase ou usando o respectivo ícone na barra de ferramentas. A tela para criar o banco de dados aparecerá:

(1) Server - Aqui você indica onde o banco de dados será armazenado:1. Remote – indica uma conexão remota2. Local – indica que o banco de dados será armazenado localmente.

(2) Server name - precisa ser conhecido caso o acesso seja remoto. As seguinte sintaxes podem ser usadas:

1. Windows – SERVER_NAME:C:\path\database.fdb2. Linux – SERVER_NAME:/path/database.fdb

(3) Protocol - o protocolo usado na conexão com o servidor: TCP/IP, NetBEUI ou SPX(4) Database - Caminho e nome do arquivo de banco de dados no servidor(5) Username - Nome do usuário. Padrão: SYSDBA(6) Password - Senha do usuário. Padrão: masterkey(7) SQL Dialect - Dialeto do banco. Padrão: 3(8) Page Size - Especifica o tamanho de pagina do banco de dados em bytes(9) Charset - Conjunto de caracteres. Brasil – ISO8859_1(10) Marque para registra o banco de dados após cria-lo.(11) Client Library File – Informa a API cliente para acesso ao banco de dados. Para o firebird iremos usar o fbclient.dll

2

Page 3: Apostila Do FireBird 2.0

Registrando o banco de dados

Registrar o banco de dados é necessário para que o IBExpert reconheça o banco. É possível especificar certas configurações durante o registro. O Editor de Registro de Banco de dados pode ser aberto usando o menu Database/Register Database.

3

Page 4: Apostila Do FireBird 2.0

Tipos de Dados do Firebird

O Firebird Dialect 3, suporta a maioria dos tipos de Dados do SQL. O Firebird, apenas não tem como tipo de dado, o tipo Boolean. Mas, isto não é uma falha do Firebird, outro SGDB´s também não tem este tipo de dado. Apesar de não ter este tipo de dado, podemos criar o nosso “tipo boolean” através de DOMAINS.

BLOB

O tipo de Dado BLOB, tem o tamanho variável, isto é, não sabemos na hora da criação do campo BLOB qual será o seu tamanho realmente, mas, o limite do campo Blob que está na documentação do Firebird, é de 64k por segmento.

Este tipo de campo é o tipo indicado para armazenar Textos Grandes “Memos”, Fotos, Gráficos, Ícones, isto é, aparentemente não tem um tipo de dado que não possa ser armazenado no Campo Blob. Campos Blob´s não podem ser indexados.

Saber qual o sub-tipo correto utilizar é essencial para criar aplicativos que se utilizem dos campos BLOBs. Os BLOBs se apresentam em 3 versões :

Sub-tipo 0 - Armazena dados em formato binário – Fotos, etc.Sub-tipo 1 - Armazena dados em formato texto – Memos.Sub-tipos definidos pelo usuário.

Além dos 2 Sub-tipos pré-definidos, também existem os Sub-tipos definidos pelo usuário. Esses tipos são determinados com o uso de valores negativos logo após a palavra SUB_TYPE. O número utilizado é um inteiro determinado arbitrariamente pelo usuário de acordo com sua preferência, desde que seja negativo.

A única consideração que deve ser tomada é a de se certificar de sempre armazenar o tipo pré-determinado de informação no respectivo sub-tipo de BLOB. O Firebird não faz nenhuma análise dos dados que estão sendo gravados, portanto essa é uma responsabilidade do aplicativo. Nenhum erro será retornado pelo Firebird se um tipo errado de dado for inserido em um BLOB de sub-tipo incorreto, mas um aplicativo pode ser prejudicado se ao recuperar as informações do BLOB, a mesma não corresponder ao formato esperado.

Sintaxe :

Estas declarações é na criação da tabela :MEMO BLOB SUB_TYPE 1;FOTO BLOB SUB_TYPE 0;

Ex :

CREATE TABLE FUNCIONARIOS (ID INTEGER NOT NULL PRIMARY KEY,NOME VARCHAR(50) NOT NULL,....,FOTO BLOB SUB_TYPE 0,EXPERIENCIA BLOB SUB_TYPE 1 SEGMENT SIZE 80,)

Dica :

O tamanho de segmento (Segment Size), é um pequeno pedaço de informação, tipo um conselho, que é mantido com a definição de um Blob. Quando se abre um Blob, pode-se perguntar por segmentos de qualquer tamanho, mas para alguns Blobs um determinado tamanho é mais conveniente que um outro. Blobs que armazenam texto, por exemplo,

4

Page 5: Apostila Do FireBird 2.0

freqüentemente utilizam segmentos de tamanho 80. O pré-processador e outros programas utilitários usam o tamanho do segmento para determinar o tamanho de buffers que são necessários para transferência de dados para e do Blob.

CHAR(n)

O tipo de Dado CHAR, tem o seu tamanho definido na hora da criação da tabela. Seu tamanho máximo é de 32767, 32k. Este tipo tem o seu tamanho fixo.

Ex :CREATE TABLE FUNCIONARIOS (ID INTEGER NOT NULL PRIMARY KEY,NOME VARCHAR(50) NOT NULL,...SEXO CHAR(01))

Este tipo de dado é usado quando você realmente souber o tamanho da coluna/campo a ser criada. Outro exemplo, é criar o coluna de DOMAIN BOLLEAN.

VARCHAR(n)

O tipo de Dado VARCHAR, tem o seu tamanho definido na hora da criação da tabela. Seu tamanho máximo é de 32767, 32k. Este tipo tem o seu tamanho variado na tabela. Isto é, se você criar uma coluna de 45 Caracteres, mas, a coluna tenha apenas 20 Caracteres gravados, o restante, os 25 Caracteres são descartados.

Ex :CREATE TABLE FUNCIONARIOS (ID INTEGER NOT NULL PRIMARY KEY,NOME VARCHAR(50) NOT NULL)

Este tipo de dado é usado quando você realmente não souber o tamanho da coluna/campo a ser criada.

Outros exemplos, são criar campos Descrições, Inscrições Estaduais.

DATE

O tipo de Dado DATE, no DIALECT 3, armazena a Data, e seu tamanho é de 32 bits inteiros longos.

Ex :CREATE TABLE FUNCIONARIOS (ID INTEGER NOT NULL PRIMARY KEY,NOME VARCHAR(50) NOT NULL,...,DATA_ADMISSAO DATE)

O Tipo Date, no Dialect 1, armazena Data e Hora ao mesmo tempo.

TIME

O tipo de Dado TIME, no DIALECT 3, armazena a hora, e seu tamanho é de 32 bits inteiros longos.

5

Page 6: Apostila Do FireBird 2.0

Ex :CREATE TABLE FUNCIONARIOS (ID INTEGER NOT NULL PRIMARY KEY,NOME VARCHAR(50) NOT NULL,...,HORA_ENTRADA TIME,HORA_SAIDA TIME)

O Tipo Time, no Dialect 1, não existia.

TIMESTAMP

O tipo de Dado TIMESTAMP, no DIALECT 3, armazena a Data e a hora ao mesmo tempo, e seu tamanho é de 32 bits inteiros longos.

Ex :CREATE TABLE PRODUTOS (ID INTEGER NOT NULL PRIMARY KEY,DESCRICAO VARCHAR(50) NOT NULL,...,DATA_HORA_MOVIMENTACAO TIMESTAMP)

O Tipo TimeStamp, no Dialect 1, não existia.

DECIMAL

O tipo de Dado DECIMAL, armazena dígitos a serem gravados na precisão especificada na criação da tabela.

Ex :CREATE TABLE FUNCIOARIOS (ID INTEGER NOT NULL PRIMARY KEY,DESCRICAO VARCHAR(50) NOT NULL,...,SALARIO DECIMAL(15,02))

NUMERIC

O tipo de Dado NUMERIC, armazenas dígitos a serem gravados na precisão especificada na criação da tabela.

Ex :CREATE TABLE FUNCIOARIOS (ID INTEGER NOT NULL PRIMARY KEY,DESCRICAO VARCHAR(50) NOT NULL,...,SALARIO NUMERIC(15,02))

SMALLINT

O tipo de Dado SMALLINT, armazena dígitos a serem gravados, mas, com o limite de : -32768 a 32767.

Serve para armazenar dados numéricos pequenos.

6

Page 7: Apostila Do FireBird 2.0

Ex :CREATE TABLE FUNCIOARIOS (ID INTEGER NOT NULL PRIMARY KEY,DESCRICAO VARCHAR(50) NOT NULL,...,ALTURA SMALLINT)

INTEGER

O tipo de Dado INTEGER, armazena dígitos a serem gravados, mas, diferente do SMALLINT, não existe um limite aparentemente, este tipo é de 32 bits, tem a escala de valores em : -2.147.483.648 até 2.147.483.648

Ex :CREATE TABLE FUNCIOARIOS (ID INTEGER NOT NULL PRIMARY KEY,DESCRICAO VARCHAR(50) NOT NULL,...)

BIGINT

O tipo de Dado BIGINT, armazena dígitos a serem gravados, não existe um limite aparentemente, este tipo é de 64 bits.

Ex :CREATE TABLE FUNCIOARIOS (ID BIGINT NOT NULL PRIMARY KEY,DESCRICAO VARCHAR(50) NOT NULL,...)

FLOAT

O tipo de Dado FLOAT, armazena dígitos a serem gravados, mas, com precisão simples de 7 dígitos.

Ex :CREATE TABLE PRODUTOS (ID INTEGER NOT NULL PRIMARY KEY,DESCRICAO VARCHAR(50) NOT NULL,VLR_ULT_CMP_ITEM FLOAT...)

DOUBLE PRECISION

Este é o tipo de campo no qual eu recomenda para uso monetário/valores no Firebird, Dialect 3. Sua precisão é de 64 bits, na documentação fala em usar apenas para valores científicos, mas, eu o uso em todos os sistemas, e obtenho sempre o arredondamento e precisão desejada.

Ex :CREATE TABLE MOV_FINANCEIRA (IDCODMOEDA CHAR(03) NOT NULL PRIMARY KEY,DATA_MOVIMENTACAO DATE NOT NULL PRIMARY KEY,VALOR_TOTAL_MOVIMENTACAO_DIA DOUBLE PRECISION);

7

Page 8: Apostila Do FireBird 2.0

Domínios

Conjunto de valores permitidos para um dado.

Cria uma definição de um “novo tipo de dado”. Onde pode ser feito também, checagem de valor, isto é, regras para o dado ser gravado neste “novo tipo de dado”. Quando falo em novo tipo de dado, não é possível no Firebird “sem alterar os fontes do mesmo”, criar um novo tipo de dado, mas, com DOMAINS, nós usamos dados já existentes, mas, especificando o tamanho e a regra a ser seguida.

Usando DDL:

CREATE DOMAIN domain [AS] <datatype>[DEFAULT { literal | NULL | USER}][NOT NULL] [CHECK ( <dom_search_condition>)][COLLATE collation];

Exemplo:

CREATE DOMAIN SEXO AS INTEGER DEFAULT 'M' NOT NULL CHECK (VALUE IN ('M','F');

CREATE DOMAIN QUANTIDADE AS NUMERIC (15,3) DEFAULT 0 NOT NULL CHECK (VALUE >= 0);

ALTER DOMAIN <domain_name>SET DEFAULT <default_value> | NULL | USER DROP DEFAULTADD CHECK <domain_search_condition> DROP CONSTRAINT;

DROP DOMAIN <domain_name>;

Usando IBExpert

Um novo domínio pode ser criado para o banco de dados conectado, usando o menu Database/New Domain, ou clicando com o botão direito do mouse no DB Explorer – Domains/New Domain.

(1) Name – Nome do domínio(2) Field Type – Tipo do campo(3) Size – Tamanho do campo

8

Page 9: Apostila Do FireBird 2.0

(4) Scale – Número de lugares decimais que pode ser especificado para todos campos numéricos

(5) Not Null – Determina se o campo poderá ter nulo ou não(6) SubType – Precisa ser especificado para campos tipo BLOB(7) Charset – Especificando um charset ele sobrescreverá o charset default do banco de

dados. Use ISO8859_1(8) Collate – Determina o collate para o charset especificado. Use PT_BR(9) Default Source – Valor que será armazenado caso o campo esteja como nulo.(10) Check – Verifica a integridade do domínio

Ex: VALUE > 0, VALUE IN ('ES','RJ')(11) Array – Determina um campo como array, digite aqui a faixa para o array.

Ex: 1:100(12) Description – Descrição para o domínio

Depois de definido o domínio basta clicar no botão Compile na barra de ferramentas.

Nome Tipo de campo

Tamanho Escala Não Nulo

Charset Collate Default Source

Check

DOM_CEP VARCHAR 10 ISO8859_1 PT_BRDOM_CODIGO INTEGER XDOM_CPF VARCHAR 15 ISO8859_1 PT_BRDOM_DATA DATEDOM_DATA_HORA TIMESTAMP CURRENT

_TIMEDOM_DESCRICAO VARCHAR 40 ISO8859_1 PT_BRDOM_DINHEIRO NUMERIC 15 2 0DOM_DOCUMENTO VARCHAR 20 ISO8859_1 PT_BRDOM_EMAIL VARCHAR 100 ISO8859_1 PT_BRDOM_ENDERECO VARCHAR 40 ISO8859_1 PT_BRDOM_ESTADO CHAR 2DOM_HORA TIMEDOM_IDENTIDADE VARCHAR 15 ISO8859_1 PT_BRDOM_NOME VARCHAR 60 X ISO8859_1 PT_BRDOM_TELEFONE VARCHAR 20 ISO8859_1 PT_BRDOM_TIPO_MOVIMENTO CHAR 1 X VALUE IN ('E','S')

9

Page 10: Apostila Do FireBird 2.0

Tabelas

Estrutura composta por linhas e colunas que serve para armazenar os dados em um banco de dados relacional. A linha indica uma ocorrência do objeto do mundo real, e a coluna serve para qualificar o objeto. Dessa forma, se imaginarmos uma tabela PESSOA, ela teria em cada linha uma pessoa e em cada coluna as informações relevantes dessa pessoa, como nome, peso, altura, data de nascimento, documento de identidade etc. A idéia central é que as características do objeto permitam identificar uma única pessoa em cada linha da tabela

Usando DDL:

CREATE TABLE TABLE_NAME (COLUMN_NAME1 <COLUMN_DEFINITION>,COLUMN_NAME2 <COLUMN_DEFINITION>,...COLUMN_NAMEn <COLUMN_DEFINITION>;TABLE_CONSTRAINT1,TABLE_CONSTRAINT2,...TABLE_CONSTRAINTn);

Exemplo:

CREATE TABLE cliente ( codigo INTEGER, nome VARCHAR(30) NOT NULL, sexo VARCHAR(1), CPF VARCHAR(11) UNIQUE, endereco VARCHAR(40), cidade VARCHAR(20), dt_nascimento DATE, idade COMPUTED BY ((CURRENT_DATE - dt_nascimento) / 360), primary key (codigo), CHECK ( (sexo = 'M') AND (idade > 18) ))

ALTER TABLE <table_name>ADD <field_name> <field_definition>ADD CONSTRAINT <constraint_name> <constraint_definition>DROP CONSTRAINT <constraint_name>DROP <field_name>;

DROP TABLE <table_name>;

Usando IBExpert

Uma nova tabela pode ser criada para o banco de dados conectado, usando o menu Database/New Table, ou clicando com o botão direito do mouse no DB Explorer – Tables/New Table.

(1) Name – Nome da tabela(2) Primary e Foreing Key - Na primeira coluna PK um ou mais campos podem ser

definidos como chave primária (duplo clique). Uma chave primária indica uma identificação única para o conjunto de dados.

(3) Field Name – Nome do campo(4) Field Type – Tipo do campo(5) Domain – Aqui pode ser usado um domínio anteriormente cadastrado(6) Size – Tamanho do campo(7) Scale – Número de lugares decimais que pode ser especificado para todos campos

numéricos

10

Page 11: Apostila Do FireBird 2.0

(8) SubType – Precisa ser especificado para campos tipo BLOB(9) Array – Determina um campo como array, digite aqui a faixa para o array.

Ex: 1:100(10)Not Null – Determina se o campo poderá ter nulo ou não(11) Charset – Especificando um charset ele sobrescreverá o charset default do banco de dados. Use ISO8859_1(12) Collate – Determina o collate para o charset especificado. Use PT_BR(13) Description – Descrição para o domínio(14) AutoInc – Usando a barra de espaço ou um duplo clique, uma caixa de diálogo aparecerá para definir o campo auto-incremento.

(15) Check – Verifica a integridade do domínioEx: VALUE > 0, VALUE IN ('ES','RJ')

(16) Computed Source – Permite definir um campo calculado, a partir dos campos da tabela.

Ex: NOME_COMPLETO = PRIMEIRO_NOME ||' '|| SEGUNDO_NOME TOTAL = QUANTIDADE * PRECO_UNITARIO

(17) Computed Source – Valor que será armazenado caso o campo esteja como nuloEx: 0 para campos numéricos

11

Page 12: Apostila Do FireBird 2.0

Seqüência ou Generator

Cria um Generator de número inteiros e seqüenciais. O Generator em conjunto com Trigger e ou Stored Procedure, é usado para simular um campo auto-incremento dos Bancos Desktop's. Serve também para evitar chaves duplicadas em campos numéricos.

O valor default é Zero, mas, é atualizado toda vez que é chamado a função GEN_ID(). O Generator pode ser usado para incrementar ou decrementar valores. Para se saber o código atual do Generator você passa o valor Zero "0 para o Gen_ID().

Usando DDL:

DDL Retorna o próximo valor da Seqüência

Exibe seqüências

CREATE SEQUENCE <name>;ALTER SEQUENCE <name> RESTART WITH <value>;DROP SEQUENCE <name>;

SELECT NEXT VALUE FOR <SequenceName> FROM RDB$DATABASE;

NEXT VALUE FOR GEN_CLIENTE;

SHOW SEQUENCE <SequenceName>;SHOW SEQUENCES;

CREATE GENERATOR <name>;SET GENERATOR <name> TO <value>;DROP GENERATOR <name>;

<intvar> = GEN_ID( <GeneratorName>, <increment> );

SHOW GENERATOR <GeneratorName>;SHOW GENERATORS;

Ex: Simulando um auto-incremento para a tabela de CLIENTES na coluna CODIGO.

CREATE GENERATOR GEN_CLIENTE;

CREATE TRIGGER "TR_AUTO_INCREMENTO_CLIENTE" FOR "CLIENTE" BEFORE INSERT POSITION 0 ASBEGIN NEW.CODIGO = NEXT VALUE FOR GEN_CLIENTE;END

Usando IBExpert

Um novo GENERATOR ou SEQUENCE pode ser criado para o banco de dados conectado, usando o menu Database/New Generator, ou clicando com o botão direito do mouse no DB Explorer – Tables/New Generator.

12

Page 13: Apostila Do FireBird 2.0

Visões - Views

Uma visão, na terminologia SQL, é uma tabela única derivada de outra tabela, que pode ser uma tabela básica ou uma visão previamente definida. Uma visão não existe de forma física, ela é considerada uma tabela virtual, em contraste com as tabelas básicas, cujas tuplas são realmente armazenadas no banco de dados. Isso limita as operações de atualização possíveis para as visões, embora não imponha nenhuma limitação para as consultas.

Existem apenas dois tipos de visões:– Visões apenas para leitura – quando seus dados não podem ser editados– Visões de atualização – quando é possível a alteração do estado do banco de dados

As visões são utilizadas para realizar tarefas como:– Restringir o acesso dos usuários– Mostrar apenas as colunas “X”– Filtragem de dados já pré formatados

Em resumo, podemos fazer as seguintes observações:

– Uma visão de uma única tabela de definição é atualizável se a visão contiver, entre seus atributos, a chave primária da relação básica, bem como todos os atributos com restrição NOT NULL que não contiverem valores default especificados.

– As visões definidas a partir de diversas tabelas utilizando-se as junções, em geral, não são atualizáveis.

– As visões definidas usando-se as funções de agrupamento e agregadas não são atualizáveis.

Usando DDL:

CREATE VIEW name [(view_col [, view_col …])]AS <select> [WITH CHECK OPTION];

Ex : CREATE VIEW TELEFONES ( NOME, TELEFONE )

AS SELECT NOME, TELEFONE

FROM CLIENTES;

Usando IBExpert

Um nova VIEW pode ser criada para o banco de dados conectado, usando o menu Database/New View, ou clicando com o botão direito do mouse no DB Explorer – Tables/New View.

13

Page 14: Apostila Do FireBird 2.0

Exception

É uma mensagem de erro definida pelo usuário, escrita especificamente para um banco de dados e armazenada no banco, e só pode ser usada em Stored Procedure e ou Trigger.

Usando DDL:

CREATE EXCEPTION <Exception_Name>"Exception_Text";

Usando IBExpert

Um nova Exception pode ser definida para o banco de dados conectado, usando o menu Database/New Exception, ou clicando com o botão direito do mouse no DB Explorer – Tables/New Exception.

14

Page 15: Apostila Do FireBird 2.0

15

Page 16: Apostila Do FireBird 2.0

16

Page 17: Apostila Do FireBird 2.0

Referências Bibliográficas

C. J. Date. Introdução a Sistemas de Banco de Dados, 8ª Edição, Editora Campus, 2004

Coleção Info 2006, Banco de dados.

Elmasri, R.; Navath, S. B. Sistemas de Banco de Dados, 4ª Edição, Editora Pearson, 2005.

Rodrigues, A. H. Apostila de Firebird 1.0. Adaptação de Interbase para Firebird por um colaborador da CFLP.

Tradução de informações, IBExpert Documentation, disponível através do endereço eletrônico: http://www.ibexpert.info/documentation/index.html, acessado em 15/04/2007.

17