Beruflich Dokumente
Kultur Dokumente
Version 10
Derby Document build:
December 11, 2006, 7:17:42 AM (PST)
Direitos autorais reservados
Contents
Direitos autorais reservados............................................................................................... 7
Sobre este documento......................................................................................................... 8
Finalidade deste documento.................................................................................... 8
Audincia................................................................................................................... 8
Organizao deste documento................................................................................ 8
Referncia da linguagem SQL...........................................................................................10
Letras maisculas e caracteres especiais............................................................ 10
Identificadores SQL................................................................................................ 10
Regras para identificadores SQL92....................................................................11
IdentificadorSQL92............................................................................................. 11
nome-da-coluna.................................................................................................. 12
nome-da-correlao............................................................................................12
novo-nome-da-tabela..........................................................................................13
nome-do-esquema..............................................................................................13
nome-de-coluna-simples.....................................................................................14
nome-do-sinnimo.............................................................................................. 14
nome-da-tabela...................................................................................................14
nome-da-viso.................................................................................................... 14
nome-do-ndice................................................................................................... 15
nome-da-restrio...............................................................................................15
nome-do-cursor...................................................................................................15
nome-do-gatilho.................................................................................................. 16
identificador-de-autorizao................................................................................16
Instrues................................................................................................................ 16
Interao com o sistema de dependncias........................................................ 17
Instruo ALTER TABLE.................................................................................... 17
Instrues CREATE............................................................................................20
Instrues DROP................................................................................................ 34
Instrues RENAME........................................................................................... 36
Instrues SET................................................................................................... 37
CALL (PROCEDIMENTO).................................................................................. 39
Clusula CONSTRAINT......................................................................................39
Instruo DECLARE GLOBAL TEMPORARY TABLE........................................45
Instruo DELETE.............................................................................................. 48
Clusula FOR UPDATE......................................................................................49
Clusula FROM.................................................................................................. 49
Clusula GROUP BY.......................................................................................... 50
Clusula HAVING............................................................................................... 50
INNER JOIN........................................................................................................51
Instruo INSERT............................................................................................... 52
Operao JOIN................................................................................................... 53
LEFT OUTER JOIN............................................................................................ 54
Instruo LOCK TABLE...................................................................................... 54
Clusula ORDER BY.......................................................................................... 55
Consulta..............................................................................................................56
RIGHT OUTER JOIN.......................................................................................... 58
SubconsultaEscalar............................................................................................ 58
ExpressoSeleo.............................................................................................. 59
Instruo SELECT.............................................................................................. 61
ExpressoTabela................................................................................................ 63
SubconsultaTabela............................................................................................. 63
Instruo UPDATE..............................................................................................64
VALUES Expresso............................................................................................65
Clusula WHERE................................................................................................66
Clusula WHERE CURRENT OF....................................................................... 67
Funes nativas...................................................................................................... 67
i
Direitos autorais reservados
Funes nativas padro......................................................................................68
Agregaes (funes de conjunto)..................................................................... 68
ABS ou ABSVAL.................................................................................................70
AVG.................................................................................................................... 70
BIGINT................................................................................................................ 70
CAST.................................................................................................................. 71
CHAR..................................................................................................................73
LENGTH............................................................................................................. 75
Concatenao.....................................................................................................75
Expresses NULLIF e CASE.............................................................................. 76
COUNT............................................................................................................... 77
COUNT(*)........................................................................................................... 77
CURRENT DATE................................................................................................77
CURRENT_DATE...............................................................................................77
CURRENT ISOLATION...................................................................................... 78
CURRENT SCHEMA.......................................................................................... 78
CURRENT TIME.................................................................................................78
CURRENT_TIME................................................................................................78
CURRENT TIMESTAMP.................................................................................... 79
CURRENT_TIMESTAMP................................................................................... 79
CURRENT_USER.............................................................................................. 79
DATE.................................................................................................................. 79
DAY.....................................................................................................................80
DOUBLE............................................................................................................. 80
HOUR................................................................................................................. 81
IDENTITY_VAL_LOCAL..................................................................................... 81
INTEGER............................................................................................................ 83
LOCATE..............................................................................................................83
LCASE ou LOWER............................................................................................. 84
LTRIM................................................................................................................. 84
MAX.................................................................................................................... 85
MIN..................................................................................................................... 85
MINUTE.............................................................................................................. 86
MOD....................................................................................................................86
MONTH...............................................................................................................87
RTRIM.................................................................................................................87
SECOND.............................................................................................................87
SESSION_USER................................................................................................ 88
SMALLINT.......................................................................................................... 88
SQRT.................................................................................................................. 89
SUBSTR............................................................................................................. 89
SUM.................................................................................................................... 90
TIME................................................................................................................... 90
TIMESTAMP....................................................................................................... 91
UCASE ou UPPER............................................................................................. 91
USER.................................................................................................................. 92
VARCHAR.......................................................................................................... 92
YEAR.................................................................................................................. 92
Funes do sistema nativas.................................................................................. 93
SYSCS_UTIL.SYSCS_CHECK_TABLE.............................................................93
SYSCS_UTIL.SYSCS_GET_RUNTIMESTATISTICS........................................ 93
SYSCS_UTIL.SYSCS_GET_DATABASE_PROPERTY.................................... 93
Procedimentos do sistema nativos....................................................................... 94
SYSCS_UTIL.SYSCS_COMPRESS_TABLE.....................................................94
SYSCS_UTIL.SYSCS_INPLACE_COMPRESS_TABLE................................... 95
SYSCS_UTIL.SYSCS_SET_RUNTIMESTATISTICS.........................................97
SYSCS_UTIL.SYSCS_SET_STATISTICS_TIMING.......................................... 97
SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY.....................................98
SYSCS_UTIL.SYSCS_FREEZE_DATABASE................................................... 98
ii
Direitos autorais reservados
SYSCS_UTIL.SYSCS_UNFREEZE_DATABASE.............................................. 99
SYSCS_UTIL.SYSCS_CHECKPOINT_DATABASE.......................................... 99
SYSCS_UTIL.SYSCS_BACKUP_DATABASE.................................................100
SYSCS_UTIL.SYSCS_EXPORT_TABLE.........................................................100
SYSCS_UTIL.SYSCS_EXPORT_QUERY....................................................... 101
SYSCS_UTIL.SYSCS_IMPORT_TABLE......................................................... 102
SYSCS_UTIL.SYSCS_IMPORT_DATA........................................................... 103
Tipos de dado........................................................................................................ 105
Viso geral dos tipos de dado nativos.............................................................. 105
Tipos numricos................................................................................................105
Tipo de dado - atribuies e comparao, classificao e ordenao............. 107
BIGINT.............................................................................................................. 109
BLOB................................................................................................................ 110
CHAR................................................................................................................111
CHAR FOR BIT DATA...................................................................................... 111
CLOB................................................................................................................ 112
DATE................................................................................................................ 113
DECIMAL.......................................................................................................... 114
DOUBLE .......................................................................................................... 115
DOUBLE PRECISION...................................................................................... 115
FLOAT.............................................................................................................. 116
INTEGER.......................................................................................................... 116
LONG VARCHAR............................................................................................. 117
LONG VARCHAR FOR BIT DATA................................................................... 117
NUMERIC......................................................................................................... 118
REAL.................................................................................................................118
SMALLINT........................................................................................................ 119
TIME................................................................................................................. 119
TIMESTAMP..................................................................................................... 120
VARCHAR........................................................................................................ 121
VARCHAR FOR BIT DATA...............................................................................121
Expresses SQL.................................................................................................... 122
Precedncia das expresses............................................................................124
Expresso booleana......................................................................................... 125
Parmetros dinmicos...................................................................................... 127
Palavras reservadas do SQL........................................................................................... 130
Suporte do Derby s funcionalidades do SQL-92......................................................... 134
Tabelas do sistema Derby............................................................................................... 141
SYSALIASES..........................................................................................................141
SYSCHECKS.......................................................................................................... 141
SYSCOLUMNS....................................................................................................... 142
SYSCONGLOMERATES........................................................................................ 143
SYSCONSTRAINTS............................................................................................... 143
SYSDEPENDS........................................................................................................ 144
SYSFILES............................................................................................................... 144
SYSFOREIGNKEYS............................................................................................... 145
SYSKEYS............................................................................................................... 145
SYSSCHEMAS....................................................................................................... 146
SYSSTATISTICS.................................................................................................... 146
SYSSTATEMENTS................................................................................................. 146
SYSTABLES........................................................................................................... 147
SYSTRIGGERS...................................................................................................... 147
SYSVIEWS..............................................................................................................149
Mensagens de exceo e estados SQL do Derby......................................................... 150
Referncia de SQLState e mensagem de erro....................................................150
Referncia do JDBC......................................................................................................... 177
Classes, interfaces e mtodos java.sql do ncleo do JDBC.............................177
java.sql.Driver........................................................................................................ 177
java.sql.DriverManager.getConnection............................................................... 178
iii
Direitos autorais reservados
Sintaxe da URL de conexo com banco de dados Derby................................ 178
Sintaxe da URL de conexo com banco de dados para aplicativos com bancos
de dados incorporados..................................................................................... 179
Sintaxe SQL adicional.......................................................................................179
Atributos da URL de conexo com o banco de dados Derby........................... 180
java.sql.Driver.getPropertyInfo............................................................................ 180
java.sql.Connection ............................................................................................. 181
java.sql.Connection.setTransactionIsolation ....................................................181
java.sql.Connection.setReadOnly ....................................................................181
java.sql.Connection.isReadOnly ...................................................................... 181
Funcionalidades de conexo no suportadas.................................................. 181
java.sql.DatabaseMetaData.................................................................................. 182
Conjuntos de resultados DatabaseMetaData................................................... 182
getProcedureColumnsgetProcedureColumns.................................................. 182
Parmetros para getProcedureColumns.......................................................... 182
Colunas do ResultSet retornado por getProcedureColumns............................182
Funcionalidades de DatabaseMetaData no suportadas................................. 183
java.sql.Statement ................................................................................................ 183
Objetos ResultSet............................................................................................. 184
java.sql.PreparedStatement................................................................................. 184
Instrues preparadas e colunas de fluxo........................................................ 184
java.sql.CallableStatement .................................................................................. 186
CallableStatement e parmetros OUT..............................................................186
CallableStatement e parmetros INOUT.......................................................... 186
java.sql.ResultSet .................................................................................................187
ResultSets e colunas de fluxo...........................................................................187
java.sql.ResultSetMetaData..................................................................................188
java.sql.SQLException..........................................................................................188
java.sql.SQLWarning............................................................................................ 188
Mapeamento de java.sql.Types em tipos SQL....................................................189
java.sql.Blob e java.sql.Clob................................................................................ 189
Notas.................................................................................................................191
java.sql.Connection.............................................................................................. 192
java.sql.ResultSet..................................................................................................192
java.sql.Statement................................................................................................. 193
java.sql.PreparedStatement................................................................................. 194
java.sql.CallableStatement .................................................................................. 194
java.sql.DatabaseMetaData.................................................................................. 194
java.sql.ResultSetMetaData..................................................................................194
java.sql.BatchUpdateException........................................................................... 194
Pacote JDBC para Connected Device Configuration/Foundation Profile
(JSR169)................................................................................................................. 195
Funcionalidades apenas do JDBC 3.0.................................................................195
java.sql.Connection ............................................................................................. 196
java.sql.DatabaseMetaData ................................................................................. 196
java.sql.ParameterMetaData.................................................................................196
java.sql.PreparedStatement................................................................................. 197
java.sql.Savepoint................................................................................................. 197
Definir e desfazer at um ponto de salvamento............................................... 197
Liberao de ponto de salvamento...................................................................198
Regras para pontos de salvamento.................................................................. 198
Restries dos pontos de salvamento.............................................................. 198
java.sql.Statement................................................................................................. 198
Chaves autogeradas.........................................................................................198
Sintaxe de escape do JDBC................................................................................. 199
Palavra chave de escape do JDBC para instrues call.................................. 200
Sintaxe de escape do JDBC............................................................................. 200
Sintaxe de escape do JDBC para clusulas LIKE............................................ 200
Sintaxe de escape do JDBC para a palavra chave fn...................................... 201
iv
Direitos autorais reservados
Sintaxe de escape do JDBC para junes externas.........................................203
Sintaxe de escape do JDBC para formatos de hora.........................................203
Sintaxe de escape do JDBC para formatos de carimbo do tempo................... 204
Definio de atributos para a URL de conexo com o banco de dados..................... 205
bootPassword=chave........................................................................................... 205
create=true............................................................................................................. 205
databaseName=nomeBancoDados..................................................................... 206
dataEncryption=true............................................................................................. 206
encryptionProvider=nomeProvedor.................................................................... 206
encryptionAlgorithm=algoritmo...........................................................................207
territory=ll_CC....................................................................................................... 207
logDevice=caminhoDiretorioLog......................................................................... 208
password=senhaUsuario......................................................................................209
rollForwardRecoveryFrom=Caminho.................................................................. 209
createFrom=Caminho........................................................................................... 209
restoreFrom=Caminho..........................................................................................210
shutdown=true.......................................................................................................210
user=nomeUsurio................................................................................................211
(nenhum atributo)..................................................................................................211
Conformidade com o J2EE: API de transao Java e extenses javax.sql................212
JVM e bibliotecas para as funcionalidades do J2EE......................................... 213
A API do JTA..........................................................................................................213
Notas sobre o comportamento do produto....................................................... 213
javax.sql: Extenses JDBC.................................................................................. 213
API do Derby..................................................................................................................... 215
Ferramentas e utilitrios autnomos.................................................................. 215
Classes de implementao do JDBC.................................................................. 215
Driver de JDBC................................................................................................. 215
Classes de fonte de dados............................................................................... 215
Utilitrios e interfaces diversas........................................................................... 216
Territrios suportados..................................................................................................... 217
Limitaes do Derby........................................................................................................ 218
Limitaes do comprimento de identificador.....................................................218
Limitaes numricas...........................................................................................218
Limitaes das cadeias........................................................................................ 219
Limitaes de DATE, TIME e TIMESTAMP.......................................................... 219
Limitaes dos valores do gerenciador de banco de dados............................ 219
Marcas registradas........................................................................................................... 221
v
Direitos autorais reservados
Apache Software FoundationManual de Referncia do DerbyApache Derby
6
Direitos autorais reservados
A menos que seja requerido por lei aplicvel, ou concordado por escrito, o programa
distribudo sob esta Licena distribudo na BASE DE "COMO ", SEM GARANTIAS
OU CONDIES DE QUALQUER ESPCIE, sejam expressas ou implcitas. Veja na
Licena as condies especficas que governam as permisses e limitaes sob a
Licena.
7
Direitos autorais reservados
Audincia
Este documento a referncia para os usurios do Derby, que so tipicamente
desenvolvedores de aplicativos. Os usurios do Derby no familiarizados com o padro
SQL, ou com a linguagem de programao Java, sero beneficiados pela consulta a
livros sobre estes tpicos.
Os usurios do Derby que desejarem uma abordagem para trabalhar com o Derby do
tipo como fazer, ou uma introduo aos conceitos do Derby, devem consultar o Guia do
Desenvolvedor do Derby.
8
Direitos autorais reservados
9
Direitos autorais reservados
Esta seo fornece uma viso geral da linguagem SQL corrente, atravs da descrio
das instrues, funes nativas, tipos de dado, expresses e caracteres especiais
presentes na linguagem.
Identificadores SQL
O identificador a representao dentro da linguagem de itens criados pelos usurios,
em oposio s palavras chave e comandos da linguagem. Alguns identificadores
10
Direitos autorais reservados
representam objetos do dicionrio, que so objetos criados pelo usurio (como tabelas,
vises, ndices, colunas e restries), que so armazenados no banco de dados. So
chamados de objetos do dicionrio porque o Derby armazena as informaes sobre
estes objetos nas tabelas do sistema, algumas vezes chamado de dicionrio de dados.
O padro SQL tambm define maneiras de criar aliases para estes objetos em certas
instrues.
Um identificador comum deve comear por uma letra, e conter apenas letras, caracteres
de sublinhado (_) e dgitos. As letras e dgitos permitidos incluem todas as letras e
dgitos do Unicode, mas o Derby no tenta garantir que os caracteres do identificador
sejam vlidos no idioma do banco de dados.
um objeto do dicionrio qualificado por outro objeto do dicionrio (como uma coluna
chamada "B" pertencente tabela "A").
IdentificadorSQL92
Um IdentificadorSQL92 um identificador de objeto do dicionrio em conformidade com
as regras do SQL-92. O padro SQL-92 declara que os identificadores dos objetos do
dicionrio esto limitados a 128 caracteres, e no so sensveis a letras maisculas e
minsculas (a menos que estejam delimitados por aspas), porque so traduzidos
automaticamente para letras maisculas pelo sistema. No permitido utilizar palavras
reservadas como identificadores para os objetos do dicionrio, a menos que estejam
delimitadas. Se for tentado utilizar um nome com mais de 128 caracteres, ser lanada a
SQLException X0X11.
O Derby define palavras chave alm das especificadas pelo padro SQL-92 (consulte
Palavras reservadas do SQL).
Exemplo
11
Direitos autorais reservados
nome-da-coluna
Na sintaxe do SQL, em muitos lugares o nome da coluna pode ser representado
qualificado pelo nome-da-tabela ou pelo nome-da-correlao.
SELECT C11 AS COL1, C12 AS COL2, C13 FROM T1 FOR UPDATE OF C11, C13
Neste exemplo, o nome-da-correlao COL1 para C11 no permitido, porque C11
aparece na lista de colunas FOR UPDATE. Pode ser utilizado o nome-da-correlao
COL2 para C12, porque C12 no aparece na lista de colunas de FOR UPDATE.
Sintaxe
[ { nome-da-tabela | nome-da-correlao } . ] IdentificadorSQL92
Exemplo
-- P.PAS o nome da coluna qualificado pelo nome-da-correlao.
SELECT P.PAS
FROM APP.PASES P
nome-da-correlao
O nome-da-correlao atribudo expresso de tabela na clusula FROM como sendo
12
Direitos autorais reservados
o novo nome, ou alis, para a tabela. O nome-da-correlao no qualificado pelo
nome-do-esquema.
No permitido utilizar o nome-da-correlao em colunas atualizveis; a utilizao do
nome-da-correlao desta maneira causa uma exceo SQL. Por exemplo:
SELECT C11 AS COL1, C12 AS COL2, C13 FROM T1 FOR UPDATE OF C11, C13
Neste exemplo, o nome-da-correlao COL1 para C11 no permitido, porque C11
aparece na lista de colunas de FOR UPDATE. Pode ser utilizado o nome-da-correlao
COL2 para C12, porque C12 no aparece na lista de colunas de FOR UPDATE.
Sintaxe
IdentificadorSQL92
Exemplo
-- F o nome-da-correlao
SELECT F.NOME
FROM SAMP.FUNCIONRIOS F
novo-nome-da-tabela
O novo-nome-da-tabela representa uma tabela renomeada. No permitido qualificar o
novo-nome-da-tabela com o nome-do-esquema.
Sintaxe
IdentificadorSQL92
Exemplo
-- VOS_DISPONVEIS o novo-nome-da-tabela que no inclui o
nome-do-esquema
RENAME TABLE VOS_DISPONIBILIDADE TO VOS_DISPONVEIS
nome-do-esquema
O nome-do-esquema representa o esquema. Os esquemas contm outros objetos do
dicionrio, como tabelas e ndices. Os esquemas fornecem uma maneira de dar nomes a
um subconjunto de tabelas e outros objetos do dicionrio no banco de dados.
13
Direitos autorais reservados
Sintaxe
IdentificadorSQL92
Exemplo
nome-de-coluna-simples
O nome-de-coluna-simples utilizado para representar a coluna quando seu nome no
pode ser qualificado pelo nome-da-tabela ou pelo nome-da-correlao. Este o caso
quando a qualificao fixa, como na definio da coluna na instruo CREATE TABLE.
Sintaxe
IdentificadorSQL92
Exemplo
-- NOME_PAS um nome-de-coluna-simples
CREATE TABLE CONTINENTE (
NOME_PAS VARCHAR(26) NOT NULL PRIMARY KEY,
COD_ISO_PAS CHAR(2),
REGIO_PAS VARCHAR(26))
nome-do-sinnimo
O nome-do-sinnimo representa um sinnimo para a tabela ou a viso. O
nome-do-sinnimo pode ser qualificado pelo nome-do-esquema.
Sintaxe
[ nome-do-esquema. ] IdentificadorSQL92
nome-da-tabela
O nome-da-tabela representa a tabela. O nome-da-tabela pode ser qualificado pelo
nome-do-esquema.
Sintaxe
[ nome-do-esquema. ] IdentificadorSQL92
Exemplo
-- ENG.PROJETO um nome de tabela que inclui o nome-do-esquema
SELECT COUNT(*) FROM ENG.PROJETO
nome-da-viso
14
Direitos autorais reservados
Sintaxe
[ nome-do-esquema. ] IdentificadorSQL92
Exemplo
-- Esta uma viso qualificada pelo nome-do-esquema
SELECT COUNT(*) FROM RH.EMP_CURRICULUM
nome-do-ndice
O nome-do-ndice representa um ndice. Os ndices residem em esquemas, portanto
seus nomes podem ser qualificados pelo nome-do-esquema. Os ndices das tabelas do
sistema residem no esquema SYS.
Sintaxe
[ nome-do-esquema . ] IdentificadorSQL92
Exemplo
DROP INDEX APP.NDICE_ORIGEM;
-- NDICE_ORIGEM o nome-do-ndice sem o nome-do-esquema
CREATE INDEX NDICE_ORIGEM ON VOS (AEROPORTO_ORIGEM)
nome-da-restrio
Os nomes das restries no podem ser qualificados.
Sintaxe
IdentificadorSQL92
Exemplo
-- FK2_PAS o nome da restrio
CREATE TABLE MAPAS_DETALHADOS (
COD_ISO_PAS CHAR(2)
CONSTRAINT FK2_PAS REFERENCES PASES
)
nome-do-cursor
O nome-do-cursor faz referncia a um cursor. No existe nenhum comando na
linguagem SQL para atribuir nome a um cursor. Em vez disso, deve ser utilizada a API
do JDBC para atribuir nomes a cursores ou obter os nomes gerados pelo sistema. Para
obter mais informaes deve ser consultado o Guia do Desenvolvedor do Derby. Se for
atribudo nome a um cursor, poder ser feita referncia a este nome nas instrues SQL.
Sintaxe
15
Direitos autorais reservados
IdentificadorSQL92
Exemplo
stmt.executeUpdate("UPDATE SAMP.EQUIPES SET COMISS = " +
"COMISS + 20 " + "WHERE CURRENT OF " + ResultSet.getCursorName());
nome-do-gatilho
O nome-do-gatilho faz referncia a um gatilho criado pelo usurio.
Sintaxe
[ nome-do-esquema . ] IdentificadorSQL92
Exemplo
DROP TRIGGER GATILHO1
identificador-de-autorizao
Os nomes de usurio no sistema Derby so conhecidos por identificadores de
autorizao. O identificador de autorizao representa o nome do usurio, caso tenha
sido fornecido o nome do usurio na requisio de conexo. O esquema padro para o
usurio idntico ao identificador de autorizao. No sistema de autenticao pode
haver diferena entre letras maisculas e minsculas nos nomes dos usurios, mas no
h diferena entre letras maisculas e minsculas no sistema de autorizao do Derby, a
no ser que o nome esteja delimitado. Para obter mais informaes deve ser consultado
o Guia do Desenvolvedor do Derby.
Sintaxe
IdentificadorSQL92
Exemplo
CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY(
'derby.database.fullAccessUsers', 'Amber,FRED')
Instrues
Esta seo fornece pginas de manual tanto para as construes de alto nvel da
linguagem, como para partes desta. Por exemplo, a instruo CREATE INDEX uma
instruo de alto nvel que pode ser executada diretamente atravs da interface de
JDBC. Esta seo tambm inclui as clusulas, que no so instrues de alto nvel, e
no podem ser executadas diretamente, mas apenas como parte das instrues de alto
nvel. As clusulas ORDER BY e WHERE so exemplos deste tipo de clusula. Por fim,
esta seo tambm inclui algumas partes de instrues sintaticamente complexas
chamada de expresses como, por exemplo, ExpressoSeleo e SubconsultaTabela.
As clusulas e expresses possuem suas prprias pginas de manual para facilitar a
referncia.
16
Direitos autorais reservados
de instrues especficas.
As instrues dependem umas das outras; uma instruo UPDATE WHERE CURRENT
depende da instruo referenciada. Remover a instruo da qual esta depende, invalida
a instruo UPDATE WHERE CURRENT.
17
Direitos autorais reservados
Sintaxe
ALTER TABLE nome-da-tabela
{
ADD COLUMN definio-da-coluna |
ADD CONSTRAINT clusula |
DROP { PRIMARY KEY | FOREIGN KEY nome-da-restrio | UNIQUE
nome-da-restrio |
CHECK nome-da-restrio | CONSTRAINT nome-da-restrio }
ALTER alterao-da-coluna |
LOCKSIZE { ROW | TABLE }
}
definio-da-coluna
nome-de-coluna-simplestipo-de-dado
[ restrio no nvel-de-coluna ]*
[ [ WITH ] DEFAULT {ExpressoConstante | NULL } ]
alterao-da-coluna
nome-da-coluna SET DATA TYPE VARCHAR(inteiro) |
nome-da-coluna SET INCREMENT BY constante-inteira
ALTER TABLE no afeta nenhuma viso que faz referncia tabela sendo alterada. Isto
inclui as vises que possuem "*" na lista do SELECT. Estas vises devem ser removidas
e recriadas para que retornem a nova coluna.
Adio de colunas
A sintaxe para a definio-da-coluna de uma nova coluna a mesma que para a coluna
na instruo CREATE TABLE. Isto significa que pode ser colocada uma restrio de
coluna para a nova coluna na instruo ALTER TABLE ADD COLUMN. Entretanto,
somente pode ser adicionada uma coluna com a restrio NOT NULL a uma tabela
existente se for fornecido um valor padro; caso contrrio, lanada uma exceo ao
ser executada a instruo ALTER TABLE.
18
Direitos autorais reservados
existente. Pode ser adicionado atravs de ALTER TABLE qualquer tipo de restrio no
nvel-de-tabela suportado. Existem as seguintes limitaes para adicionar restrio a
uma tabela existente:
Ao adicionar uma restrio de chave estrangeira ou de verificao a uma tabela
existente, o Derby verifica a tabela para ter certeza que as linhas existentes
satisfazem a restrio. Se alguma linha for invlida, o Derby lanar uma exceo
de instruo, e a restrio no ser adicionada.
Todas as colunas includas na chave primria devem conter dados no nulos e
serem nicas.
ALTER TABLE ADD UNIQUE e PRIMARY KEY dispem de um mtodo resumido
para definir uma chave primria formada por uma nica coluna. Se for especificado
PRIMARY KEY na definio da coluna C, o efeito ser o mesmo de especificar a
clusula PRIMARY KEY(C) como uma clusula em separado. A coluna no pode
conter valores nulos, portanto o atributo NOT NULL tambm deve ser especificado.
Para obter informaes sobre a sintaxe das restries deve ser consultada a Clusula
CONSTRAINT. Ao se adicionar restries com a sintaxe ALTER TABLE ADD
CONSTRAINT, deve ser utilizada a sintaxe para restrio no nvel-de-tabela.
Remoo de restries
ALTER TABLE DROP CONSTRAINT remove uma restrio de uma tabela existente.
Para remover uma restrio sem nome, deve ser especificado o nome gerado para a
restrio armazenado em SYS.SYSCONSTRAINTS na forma de um identificador
delimitado.
Modificao de colunas
A alterao-da-coluna permite alterar a coluna especificada das seguintes maneiras:
Aumentar o comprimento de uma coluna VARCHAR existente. Pode ser utilizado
CHARACTER VARYING ou CHAR VARYING como sinnimo para a palavra chave
VARCHAR.
Para aumentar o comprimento de uma coluna deste tipo, deve ser especificado o
tipo de dado e o novo tamanho aps o nome da coluna.
Definio de padro
Pode ser especificado um valor padro para a nova coluna. O valor padro o valor
inserido na coluna se no for especificado nenhum outro valor. Quando no
especificado explicitamente, o valor padro da coluna NULL. Se for especificado valor
padro para uma nova coluna, as linhas existentes na tabela recebero o valor padro
na nova coluna.
19
Direitos autorais reservados
Para obter mais informaes sobre valor padro deve ser consultada a Instruo
CREATE TABLE.
Exemplos
-- Adicionar uma nova coluna com restrio no
-- nvel-de-coluna a uma tabela existente.
-- Se a tabela tiver alguma linha ser lanada uma exceo,
-- uma vez que a nova coluna ser inicializada com NULL
-- em todas as linhas da tabela.
ALTER TABLE CIDADES ADD COLUMN REGIO VARCHAR(26)
CONSTRAINT NOVA_RESTRIO CHECK (REGIO IS NOT NULL);
-- Adicionar uma restrio de unicidade a uma tabela existente.
-- Ser lanada uma exceo se forem encontradas chaves duplicadas.
ALTER TABLE SAMP.DEPARTAMENTOS
ADD CONSTRAINT NOVA_UNICIDADE UNIQUE (NUM_DEP);
-- Adicionar uma restrio de chave estrangeira
-- tabela cidades. Cada linha de cidades verificada
-- para ter certeza que satisfaz a restrio.
-- Se alguma linha no satisfizer a restrio, a
-- restrio no ser adicionada
ALTER TABLE CIDADES ADD CONSTRAINT FK_PASES
FOREIGN KEY (PAS) REFERENCES PASES (PAS);
-- Adicionar uma restrio de chave primria tabela.
-- Primeiro, criar a tabela.
CREATE TABLE ATIVIDADES (ID_CIDADE INT NOT NULL,
ESTAO CHAR(2), ATIVIDADE VARCHAR(32) NOT NULL);
-- No ser possvel adicionar esta restrio se as
-- colunas que compem a chave primria possurem
-- dados nulos ou valores duplicados.
ALTER TABLE ATIVIDADES ADD PRIMARY KEY (ID_CIDADE, ATIVIDADE);
-- Remover a restrio de chave primria da tabela cidades.
ALTER TABLE CIDADES DROP CONSTRAINT PK_CIDADES;
-- Remover a restrio de chave estrangeira da tabela cidades.
ALTER TABLE CIDADES DROP CONSTRAINT FK_PASES;
-- Adicionar a coluna NUM_DEP com valor padro igual a 1.
ALTER TABLE SAMP.ATIV_EMP ADD COLUMN NUM_DEP INT DEFAULT 1;
-- Aumentar o comprimento da coluna VARCHAR.
ALTER TABLE SAMP.EMP_FOTO ALTER FORMATO_FOTO SET DATA TYPE VARCHAR(30);
-- Alterar a granularidade do bloqueio da tabela.
ALTER TABLE SAMP.VENDAS LOCKSIZE TABLE;
Resultados
A instruo ALTER TABLE faz com que todas as instrues que dependem da tabela
sendo alterada sejam recompiladas antes de sua prxima execuo. A instruo ALTER
TABLE no permitida caso existam cursores abertos fazendo referncia tabela sendo
alterada.
Instrues CREATE
20
Direitos autorais reservados
Sintaxe
CREATE FUNCTION nome-da-funo ( [ parmetro-da-funo
[, parmetro-da-funo] ] * ) RETURNS tipo-de-dado [
elemento-da-funo ] *
nome-da-funo
[ nome-do-esquema. ] IdentificadorSQL92
parmetro-da-funo
[ nome_do_parmetro ] tipo-de-dado
LANGUAGE
JAVA- o gerenciador de banco de dados chama a funo como um mtodo esttico
pblico de uma classe Java.
PARAMETER STYLE
JAVA - A funo utiliza uma conveno de passagem de parmetros em conformidade
com a linguagem Java e com a especificao de rotinas SQL. Os parmetros INOUT e
OUT so passados como matrizes de uma nica entrada para facilitar o retorno de
valores. Os conjuntos de resultados so retornados atravs de parmetros adicionais
para um mtodo Java do tipo java.sql.ResultSet[] passados como matrizes de uma nica
entrada.
21
Direitos autorais reservados
O Derby no suporta tipos de coluna longos (por exemplo, LONG VARCHAR, BLOB,
etc.). Ocasiona erro tentar utilizar um destes tipos de coluna longos.
Os elementos da funo podem estar em qualquer ordem, mas cada tipo de elemento s
pode aparecer uma vez. A definio da funo deve conter estes elementos:
LANGUAGE
PARAMETER STYLE
EXTERNAL NAME
Exemplo
CREATE FUNCTION rad_graus(radianos DOUBLE) RETURNS DOUBLE
PARAMETER STYLE JAVA NO SQL LANGUAGE JAVA
EXTERNAL NAME 'java.lang.Math.toDegrees'
Instruo CREATE INDEX
A instruo CREATE INDEX cria um ndice em uma tabela. Os ndices podem incluir
uma ou mais colunas da tabela.
Sintaxe
CREATE [UNIQUE] INDEX nome-do-ndice
ON nome-da-tabela ( nome-de-coluna-simples [ ASC | DESC ]
[ , nome-de-coluna-simples [ ASC | DESC ]] * )
O nome da coluna no pode aparecer mais de uma vez na mesma instruo CREATE
INDEX. Entretanto, ndices diferentes podem incluir a mesma coluna.
22
Direitos autorais reservados
fornecem uma maneira de verificar a integridade dos dados.
O Derby utiliza, por padro, a ordem ascendente de cada coluna para criar o ndice.
Especificar ASC aps o nome da coluna no modifica o comportamento padro. A
palavra chave DESC aps o nome da coluna faz com que o Derby utilize a ordem
descendente da coluna para criar o ndice. Utilizar a ordem descendente para uma
coluna pode ajudar a melhorar o desempenho dos comandos que requerem resultados
em uma ordem de classificao mista ou na ordem descendente, e para os comandos
que selecionam o valor mnimo ou mximo de uma coluna indexada.
ndices e restries
As restries de unicidade, de chave primria, e de chave estrangeira, geram ndices
que impem, ou "apoiam", a restrio (por isso, algumas vezes so chamados de
ndices de apoio). Se uma coluna, ou conjunto de colunas, tiver uma restrio UNIQUE
ou PRIMARY KEY aplicada, no ser permitido criar ndice com estas colunas. O Derby
j ter criado um ndice com nome gerado pelo sistema. Os nomes gerados pelo sistema
para os ndices que apoiam as restries so facilmente encontrados consultando as
tabelas do sistema, se for especificado o nome da restrio. Por exemplo, para descobrir
o nome do ndice que apoia a restrio PK_VOS:
23
Direitos autorais reservados
Sistema de dependncia de instrues
As instrues preparadas envolvendo SELECT, INSERT, UPDATE, UPDATE WHERE
CURRENT, DELETE e DELETE WHERE CURRENT na tabela referenciada pela
instruo CREATE INDEX so invalidadas quando o ndice criado. Os cursores
abertos nas tabelas no so afetados.
Instruo CREATE PROCEDURE
Sintaxe
CREATE PROCEDURE nome-do-procedimento ( [ parmetro-do-procedimento
[, parmetro-do-procedimento] ] * )
[ elemento-do-procedimento ] *
nome-do-procedimento
[ nome-do-esquema. ] IdentificadorSQL92
parmetro-do-procedimento
[ { IN | OUT | INOUT } ] [ nome-do-parmetro ] tipo-de-dado
LANGUAGE
JAVA - o gerenciador de banco de dados chama o procedimento como um mtodo
esttico pblico de uma classe Java.
24
Direitos autorais reservados
O nome externo no pode conter espaos.
PARAMETER STYLE
JAVA - O procedimento utiliza uma conveno de passagem de parmetros em
conformidade com a linguagem Java e com a especificao de rotinas SQL. Os
parmetros INOUT e OUT so passados como matrizes de uma nica entrada para
facilitar o retorno de valores. Os conjuntos de resultados so retornados atravs de
parmetros adicionais para um mtodo Java do tipo java.sql.ResultSet [] que so
passados como matrizes de uma nica entrada.
O Derby no suporta tipos de coluna longos (por exemplo, LONG VARCHAR, BLOB,
etc.). Ocasiona erro tentar utilizar um destes tipos de coluna longos.
Exemplo
CREATE PROCEDURE VENDAS.RENDIMENTO_TOTAL(IN V_MS INTEGER,
IN V_ANO INTEGER, OUT TOTAL DECIMAL(10,2))
PARAMETER STYLE JAVA READS SQL DATA LANGUAGE JAVA EXTERNAL NAME
'com.acme.vendas.calculaRendimentoPorMes'
Instruo CREATE SCHEMA
Sintaxe
CREATE SCHEMA nome-do-esquema
25
Direitos autorais reservados
A instruo CREATE SYNONYM utilizada para fornecer um nome alternativo para uma
tabela ou viso presente no mesmo esquema ou em outro esquema. Tambm podem
ser criados sinnimos para outros sinnimos, resultando em sinnimos aninhados. O
sinnimo pode ser utilizado no lugar do nome qualificado original da tabela ou da viso,
nas instrues SELECT, INSERT, UPDATE, DELETE e LOCK TABLE. Pode ser criado
um sinnimo para uma tabela ou uma viso que no existe, mas a tabela ou viso de
destino dever existir antes do sinnimo poder ser utilizado.
O sinnimo pode ser definido para uma tabela ou viso que no existe quando o
sinnimo criado. Se a tabela ou viso no existir, ser recebida uma mensagem de
advertncia (SQLState 01522). O objeto referenciado dever existir quando o sinnimo
for utilizado em uma instruo da DML.
Pode ser criado sinnimo aninhado (um sinnimo para outro sinnimo), mas qualquer
tentativa de criar um sinnimo que resulte em uma referncia circular retorna uma
mensagem de erro (SQLState 42916).
No pode ser definido um sinnimo para uma tabela temporria. A tentativa de definir
um sinnimo para uma tabela temporria retorna uma mensagem de erro (SQLState
XCL51).
Sintaxe
CREATE SYNONYM nome-do-sinnimo FOR { nome-da-viso | nome-da-tabela }
Na instruo, nome-do-sinnimo representa o nome do sinnimo sendo atribudo
tabela ou viso de destino, enquanto nome-da-viso e nome-da-tabela representam o
nome original da tabela ou viso de destino.
Exemplo
CREATE SYNONYM SAMP.T1 FOR SAMP.TABELA_COM_NOME_COMPRIDO
26
Direitos autorais reservados
Instruo CREATE TABLE
A instruo CREATE TABLE cria uma tabela. As tabelas contm colunas e restries,
que so regras que os dados devem estar em conformidade. A restrio no
nvel-de-tabela especifica uma coluna ou vrias colunas. As colunas possuem um tipo de
dado e podem especificar restries de coluna (restries no nvel-de-coluna).
Pode ser especificado um valor padro para a coluna. O valor padro o valor a ser
inserido na coluna quando no especificado nenhum outro valor. Quando no
especificado explicitamente, o valor padro para a coluna NULL. Consulte Valor
padro da coluna.
Sintaxe
CREATE TABLE nome-da-tabela
( {definio-da-coluna | restrio no nvel-de-tabela}
[ , {definio-da-coluna | restrio no nvel-de-tabela} ] * )
Exemplos
CREATE TABLE DISPONIBILIDADE_HOTEL (
ID_HOTEL INT NOT NULL,
DATA_RESERVA DATE NOT NULL,
QUARTOS_RESERVADOS INT DEFAULT 0,
PRIMARY KEY (ID_HOTEL, DATA_RESERVA));
-- A definio de chave primria no nvel-de-tabela permite
-- incluir duas colunas na definio da chave primria
PRIMARY KEY (ID_HOTEL, DATA_RESERVA))
-- Atribuir um atributo de coluna de identidade a uma coluna INTEGER,
-- e tambm definir uma restrio de chave primria na coluna
CREATE TABLE PESSOAS (
ID_PESSOA INT NOT NULL GENERATED ALWAYS AS IDENTITY
CONSTRAINT PK_PESSOAS PRIMARY KEY,
PESSOA VARCHAR(26));
-- Atribuir um atributo de coluna de identidade a uma coluna SMALLINT
-- com valor inicial igual a 5 e valor do incremento igual a 5.
CREATE TABLE GRUPOS (
ID_GRUPO SMALLINT NOT NULL
GENERATED ALWAYS AS IDENTITY (START WITH 5, INCREMENT BY 5),
ENDEREO VARCHAR(100),
TEL VARCHAR(15));
Note: Para obter mais exemplos de instrues CREATE TABLE utilizando vrias
restries deve ser consultada a Clusula CONSTRAINT.
definio-da-coluna:
nome-de-coluna-simplestipo-de-dado
[ restrio no nvel-de-coluna ]*
[ [ WITH ] DEFAULT { expresso-constante | NULL }
|especificao-de-coluna-gerada ]
[ restrio no nvel-de-coluna ]*
27
Direitos autorais reservados
28
Direitos autorais reservados
29
Direitos autorais reservados
transao, e para manter a simultaneidade alta.
Exemplo
CREATE TABLE SAUDAES (
I INT GENERATED BY DEFAULT AS IDENTITY (START WITH 2, INCREMENT BY
1),
CH CHAR(50));
-- especificar o valor "1":
INSERT INTO SAUDAES VALUES (1, 'ol');
-- usar o valor gerado
INSERT INTO SAUDAES VALUES (DEFAULT, 'salut');
-- usar o valor gerado
INSERT INTO SAUDAES(CH) VALUES ('bonjour');
Instruo CREATE TRIGGER
Junto com as restries, os gatilhos podem ajudar a impor regras de integridade com
aes como excluses ou atualizaes em cascata. Os gatilhos tambm podem realizar
vrias funes como emitir alertas, atualizar outras tabelas, enviar e-mail, e outras aes
teis.
Pode ser definido qualquer nmero de gatilhos para uma nica tabela, inclusive vrios
gatilhos para a mesma tabela para o mesmo evento.
Pode ser criado gatilho em qualquer esquema, exceto os comeados por SYS. O gatilho
no precisa residir no mesmo esquema da tabela para a qual definido.
Sintaxe
CREATE TRIGGER nome-do-gatilho
{ AFTER | NO CASCADE BEFORE }
{ INSERT | DELETE | UPDATE } [ OF nome-da-coluna [, nome-da-coluna]* ]
ON nome-da-tabela
[ ClusulaReferncia ]
FOR EACH { ROW | STATEMENT } MODE DB2SQL
Instruo-SQL-engatilhada
30
Direitos autorais reservados
Os gatilhos BEFORE disparam antes das modificaes da instruo serem
aplicadas, e antes de qualquer restrio ser aplicada. Os gatilhos para antes
podem ser tanto de linha quanto de instruo (consulte Gatilhos de instruo
versus gatilhos de linha).
Os gatilhos AFTER disparam aps todas as restries terem sido satisfeitas, e
aps todas as alteraes terem sido aplicadas tabela de destino. Os gatilhos
AFTER podem ser tanto de linha quanto de instruo (consulte Gatilhos de
instruo versus gatilhos de linha).
Pode ser definido qualquer nmero de gatilhos para um determinado evento em uma
determinada tabela. No caso de gatilho para atualizao podem ser especificadas as
colunas.
O Derby fornece vrias maneiras para fazer referncia aos dados que esto sendo
alterados no momento pelo evento do banco de dados que fez o gatilho disparar. Os
dados alterados podem ser referenciados pela instruo-SQL-engatilhada utilizando
variveis de transio ou tabelas de transio. A clusula de referncia permite o
fornecimento do nome da correlao ou alis para estas variveis de transio
especificando OLD/NEW AS nome-da-correlao.
Por exemplo, se for adicionada a seguinte clusula definio do gatilho:
REFERENCING OLD AS LINHA_APAGADA
31
Direitos autorais reservados
Instruo-SQL-engatilhada
A ao definida pelo gatilho chamada de instruo-SQL-engatilhada (na Sintaxe
acima, veja a ltima linha). Possui as seguintes limitaes:
No pode conter parmetros dinmicos (?).
No pode criar, alterar ou remover a tabela para a qual o gatilho est definido.
No pode adicionar ou remover um ndice na tabela para a qual o gatilho est
definido.
No pode adicionar ou remover um gatilho na tabela para a qual o gatilho est
definido.
No pode efetivar ou desfazer a transao corrente, ou mudar o nvel de
isolamento.
No pode executar a instruo CALL.
Os gatilhos para antes no podem possuir instrues INSERT, UPDATE ou
DELETE como sua ao.
Ordem de execuo
Quando ocorre um evento de banco de dados que dispara um gatilho, o Derby realiza
aes nesta ordem:
Dispara os gatilhos NO CASCADE BEFORE.
Realiza a verificao das restries (verifica chave primria, chave nica e chave
32
Direitos autorais reservados
estrangeira).
Realiza a insero, atualizao ou excluso.
Dispara os gatilhos AFTER.
Quando so definidos vrios gatilhos para o mesmo evento de banco de dados, para a
mesma tabela, e para o mesmo instante (antes ou depois), os gatilhos so disparados
na ordem em que foram criados.
-- Instrues e gatilhos:
CREATE TRIGGER T1 NO CASCADE BEFORE UPDATE ON X
FOR EACH ROW MODE DB2SQL
values app.notifyEmail('Jerry', 'A tabela x est para ser atualizada');
CREATE TRIGGER EXCLUI_VOS
AFTER DELETE ON VOS
REFERENCING OLD_TABLE AS VOS_EXCLUDOS
FOR EACH STATEMENT MODE DB2SQL
DELETE FROM VOS_DISPONIBILIDADE WHERE ID_VO IN
(SELECT ID_VO FROM VOS_EXCLUDOS);
CREATE TRIGGER EXCLUI_VOS3
AFTER DELETE ON VOS
REFERENCING OLD AS OLD
FOR EACH ROW MODE DB2SQL
DELETE FROM VOS_DISPONIBILIDADE WHERE ID_VO = OLD.ID_VO;
Informaes relacionadas
As funes de sistema especiais que retornam informao sobre a hora corrente ou o
usurio corrente so avaliadas quando o gatilho dispara, e no quando o gatilho
criado. Estas funes incluem:
CURRENT_DATE
CURRENT_TIME
CURRENT_TIMESTAMP
CURRENT_USER
SESSION_USER
USER
ClusulaReferncia:
REFERENCING
{
{ OLD | NEW } [ AS ] nome-da-correlao [ { OLD | NEW } [ AS ]
nome-da-correlao ] |
{ OLD_TABLE | NEW_TABLE } [ AS ] Identificador [ { OLD_TABLE | NEW_TABLE
}
[AS] Identificador ]
}
Instruo CREATE VIEW
As vises no so atualizveis.
Sintaxe
33
Direitos autorais reservados
A definio da viso pode conter uma lista de colunas da viso, opcional, para atribuir
nomes explcitos s colunas da viso. Se no houver uma lista de colunas, a viso
herdar os nomes de coluna da consulta subjacente. Todas as colunas da viso devem
possuir nomes nicos.
Instrues DROP
As instrues DROP (remover) so utilizadas com funes, ndices, procedimentos,
esquemas, sinnimos, tabelas, gatilhos e vises.
Instruo DROP FUNCTION
Sintaxe
DROP FUNCTION nome-da-funo
Identifica uma determinada funo a ser removida, sendo vlida somente se existir
exatamente uma instncia da funo com o nome-da-funo no esquema. A funo
identificada pode ter qualquer nmero de parmetros definidos na mesma. Se no
houver nenhuma funo com o nome indicado no esquema nomeado ou implcito,
ocorrer um erro (SQLState 42704). Tambm ocorrer um erro quando existir mais de
uma instncia da funo especificada no esquema nomeado ou implcito.
34
Direitos autorais reservados
Instruo DROP INDEX
Sintaxe
DROP INDEX nome-do-ndice
Nem o esquema APP (o esquema padro do usurio), e nem o esquema SYS, podem
ser removidos.
Sintaxe
DROP SCHEMA nome-do-esquema RESTRICT
A palavra chave RESTRICT impe a regra que, para o esquema poder ser removido do
banco de dados, no pode existir nenhum objeto definido no esquema especificado. A
palavra chave RESTRICT requerida.
Sintaxe
DROP SYNONYM nome-do-sinnimo
Instruo DROP TABLE
35
Direitos autorais reservados
Sintaxe
DROP TABLE nome-da-tabela
Sintaxe
DROP TRIGGER nome-do-gatilho
Sintaxe
DROP VIEW nome-da-viso
Instrues RENAME
As instrues RENAME so utilizadas com ndices e tabelas.
Instruo RENAME INDEX
Sintaxe
36
Direitos autorais reservados
Sintaxe
RENAME TABLE nome-da-tabela TO novo-nome-da-tabela
Se houver uma viso ou uma chave estrangeira fazendo referncia tabela, a tentativa
de renomear a tabela vai gerar um erro. Alm disso, caso exista alguma restrio de
verificao ou gatilho na tabela, a tentativa de renome-la vai gerar um erro.
Instrues SET
As instrues SET so utilizadas com esquemas e para definir o nvel de isolamento
corrente.
Instruo SET SCHEMA
A instruo SET SCHEMA define o esquema padro para a sesso da conexo como
sendo o esquema designado. O esquema padro utilizado como esquema de destino
por todas as instrues emitidas pela conexo que no especificam explicitamente o
nome do esquema.
Para a instruo SET SCHEMA ser bem-sucedida, o esquema de destino deve existir.
Se o esquema no existir, retornar um erro. Consulte a Instruo CREATE SCHEMA.
Sintaxe
SET [CURRENT] SCHEMA [=]
{ nome-do-esquema|
USER | ? | '<constante-cadeia-de-caracteres>' } | SET CURRENT SQLID [=]
{
nome-do-esquema| USER | ? | '<constante-cadeia-de-caracteres>' }
37
Direitos autorais reservados
diferencia letras maisculas de minsculas, a menos que esteja entre aspas (Por
exemplo, SYS equivalente a sYs, SYs, sys, etc.).
A instruo SET CURRENT ISOLATION LEVEL permite que o usurio mude o nvel de
isolamento de sua conexo. Os nveis vlidos so: SERIALIZABLE, REPEATABLE
READ, READ COMMITTED e READ UNCOMMITTED.
Para obter informaes sobre os nveis de isolamento deve ser consultado "Bloqueio,
Simultaneidade e Isolamento" no Guia do Desenvolvedor do Derby.
Sintaxe
SET [ CURRENT ] ISOLATION [ = ]
{
UR | DIRTY READ | READ UNCOMMITTED
CS | READ COMMITTED | CURSOR STABILITY
RS |
RR | REPEATABLE READ | SERIALIZABLE
RESET
}
38
Direitos autorais reservados
CALL (PROCEDIMENTO)
A instruo CALL (PROCEDIMENTO) utilizada para chamar procedimentos. A
chamada de procedimento no retorna nenhum valor.
Sintaxe
CALL nome-do-procedimento ( [ ? [, ?]* ] )
Exemplo
CREATE PROCEDURE VENDAS.RENDIMENTO_TOTAL(IN V_MS INTEGER,
IN V_ANO INTEGER, OUT TOTAL DECIMAL(10,2))
PARAMETER STYLE JAVA READS SQL DATA LANGUAGE JAVA EXTERNAL NAME
'com.acme.vendas.calcularRendimentoTotal';
CALL VENDAS.RENDIMENTO_TOTAL(?,?,?);
Clusula CONSTRAINT
A clusula CONSTRAINT uma parte opcional da Instruo CREATE TABLE e da
Instruo ALTER TABLE. A restrio uma regra com a qual os dados devem estar em
conformidade. O nome da restrio opcional.
A restrio pode ser:
restrio no nvel-de-coluna
As restries no nvel-de-coluna fazem referncia a uma nica coluna da tabela, e
no especificam o nome da coluna (exceto as restries de verificao). Se
referem coluna a qual seguem.
restrio no nvel-de-tabela
As restries no nvel-de-tabela fazem referncia a uma ou mais colunas da tabela.
As restries no nvel-de-tabela especificam os nomes das colunas s quais se
aplicam. As restries de verificao (CHECK) no nvel de tabela podem fazer
referncia a zero ou mais colunas da tabela.
39
Direitos autorais reservados
Sintaxe
Restries de chave primria e de unicidade
A chave primria define o conjunto de colunas que identificam unicamente as linhas da
tabela.
Quando se cria uma restrio de chave primria, nenhuma das colunas includas na
chave primria pode ter a restrio NULL; ou seja, no podem permitir valores nulos.
A instruo ALTER TABLE ADD PRIMARY KEY permite incluir colunas existentes em
uma chave primria, caso estas tenham sido anteriormente definidas como NOT NULL.
Os valores NULL no so permitidos. Se as colunas contiverem valores nulos, o sistema
no adicionar a restrio de chave primria. Para obter mais informaes deve ser
consultada a Instruo ALTER TABLE.
A tabela pode ter no mximo uma restrio PRIMARY KEY, mas pode ter vrias
restries UNIQUE.
40
Direitos autorais reservados
Quando uma linha de uma tabela com uma chave referenciada (uma restrio de chave
primria ou de unicidade referenciada por uma chave estrangeira) atualizada ou
removida, o Derby verifica todas as restries de chave estrangeira que fazem referncia
chave, para ter certeza que a remoo ou a modificao da linha no causa violao
da restrio. Se a remoo ou a modificao da linha causar uma violao da restrio,
a atualizao ou remoo no ser permitida, e o Derby lanar uma exceo de
instruo.
ndices de apoio
As restries UNIQUE, PRIMARY KEY e FOREIGN KEY geram ndices que impem, ou
"apoiam", restrio (sendo algumas vezes chamados de ndices de apoio). As
restries UNIQUE e PRIMARY KEY geram ndices nicos. As restries FOREIGN
KEY geram ndices que no so nicos. Portanto, se uma coluna, ou conjunto de
colunas, estiverem envolvidas em uma restrio UNIQUE, PRIMARY KEY ou FOREIGN
KEY, no necessrio criar ndices nestas colunas para melhorar o desempenho, o
Derby j ter criado o ndice. Consulte ndices e restries.
41
Direitos autorais reservados
Restries de verificao
As restries de verificao podem ser utilizadas para especificar diversas regras para o
contedo da tabela. especificada uma condio de procura (que uma expresso
booleana), para a restrio de verificao. Esta condio de procura deve ser satisfeita
por todas as linhas da tabela. A condio de procura aplicada a toda linha modificada
por uma instruo INSERT ou UPDATE, na hora em que a linha modificada. A
instruo interrompida por completo quando qualquer restrio de verificao
violada.
Aes referenciais
Quando a chave estrangeira definida, pode ser especificada uma clusula ON
DELETE e/ou ON UPDATE seguida pela ao apropriada (CASCADE, RESTRICT, SET
NULL ou NO ACTION). Estas clusulas especificam se o Derby deve modificar os
valores da chave estrangeira correspondente ou no permitir a operao, para manter o
relacionamento de chave estrangeira intacto quando o valor da chave primria for
atualizado ou excludo da tabela.
Quando se atualiza o valor de uma coluna da chave primria da tabela me, e a regra de
atualizao est especificada como RESTRICT, o Derby verifica as tabelas dependentes
com relao s restries de chave estrangeira. Se alguma linha de tabela dependente
violar a restrio de chave estrangeira, a transao ser desfeita.
Quando atualizado o valor de uma coluna em uma tabela dependente, e este valor faz
parte da chave estrangeira, a regra de atualizao implcita NO ACTION. NO ACTION
significa que se a chave estrangeira for atualizada com um valor no-nulo, o valor
atualizado dever corresponder a um valor na chave primria da tabela me quando a
instruo estiver completa. Se a atualizao no corresponder a um valor na chave
primria da tabela me, a instruo ser rejeitada.
A regra de excluso aplicada quando uma linha da tabela me excluda, e esta linha
possui dependentes na tabela dependente da restrio referencial. Quando so
excludas linhas da tabela dependente, a operao de excluso da tabela me dita
como propagada para a tabela dependente. Se a tabela dependente tambm for uma
42
Direitos autorais reservados
tabela me, a ao especificada ser aplicada, por sua vez, s suas tabelas
dependentes.
SET NULL, todas as colunas da chave estrangeira da tabela dependente que aceitam o
valor nulo, recebero o valor nulo (Novamente, se a tabela dependente tambm possuir
tabelas dependentes, as colunas das chaves estrangeiras destas tabelas que aceitam o
valor nulo, recebero o valor nulo)
Cada restrio referencial onde a tabela a tabela me, possui suas prprias regras de
excluso; todas as regras de excluso aplicveis so utilizadas para determinar o
resultado da operao de excluso. Portanto, no poder ser excluda uma linha que
possua dependentes em uma restrio referencial com regra de excluso RESTRICT ou
NO ACTION. De forma semelhante, a linha no poder ser excluda quando a excluso
se propagar em cascata para alguma de suas descendentes que seja dependente em
uma restrio referencial com a regra de excluso RESTRICT ou NO ACTION.
A excluso de uma linha da tabela me envolve outras tabelas. Qualquer tabela
envolvida em uma operao de excluso na tabela me dita como sendo
conectada-para-excluso com a tabela me. A excluso pode afetar as linhas destas
tabelas das seguintes maneiras:
Se a regra de excluso for RESTRICT ou NO ACTION, a tabela dependente estar
envolvida na operao, mas no ser afetada pela operao (ou seja, o Derby
verificar os valores na tabela, mas no excluir qualquer valor).
Se a regra de excluso for SET NULL, as linhas da tabela dependente podero ser
atualizadas quando uma linha da tabela me for objeto de uma excluso ou de uma
operao de excluso propagada.
Se a regra de excluso for CASCADE, as linhas da tabela dependente podero ser
excludas quando a tabela me for objeto de uma excluso.
Se a tabela dependente tambm for uma tabela me, as aes descritas nesta lista
sero aplicadas, por sua vez, s suas tabelas dependentes.
Exemplos
-- restrio de chave primria no nvel-de-coluna chamada PK_SADA:
CREATE TABLE SAMP.CAIXA_SADA
(
ENVIO TIMESTAMP,
DESTINO CHAR(8),
ASSUNTO CHAR(64) NOT NULL CONSTRAINT PK_CAIXA_SADA PRIMARY
KEY,
TEXTO_NOTA VARCHAR(3000)
);
-- a definio de chave primria no nvel-de-tabela permite
-- incluir duas colunas na definio da chave primria:
43
Direitos autorais reservados
44
Direitos autorais reservados
{
NOT NULL |
[ [CONSTRAINT nome-da-restrio]
{
CHECK (CondioProcura) |
{
PRIMARY KEY |
UNIQUE |
REFERENCES clusula
}
}
}
restrio no nvel-de-tabela
[CONSTRAINT nome-da-restrio]
{
CHECK (CondioProcura) |
{
PRIMARY KEY ( nome-de-coluna-simples [ , nome-de-coluna-simples
]* ) |
UNIQUE ( nome-de-coluna-simples [ , nome-de-coluna-simples ]* ) |
FOREIGN KEY ( nome-de-coluna-simples [ , nome-de-coluna-simples
]* )
REFERENCES clusula
}
}
Especificao da referncia
45
Direitos autorais reservados
Sintaxe
DECLARE GLOBAL TEMPORARY TABLE nome-da-tabela
{ definio-da-coluna [ , definio-da-coluna ] * }
[ ON COMMIT {DELETE | PRESERVE} ROWS ]
NOT LOGGED [ON ROLLBACK DELETE ROWS]
nome-da-tabela
O nome da tabela temporria. Se for especificado um nome-do-esquema diferente de
SESSION, ocorrer um erro (SQLState 428EK). Se o nome-do-esquema no for
especificado, ser atribudo SESSION. Vrias conexes podem definir tabelas
temporrias globais declaradas com o mesmo nome, porque cada conexo possui seu
prprio descritor de tabela nico.
A utilizao de SESSION como nome do esquema de uma tabela fsica no gera erro,
mas desestimulado. O nome de esquema SESSION deve ser reservado para o
esquema de tabelas temporrias.
definio-da-coluna
Para obter mais informaes sobre a definio-da-coluna deve ser consultada
definio-da-coluna em CREATE TABLE. A instruo DECLARE GLOBAL TEMPORARY
TABLE no permite especificao-de-coluna-gerada na
definio-da-coluna.
Tipo-de-dado
Os tipos-de-dado suportados so:
BIGINT
CHAR
DATE
DECIMAL
DOUBLE PRECISION
FLOAT
INTEGER
NUMERIC
REAL
SMALLINT
TIME
TIMESTAMP
VARCHAR
ON COMMIT
Especifica a ao a ser executada na tabela temporria global quando realizada uma
operao de COMMIT.
DELETE ROWS
Todas as linhas da tabela sero excludas, se no houver nenhum cursor com
possibilidade de HOLD aberto na tabela. Este o valor padro para ON COMMIT. Se for
especificado ON ROLLBACK DELETE ROWS, sero excludas todas as linhas da tabela
somente se a tabela temporria tiver sido utilizada. ON COMMIT DELETE ROWS exclui
as linhas da tabela, mesmo que a tabela no tenha sido utilizada (se a tabela no
possuir nenhum cursor com possibilidade de HOLD aberto na mesma).
PRESERVE ROWS
As linhas da tabela so preservadas.
NOT LOGGED
46
Direitos autorais reservados
Exemplos
SET SCHEMA MYAPP;
CREATE TABLE T1(C11 INT, C12 DATE);
DECLARE GLOBAL TEMPORARY TABLE SESSION.T1(C11 INT) NOT LOGGED;
-- A qualificao SESSION redundante, porque as tabelas temporrias
-- somente podem existir no esquema SESSION.
DECLARE GLOBAL TEMPORARY TABLE T2(C21 INT) NOT LOGGED;
-- A tabela temporria no qualificada neste caso com SESSION, porque
-- as tabelas temporrias somente podem existir no esquema SESSION.
INSERT INTO SESSION.T1 VALUES (1);
-- Neste caso a qualificao SESSION obrigatria para utilizar a
-- tabela temporria, porque o esquema corrente MYAPP.
SELECT * FROM T1;
-- Esta instruo SELECT est fazendo referncia tabela fsica
-- "MYAPP.T1", uma vez que a tabela no foi qualificada com SESSION.
Deve ser observado que as tabelas temporrias somente podem ser declaradas no
esquema SESSION. Nunca deve ser declarado um esquema fsico com o nome
SESSION.
A seguir est mostrada uma lista de funes da instruo DECLARE GLOBAL
TEMPORARY TABLE do DB2 UDB que no so suportadas pelo Derby:
IDENTITY opes-de-coluna
IDENTITY atributo nas opes-de-cpia
AS (FULLSELECT) DEFINITION ONLY
NOT LOGGED ON ROLLBACK PRESERVE ROWS
IN nome-do-espao-de-tabelas
PARTITIONING KEY
WITH REPLACE
47
Direitos autorais reservados
CLOB
LONG VARCHAR
Instruo DELETE
Sintaxe
{
DELETE FROM nome-da-tabela
[WHERE clusula] |
DELETE FROM nome-da-tabela WHERE CURRENT OF
}
Exemplos
DELETE FROM SAMP.CAIXA_ENTRADA;
stmt.executeUpdate("DELETE FROM SAMP.CAIXA_ENTRADA WHERE CURRENT OF " +
resultSet.getCursorName())
48
Direitos autorais reservados
Sintaxe
FOR
{
READ ONLY | FETCH ONLY |
UPDATE [ OF nome-de-coluna-simples [ , nome-de-coluna-simples]* ]
}
Por padro, os cursores so apenas-de-leitura. Para o cursor ser atualizvel, deve ser
especificado FOR UPDATE.
O otimizador capaz de utilizar um ndice mesmo que a coluna do ndice esteja sendo
atualizada. Para obter mais informaes sobre como os ndices afetam os cursores deve
ser consultado o Ajuste do Derby.
Clusula FROM
A clusula FROM uma clusula obrigatria na ExpressoSeleo. Especifica as
tabelas (ExpressoTabela) das quais as outras clusulas da consulta podem acessar as
colunas a serem utilizadas nas expresses.
Sintaxe
FROM ExpressoTabela [ , ExpressoTabela ] *
SELECT CIDADES.ID_CIDADE
FROM CIDADES
WHERE ID_CIDADE < 5
-- outros tipos de ExpressoTabela
SELECT TABLENAME, ISINDEX
FROM SYS.SYSTABLES T, SYS.SYSCONGLOMERATES C
WHERE T.TABLEID = C.TABLEID
ORDER BY TABLENAME, ISINDEX;
-- forar a ordem de juno
SELECT *
FROM VOS, VOS_DISPONIBILIDADE
WHERE VOS_DISPONIBILIDADE.ID_VO = VOS.ID_VO
AND VOS_DISPONIBILIDADE.NMERO_SEGMENTO = VOS.NMERO_SEGMENTO
AND VOS.ID_VO < 'AA1115'
-- a ExpressoTabela pode ser uma OperaoJuno. Portanto,
-- podem haver vrias operaes de juno na clusula FROM
SELECT PASES.PAS, CIDADES.NOME_CIDADE, VOS.AEROPORTO_DESTINO
FROM PASES LEFT OUTER JOIN CIDADES
49
Direitos autorais reservados
ON PASES.COD_ISO_PAS = CIDADES.COD_ISO_PAS
LEFT OUTER JOIN VOS
ON CIDADES.AEROPORTO = VOS.AEROPORTO_DESTINO;
Clusula GROUP BY
A clusula GROUP BY, que faz parte da ExpressoSeleo, agrupa o resultado em
subconjuntos que possuem valores correspondentes em uma ou mais colunas. Em cada
grupo no h duas linhas com o mesmo valor na coluna, ou colunas, de agrupamento.
Para as finalidades de agrupamento os valores nulos so considerados equivalentes.
Sintaxe
GROUP BY nome-da-coluna [ , nome-da-coluna ] *
O nome-da-coluna deve ser uma coluna do escopo corrente da consulta; no pode haver
nenhuma coluna do bloco de consulta fora do escopo corrente. Por exemplo, se a
clusula GROUP BY estiver na subconsulta, ento no poder fazer referncia a
colunas da consulta externa.
Clusula HAVING
A clusula HAVING restringe os resultados do GROUP BY na ExpressoSeleo. A
clusula HAVING aplicada a cada grupo da tabela agrupada, de forma parecida como
a clusula WHERE aplicada lista de seleo. Se no houver uma clusula GROUP
BY, a clusula HAVING ser aplicada a todo o resultado como um nico grupo. A
clusula SELECT no pode fazer referncia direta a qualquer coluna que no possua
uma clusula GROUP BY. Entretanto, pode fazer referncia a constantes, agregaes, e
registros especiais.
Sintaxe
HAVING CondioProcura
50
Direitos autorais reservados
A CondioProcura, que uma ExpressoBooleana especializada, pode conter apenas
as colunas de agrupamento (consulte a Clusula GROUP BY), colunas que fazem parte
das expresses de agregao, e as colunas que fazem parte da subconsulta. Por
exemplo, a seguinte consulta ilegal, porque a coluna SALRIO no uma coluna de
agrupamento, no aparece em uma agregao, e no est em uma subconsulta:
-- SELECT COUNT(*)
-- FROM SAMP.EQUIPES
-- GROUP BY ID
-- HAVING SALRIO > 15000;
INNER JOIN
INNER JOIN (juno interna) uma Operao JOIN que permite especificar uma
clusula de juno explcita.
Sintaxe
ExpressoTabela [ INNER ] JOIN ExpressoTabela { ON ExpressoBooleana }
A clusula de juno pode ser especificada utilizando ON com uma expresso booleana.
O escopo das expresses na clusula ON inclui as tabelas correntes, e as tabelas nos
blocos de consulta externos ao SELECT corrente. No exemplo a seguir, a clusula ON
faz referncia s tabelas correntes:
SELECT *
FROM SAMP.EMPREGADOS INNER JOIN SAMP.EQUIPES
ON EMPREGADOS.SALRIO < EQUIPES.SALRIO;
51
Direitos autorais reservados
Instruo INSERT
A instruo INSERT cria uma ou mais linhas, e as armazena na tabela especificada. O
nmero de valores especificados na instruo INSERT deve ser idntico ao nmero de
colunas especificadas ou implcitas.
Sintaxe
INSERT INTO nome-da-tabela
[ (nome-de-coluna-simples [ , nome-de-coluna-simples]* ) ]
Consulta
A Consulta pode ser:
uma ExpressoSeleo
uma lista VALUES
uma expresso VALUES de vrias linhas
As listas de uma nica linha e de vrias linhas podem incluir a palavra chave
DEFAULT. A especificao de DEFAULT para uma coluna insere o valor padro da
coluna na coluna. Outra forma de inserir o valor padro na coluna omitir a coluna
na lista de colunas, e somente inserir valores nas outras colunas da tabela. Para
obter mais informaes deve ser consultado VALUES Expresso.
expresses UNION
Para obter mais informaes sobre a Consulta deve ser consultada Consulta.
52
Direitos autorais reservados
Operao JOIN
As operaes de juno (JOIN), que esto entre as ExpressesTabela possveis na
ClusulaFROM, realizam junes entre duas tabelas (Tambm pode ser realizada a
juno entre duas tabelas utilizando um teste de igualdade explcito na clusula
WHERE, como "WHERE t1.col1 = t2.col2".)
Sintaxe
Operao de juno
As operaes de juno so:
INNER JOIN
Especifica a juno entre duas tabelas com uma clusula de juno explcita.
Consulte INNER JOIN.
LEFT OUTER JOIN
Especifica a juno entre duas tabelas com uma clusula de juno explcita,
preservando as linhas sem correspondncia da primeira tabela. Consulte LEFT
OUTER JOIN.
RIGHT OUTER JOIN
Especifica a juno entre duas tabelas com uma clusula de juno explcita,
preservando as linhas sem correspondncia da segunda tabela. Consulte RIGHT
OUTER JOIN.
Em todos os casos podem ser especificadas restries adicionais para uma ou mais
tabelas sendo juntadas nas clusulas de juno externa, ou na Clusula WHERE.
53
Direitos autorais reservados
Expresses de juno e otimizao de consulta
Para obter informaes sobre quais tipos de juno so otimizadas, consulte Ajuste do
Derby.
Sintaxe
ExpressoTabela LEFT [ OUTER ] JOIN ExpressoTabela
{
ON ExpressoBooleana
}
54
Direitos autorais reservados
Sintaxe
LOCK TABLE nome-da-tabela IN { SHARE | EXCLUSIVE } MODE
Uma vez que alguma tabela esteja bloqueada em um dos modos, a transao no
obter bloqueios subseqentes no nvel-de-linha. Por exemplo, se uma transao
bloquear toda a tabela VOS no modo compartilhado para ler os dados, e uma
determinada instruo desta transao necessitar bloquear uma determinada linha no
modo exclusivo para poder atualizar a linha, o bloqueio anterior no nvel-de-tabela fora
o bloqueio no modo exclusivo ser no nvel-de-tabela tambm.
Clusula ORDER BY
A clusula ORDER BY um elemento opcional da Instruo SELECT. A clusula
ORDER BY permite especificar a ordem em que as linhas aparecem no ResultSet.
Sintaxe
ORDER BY { nome-da-coluna | PosioColuna }
[ ASC | DESC ]
[ , nome-da-coluna | PosioColuna
[ ASC | DESC ] ] *
55
Direitos autorais reservados
ASC especifica que os resultados devem ser retornados na ordem ascendente; DESC
especifica que os resultados devem ser retornados na ordem descendente; Quando a
ordem no especificada, o padro ASC.
Por exemplo, se uma coluna INTEGER contiver nmeros inteiros, NULL considerado
maior que 1 para as finalidades de classificao. Em outras palavras, os valores nulos
so classificados como sendo maiores.
Consulta
A consulta cria uma tabela virtual baseada em tabelas existentes ou constantes
transformadas em tabelas.
Sintaxe
{
( Consulta ) |
Consulta INTERSECT [ ALL | DISTINCT ] Consulta |
Consulta EXCEPT [ ALL | DISTINCT ] Consulta |
Consulta UNION [ ALL | DISTINCT ] Consulta |
ExpressoSeleo | VALUES Expresso
}
56
Direitos autorais reservados
Dependendo da operao especificada, se o nmero de cpias de uma determinada
linha na tabela esquerda for L, e o nmero de cpias desta linha na tabela direita for
R, ento o nmero de linhas duplicadas desta determinada linha contidas na tabela de
sada ser (assumindo que a palavra chave ALL foi especificada):
UNION: ( L + R ).
EXCEPT: o maior entre ( L R ) e 0 (zero).
INTERSECT: o menor entre L e R.
Exemplos
-- Uma expresso de seleo
SELECT *
FROM ORG;
-- uma subconsulta
SELECT *
FROM (SELECT COD_CLASSE FROM CLASSE_AGENDA) AS CS;
-- uma subconsulta
SELECT *
FROM (SELECT COD_CLASSE FROM CLASSE_AGENDA) AS CS (COD_CLASSE);
-- uma unio
-- retornar todas as linhas das colunas NUM_DEP e GERENTE
-- da tabela ORG
-- e (1,2) e (3,4)
-- NUM_DEP e GERENTE so colunas do tipo SMALLINT.
SELECT NUM_DEP, GERENTE
FROM ORG
UNION ALL
VALUES (1,2), (3,4);
-- uma expresso de valores
VALUES (1,2,3);
-- Listar os nmeros dos empregados (NUM_EMP)
-- de todos os empregados na tabela EMPREGADOS
-- cujo nmero do departamento (DEP_TRAB) comea por 'E', ou
-- quem est alocado a projetos na tabela ATIV_EMP
-- cujo nmero do projetor (NUM_PROJ) igual a
-- 'MA2100', 'MA2110' ou 'MA2112'.
SELECT NUM_EMP
FROM EMPREGADOS
WHERE DEP_TRAB LIKE 'E%'
UNION
SELECT NUM_EMP
FROM ATIV_EMP
WHERE NUM_PROJ IN('MA2100', 'MA2110', 'MA2112');
-- Realizar a mesma consulta do exemplo anterior
-- e "marcar" as linhas da tabela EMPREGADOS com 'emp' e
-- as linhas da tabela ATIV_EMP com 'ativ_emp'.
-- Diferentemente do resultado do exemplo anterior,
-- esta consulta pode retornar o mesmo NUM_EMP mais de uma vez,
-- identificando de que tabela veio pela "marca" associada.
SELECT NUM_EMP, 'emp'
FROM EMPREGADOS
WHERE DEP_TRAB LIKE 'E%'
UNION
SELECT NUM_EMP, 'ativ_emp'
FROM ATIV_EMP
WHERE NUM_PROJ IN('MA2100', 'MA2110', 'MA2112');
-- Realizar a mesma consulta do exemplo anterior,
-- porm utilizando UNION ALL para que as linhas
-- duplicadas no sejam eliminadas.
SELECT NUM_EMP
FROM EMPREGADOS
WHERE DEP_TRAB LIKE 'E%'
UNION ALL
SELECT NUM_EMP
FROM ATIV_EMP
WHERE NUM_PROJ IN('MA2100', 'MA2110', 'MA2112');
-- Realizar a mesma consulta do exemplo anterior,
-- incluindo dois empregados adicionais que no
-- momento no se encontram em nenhuma tabela,
-- e marcar estas linhas como "nova".
SELECT NUM_EMP, 'emp'
FROM EMPREGADOS
WHERE DEP_TRAB LIKE 'E%'
UNION
SELECT NUM_EMP, 'ativ_emp'
57
Direitos autorais reservados
FROM ATIV_EMP
WHERE NUM_PROJ IN('MA2100', 'MA2110', 'MA2112')
UNION
VALUES ('NEWAAA', 'nova'), ('NEWBBB', 'nova');
Sintaxe
ExpressoTabela RIGHT [ OUTER ] JOIN ExpressoTabela
{
ON ExpressoBooleana
}
SubconsultaEscalar
A SubconsultaEscalar pode ser colocada em qualquer lugar onde uma Expresso
permitida. A SubconsultaEscalar torna o resultado da ExpressoSeleo um valor
escalar, porque retorna apenas o valor de uma nica linha e coluna.
A consulta deve produzir uma nica linha com uma nica coluna.
Sintaxe
(Consulta)
58
Direitos autorais reservados
ExpressoSeleo
A ExpressoSeleo a construo bsica SELECT-FROM-WHERE utilizada para
construir um valor tabela baseado na filtragem e projeo de valores de outras tabelas.
Sintaxe
SELECT [ DISTINCT | ALL ] ItemSeleo [ , ItemSeleo ]*
Clusula FROM
[ Clusula WHERE]
[ Clusula GROUP BY ]
[ Clusula HAVING ]
ItemSeleo:
{
* |
{ nome-da-tabela | nome-da-correlao } .* |
Expresso [AS nome-de-coluna-simples]
}
A clusula WHERE faz com que as linhas do resultado sejam filtradas com base em
expresses booleanas. Somente as linhas para as quais a expresso booleana
avaliada como verdade so retornadas no resultado.
59
Direitos autorais reservados
agregao. Por exemplo:
-- Listar o chefe de cada departamento,
-- o nmero do departamento (DEP_TRAB),
-- e o salrio mdio do departamento (SALRIO)
-- para todos os departamentos na tabela EMPREGADOS.
-- Organizar a tabela de resultado na ordem ascendente
-- do salrio mdio do departamento
SELECT DEP_TRAB, AVG(SALRIO)
FROM EMPREGADOS
GROUP BY DEP_TRAB
ORDER BY 2;
Se no houver uma clusula GROUP BY, mas ItemSeleo contiver uma agregao que
no esteja em uma subconsulta, a consulta ser agrupada implicitamente. Toda a tabela
se torna um nico grupo.
O curinga *
O * expandido como todas as colunas presentes nas tabelas da clusula FROM
associada.
60
Direitos autorais reservados
So utilizados na clusula ORDER BY como nomes de coluna disponveis para
classificao.
Instruo SELECT
A instruo SELECT consiste de uma consulta com uma Clusula ORDER BY opcional,
e uma Clusula FOR UPDATE opcional. A instruo SELECT possui este nome porque
tipicamente a primeira palavra da construo da consulta SELECT (A consulta inclui a
expresso VALUES, as expresses UNION, INTERSECT e EXCEPT, alm de
expresses SELECT).
Pode ser definido o nvel de isolamento da instruo SELECT utilizando a sintaxe WITH
{RR|RS|CS|UR}.
61
Direitos autorais reservados
No existe instruo na linguagem SQL para atribuir nome a um cursor. Em vez disso,
deve ser utilizada a API do JDBC para atribuir nomes a cursores ou obter os nomes
gerados pelo sistema. Para obter mais informaes, deve ser consultado "Atribuir nome
ou acessar o nome do cursor" no captulo 5 do Guia do Desenvolvedor do Derby.
Os cursores so apenas-de-leitura por padro. Para um cursor ser atualizvel, deve ser
especificado FOR UPDATE na clusula FOR (consulte a Clusula FOR UPDATE).
62
Direitos autorais reservados
ExpressoTabela
A ExpressoTabela especifica uma tabela ou viso na Clusula FROM. a fonte de
onde a ExpressoSeleo seleciona o resultado.
Pode ser aplicado um nome de correlao para a tabela na ExpressoTabela, para que
suas colunas sejam qualificadas por este nome. Se no for especificado um nome de
correlao, o nome da tabela qualificar o nome da coluna. Quando especificado um
nome de correlao para a tabela, no pode ser utilizado o nome da tabela para
qualificar as colunas. Deve ser utilizado o nome da correlao quando se qualifica o
nome da coluna.
No podem haver dois itens na clusula FROM com o mesmo nome de correlao, e
nenhum nome de correlao pode ser idntico a um nome de tabela no qualificado
especificado na clusula FROM.
Alm disso, podem ser dados novos nomes s colunas da tabela atravs da clusula
AS. Algumas situaes onde til:
Quando utilizado VALUES Expresso na SubconsultaTabela, uma vez que no
h outra maneira de atribuir nomes s colunas de VALUES Expresso.
Quando os nomes das colunas de outra forma seriam idnticos aos das colunas de
outra tabela; mudar os nomes significa que no necessrio qualific-los.
Sintaxe
{
ExpressoTabelaOuViso | Operao JOIN
}
ExpressoTabelaOuViso
{nome-da-tabela |nome-da-viso}
[ [ AS ] nome-da-correlao
[ (nome-de-coluna-simples [ , nome-de-coluna-simples]* ) ] ] ]
SubconsultaTabela
A SubconsultaTabela uma subconsulta que retorna vrias linhas.
Diferentemente da SubconsultaEscalar, a SubconsultaTabela permitida apenas:
como uma ExpressoTabela em uma Clusula FROM
com EXISTS, IN, ou comparaes quantificadas.
63
Direitos autorais reservados
Quando utilizada como uma ExpressoTabela em uma Clusula FROM, pode retornar
vrias colunas. Quando utilizada com EXISTS, pode retornar vrias colunas somente se
for utilizado o * para retornar vrias colunas.
Sintaxe
(Consulta)
Instruo UPDATE
A instruo UPDATE define o valor na coluna.
Sintaxe
{
UPDATE nome-da-tabela
SET nome-da-coluna = Valor
[ , nome-da-coluna = Valor} ]*
[Clusula WHERE] |
UPDATE nome-da-tabela
SET nome-da-coluna = Valor
[ , nome-da-coluna = Valor ]*
WHERE CURRENT OF
}
64
Direitos autorais reservados
Expresso | DEFAULT
VALUES Expresso
65
Direitos autorais reservados
"VALUES Expresso" permite construir uma linha ou uma tabela a partir de valores. A
instruo VALUES utilizada quando no existe uma clusula FROM. Esta construo
pode ser utilizada em todos os locais onde uma consulta pode ser utilizada e, portanto,
pode ser utilizada como uma instruo que retorna um ResultSet, dentro de expresses
e instrues sempre que uma subconsulta for permitida, e como fonte de valores para a
instruo INSERT.
Sintaxe
{
VALUES ( Valor {, Valor }* )
[ , ( Valor {, Valor }* ) ]* |
VALUES Valor [ , Valor ]* |
}
A primeira forma constri linhas com vrias colunas. A segunda forma constri linhas
com uma nica coluna, com cada expresso sendo o valor da coluna da linha.
-- 3 linhas de 1 coluna
VALUES (1),(2),(3);
-- 3 linhas de 1 coluna
VALUES 1, 2, 3;
-- 1 linha de 3 colunas
VALUES (1, 2, 3);
-- 3 linhas de 2 colunas
VALUES (1,21),(2,22),(3,23);
-- construo de uma tabela derivada
VALUES ('laranja', 'laranja'), ('ma', 'vermelha'),
('banana', 'amarela')
-- Inserir dois novos departamentos na tabela DEPARTAMENTOS
-- utilizando uma instruo, mas no atribuir gerente
-- aos novos departamentos.
INSERT INTO DEPARTAMENTOS (NUM_DEP, NOME_DEP, ADMRDEPT)
VALUES ('B11', 'COMPRAS', 'B01'),
('E41', 'ADMINISTRAO DE BANCO DE DADOS', 'E01')
-- inserir uma linha com valor DEFAULT para a coluna PROJ_PRINC
INSERT INTO PROJETO (NUM_PROJ, NOME_PROJ, NUM_DEP, EMP_RESP,
PROJ_DATA_INCIO, PROJ_PRINC)
VALUES ('PL2101', 'ENSURE COMPAT PLAN', 'B01', '000020',
CURRENT_DATE, DEFAULT);
-- utilizao de funo nativa
VALUES CURRENT_DATE
-- obter o valor a partir de uma expresso arbitrria
VALUES (3*29, 26.0E0/3)
-- obter o valor retornado por uma funo nativa
VALUES CHAR(1)
Valor
Expresso | DEFAULT
Clusula WHERE
A clusula WHERE uma parte opcional da ExpressoSeleo,Instruo DELETE e da
Instruo UPDATE. A clusula WHERE permite selecionar linhas baseado em uma
expresso booleana. Somente as linhas para as quais a expresso avaliada como
66
Direitos autorais reservados
TRUE so retornadas no resultado, ou no caso da instruo DELETE, excludas, ou no
caso da instruo UPDATE, atualizadas.
Sintaxe
WHERE Expresso booleana
Sintaxe
WHERE CURRENT OF nome-do-cursor
Statement s = conn.createStatement();
s.setCursorName("ResultadosLinhasAereas");
ResultSet rs = conn.executeQuery(
"SELECT LINHAS_AREA, TARIFA_BSICA " +
"FROM LINHAS_AREAS FOR UPDATE OF TARIFA_BSICA");
Statement s2 = conn.createStatement();
s2.executeUpdate("UPDATE LINHAS_AREAS SET TARIFA_BSICA = TARIFA_BSICA
" +
"+ .25 WHERE CURRENT OF ResultadosLinhasAereas");
67
Direitos autorais reservados
Funes nativas
A funo nativa uma expresso na qual a palavra chave do SQL ou o operador
especial executa alguma operao. As funes nativas utilizam palavras chave ou
operadores nativos especiais. As funes nativas so IdentificadoresSQL92 e no
diferenciam letras maisculas e minsculas. Deve ser observado que as funes em
escape, como TIMESTAMPADD e TIMESTAMPDIFF, so acessveis apenas utilizando
a sintaxe de escape do JDBC para funes, podendo ser encontradas em Sintaxe de
escape do JDBC.
68
Direitos autorais reservados
de uma expresso com relao a um conjunto de valores, assim como contar linhas.
Tambm podem ser criadas agregaes do usurio para executar outras funes de
conjunto, como calcular o desvio padro.
As agregaes nativas podem operar nos tipos de dado mostrados em Tipos de dado
permitidos pelas agregaes nativas.
Tabela 2. Tipos de dado permitidos pelas agregaes nativas
69
Direitos autorais reservados
COUNT
MAX
MIN
SUM
ABS ou ABSVAL
ABS, ou ABSVAL, retorna o valor absoluto da expresso numrica. O tipo retornado o
tipo do parmetro. So suportados todos os tipos numricos nativos (DECIMAL,
DOUBLE PRECISION, FLOAT, INTEGER, BIGINT, NUMERIC, REAL e SMALLINT).
Sintaxe
ABS(ExpressoNumrica)
-- retorna 3
VALUES ABS(-3)
AVG
AVG uma funo de agregao que calcula a mdia de uma expresso sobre um
conjunto de linhas (consulte Agregaes (funes de conjunto)). AVG somente
permitida nas expresses que tm como resultado tipos de dado numricos.
Sintaxe
AVG ( [ DISTINCT | ALL ] Expresso )
Se for desejada uma preciso maior, a expresso dever ser convertida para outro tipo
de dado:
SELECT AVG(CAST (C1 AS DOUBLE PRECISION))
FROM (VALUES (1), (1), (1), (1), (2)) AS MINHA_TABELA (c1)
BIGINT
70
Direitos autorais reservados
A funo BIGINT retorna a representao inteira de 64 bits do nmero ou da cadeia de
caracteres na forma de uma constante inteira.
Sintaxe
BIGINT (ExpressoCaractere | ExpressoNumrica )
ExpressoCaractere
Uma expresso que retorna um valor cadeia de caracteres, de comprimento no
maior que o comprimento mximo da constante caractere. Os brancos iniciais e finais
so eliminados, e a cadeia resultante deve estar em conformidade com as regras de
formao de uma constante inteira do SQL. A cadeia de caracteres no pode ser
uma cadeia longa. Se o argumento for uma ExpressoCaractere, o resultado ser o
mesmo nmero que seria produzido se a constante inteira correspondente fosse
atribuda a uma coluna ou a uma varivel inteira grande.
ExpressoNumrica
Uma expresso que retorna um valor de qualquer tipo de dado numrico nativo. Se o
argumento for uma ExpressoNumrica, o resultado ser o mesmo nmero que seria
produzido se o argumento fosse atribudo a uma coluna ou a uma varivel inteira
grande. Se a parte inteira do argumento no estiver dentro da faixa dos inteiros
grandes, ocorrer um erro. A parte decimal do argumento ser truncada, se estiver
presente.
O resultado da funo um inteiro grande. Se o argumento puder ser nulo, o resultado
poder ser nulo; Se o argumento for nulo, o resultado ser o valor nulo.
CAST
CAST converte o valor de um tipo de dado para outro, e fornece tipo de dado para o
parmetro dinmico (?) e para o valor NULL.
Sintaxe
CAST ( [ Expresso | NULL | ? ]
AS TipoDado)
O tipo de dado para o qual a expresso est sendo convertida o tipo de destino. O tipo
de dado da expresso a partir da qual est sendo feita a converso o tipo de origem.
71
Direitos autorais reservados
Tipos
S I B D R D F C V L C V L C B D T T
M N I E E O L H A O H A O L L A I I
A T G C A U O A R N A R N O O T M M
L E I I L B A R C G R C G B B E E E
L G N M L T H H S
I E T A E A V F A V T
N R L R A O R A A
T R R R M
C F C P
H B O H
A I R A
R T R
B
D I F
A T O
T R
A D
A B
T I
A T
D
A
T
A
SMALLINT S S S S S S S S - - - - - - - - - -
INTEGER S S S S S S S S - - - - - - - - - -
BIGINT S S S S S S S S - - - - - - - - - -
DECIMAL S S S S S S S S - - - - - - - - - -
REAL S S S S S S S - - - - - - - - - - -
DOUBLE S S S S S S S - - - - - - - - - - -
FLOAT S S S S S S S - - - - - - - - - - -
CHAR S S S S - - - S S S - - - S - S S S
VARCHAR S S S S - - - S S S - - - S - S S S
LONG - - - - - - - S S S - - - S - - - -
VARCHAR
CHAR FOR BIT - - - - - - - - - - S S S S S - - -
DATA
VARCHAR FOR - - - - - - - - - - S S S S S - - -
BIT DATA
LONG - - - - - - - - - - S S S S S - - -
VARCHAR FOR
BIT DATA
CLOB - - - - - - - S S S - - - S - - - -
BLOB - - - - - - - - - - - - - - S - - -
DATE - - - - - - - S S - - - - - - S - S
TIME - - - - - - - S S - - - - - - - S S
TIME STAMP - - - - - - - S S - - - - - - S S S
72
Direitos autorais reservados
Notas
Nesta discusso, os tipos de dado SQL-92 do Derby so categorizados da seguinte
maneira:
numrico
numrico exato (SMALLINT, INTEGER, BIGINT, DECIMAL, NUMERIC)
numrico aproximado (FLOAT, REAL, DOUBLE PRECISION)
cadeia
cadeia de caracteres (CLOB, CHAR, VARCHAR, LONG VARCHAR)
cadeia de bits (BLOB, CHAR FOR BIT DATA, VARCHAR FOR BIT DATA,
LONG VARCHAR FOR BIT DATA)
data/hora
DATE
TIME
TIMESTAMP
73
Direitos autorais reservados
CHAR
A funo CHAR retorna a representao cadeia de caracteres de comprimento fixo de:
uma cadeia de caracteres, se o primeiro argumento for algum tipo de cadeia de
caracteres.
um valor data/hora, se o primeiro argumento for DATE, TIME ou TIMESTAMP.
um nmero decimal, se o primeiro argumento for um nmero decimal.
um nmero de ponto flutuante de preciso dupla, se o primeiro argumento for
DOUBLE ou REAL.
um nmero inteiro, se o primeiro argumento for SMALLINT, INTEGER ou BIGINT.
O primeiro argumento deve ser de um tipo de dado nativo. O resultado da funo uma
cadeia de caracteres de comprimento fixo. Se o primeiro argumento puder ser nulo, o
resultado poder ser nulo. Se o primeiro argumento for nulo, o resultado ser o valor
nulo.
Sintaxe caractere para caractere
CHAR (ExpressoCaractere [, inteiro] )
ExpressoCaractere
Uma expresso que retorna um valor do tipo de dado CHAR, VARCHAR, LONG
VARCHAR ou CLOB.
inteiro
O atributo comprimento da cadeia de caracteres de comprimento fixo resultante. O
valor deve estar entre 0 e 254.
Se o comprimento da expresso caractere for menor que o atributo comprimento do
resultado, o resultado ser preenchido com brancos at o comprimento do resultado. Se
o comprimento da expresso caractere for maior que o atributo comprimento do
resultado, ser realizado um truncamento. Retorna uma advertncia, a menos que os
caracteres truncados sejam todos brancos e a expresso caractere no seja uma cadeia
longa (LONG VARCHAR ou CLOB).
74
Direitos autorais reservados
resultado 10.
TIME: O resultado a representao caractere da hora. O comprimento do
resultado 8.
TIMESTAMP: O resultado a representao caractere do carimbo do tempo. O
comprimento do resultado 26.
Decimal para caractere
CHAR (ExpressoDecimal)
ExpressoDecimal
Uma expresso que retorna um valor com tipo de dado decimal. Se for desejada uma
preciso e escala diferente, poder ser utilizado primeiro a funo escalar DECIMAL
para fazer a alterao.
Sintaxe ponto flutuante para caractere
CHAR (ExpressoPontoFlutuante)
ExpressoPontoFlutuante
Uma expresso que retorna um valor como tipo de dado de ponto flutuante
(DOUBLE ou REAL).
Utilizar a funo CHAR para retornar os valores para NVEL_EDUC (definido como
SMALLINT) como uma cadeia de caracteres de comprimento fixo:
SELECT CHAR(NVEL_EDUC) FROM EMPREGADOS
Um NVEL_EDUC igual a 18 retorna como o valor CHAR(6) igual a '18 ' (18 seguido
por quatro brancos).
LENGTH
LENGTH aplicado tanto a expresses cadeia de caracteres quanto a expresses
cadeia de bits, e retorna o nmero de caracteres no resultado.
Sintaxe
LENGTH ( { ExpressoCaractere | ExpressoBit } )
-- retorna 20
VALUES LENGTH('supercalifragilistic')
-- retorna 1
VALUES LENGTH(X'FF')
-- retorna 4
VALUES LENGTH(1234567890)
Concatenao
O operador de concatenao, ||, concatena seu operando direita ao final do seu
operando esquerda. Opera em expresso de caractere e de bit.
Sintaxe
{
75
Direitos autorais reservados
{ ExpressoCaractere || ExpressoCaractere } |
{ ExpressoBit || ExpressoBit }
}
Para as cadeias de bits, se os operandos esquerdo e direito forem do tipo CHAR FOR
BIT DATA, o tipo do resultado ser CHAR FOR BIT DATA; seno, ser VARCHAR FOR
BIT DATA.
--retorna 'supercalifragilisticexbealidocious(sp?)'
VALUES 'supercalifragilistic' || 'exbealidocious' || '(sp?)'
-- retorna NULL
VALUES CAST (NULL AS VARCHAR(7)) || 'UmaCadeiaDeCaracteres'
-- retorna '130asdf'
VALUES '130' || 'asdf'
A expresso CASE pode ser colocada em qualquer lugar onde permitida uma
expresso. Escolhe a expresso a ser avaliada baseado em um teste booleano.
76
Direitos autorais reservados
expresso CASE para uma coluna que pode ter nulo, quando a coluna for o parmetro
de um mtodo primitivo.
COUNT
COUNT uma funo de agregao que conta o nmero de linhas acessadas pela
expresso (consulte Agregaes (funes de conjunto)). COUNT permitida em todos
os tipos de expresso.
Sintaxe
COUNT ( [ DISTINCT | ALL ] Expresso )
-- consulta no permitida
SELECT COUNT (DISTINCT TEMPO_VO), SUM (DISTINCT MILHAS)
FROM VOS
COUNT(*)
COUNT(*) uma funo de agregao que conta o nmero de linhas acessadas. No
so eliminados nulos nem linhas duplicadas. COUNT(*) no opera em uma expresso.
Sintaxe
COUNT(*)
CURRENT DATE
CURRENT DATE sinnimo de CURRENT_DATE.
CURRENT_DATE
77
Direitos autorais reservados
Sintaxe
CURRENT_DATE
CURRENT DATE
CURRENT ISOLATION
CURRENT ISOLATION retorna o nvel de isolamento corrente como um valor CHAR(2)
contendo ""(branco), "UR", "CS", "RS" ou "RR".
Sintaxe
CURRENT ISOLATION
CURRENT SCHEMA
CURRENT SCHEMA retorna o nome do esquema utilizado para qualificar as referncias
a objetos do banco de dados no qualificadas.
Note: CURRENT SCHEMA e CURRENT SQLID so sinnimos.
Estas funes retornam uma cadeia de at 128 caracteres.
Sintaxe
CURRENT SCHEMA
-- ou, como alternativa:
CURRENT SQLID
CURRENT TIME
CURRENT TIME sinnimo de CURRENT_TIME.
CURRENT_TIME
78
Direitos autorais reservados
Sintaxe
CURRENT_TIME
CURRENT TIME
VALUES CURRENT_TIME
-- ou, como alternativa:
VALUES CURRENT TIME
CURRENT TIMESTAMP
CURRENT TIMESTAMP sinnimo de CURRENT_TIMESTAMP.
CURRENT_TIMESTAMP
CURRENT_TIMESTAMP retorna o carimbo do tempo corrente; o valor retornado no
muda se for executado mais de uma vez na mesma instruo. Isto significa que o valor
fixo, mesmo que haja uma longa demora entre as linhas trazidas pelo cursor.
Sintaxe
CURRENT_TIMESTAMP
CURRENT TIMESTAMP
VALUES CURRENT_TIMESTAMP
-- ou, como alternativa:
VALUES CURRENT TIMESTAMP
CURRENT_USER
CURRENT_USER retorna o identificador de autorizao do usurio corrente (o nome de
usurio passado quando o usurio se conectou ao banco de dados). Se no houver
usurio corrente, ser retornado APP.
Sintaxe
CURRENT_USER
VALUES CURRENT_USER
79
Direitos autorais reservados
DATE
A funo DATE retorna a data de um valor. O argumento deve ser uma data, carimbo do
tempo, um nmero positivo menor ou igual a 3.652.059, uma representao cadeia de
caracteres vlida de uma data ou carimbo do tempo, ou uma cadeia de caracteres de
comprimento 7, que no seja CLOB ou LONG VARCHAR. Se o argumento for uma
cadeia de caracteres de comprimento 7, dever representar uma data vlida na forma
yyyynnn, onde yyyy so os dgitos que representam o ano, e nnn so os dgitos entre
001 e 366 que representam o dia do ano. O resultado da funo uma data. Se o
argumento puder ser nulo, o resultado poder ser nulo; Se o argumento for nulo, o
resultado ser o valor nulo.
As outras regras dependem do tipo de dado do argumento especificado:
Se o argumento for uma data, carimbo do tempo, ou a representao cadeia de
caracteres vlida de uma data ou carimbo do tempo: O resultado ser a parte data
do valor.
Se o argumento for um nmero: O resultado ser a data n-1 dia aps 1 de janeiro
de 0001, onde n a parte inteira do nmero.
Se o argumento for uma cadeia de caracteres com comprimento 7: O resultado
ser a data representada pela cadeia de caracteres.
Sintaxe
DATE ( expresso )
VALUES DATE('1988-12-25')
DAY
A funo DAY retorna a parte relativa ao dia do valor. O argumento deve ser uma data,
carimbo do tempo, ou uma representao cadeia de caracteres vlida de uma data ou
carimbo do tempo, que no seja CLOB ou LONG VARCHAR. O resultado da funo
inteiro. Se o argumento puder ser nulo, o resultado poder ser nulo; se o argumento for
nulo, o resultado ser o valor nulo.
As outras regras dependem do tipo de dado do argumento especificado:
Se o argumento for uma data, carimbo do tempo, ou a representao cadeia de
caracteres vlida de uma data ou carimbo do tempo: O resultado ser a parte
relativa ao dia do valor, que um inteiro entre 1 e 31.
Se o argumento for uma durao de tempo ou durao de carimbo do tempo: O
resultado ser a parte relativa ao dia do valor, que um inteiro entre -99 e 99. Um
resultado diferente de zero possui o mesmo sinal do argumento.
Sintaxe
DAY ( expresso )
VALUES DAY('2005-08-02');
O valor do resultado 2.
DOUBLE
A funo DOUBLE retorna um nmero de ponto flutuante correspondente a:
80
Direitos autorais reservados
nmero, se o argumento for uma expresso numrica.
representao cadeia de caracteres do nmero, se o argumento for uma expresso
cadeia de caracteres.
Numrico para preciso dupla
DOUBLE [PRECISION] (ExpressoNumrica )
ExpressoNumrica
O argumento uma expresso que retorna um valor de qualquer tipo de dado
numrico nativo.
O resultado da funo um nmero de ponto flutuante de preciso dupla. Se o
argumento puder ser nulo, o resultado poder ser nulo; se o argumento for nulo, o
resultado ser o valor nulo. O resultado o mesmo nmero que seria produzido se o
argumento fosse atribudo a uma coluna ou varivel de ponto flutuante de preciso
dupla.
HOUR
A funo HOUR retorna a parte relativa hora do valor. O argumento deve ser uma
hora, carimbo do tempo, ou a representao cadeia de caracteres vlida de uma hora ou
carimbo do tempo, que no seja CLOB nem LONG VARCHAR. O resultado da funo
um inteiro. Se o argumento puder ser nulo, o resultado poder ser nulo; se o argumento
for nulo, o resultado ser o valor nulo.
As outras regras dependem do tipo de dado do argumento especificado:
Se o argumento for uma data, carimbo do tempo, ou a representao cadeia de
caracteres vlida de uma data ou carimbo do tempo: O resultado ser a parte
relativa hora do valor, que um inteiro entre 0 e 24.
Se o argumento for uma durao de hora ou durao de carimbo do tempo: O
resultado ser a parte relativa hora do valor, que um inteiro entre -99 e 99. Um
resultado diferente de zero possui o mesmo sinal do argumento.
Sintaxe
HOUR ( expresso )
IDENTITY_VAL_LOCAL
O Derby suporta a funo IDENTITY_VAL_LOCAL.
81
Direitos autorais reservados
Sintaxe:
IDENTITY_VAL_LOCAL ( )
Exemplos:
82
Direitos autorais reservados
-------------------------------
2
1 row selected
ij> SELECT * FROM T1;
C1 |C2
-------------------------------
1 |8
2 |1
3 |8
4 |9
4 rows selected
ij> INSERT INTO T1(C2) SELECT C1 FROM T1;
4 rows inserted/updated/deleted
ij> -- insero som sub-seleo;
-- valor retornado pela funo no deve mudar
VALUES IDENTITY_VAL_LOCAL();
1
-------------------------------
2
1 row selected
ij> SELECT * FROM T1;
C1 |C2
-------------------------------
1 |8
2 |1
3 |8
4 |9
5 |1
6 |2
7 |3
8 |4
8 rows selected
INTEGER
A funo INTEGER retorna a representao inteira de um nmero, cadeia de caracteres,
data ou hora na forma de uma constante inteira.
Sintaxe
INT[EGER] (ExpressoNumrica | ExpressoCaractere )
ExpressoNumrica
Uma expresso que retorna um valor de qualquer tipo de dado numrico nativo. Se
argumento for uma ExpressoNumrica, o resultado ser o mesmo nmero que seria
produzido se o argumento fosse atribudo a uma coluna ou varivel inteira. Se a
parte inteira do argumento no estiver dentro da faixa dos inteiros, ocorrer um erro.
A parte decimal do argumento ser truncada, se estiver presente.
ExpressoCaractere
Uma expresso que retorna um valor cadeia de caracteres, de comprimento no
maior que o comprimento mximo de uma constante caractere. Os brancos iniciais e
finais so eliminados, e a cadeia resultante deve estar em conformidade com as
regras de formao de uma constante inteira do SQL. A cadeia de caracteres no
pode ser uma cadeia longa. Se o argumento for uma ExpressoCaractere, o
resultado ser o mesmo nmero que seria produzido se a constante inteira
correspondente fosse atribuda a uma coluna ou varivel inteira.
O resultado da funo um inteiro. Se o argumento puder ser nulo, o resultado poder
ser nulo; Se o argumento for nulo, o resultado ser o valor nulo.
LOCATE
83
Direitos autorais reservados
Sintaxe
LOCATE(ExpressoCaractere, ExpressoCaractere [, PosioInicial] )
-- retorna 2
VALUES LOCATE('love', 'clover')
LCASE ou LOWER
LCASE, ou LOWER, recebe uma expresso caractere como parmetro, e retorna uma
cadeia onde os caracteres alfabticos foram convertidos para letras minsculas.
Sintaxe
LCASE ou LOWER ( ExpressoCaractere )
Se o tipo de dado do parmetro for CHAR ou LONG VARCHAR, o tipo retornado ser
CHAR ou LONG VARCHAR. Seno, o tipo retornado ser VARCHAR.
-- retorna 'asd1#w'
VALUES LOWER('aSD1#w')
SELECT LOWER(ID_VO) FROM VOS
LTRIM
LTRIM remove brancos do incio da expresso cadeia de caracteres.
Sintaxe
LTRIM(ExpressoCaractere)
84
Direitos autorais reservados
MAX
MAX uma funo de agregao que calcula o valor mximo de uma expresso para
um conjunto de valores (consulte Agregaes (funes de conjunto)). MAX permitido
apenas nas expresses que resultam em tipos de dado nativos (incluindo CHAR,
VARCHAR, DATE, TIME, CHAR FOR BIT DATA, etc.).
Sintaxe
MAX ( [ DISTINCT | ALL ] Expresso )
O qualificador DISTINCT elimina as linhas duplicadas. O qualificador ALL mantm as
linhas duplicadas. Estes qualificadores no produzem efeito na expresso MAX.
Somente permitida uma expresso de agregao DISTINCT por ExpressoSeleo.
Por exemplo, a seguinte consulta no permitida:
SELECT COUNT (DISTINCT TEMPO_VO), MAX (DISTINCT MILHAS)
FROM VOS
MIN
MIN uma funo de agregao que calcula o valor mnimo de uma expresso para um
conjunto de valores (consulte Agregaes (funes de conjunto)). MIN permitido
apenas nas expresses que tm como resultado tipos de dado nativos (incluindo CHAR,
VARCHAR, DATE, TIME, etc.).
Sintaxe
MIN ( [ DISTINCT | ALL ] Expresso )
Os qualificadores DISTINCT e ALL eliminam ou retm linhas duplicadas, mas estes
qualificadores no produzem efeito na funo MIN. Somente permitida uma expresso
de agregao DISTINCT por ExpressoSeleo. Por exemplo, a seguinte consulta no
85
Direitos autorais reservados
permitida:
SELECT COUNT (DISTINCT TEMPO_VO), MIN (DISTINCT MILHAS)
FROM VOS
-- no vlido:
SELECT DISTINCT TEMPO_VO, MIN(DISTINCT MILHAS) FROM VOS
-- no vlido:
SELECT COUNT(DISTINCT TEMPO_VO), MIN(DISTINCT MILHAS) FROM VOS
-- encontrar a data mais prxima:
SELECT MIN (DATA_VO) FROM DISPONIBILIDADE_VO;
MINUTE
A funo MINUTE retorna a parte relativa aos minutos do valor. O argumento deve ser
uma hora, carimbo do tempo, ou a representao cadeia de caracteres vlida de uma
hora ou carimbo do tempo, que no seja CLOB nem LONG VARCHAR. O resultado da
funo um inteiro. Se o argumento puder ser nulo, o resultado poder ser nulo; se o
argumento for nulo, o resultado ser o valor nulo.
As outras regras dependem do tipo de dado do argumento especificado:
Se o argumento for uma data, carimbo do tempo, ou a representao cadeia de
caracteres vlida de uma data ou carimbo do tempo: O resultado ser a parte
relativa ao minutos do valor, que um inteiro entre 0 e 59.
Se o argumento for uma durao de hora ou durao de carimbo do tempo: O
resultado ser a parte relativa aos minutos do valor, que um inteiro entre -99 e
99. Um resultado diferente de zero possui o mesmo sinal do argumento.
Sintaxe
MINUTE ( expresso )
MOD
MOD retorna o resto (mdulo) do primeiro argumento dividido pelo segundo argumento.
O resultado ser negativo somente se o primeiro argumento for negativo.
Sintaxe
mod(tipo-inteiro, tipo-inteiro)
86
Direitos autorais reservados
O resultado da funo :
SMALLINT se os dois argumentos forem SMALLINT.
INTEGER se um dos argumentos for INTEGER e o outro INTEGER ou SMALLINT.
BIGINT se um dos argumentos for BIGINT e o outro BIGINT, INTEGER ou
SMALLINT.
O resultado pode ser nulo; se um dos argumentos for nulo, o resultado ser nulo.
MONTH
A funo MONTH retorna a parte relativa ao ms do valor. O argumento deve ser uma
data, carimbo do tempo, ou a representao cadeia de caracteres vlida de uma data ou
carimbo do tempo, que no seja CLOB nem LONG VARCHAR. O resultado da funo
um inteiro. Se o argumento puder ser nulo, o resultado poder ser nulo; se o argumento
for nulo, o resultado ser o valor nulo.
As outras regras dependem do tipo de dado do argumento especificado:
Se o argumento for uma data, carimbo do tempo, ou a representao cadeia de
caracteres vlida de uma data ou carimbo do tempo: O resultado ser a parte
relativa ao ms do valor, que um inteiro entre 1 e 12.
Se o argumento for uma durao de data ou durao de carimbo do tempo: O
resultado ser a parte relativa ao ms do valor, que um inteiro entre -99 e 99. Um
resultado diferente de zero possui o mesmo sinal do argumento.
Sintaxe
MONTH ( expresso )
RTRIM
RTRIM remove brancos do final da expresso cadeia de caracteres.
Sintaxe
RTRIM(ExpressoCaractere)
SECOND
A funo SECOND retorna a parte relativa aos segundos do valor. O argumento deve
ser uma hora, carimbo do tempo, ou a representao cadeia de caracteres vlida de
87
Direitos autorais reservados
uma hora ou do carimbo do tempo, que no seja CLOB nem LONG VARCHAR. O
resultado da funo um inteiro. Se o argumento puder ser nulo, o resultado poder ser
nulo; se o argumento for nulo, o resultado ser o valor nulo.
As outras regras dependem do tipo de dado do argumento especificado:
Se o argumento for uma data, carimbo do tempo, ou a representao cadeia de
caracteres vlida de uma data ou carimbo do tempo: O resultado ser a parte
relativa aos segundos do valor, que um inteiro entre 0 e 59.
Se o argumento for uma durao de hora ou durao de carimbo do tempo: O
resultado ser a parte relativa aos segundos do valor, que um inteiro entre -99 e
99. Um resultado diferente de zero possui o mesmo sinal do argumento.
Sintaxe
SECOND ( expresso )
SECOND(RECEBIDO)
SESSION_USER
SESSION_USER retorna o identificador de autorizao ou nome do usurio corrente. Se
no houver usurio corrente, ser retornado APP.
Sintaxe
SESSION_USER
VALUES SESSION_USER
SMALLINT
A funo SMALLINT retorna a representao inteira pequena de um nmero ou cadeia
de caracteres na forma de uma constante inteira pequena.
Sintaxe
SMALLINT (ExpressoNumrica | ExpressoCaractere )
ExpressoNumrica
Uma expresso que retorna um valor de qualquer tipo de dado numrico nativo. Se
argumento for uma ExpressoNumrica, o resultado ser o mesmo nmero que seria
produzido se o argumento fosse atribudo a uma coluna ou varivel inteira pequena.
Se a parte inteira do argumento no estiver dentro da faixa dos inteiros pequenos,
ocorrer um erro. A parte decimal do argumento ser truncada, se estiver presente.
ExpressoCaractere
Uma expresso que retorna um valor cadeia de caracteres, de comprimento no
maior que o comprimento mximo de uma constante caractere. Os brancos iniciais e
finais so eliminados, e a cadeia resultante deve estar em conformidade com as
regras de formao de uma constante inteira do SQL. Entretanto, o valor da
constante deve estar na faixa dos inteiros pequenos. A cadeia de caracteres no
pode ser uma cadeia longa. Se o argumento for uma ExpressoCaractere, o
88
Direitos autorais reservados
resultado ser o mesmo nmero que seria produzido se a constante inteira
correspondente fosse atribuda a uma coluna ou varivel inteira pequena.
O resultado da funo um inteiro pequeno. Se o argumento puder ser nulo, o resultado
poder ser nulo; Se o argumento for nulo, o resultado ser o valor nulo.
SQRT
Retorna a raiz quadrada de um nmero de ponto flutuante; somente so suportados os
tipos de dado nativos REAL, FLOAT e DOUBLE PRECISION. O tipo retornado pela
funo SQRT o mesmo tipo do parmetro.
Note: Para executar SQRT em outros tipos de dado, estes devem ser convertidos em
tipos de ponto flutuante.
Sintaxe
SQRT(ExpressoPontoFlutuante)
VALUES SQRT(3421E+09)
-- lana uma exceo se alguma linha armazenar um nmero negativo:
SELECT SQRT(MINHA_COLUNA_DUPLA) FROM MINHA_TABELA
-- retorna a raiz quadrada de um INTEGER aps convert-lo
-- em um tipo de dado de ponto flutuante:
VALUES SQRT (CAST(25 AS FLOAT));
SUBSTR
A funo SUBSTR atua sobre uma expresso cadeia de caracteres ou uma expresso
cadeia de bits. No primeiro caso o tipo do resultado VARCHAR, e no segundo caso
VARCHAR FOR BIT DATA. O comprimento do resultado o comprimento mximo do
tipo de origem.
Sintaxe
SUBSTR({ ExpressoCaractere },
PosioInicial [, ComprimentoCadeia ] )
SUBSTR retorna NULL se for especificado ComprimentoCadeia, e este for menor que
zero.
89
Direitos autorais reservados
ComprimentoCadeia, ento SUBSTR retornar um VARCHAR ou VARBIT com
comprimento ComprimentoCadeia a partir da PosioInicial.
SUM
SUM uma expresso de agregao que calcula a soma da expresso para um
conjunto de linhas (consulte Agregaes (funes de conjunto)). SUM permitida
apenas nas expresses que resultam em tipos de dado numricos.
Sintaxe
SUM ( [ DISTINCT | ALL ] Expresso )
TIME
A funo TIME retorna a parte relativa hora do valor. O argumento deve ser uma hora,
carimbo do tempo, ou a representao cadeia de caracteres vlida de uma hora ou
carimbo do tempo, que no seja CLOB nem LONG VARCHAR. O resultado da funo
uma hora. Se o argumento puder ser nulo, o resultado poder ser nulo; se o argumento
for nulo, o resultado ser o valor nulo.
As outras regras dependem do tipo de dado do argumento especificado:
Se o argumento for uma hora: O resultado ser esta hora.
Se o argumento for um carimbo do tempo: O resultado ser a parte relativa hora
do carimbo do tempo
Se o argumento for uma cadeia de caracteres: O resultado ser a hora
representada pela cadeia de caracteres
Sintaxe
TIME ( expresso )
90
Direitos autorais reservados
VALUES TIME(CURRENT_TIMESTAMP)
TIMESTAMP
A funo TIMESTAMP retorna o carimbo do tempo a partir de um valor, ou de um par de
valores.
As regras para os argumentos dependem do segundo argumento ser especificado:
Se for especificado apenas um argumento: Dever ser um carimbo do tempo, a
representao cadeia de caracteres vlida de um carimbo do tempo, ou uma
cadeia de caracteres de comprimento 14, que no seja CLOB nem LONG
VARCHAR. A cadeia de caracteres de comprimento 14 dever ser uma cadeia de
dgitos representando uma data e hora vlida no formato yyyyxxddhhmmss, onde
yyyy o ano, xx o ms, dd o dia, hh a hora, mm o minuto e ss so os
segundos.
Se os dois argumentos forem especificados: O primeiro argumento dever ser uma
data, ou a representao cadeia de caracteres vlida de uma data, e o segundo
argumento dever ser uma hora, ou a representao cadeia de caracteres vlida
de uma hora.
As outras regras dependem do segundo argumento ser especificado:
Se os dois argumentos forem especificados: O resultado ser um carimbo do
tempo com a data especificada pelo primeiro argumento e a hora especificada pelo
segundo argumento. A parte relativa aos microssegundos ser zero.
Se for especificado apenas um argumento, e este for um carimbo do tempo: O
resultado ser este carimbo do tempo.
Se for especificado apenas um argumento, e este for uma cadeia de caracteres: O
resultado ser o carimbo do tempo representado pela cadeia de caracteres. Se o
argumento for uma cadeia de caracteres de comprimento 14, o carimbo do tempo
ter a parte relativa aos microssegundos igual a zero.
Sintaxe
TIMESTAMP ( expresso [, expresso ] )
TIMESTAMP(DATA_INCIO, HORA_INCIO)
UCASE ou UPPER
UCASE, ou UPPER, recebe uma expresso caractere como parmetro, e retorna uma
cadeia onde os caracteres alfabticos foram convertidos para letras maisculas.
Sintaxe
UCASE ou UPPER ( ExpressoCaractere )
Se o tipo do parmetro for CHAR , o tipo retornado ser CHAR. Seno, o tipo retornado
ser VARCHAR.
Note: As funes UPPER e LOWER seguem o idioma do banco de dados. Consulte
territory=ll_CC para obter mais informaes sobre como especificar o idioma.
91
Direitos autorais reservados
-- retorna 'ASD1#W'
VALUES UPPER('aSD1#w')
USER
USER retorna o identificador de autorizao ou nome do usurio corrente. Se no
houver usurio corrente, ser retornado APP.
Sintaxe
USER
VALUES USER
VARCHAR
A funo VARCHAR retorna a representao cadeia de caracteres de comprimento
varivel da cadeia de caracteres.
Sintaxe caractere para VARCHAR
VARCHAR (ExpressoCadeiaCaracteres )
ExpressoCadeiaCaracteres
Uma expresso cujo valor deve ser do tipo de dado cadeia de caracteres com
comprimento mximo de 32.672 bytes.
Sintaxe data/hora para VARCHAR
VARCHAR (ExpressoDataHora )
ExpressoDataHora
Uma expresso cujo valor deve ser do tipo de dado data, hora ou carimbo do tempo.
Utilizando a tabela EMPREGADOS selecionar a descrio do cargo (CARGO definido
como CHAR(8)) para 'Dolores Quintana' como o VARCHAR equivalente:
SELECT VARCHAR(CARGO)
FROM EMPREGADOS
WHERE LTIMO_NOME = 'QUINTANA'
YEAR
A funo YEAR retorna a parte relativa ao ano do valor. O argumento deve ser uma
data, carimbo do tempo, ou a representao cadeia de caracteres vlida de uma data ou
carimbo do tempo. O resultado da funo um inteiro. Se o argumento puder ser nulo, o
resultado poder ser nulo; se o argumento for nulo, o resultado ser o valor nulo.
As outras regras dependem do tipo de dado do argumento especificado:
Se o argumento for uma data, carimbo do tempo, ou a representao cadeia de
caracteres vlida de uma data ou carimbo do tempo: O resultado ser a parte
relativa ao ano do valor, que um inteiro entre 1 e 9 999.
Se o argumento for uma durao de data ou durao de carimbo do tempo: O
resultado ser a parte relativa ao ano do valor, que um inteiro entre -9 999 e 9
92
Direitos autorais reservados
999. Um resultado diferente de zero possui o mesmo sinal do argumento.
Sintaxe
YEAR ( expresso )
SYSCS_UTIL.SYSCS_CHECK_TABLE
A funo SYSCS_UTIL.SYSCS_CHECK_TABLE verifica a tabela especificada, para
assegurar que todos os seus ndices esto consistentes com a tabela base. Quando os
ndices esto consistentes, este mtodo retorna um SMALLINT com valor igual a 1.
Quando os ndices esto inconsistentes, a funo lana uma exceo.
Sintaxe
SMALLINT SYSCS_UTIL.SYSCS_CHECK_TABLE(IN SCHEMANAME VARCHAR(128),
IN TABLENAME VARCHAR(128))
Exemplo
VALUES SYSCS_UTIL.SYSCS_CHECK_TABLE('VENDAS', 'PEDIDOS');
SYSCS_UTIL.SYSCS_GET_RUNTIMESTATISTICS
A FUNO SYSCS_UTIL.SYSCS_GET_RUNTIMESTATISTICS retorna um valor
VARCHAR(32762), que representa o plano de execuo da instruo e estatsticas de
tempo de execuo para um java.sql.ResultSet. O plano de execuo da instruo
uma rvore de ns de execuo. Existe um nmero de tipos de ns possveis. A
estatsticas so acumuladas durante a execuo de cada n. Os tipos das estatsticas
incluem a quantidade de tempo gasto em operaes especficas, o nmero de linhas
passadas para o n por seus descendentes, e o nmero de linhas retornadas pelo n
para seu ancestral (As estatsticas exatas so especficas de cada tipo de n). A funo
SYSCS_UTIL.SYSCS_GET_RUNTIMESTATISTICS mais significativa para as
instrues da DML, como SELECT, INSERT, DELETE e UPDATE.
Sintaxe
VARCHAR(32762) SYSCS_UTIL.SYSCS_GET_RUNTIMESTATISTICS()
Exemplo
VALUES SYSCS_UTIL.SYSCS_GET_RUNTIMESTATISTICS()
SYSCS_UTIL.SYSCS_GET_DATABASE_PROPERTY
93
Direitos autorais reservados
Sintaxe
VARCHAR(32762) SYSCS_UTIL.SYSCS_GET_DATABASE_PROPERTY(IN KEY
VARCHAR(128))
Exemplo
VALUES
SYSCS_UTIL.SYSCS_GET_DATABASE_PROPERTY('cadeia_com_valor_da_chave');
SYSCS_UTIL.SYSCS_COMPRESS_TABLE
O procedimento do sistema SYSCS_UTIL.SYSCS_COMPRESS_TABLE utilizado para
recuperar o espao alocado, mas no utilizado, de uma tabela e seus ndices.
Normalmente, existe espao alocado mas no utilizado quando uma grande quantidade
de dados excluda da tabela, ou os ndices so atualizados. Por padro, o Derby no
retorna para o sistema operacional o espao no utilizado. Por exemplo, uma vez que
uma pgina tenha sido alocada para uma tabela ou um ndice, esta no devolvida
automaticamente para o sistema operacional at que a tabela ou o ndice tenha sido
removido. O procedimento do sistema SYSCS_UTIL.SYSCS_COMPRESS_TABLE permite
devolver para o sistema operacional o espao no utilizado.
Sintaxe
SYSCS_UTIL.SYSCS_COMPRESS_TABLE (IN SCHEMANAME VARCHAR(128),
IN TABLENAME VARCHAR(128), IN SEQUENTIAL SMALLINT)
SCHEMANAME
Um argumento de entrada do tipo VARCHAR(128) que especifica o esquema da
tabela. Passar um valor nulo resulta em erro.
TABLENAME
Um argumento de entrada do tipo VARCHAR(128) que especifica o nome da tabela.
A cadeia de caracteres deve corresponder exatamente s letras maisculas e
minsculas do nome da tabela: um argumento igual a "Fred" passado para o SQL
como o identificador delimitado 'Fred'. Passar um argumento nulo resulta em erro.
SEQUENTIAL
Um argumento de entrada diferente de zero do tipo SMALLINT fora a operao
executar no modo seqencial, enquanto um argumento igual a zero fora a operao
a no executar no modo seqencial. Passar um argumento nulo resulta em um erro.
Exemplo SQL
Para comprimir a tabela chamada CLIENTE no esquema chamado US, utilizando a
opo SEQUENTIAL:
Exemplo Java
94
Direitos autorais reservados
CallableStatement cs = conn.prepareCall
("CALL SYSCS_UTIL.SYSCS_COMPRESS_TABLE(?, ?, ?)");
cs.setString(1, "US");
cs.setString(2, "CLIENTE");
cs.setShort(3, (short) 1);
cs.execute();
SYSCS_UTIL.SYSCS_INPLACE_COMPRESS_TABLE
O procedimento do sistema SYSCS_UTIL.SYSCS_INPLACE_COMPRESS_TABLE
utilizado para recuperar o espao alocado, mas no utilizado, de uma tabela e seus
ndices. Normalmente, existe espao alocado mas no utilizado quando uma grande
quantidade de dados excluda da tabela, e no ocorrem inseres subseqentes para
utilizar o espao criado pelas excluses. Por padro, o Derby no retorna para o sistema
operacional o espao no utilizado. Por exemplo, uma vez que uma pgina tenha sido
alocada para uma tabela ou um ndice, esta no devolvida automaticamente para o
sistema operacional at que a tabela ou o ndice tenha sido removido. O procedimento
do sistema SYSCS_UTIL.SYSCS_INPLACE_COMPRESS_TABLE permite devolver para o
sistema operacional o espao no utilizado.
Este procedimento do sistema pode ser utilizado para ocasionar trs nveis de
compresso in loco de uma tabela SQL: PURGE_ROWS, DEFRAGMENT_ROWS e
TRUNCATE_END. Diferentemente de SYSCS_UTIL.SYSCS_COMPRESS_TABLE(), todo o
trabalho feito in loco na tabela ou ndice existente.
Sintaxe
SYSCS_UTIL.SYSCS_INPLACE_COMPRESS_TABLE(
95
Direitos autorais reservados
IN SCHEMANAME VARCHAR(128),
IN TABLENAME VARCHAR(128),
IN PURGE_ROWS SMALLINT,
IN DEFRAGMENT_ROWS SMALLINT,
IN TRUNCATE_END SMALLINT )
SCHEMANAME
Um argumento de entrada do tipo VARCHAR(128) que especifica o esquema da
tabela. Passar um argumento nulo resulta em erro.
TABLENAME
Um argumento de entrada do tipo VARCHAR(128) que especifica o nome da tabela.
A cadeia de caracteres deve corresponder exatamente s letras maisculas e
minsculas do nome da tabela: um argumento igual a "Fred" passado para o SQL
como o identificador delimitado 'Fred'. Passar um argumento nulo resulta em erro.
PURGE_ROWS
Se PURGE_ROWS for definido com um valor diferente de zero, ento ser feita uma
nica passagem atravs da tabela para remover as linhas com a excluso efetivada.
Este espao se torna disponvel para as prximas linhas inseridas, mas permanece
alocado para a tabela. Como esta opo varre todas as pginas da tabela, seu
desempenho linearmente proporcional ao tamanho da tabela.
DEFRAGMENT_ROWS
Se DEFRAGMENT_ROWS for definido com um valor diferente de zero, ento ser
feita uma nica passagem de desfragmentao para mover as linhas existentes no
final da tabela em direo ao incio da tabela. O objetivo da desfragmentao
esvaziar um conjunto de pginas no final da tabela, que podero depois ser
devolvidas ao sistema operacional pela opo TRUNCATE_END. Recomenda-se
somente utilizar a opo DEFRAGMENT_ROWS quando a opo TRUNCATE_END
tambm utilizada. A opo DEFRAGMENT_ROWS varre toda a tabela, e precisa
atualizar as entradas dos ndices de todas as linhas da tabela base movidas,
portanto o tempo de execuo linearmente proporcional ao tamanho da tabela.
TRUNCATE_END
Se TRUNCATE_END for definido com um valor diferente de zero, ento todas as
pginas contguas no final da tabela sero devolvidas para o sistema operacional. A
execuo das opes PURGE_ROWS e/ou DEFRAGMENT_ROWS pode aumentar
o nmero de pginas afetadas. Por si s, esta opo no realiza uma varredura na
tabela.
Exemplo SQL
Para comprimir a tabela chamada CLIENTE no esquema chamado US, utilizando todas
as opes de compresso disponveis:
CALL SYSCS_UTIL.SYSCS_INPLACE_COMPRESS_TABLE('US', 'CLIENTE', 1, 1, 1);
Para devolver o espao livre no final da mesma tabela, pode se feita a seguinte
chamada, que muito mais rpida do que executar todas as opes, mas
provavelmente devolve muito menos espao:
CALL SYSCS_UTIL.SYSCS_INPLACE_COMPRESS_TABLE('US', 'CLIENTE', 0, 0, 1);
Exemplo Java
Para comprimir a tabela chamada CLIENTE no esquema chamado US, utilizando todas
as opes de compresso disponveis:
CallableStatement cs = conn.prepareCall
("CALL SYSCS_UTIL.SYSCS_COMPRESS_TABLE(?, ?, ?, ?, ?)");
cs.setString(1, "US");
cs.setString(2, "CLIENTE");
cs.setShort(3, (short) 1);
cs.setShort(4, (short) 1);
cs.setShort(5, (short) 1);
cs.execute();
Para devolver o espao livre no final da mesma tabela, pode se feita a seguinte
96
Direitos autorais reservados
chamada, que muito mais rpida do que executar todas as opes, mas
provavelmente devolve muito menos espao:
CallableStatement cs = conn.prepareCall
("CALL SYSCS_UTIL.SYSCS_COMPRESS_TABLE(?, ?, ?, ?, ?)");
cs.setString(1, "US");
cs.setString(2, "CLIENTE");
cs.setShort(3, (short) 0);
cs.setShort(4, (short) 0);
cs.setShort(5, (short) 1);
cs.execute();
SYSCS_UTIL.SYSCS_SET_RUNTIMESTATISTICS
O procedimento do sistema SYSCS_UTIL.SYSCS_SET_RUNTIMESTATISTICS() torna
as estatsticas em tempo de execuo da conexo ligadas ou desligadas. Por padro, as
estatsticas em tempo de execuo esto desligadas. Quando o atributo
runtimestatistics est ligado, o Derby mantm informaes sobre o plano de
execuo de cada instruo executada pela conexo (exceto COMMIT), at que este
atributo seja desligado. Para desligar o atributo runtimestatistics, este
procedimento deve ser chamado com um argumento igual a zero. Para ligar o atributo
runtimestatistics, este procedimento deve ser chamado com um argumento
diferente de zero.
Nas instrues que no retornam linhas, o objeto criado quando todo o processamento
interno est completo, antes de retornar para o programa cliente. Nas instrues que
retornam linhas, o objeto criado quando a primeira chamada a next() retorna zero
linhas, ou se for encontrada uma chamada a close(), o que ocorrer primeiro.
Sintaxe
SYSCS_UTIL.SYSCS_SET_RUNTIMESTATISTICS(IN SMALLINT ENABLE)
Exemplo
-- estabelecer a conexo
-- ligar RUNTIMESTATISTIC para a conexo:
CALL SYSCS_UTIL.SYSCS_SET_RUNTIMESTATISTICS(1);
-- executar uma consulta complexa
-- caminhar pelo conjunto de resultados
-- acessar as informaes de estatsticas em tempo de execuo:
CALL SYSCS_UTIL.SYSCS_SET_RUNTIMESTATISTICS(0);
SYSCS_UTIL.SYSCS_SET_STATISTICS_TIMING
A estatstica dos tempos um atributo associado conexo, que ligado e desligado
utilizando o procedimento do sistema
SYSCS_UTIL.SYSCS_SET_STATISTICS_TIMING. A estatstica dos tempos est
desligada por padro. A estatstica dos tempos deve ser ligada apenas quando o atributo
runtimestatistics j estiver ligado. Ligar a estatstica dos tempos quando o atributo
runtimestatistics est desligado no causa nenhum efeito.
97
Direitos autorais reservados
Quando a estatstica dos tempos est ligada, o Derby registra os tempos de vrios
aspectos da execuo da instruo. Esta informao includa nas informaes
retornadas pela funo do sistema SYSCS_UTIL.SYSCS_GET_RUNTIMESTATISTICS.
Quando a estatstica dos tempos est desligada, a funo do sistema
SYSCS_UTIL.SYSCS_GET_RUNTIMESTATISTICS mostra todos os valores de tempo
como zero.
Sintaxe
SYSCS_UTIL.SYSCS_SET_STATISTICS_TIMING(IN SMALLINT ENABLE)
Exemplo
Ligar o atributo runtimestatistics e depois ligar o atributo estatsticas dos tempos:
CALL SYSCS_UTIL.SYSCS_SET_RUNTIMESTATISTICS(1);
CALL SYSCS_UTIL.SYSCS_SET_STATISTICS_TIMING(1);
SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY
O procedimento do sistema SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY
utilizado para definir ou remover o valor de uma propriedade do banco de dados na
conexo corrente.
Se o parmetro "VALUE" no for nulo, ento a propriedade com valor chave igual ao
valor do parmetro "KEY" ser definida com o valor do parmetro "VALUE". Se o
parmetro "VALUE" for nulo, ento a propriedade com o valor chave igual ao valor do
parmetro "KEY" ser removida do conjunto de propriedades do banco de dados.
Sintaxe
SYSCS_UTIL.SYSCS_GET_DATABASE_PROPERTY(IN KEY VARCHAR(128),
IN VALUE VARCHAR(32672))
Exemplo JDBC
Definir a propriedade derby.locks.deadlockTimeout com o valor 10:
CallableStatement cs = conn.prepareCall
("CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY(?, ?)");
cs.setString(1, "derby.locks.deadlockTimeout");
cs.setString(2, "10");
cs.execute();
cs.close();
Exemplo SQL
Definir a propriedade derby.locks.deadlockTimeout com o valor 10:
CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY
('derby.locks.deadlockTimeout', '10');
SYSCS_UTIL.SYSCS_FREEZE_DATABASE
98
Direitos autorais reservados
Sintaxe
SYSCS_UTIL.SYSCS_FREEZE_DATABASE()
Exemplo
String diretorio_copias = "c:/minhas_copias/" + JCalendar.getToday();
CallableStatement cs = conn.prepareCall
("CALL SYSCS_UTIL.SYSCS_FREEZE_DATABASE()");
cs.execute();
cs.close();
// cdigo fornecido pelo usurio para fazer a cpia de segurana
// completa do "diretorio_copias".
// descongelar o banco de dados aps a cpia de segurana terminar:
CallableStatement cs = conn.prepareCall
("CALL SYSCS_UTIL.SYSCS_UNFREEZE_DATABASE()");
cs.execute();
cs.close();
SYSCS_UTIL.SYSCS_UNFREEZE_DATABASE
O procedimento do sistema SYSCS_UTIL.SYSCS_UNFREEZE_DATABASE descongela o
banco de dados aps o trmino da cpia de segurana.
Sintaxe
SYSCS_UTIL.SYSCS_UNFREEZE_DATABASE()
Exemplo
String diretorio_copias = "c:/minhas_copias/" + JCalendar.getToday();
CallableStatement cs = conn.prepareCall
("CALL SYSCS_UTIL.SYSCS_FREEZE_DATABASE()");
cs.execute();
cs.close();
// cdigo fornecido pelo usurio para fazer a cpia de segurana
// completa do "diretorio_copias".
// descongelar o banco de dados aps a cpia de segurana terminar:
CallableStatement cs = conn.prepareCall
("CALL SYSCS_UTIL.SYSCS_UNFREEZE_DATABASE()");
cs.execute();
cs.close();
SYSCS_UTIL.SYSCS_CHECKPOINT_DATABASE
O procedimento do sistema SYSCS_UTIL.SYSCS_CHECKPOINT_DATABASE cria um
ponto de controle no banco de dados, descarregando todos os dados no cache para o
disco.
Sintaxe
SYSCS_UTIL.SYSCS_CHECKPOINT_DATABASE()
Exemplo JDBC
CallableStatement cs = conn.prepareCall
99
Direitos autorais reservados
("CALL SYSCS_UTIL.SYSCS_CHECKPOINT_DATABASE()");
cs.execute();
cs.close();
Exemplo SQL
CALL SYSCS_UTIL.SYSCS_CHECKPOINT_DATABASE();
SYSCS_UTIL.SYSCS_BACKUP_DATABASE
O procedimento do sistema SYSCS_UTIL.SYSCS_BACKUP_DATABASE faz a cpia de
segurana do banco de dados no diretrio de cpia de segurana especificado.
Sintaxe
SYSCS_UTIL.SYSCS_BACKUP_DATABASE(IN BACKUPDIR VARCHAR())
CallableStatement cs = conn.prepareCall
("CALL SYSCS_UTIL.SYSCS_BACKUP_DATABASE(?)");
cs.setString(1, "c:/copia_seguranca");
cs.execute();
cs.close();
Exemplo SQL
O exemplo a seguir faz a cpia de segurana do banco de dados no diretrio
c:/copia_seguranca:
CALL SYSCS_UTIL.SYSCS_BACKUP_DATABASE('c:/copia_seguranca');
SYSCS_UTIL.SYSCS_EXPORT_TABLE
O procedimento do sistema SYSCS_UTIL.SYSCS_EXPORT_TABLE exporta todos os
dados de uma tabela para um arquivo do sistema operacional no formato delimitado.
Sintaxe
SYSCS_UTIL.SYSCS_EXPORT_TABLE (IN SCHEMANAME VARCHAR(128),
IN TABLENAME VARCHAR(128), IN FILENAME VARCHAR(32672),
IN COLUMNDELIMITER CHAR(1), IN CHARACTERDELIMITER CHAR(1),
IN CODESET VARCHAR(128))
100
Direitos autorais reservados
tabela/viso da qual os dados sero exportados. Passar um valor nulo resulta em
erro.
FILENAME
Um argumento de entrada do tipo VARCHAR(32672), que especifica o nome do
arquivo para onde os dados sero exportados. Se no for especificado o caminho
completo para o arquivo, o procedimento de exportao utilizar o diretrio corrente
e a unidade padro como destino. Se for especificado o nome de um arquivo que j
existe, o procedimento de exportao sobrescrever o contedo do arquivo; a
informao no ser anexada. Passar um valor nulo resulta em erro.
COLUMNDELIMITER
Um argumento de entrada do tipo CHAR(1), que especifica o delimitador de coluna.
O caractere especificado utilizado no lugar da vrgula para sinalizar o fim da coluna.
Passar um valor nulo resulta na utilizao do valor padro; o valor padro a vrgula
(,).
CHARACTERDELIMITER
Um argumento de entrada do tipo CHAR(1), que especifica o delimitador de
caracteres. O caractere especificado utilizado no lugar das aspas para envolver a
cadeia de caracteres. Passar um valor nulo resulta na utilizao do valor padro; o
valor padro aspas (").
CODESET
Um argumento de entrada do tipo VARCHAR(128), que especifica o cdigo de
conjunto de caracteres dos dados no arquivo exportado. O nome do cdigo de
conjunto de caracteres deve ser igual ao de uma das codificaes de caracteres
suportadas pelo Java. Antes de escrever no arquivo, os dados so convertidos do
cdigo de conjunto de caracteres do banco de dados para o cdigo de conjunto de
caracteres especificado. Passar um valor nulo faz com que os dados sejam escritos
no mesmo cdigo de conjunto de caracteres da JVM em que est sendo executado.
Se o nome do esquema ou da tabela foi criado usando um identificador no delimitado, o
nome dever ser passado para o procedimento de exportao usando todas as letras
em maisculo. Se o nome do esquema, da tabela ou da coluna foi criado usando um
identificador delimitado, o nome dever ser passado para o procedimento de exportao
com letras maisculas e minsculas, conforme utilizado na criao.
Exemplo
O exemplo a seguir mostra como exportar as informaes da tabela EQUIPE do banco
de dados SAMPLE para o arquivo meu_arquivo.csv.
Para obter mais informaes sobre exportao deve ser consultado o Guia das
Ferramentas e Utilitrios do Derby.
SYSCS_UTIL.SYSCS_EXPORT_QUERY
O procedimento do sistema SYSCS_UTIL.SYSCS_EXPORT_QUERY exporta os
resultados de uma instruo SELECT para um arquivo do sistema operacional no
formato delimitado.
Sintaxe
SYSCS_UTIL.SYSCS_EXPORT_QUERY(IN SELECTSTATEMENT VARCHAR(32672),
IN FILENAME VARCHAR(32672), IN COLUMNDELIMITER CHAR(1),
IN CHARACTERDELIMITER CHAR(1), IN CODESET VARCHAR(128))
101
Direitos autorais reservados
SELECT (consulta) que retorna os dados a serem exportados. Passar um valor nulo
resulta em erro.
FILENAME
Um argumento de entrada do tipo VARCHAR(32672), que especifica o nome do
arquivo para onde os dados sero exportados. Se no for especificado o caminho
completo para o arquivo, o procedimento de exportao utilizar o diretrio corrente
e a unidade padro como destino. Se for especificado o nome de um arquivo que j
existe, o procedimento de exportao sobrescrever o contedo do arquivo; a
informao no ser anexada. Passar um valor nulo resulta em erro.
COLUMNDELIMITER
Um argumento de entrada do tipo CHAR(1), que especifica o delimitador de coluna.
O caractere especificado utilizado no lugar da vrgula para sinalizar o fim da coluna.
Passar um valor nulo resulta na utilizao do valor padro; o valor padro a vrgula
(,).
CHARACTERDELIMITER
Um argumento de entrada do tipo CHAR(1), que especifica o delimitador de
caracteres. O caractere especificado utilizado no lugar das aspas para envolver a
cadeia de caracteres. Passar um valor nulo resulta na utilizao do valor padro; o
valor padro aspas (").
CODESET
Um argumento de entrada do tipo VARCHAR(128), que especifica o cdigo de
conjunto de caracteres dos dados no arquivo exportado. O nome do cdigo de
conjunto de caracteres deve ser igual ao de uma das codificaes de caracteres
suportadas pelo Java. Antes de escrever no arquivo, os dados so convertidos do
cdigo de conjunto de caracteres do banco de dados para o cdigo de conjunto de
caracteres especificado. Passar um argumento nulo faz com que os dados sejam
escritos no mesmo cdigo de conjunto de caracteres da JVM em que est sendo
executado.
Exemplo
O exemplo a seguir mostra como exportar as informaes dos empregados do
departamento 20 da tabela EQUIPE do banco de dados SAMPLE para o arquivo
meu_arquivo.csv.
Para obter mais informaes sobre exportao deve ser consultado o Guia das
Ferramentas e Utilitrios do Derby.
SYSCS_UTIL.SYSCS_IMPORT_TABLE
O procedimento do sistema SYSCS_UTIL.SYSCS_IMPORT_TABLE importa dados de um
arquivo de entrada para todas as colunas de uma tabela. Se a tabela que vai receber os
dados j contiver dados, os dados importados podero substituir ou ser anexado aos
dados existentes.
Sintaxe
SYSCS_UTIL.SYSCS_IMPORT_TABLE (IN SCHEMANAME VARCHAR(128),
IN TABLENAME VARCHAR(128), IN FILENAME VARCHAR(32672),
IN COLUMNDELIMITER CHAR(1), IN CHARACTERDELIMITER CHAR(1),
IN CODESET VARCHAR(128), IN REPLACE SMALLINT)
102
Direitos autorais reservados
padro
TABLENAME
Um argumento de entrada do tipo VARCHAR(128), que especifica o nome da tabela
para onde os dados sero importados. No pode ser uma tabela do sistema ou uma
tabela temporria declarada. Passar um valor nulo resulta em erro.
FILENAME
Um argumento de entrada do tipo VARCHAR(32672), que especifica o nome do
arquivo que contm os dados a serem importados. Se no for especificado o
caminho, ser utilizado o diretrio de trabalho corrente. Passar um valor nulo resulta
em erro.
COLUMNDELIMITER
Um argumento de entrada do tipo CHAR(1), que especifica o delimitador de coluna.
O caractere especificado utilizado no lugar da vrgula para sinalizar o fim da coluna.
Passar um valor nulo resulta na utilizao do valor padro; o valor padro a vrgula
(,).
CHARACTERDELIMITER
Um argumento de entrada do tipo CHAR(1), que especifica o delimitador de
caracteres. O caractere especificado utilizado no lugar das aspas para envolver a
cadeia de caracteres. Passar um valor nulo resulta na utilizao do valor padro; o
valor padro aspas (").
CODESET
Um argumento de entrada do tipo VARCHAR(128), que especifica o cdigo de
conjunto de caracteres dos dados no arquivo de entrada. O nome do cdigo de
conjunto de caracteres deve ser igual ao de uma das codificaes de caracteres
suportadas pelo Java. Os dados so convertidos do cdigo de conjunto de
caracteres especificado para o cdigo de conjunto de caracteres do banco de dados
(UTF-8). Passar um valor nulo faz interpretar os dados do arquivo no mesmo cdigo
de conjunto de caracteres da JVM em que est sendo executado.
REPLACE
Um argumento de entrada do tipo SMALLINT. Um valor diferente de zero faz com
que execute no modo de substituio, enquanto um valor igual a zero faz com que
execute no modo de insero. O modo de substituio exclui todos os dados
existentes na tabela truncando o objeto de dados, e insere os dados importados. A
definio da tabela e as definies dos ndices no so alteradas. O modo de
insero adiciona os dados importados tabela, sem alterar os dados existentes na
tabela. Passar um valor nulo resulta em erro.
Se o nome do esquema, da tabela ou da coluna foi criado usando um identificador no
delimitado, o nome dever ser passado para o procedimento de importao usando
todas as letras em maisculo. Se o nome do esquema, da tabela ou da coluna foi criado
usando um identificador delimitado, o nome dever ser passado para o procedimento de
importao com letras maisculas e minsculas, conforme utilizado na criao.
Exemplo
O exemplo a seguir importa dados para a tabela EQUIPE a partir de um arquivo de
dados delimitado chamado meu_arquivo.csv, que utiliza o caractere de percentagem
(%) como delimitador de cadeia de caracteres, e o caractere ponto-e-vrgula (;) como
delimitador de coluna:
CALL SYSCS_UTIL.SYSCS_IMPORT_TABLE
(null, 'EQUIPE', 'c:/output/meu_arquivo.csv', ';', '%', NULL,0);
Para obter mais informaes sobre importao deve ser consultado o Guia das
Ferramentas e Utilitrios do Derby.
SYSCS_UTIL.SYSCS_IMPORT_DATA
O procedimento do sistema SYSCS_UTIL.SYSCS_IMPORT_DATA importa dados para
um subconjunto de colunas da tabela. O subconjunto de colunas escolhido
103
Direitos autorais reservados
especificando as colunas para insero. Este procedimento tambm utilizado para
importar um subconjunto de colunas de dados do arquivo especificando os ndices das
colunas.
Sintaxe
SYSCS_UTIL.SYSCS_IMPORT_DATA (IN SCHEMANAME VARCHAR(128),
IN TABLENAME VARCHAR(128), IN INSERTCOLUMNS VARCHAR(32672),
IN COLUMNINDEXES VARCHAR(32672), IN FILENAME VARCHAR(32672),
IN COLUMNDELIMITER CHAR(1), IN CHARACTERDELIMITER CHAR(1),
IN CODESET VARCHAR(128), IN REPLACE SMALLINT)
104
Direitos autorais reservados
tabela. Passar um valor nulo resulta em erro.
Se o nome do esquema, da tabela ou da coluna foi criado usando um identificador no
delimitado, o nome dever ser passado para o procedimento de importao usando
todas as letras em maisculo. Se o nome do esquema, da tabela ou da coluna foi criado
usando um identificador delimitado, o nome dever ser passado para o procedimento de
importao com letras maisculas e minsculas, conforme utilizado na criao.
Exemplo
O exemplo a seguir importa alguns dos campos de dados do arquivo de dados
delimitado chamado meu_arquivo.csv para a tabela EQUIPE:
CALL SYSCS_UTIL.SYSCS_IMPORT_DATA
(NULL, 'EQUIPE', null, '1,3,4', 'meu_arquivo.csv', null, null, null,0)
Para obter mais informaes sobre importao deve ser consultado o Guia das
Ferramentas e Utilitrios do Derby.
Tipos de dado
Esta seo descreve os tipos de dado utilizados no Derby.
Cada tipo possui, associado ao mesmo, valores deste tipo. Alm disso, os valores no
banco de dados e os resultados das expresses podem ser nulos, o que significa que o
valor est faltando ou desconhecido. Embora existam alguns lugares onde a palavra
chave NULL pode ser utilizada explicitamente, esta no em si prpria um valor, porque
necessita de um tipo de dado associado mesma.
Tipos numricos
Tipos numricos utilizados no Derby.
Viso geral dos tipos numricos
Os tipos numricos incluem os seguintes tipos, que fornecem armazenamento de
tamanhos diferentes:
Numricos inteiros
SMALLINT (2 bytes)
INTEGER (4 bytes)
BIGINT (8 bytes)
Numricos aproximados, ou de ponto flutuante
REAL (4 bytes)
DOUBLE PRECISION (8 bytes)
FLOAT (outro nome para DOUBLE PRECISION ou REAL)
Numricos exatos
DECIMAL (armazenamento baseado na preciso)
NUMERIC (outro nome para DECIMAL)
Promoo de tipo numrico nas expresses
Nas expresses que utilizam apenas os tipos inteiros, o Derby promove o tipo do
105
Direitos autorais reservados
resultado para pelo menos INTEGER. Nas expresses que misturam tipos inteiros e no
inteiros, o Derby promove o resultado da expresso para o tipo mais alto da expresso.
A tabela Promoo de tipo nas expresses mostra a promoo dos tipos de dado nas
expresses.
Tabela 4. Promoo de tipo nas expresses
Por exemplo:
-- retorna preciso dupla
VALUES 1 + 1.0e0
-- retorna decimal
VALUES 1 + 1.0
-- retorna inteiro
VALUES CAST (1 AS INT) + CAST (1 AS INT)
Pode ser armazenado um tipo de ponto flutuante em uma coluna INTEGER; a parte
fracionria do nmero truncada. Por exemplo:
INSERT INTO MINHA_TABELA(COLUNA_INTEIRA) VALUES (1.09e0);
1 row inserted/updated/deleted
SELECT coluna_inteira
FROM MINHA_TABELA;
I
---------------
1
Os tipos inteiros sempre podem ser colocados com sucesso em valores numricos
aproximados, embora com uma possvel perda de preciso.
106
Direitos autorais reservados
local com tamanho de armazenamento menor falha apenas se o valor no puder ser
armazenado no local com tamanho menor. Por exemplo:
INSERT INTO MINHA_TABELA (COLUNA_INTEIRA) VALUES 2147483648;
ERRO 22003: O valor resultante est fora da faixa para o tipo de dado
INTEGER.
Note: Ao truncar os dgitos no final do valor NUMERIC, o Derby arredonda para baixo.
Escala na aritmtica decimal
As instrues SQL podem envolver expresses aritmticas que utilizam tipos de dado
decimais com preciso (o nmero total de dgitos, tanto esquerda quanto direita do
ponto decimal) e escala (o nmero de dgitos da parte fracionria) diferentes. A preciso
e a escala do tipo decimal resultante dependem da preciso e da escala dos operandos.
107
Direitos autorais reservados
Esta tabela mostra as atribuies vlidas entre tipos de dado no Derby. "S" indica que a
atribuio vlida.
Tipos
S I B D R D F C V L C V L C B D T T
M N I E E O L H A O H A O L L A I I
A T G C A U O A R N A R N O O T M M
L E I I L B A R C G R C G B B E E E
L G N M L T H H S
I E T A E A V F A V T
N R L R A O R A A
T R R R M
C F C P
H B O H
A I R A
R T R
B
D I F
A T O
T R
A D
A B
T I
A T
D
A
T
A
SMALL INT S S S S S S S - - - - - - - - - - -
INTEGER S S S S S S S - - - - - - - - - - -
BIGINT S S S S S S S - - - - - - - - - - -
DECIMAL S S S S S S S - - - - - - - - - - -
REAL S S S S S S S - - - - - - - - - - -
DOUBLE S S S S S S S - - - - - - - - - - -
FLOAT S S S S S S S - - - - - - - - - - -
CHAR - - - - - - - S S S - - - S - S S S
VARCHAR - - - - - - - S S S - - - S - S S S
LONG VARCHAR - - - - - - - S S S - - - S - - - -
CHAR FOR BIT - - - - - - - - - - S S S - - - - -
DATA
VARCHAR FOR - - - - - - - - - - S S S - - - - -
BIT DATA
LONG VARCHAR - - - - - - - - - - S S S - - - - -
FOR BIT DATA
CLOB - - - - - - - S S S - - - S - - - -
BLOB - - - - - - - - - - - - - - S - - -
DATE - - - - - - - S S - - - - - - S - -
TIME - - - - - - - S S - - - - - - - S -
TIME STAMP - - - - - - - S S - - - - - - - - S
108
Direitos autorais reservados
Tabela 6. Comparaes permitidas pelo Derby
Esta tabela mostra as comparaes vlidas entre tipos de dado no Derby. "S" indica que
a comparao permitida.
Tipos
S I B D R D F C V L C V L C B D T T
M N I E E O L H A O H A O L L A I I
A T G C A U O A R N A R N O O T M M
L E I I L B A R C G R C G B B E E E
L G N M L T H H S
I E T A E A V F A V T
N R L R A O R A A
T R R R M
C F C P
H B O H
A I R A
R T R
B
D I F
A T O
T R
A D
A B
T I
A T
D
A
T
A
SMALL INT S S S S S S S - - - - - - - - - - -
INTEGER S S S S S S S - - - - - - - - - - -
BIGINT S S S S S S S - - - - - - - - - - -
DECIMAL S S S S S S S - - - - - - - - - - -
REAL S S S S S S S - - - - - - - - - - -
DOUBLE S S S S S S S - - - - - - - - - - -
FLOAT S S S S S S S - - - - - - - - - - -
CHAR - - - - - - - S S - - - - - - S S S
VARCHAR - - - - - - - S S - - - - - - S S S
LONG VARCHAR - - - - - - - - - - - - - - - - - -
CHAR FOR BIT - - - - - - - - - - S S - - - - - -
DATA
VARCHAR FOR - - - - - - - - - - S S - - - - - -
BIT DATA
LONG VARCHAR - - - - - - - - - - - - - - - - - -
FOR BIT DATA
CLOB - - - - - - - - - - - - - - - - - -
BLOB - - - - - - - - - - - - - - - - - -
DATE - - - - - - - S S - - - - - - S - -
TIME - - - - - - - S S - - - - - - - S -
TIME STAMP - - - - - - - S S - - - - - - - - S
109
Direitos autorais reservados
BIGINT
BIGINT fornece 8 bytes de armazenamento para valores inteiros.
Sintaxe
BIGINT
Valor mnimo
-9223372036854775808 (java.lang.Long.MIN_VALUE)
Valor mximo
9223372036854775807 (java.lang.Long.MAX_VALUE)
Quando misturado com outros tipos de dado nas expresses, o tipo de dado do
resultado segue as regras mostradas em Promoo de tipo numrico nas expresses.
9223372036854775807
BLOB
O BLOB (objeto grande binrio) uma cadeia binria de comprimento varivel, que pode
ter comprimento de at 2.147.483.647 bytes. Como os outros tipos binrios, as cadeias
BLOB no esto associadas a uma pgina de cdigo. Alm disso, as cadeias BLOB no
armazenam dados caracteres.
110
Direitos autorais reservados
Informaes relacionadas
Consulte java.sql.Blob e java.sql.Clob
CHAR
CHAR fornece armazenamento para cadeias de comprimento fixo.
Sintaxe
CHAR[ACTER] [(comprimento)]
O Derby insere espaos para completar o valor cadeia menor que o comprimento
esperado. O Derby trunca espaos do valor cadeia maior que o comprimento esperado.
Caracteres diferentes de espao fazem com que seja lanada uma exceo. Quando
so aplicados operadores de comparao binria em tipos CHAR, a cadeia mais curta
completada com espaos at o comprimento da cadeia mais longa.
111
Direitos autorais reservados
O tipo de dado CHAR FOR BIT DATA permite armazenar cadeias de bytes de
comprimento fixo. til para dados no estruturados, onde as cadeias de caracteres no
so apropriadas.
Sintaxe
{ CHAR | CHARACTER }[(comprimento)] FOR BIT DATA
O comprimento padro para o tipo de dado CHAR FOR BIT DATA 1, e o tamanho
mximo do comprimento so 254 bytes.
CHAR FOR BIT DATA armazena cadeias de bytes de comprimento varivel. Se o valor
CHAR FOR BIT DATA for menor que CHAR FOR BIT DATA de destino, este ser
completado com o valor de byte 0x20.
As comparaes entre valores CHAR FOR BIT DATA e VARCHAR FOR BIT DATA so
precisas. Para duas cadeias de bits serem iguais, devem ser exatamente do mesmo
comprimento (Isto diferente da maneira como outros SGBDs tratam os valores
binrios, mas funciona conforme especificado pelo padro SQL-92).
Uma operao com valores VARCHAR FOR BIT DATA e CHAR FOR BIT DATA (por
exemplo, uma concatenao), tem como resultado um valor VARCHAR FOR BIT DATA.
CLOB
O valor CLOB (objeto grande caractere) pode ter comprimento de at 2.147.483.647
caracteres. O CLOB utilizado para armazenar dados baseados em caractere
UNICODE, como documentos grandes em qualquer conjunto de caracteres.
java.sql.Clob
112
Direitos autorais reservados
CLOB
Informao relacionada
Consulte java.sql.Blob e java.sql.Clob.
import java.sql.*;
public class clob
{
public static void main(String[] args) {
try {
String url =
"jdbc:derby:clobberyclob;create=true";
Class.forName("org.apache.derby.jdbc.EmbeddedDriver").newInstance();
Connection conn =
DriverManager.getConnection(url);
Statement s = conn.createStatement();
s.executeUpdate("CREATE TABLE documents (id INT, text CLOB(64
K))");
conn.commit();
// --- adicionar um arquivo
java.io.File file = new java.io.File("asciifile.txt");
int fileLength = (int) file.length();
// - primeiro, criar um fluxo de entrada
java.io.InputStream fin = new java.io.FileInputStream(file);
PreparedStatement ps = conn.prepareStatement("INSERT
INTO documents VALUES (?, ?)");
ps.setInt(1, 1477);
// - definir o valor do parmetro de entrada para o fluxo de
entrada
ps.setAsciiStream(2, fin, fileLength);
ps.execute();
conn.commit();
// --- ler as colunas
ResultSet rs = s.executeQuery("SELECT text FROM documents
WHERE id = 1477");
while (rs.next()) {
java.sql.Clob aclob = rs.getClob(1);
java.io.InputStream ip = rs.getAsciiStream(1);
int c = ip.read();
while (c > 0) {
System.out.print((char)c);
c = ip.read();
}
System.out.print("\n");
// ...
}
} catch (Exception e) {
System.out.println("Erro! "+e);
}
}
}
DATE
DATE fornece armazenamento para ano-ms-dia na faixa suportada por java.sql.Date.
113
Direitos autorais reservados
Sintaxe
DATE
O ano deve ser sempre expresso com quatro dgitos, enquanto os meses e os dias
podem ter um ou dois dgitos.
Exemplos
VALUES DATE('1994-02-23')
VALUES '1993-09-01'
DECIMAL
DECIMAL fornece um numrico exato onde a preciso e a escala podem ter tamanhos
arbitrrios. Pode ser especificada a preciso (o nmero total de dgitos, tanto esquerda
quanto direita do ponto decimal), e a escala (o nmero de dgitos da parte fracionria).
A quantidade de armazenamento necessria baseada na preciso.
Sintaxe
{ DECIMAL | DEC } [(preciso [, escala ])]
A preciso deve estar entre 1 e 31. A escala deve ser menor ou igual a preciso.
114
Direitos autorais reservados
-- esta converso no cabe
VALUES CAST (1798765 AS DECIMAL(5,2));
1
--------
ERRO 22003: O valor resultante est fora da faixa para o tipo de dado
DECIMAL/NUMERIC(5,2).
Quando misturado com outros tipos de dado nas expresses, o tipo de dado do
resultado segue as regras mostradas em Promoo de tipo numrico nas expresses.
VALUES 123.456
VALUES 0.001
DOUBLE
O tipo de dado DOUBLE um sinnimo para o tipo de dado DOUBLE PRECISION.
Sintaxe
DOUBLE
DOUBLE PRECISION
O tipo de dado DOUBLE PRECISION fornece de 8 bytes de armazenamento para
nmeros, utilizando a notao de ponto flutuante do IEEE.
Sintaxe
DOUBLE PRECISION
DOUBLE
Limitaes
Faixa dos valores DOUBLE:
Menor valor DOUBLE: -1.79769E+308
Maior valor DOUBLE: 1.79769E+308
115
Direitos autorais reservados
Menor valor DOUBLE positivo: 2.225E-307
Maior valor DOUBLE negativo: -2.225E-307
Estes limites so diferentes dos limites do tipo Java java.lang.Double.
lanada uma exceo quando calculado ou entrado um valor de preciso dupla fora
desta faixa de valores. As operaes aritmticas no arredondam o valor de seus
resultados para zero. Se o valor for muito pequeno, ser lanada uma exceo.
As constantes numricas de ponto flutuante esto limitadas a um comprimento de 30
caracteres.
-- este exemplo falha porque a constante muito longa:
VALUES 01234567890123456789012345678901e0;
Quando misturado com outros tipos de dado nas expresses, o tipo de dado do
resultado segue as regras mostradas em Promoo de tipo numrico nas expresses.
Exemplos
3421E+09
425.43E9
9E-10
4356267544.32333E+30
FLOAT
O tipo de dado FLOAT um alis para o tipo de dado REAL ou DOUBLE PRECISION,
dependendo da preciso especificada.
Sintaxe
FLOAT [ (preciso) ]
Limitaes
Se estiver sendo utilizada uma preciso igual a 24, ou maior, os limites para FLOAT
sero semelhantes aos de DOUBLE.
Se estiver sendo utilizada uma preciso igual a 23, ou menor, os limites para FLOAT
sero semelhantes aos de REAL.
116
Direitos autorais reservados
INTEGER
INTEGER fornece 4 bytes de armazenamento para valores inteiros.
Sintaxe
{ INTEGER | INT }
Valor mnimo
-2.147.483.648 (java.lang.Integer.MIN_VALUE)
Valor mximo
2.147.483.647 (java.lang.Integer.MAX_VALUE)
Quando misturado com outros tipos de dado nas expresses, o tipo de dado do
resultado segue as regras mostradas em Promoo de tipo numrico nas expresses.
3453
425
LONG VARCHAR
O tipo de dado LONG VARCHAR permite armazenar cadeias de caracteres com
comprimento mximo de 32.700 caracteres. idntico a VARCHAR, exceto por no ser
necessrio especificar o comprimento mximo ao criar colunas deste tipo.
Sintaxe
LONG VARCHAR
Ao converter valores Java para valores SQL, nenhum tipo da linguagem Java
corresponde a LONG VARCHAR.
117
Direitos autorais reservados
especificar o comprimento mximo ao criar colunas deste tipo.
Sintaxe
LONG VARCHAR FOR BIT DATA
NUMERIC
NUMERIC sinnimo de DECIMAL, e se comporta da mesma maneira. Consulte
DECIMAL.
Sintaxe
NUMERIC [(preciso [, escala ])]
123.456
.001
REAL
O tipo de dado REAL fornece 4 bytes de armazenamento para nmeros, utilizando a
notao de ponto flutuante do IEEE.
Sintaxe
REAL
Limitaes
Faixa de valores de REAL:
Menor valor REAL: -3.402E+38
Maior valor REAL: 3.402E+38
Menor valor REAL positivo: 1.175E-37
Maior valor REAL negativo: -1.175E-37
Estes limites so diferentes dos limites do tipo Java java.lang.Float.
lanada uma exceo quando calculado ou entrado um valor de preciso dupla fora
desta faixa de valores. As operaes aritmticas no arredondam o valor de seus
resultados para zero. Se o valor for muito pequeno, ser lanada uma exceo. As
operaes aritmticas so realizadas em aritmtica de preciso dupla, com a finalidade
de detectar nmeros muito pequenos (underflow).
As constantes numricas de ponto flutuante esto limitadas a um comprimento de 30
118
Direitos autorais reservados
caracteres.
-- este exemplo falha porque a constante muito longa:
values 01234567890123456789012345678901e0;
Quando misturado com outros tipos de dado nas expresses, o tipo de dado do
resultado segue as regras mostradas em Promoo de tipo numrico nas expresses.
SMALLINT
SMALLINT fornece 2 bytes de armazenamento.
Sintaxe
SMALLINT
Valor mnimo
-32.768 (java.lang.Short.MIN_VALUE)
Valor mximo
32.767 (java.lang.Short.MAX_VALUE)
Quando misturado com outros tipos de dado nas expresses, o tipo de dado do
resultado segue as regras mostradas em Promoo de tipo numrico nas expresses.
TIME
TIME fornece armazenamento para valor da hora do dia.
Sintaxe
TIME
119
Direitos autorais reservados
Tipo do metadado do JDBC (java.sql.Types)
TIME
Exemplos
VALUES TIME('15:09:02')
VALUES '15:09:02'
TIMESTAMP
TIMESTAMP armazena o valor combinado de DATE e TIME. Permite um valor de
segundos fracionrio com at nove dgitos.
Sintaxe
TIMESTAMP
O ano sempre deve ter quatro dgitos. Os meses, dias e horas podem ter um ou dois
dgitos. Os minutos e os segundos, se estiverem presentes, devem ter dois dgitos. Os
nanossegundos, se estiverem presentes, podem ter de um a seis dgitos.
120
Direitos autorais reservados
Exemplos
VALUES '1960-01-01 23:03:20'
VALUES TIMESTAMP('1962-09-23 03:23:34.234')
VALUES TIMESTAMP('1960-01-01 23:03:20')
VARCHAR
VARCHAR fornece armazenamento para cadeias de comprimento varivel.
Sintaxe
{ VARCHAR | CHAR VARYING | CHARACTER VARYING }(comprimento)
O comprimento uma constante inteira sem sinal, no devendo ser maior que a
restrio para o inteiro usado para especificar o comprimento, que o valor
java.lang.Integer.MAX_VALUE.
Sintaxe
{ VARCHAR | CHAR VARYING | CHARACTER VARYING } (comprimento) FOR BIT DATA
Diferentemente do tipo de dado CHAR FOR BIT DATA, no existe comprimento padro
para o tipo de dado VARCHAR FOR BIT DATA. O tamanho mximo do comprimento
de 32672 bytes.
121
Direitos autorais reservados
Uma operao envolvendo valores VARCHAR FOR BIT DATA e CHAR FOR BIT DATA
(por exemplo, uma concatenao) produz um valor VARCHAR FOR BIT DATA.
O tipo do literal byte sempre VARCHAR FOR BIT DATA, e no CHAR FOR BIT DATA.
Expresses SQL
A sintaxe de muitas instrues e expresses inclui o termo Expresso, ou um termo para
um tipo especfico de expresso como SubconsultaTabela. Dentro das instrues, so
permitidas expresses nestes pontos especificados. Alguns locais permitem apenas um
tipo especfico de expresso, ou uma expresso com uma propriedade especfica. A
Tabela de Expresses lista todas as expresses SQL possveis, e indica onde so
permitidas.
122
Direitos autorais reservados
123
Direitos autorais reservados
124
Direitos autorais reservados
(3+4)*9
(idade < 16 OR idade > 65) AND empregado = TRUE
Expresso booleana
As expresses booleanas so permitidas na clusula WHERE e nas restries de
verificao. As expresses booleanas nas restries de verificao possuem limitaes
no descritas aqui; para obter mais informaes deve ser consultada a Clusula
CONSTRAINT. As expresses booleanas nas clusulas WHERE possuem uma sintaxe
bem liberal; consulte, por exemplo, a Clusula WHERE.
125
Direitos autorais reservados
126
Direitos autorais reservados
Parmetros dinmicos
Podem ser preparadas instrues onde permitido haver parmetros para os quais o
valor no especificado quando a instruo preparada utilizando os mtodos
PreparedStatement da API do JDBC. Estes parmetros so chamados de parmetros
dinmicos, e so representados por uma ?.
127
Direitos autorais reservados
for um parmetro dinmico, ou seu tipo foi determinado pela regra anterior. O tipo
dos parmetros dinmicos que aparecem na lista de valores assumido como
sendo o tipo do operando esquerda.
WHERE ColunaPontoFlutuante IN (?, ?, ?)
-- tipos assumidos como sendo FLOAT
5. Para os operadores binrios +, -, *, /, AND, OR, <, >, =, <>, <= e >=, permitido o
uso do parmetro dinmico como um dos operandos, mas no os dois. Seu tipo de
dado obtido a partir do tipo do outro lado.
WHERE ? < CURRENT_TIMESTAMP
-- tipo assumido como sendo TIMESTAMP
6. A utilizao em CAST sempre permitida, porque CAST fornece tipo de dado ao
parmetro dinmico.
CALL valueOf(CAST (? AS VARCHAR(10)))
7. permitido o uso nos dois lados do operador LIKE. Quando utilizado no lado
esquerdo, o tipo de dado do parmetro dinmico definido como sendo o tipo de
dado do operando direita, mas com o comprimento mximo permitido para o tipo
de dado. Quando utilizado no lado direito, o tipo de dado assumido como sendo
do mesmo comprimento e tipo de dado do operando esquerda (LIKE permitido
nos tipos de dado CHAR e VARCHAR; para obter mais informaes deve ser
consultado Concatenao).
WHERE ? LIKE 'Santi%'
-- tipo assumido como sendo CHAR com comprimento igual a
-- java.lang.Integer.MAX_VALUE
8. O parmetro ?, sem mais nada, permitido em apenas um dos lados do operador
||, ou seja, "? || ?" no permitido. O tipo do parmetro ? de um dos lados do
operador || determinado pelo tipo da expresso do outro lado do operador ||. Se a
expresso do outro lado for do tipo de dado CHAR ou VARCHAR, o tipo do
parmetro ser VARCHAR com o comprimento mximo permitido para o tipo de
dado. Se a expresso do outro lado for do tipo de dado CHAR FOR BIT DATA ou
VARCHAR FOR BIT DATA, o tipo de dado do parmetro ser VARCHAR FOR BIT
DATA com o comprimento mximo permitido para o tipo de dado.
SELECT coluna_bit || ?
FROM tabela_usuario
-- tipo assumido como sendo CHAR FOR BIT DATA
-- com o comprimento especificado para coluna_bit
9. Em uma expresso condicional, que utiliza ?, tambm permitida a utilizao do
parmetro dinmico (que tambm representado por ?). O tipo do parmetro
dinmico como primeiro operando assumido como sendo booleano. Com relao
ao segundo e terceiro operandos, somente um dos dois pode ser um parmetro
dinmico, e seu tipo assumido como sendo o mesmo do outro operando (ou seja,
o terceiro e segundo operando, respectivamente).
SELECT c1 IS NULL ? ? : c1
-- permite especificar o valor "padro" em tempo de execuo
-- o parmetro dinmico assumido como tendo o tipo de c1
-- no podem haver parmetros dinmicos dos dois lados dos :
10. permitido usar parmetro dinmico como item da lista de valores ou da lista de
seleo da instruo INSERT. O tipo do parmetro dinmico assumido como
sendo o tipo da coluna de destino. O parmetro ?, sem mais nada, no permitido
na lista de seleo, inclusive na lista de seleo da subconsulta, a menos que
exista uma coluna correspondente em UNION, INTERSECT ou EXCEPT (consulte
o n 16, abaixo) que no seja dinmica.
INSERT INTO t VALUES (?)
-- o parmetro dinmico assumido como sendo
-- do tipo da nica coluna da tabela t
INSERT INTO t SELECT ?
128
Direitos autorais reservados
FROM t2
-- no permitido
11. O parmetro ? na comparao com uma subconsulta recebe seu tipo a partir da
expresso sendo selecionada na subconsulta. Por exemplo:
SELECT *
FROM tab1
WHERE ? = (SELECT x FROM tab2)
SELECT *
FROM tab1
WHERE ? = ANY (SELECT x FROM tab2)
-- Nos dois casos, o tipo do parmetro dinmico
-- assumido como sendo o mesmo tipo de tab2.x.
12. permitido usar parmetro dinmico como o valor em uma instruo UPDATE. O
tipo do parmetro dinmico assumido como sendo o tipo da coluna na tabela de
destino.
UPDATE t2 SET c2 =? -- o tipo assumido como sendo o tipo de c2
13. No permitido parmetro dinmico como operando dos operadores unrios - e +.
14. LENGTH permite parmetro dinmico. O tipo assumido como sendo o
comprimento mximo do tipo VARCHAR.
SELECT LENGTH(?)
15. Comparaes qualificadas.
? = SOME (SELECT 1 FROM t)
-- vlido. O parmetro dinmico assumido como sendo do tipo
INTEGER
1 = SOME (SELECT ? FROM t)
-- vlido. O parmetro dinmico assumido como sendo do tipo
INTEGER
16. permitido usar parmetro dinmico para representar uma coluna se aparecer em
uma expresso UNION, INTERSECT ou EXCEPT; O Derby pode inferir o tipo de
dado a partir da coluna correspondente na expresso.
SELECT ?
FROM t
UNION SELECT 1
FROM t
-- o parmetro dinmico assumido como sendo INT
VALUES 1 UNION VALUES ?
-- o parmetro dinmico assumido como sendo INT
17. permitido parmetro dinmico como operando esquerda de uma expresso IS,
sendo assumido como booleano.
Uma vez que o tipo de dado do parmetro dinmico tenha sido determinado baseado na
expresso onde se encontra, esta expresso pode estar em qualquer lugar onde
normalmente seria permitida se no inclusse o parmetro dinmico. Por exemplo, acima
foi dito que o parmetro dinmico no poderia ser utilizado como operando do - unrio.
Entretanto, pode aparecer em expresses que so operandos do menos unrio, como:
- (1+?)
129
Direitos autorais reservados
130
Direitos autorais reservados
DEFERRABLE
DEFERRED
DELETE
DESC
DESCRIBE
DIAGNOSTICS
DISCONNECT
DISTINCT
DOUBLE
DROP
ELSE
END
ENDEXEC
ESCAPE
EXCEPT
EXCEPTION
EXEC
EXECUTE
EXISTS
EXPLAIN
EXTERNAL
FALSE
FETCH
FIRST
FLOAT
FOR
FOREIGN
FOUND
FROM
FULL
FUNCTION
GET
GET_CURRENT_CONNECTION
GLOBAL
GO
GOTO
GRANT
GROUP
HAVING
HOUR
IDENTITY
IMMEDIATE
IN
INDICATOR
INITIALLY
INNER
INOUT
INPUT
INSENSITIVE
INSERT
INT
INTEGER
INTERSECT
INTO
IS
ISOLATION
JOIN
KEY
LAST
131
Direitos autorais reservados
LEFT
LIKE
LONGINT
LOWER
LTRIM
MATCH
MAX
MIN
MINUTE
NAOAL
NATURAL
NCHAR
NVARCHAR
NEXT
NO
NOT
NULL
NULLIF
NUMERIC
OF
ON
ONLY
OPEN
OPTION
OR
ORDER
OUT
OUTER
OUTPUT
OVERLAPS
PAD
PARTIAL
PREPARE
PRESERVE
PRIMARY
PRIOR
PRIVILEGES
PROCEDURE
PUBLIC
READ
REAL
REFERENCES
RELATIVE
RESTRICT
REVOKE
RIGHT
ROLLBACK
ROWS
RTRIM
SCHEMA
SCROLL
SECOND
SELECT
SESSION_USER
SET
SMALLINT
SOME
SPACE
SQL
132
Direitos autorais reservados
SQLCODE
SQLERROR
SQLSTATE
SUBSTR
SUBSTRING
SUM
SYSTEM_USER
TABLE
TEMPORARY
TIMEZONE_HOUR
TIMEZONE_MINUTE
TO
TRAILING
TRANSACTION
TRANSLATE
TRANSLATION
TRUE
UNION
UNIQUE
UNKNOWN
UPDATE
UPPER
USER
USING
VALUES
VARCHAR
VARYING
VIEW
WHENEVER
WHERE
WITH
WORK
WRITE
XML
XMLEXISTS
XMLPARSE
XMLSERIALIZE
YEAR
133
Direitos autorais reservados
134
Direitos autorais reservados
135
Direitos autorais reservados
136
Direitos autorais reservados
137
Direitos autorais reservados
138
Direitos autorais reservados
139
Direitos autorais reservados
140
Direitos autorais reservados
A forma recomendada para obter mais informaes sobre estas tabelas utilizar uma
instncia da interface Java java.sql.DatabaseMetaData.
SYSALIASES
Descreve os procedimentos e funes no banco de dados.
SYSCHECKS
Descreve as restries de verificao no banco de dados corrente.
Aceita
Nome da coluna Tipo Comprimento
nulo Contedo
CONSTRAINTID CHAR 36 falso identificador nico para a
141
Direitos autorais reservados
Aceita
Nome da coluna Tipo Comprimento
nulo Contedo
restrio
CHECKDEFINITION LONG VARCHAR ' falso texto da definio da
restrio de verificao
REFERENCEDCOLUMNS org.apache.derby.catalog.' falso descrio das colunas
ReferencedColumns: referenciadas pela
restrio de verificao
Esta classe no faz
parte da API pblica.
SYSCOLUMNS
Descreve as colunas de todas as tabelas do banco de dados corrente:
Aceita
Nome da coluna Tipo Comprimento
nulo Contedo
REFERENCEID CHAR 36 falso identificador da tabela
(juno com
SYSTABLES.TABLEID)
COLUMNNAME CHAR 128 falso nome da coluna ou do
parmetro
COLUMNNUMBER INT 4 falso posio da coluna na
tabela
COLUMNDATATYPE org.apache.derby.catalog.' falso tipo do sistema que
TypeDescriptor descreve a preciso,
comprimento, escala, se
Esta classe no faz
pode ser nulo, nome do
parte da API pblica.
tipo, e tipo de
armazenamento do dado
COLUMNDEFAULT java.io.Serializable ' verdade para as tabelas descreve
o valor padro da coluna.
O mtodo toString() do
objeto armazenado na
tabela retorna o texto do
valor padro conforme
especificado na instruo
CREATE TABLE ou
ALTER TABLE.
COLUMNDEFAULTID CHAR 36 verdade identificador nico para o
valor padro
AUTOINCREMENT BIGINT ' verdade qual ser o prximo valor
COLUMNVALUE para a coluna, se a
coluna for uma coluna
identidade
AUTOINCREMENT BIGINT ' verdade valor inicial da coluna (se
COLUMNSTART especificado), se a coluna
for uma coluna de
identidade
AUTOINCREMENT BIGINT ' verdade quantidade incrementada
COLUMNINC automaticamente no valor
da coluna, se a coluna for
142
Direitos autorais reservados
Aceita
Nome da coluna Tipo Comprimento
nulo Contedo
uma coluna identidade
SYSCONGLOMERATES
Descreve os conglomerados do banco de dados corrente. O conglomerado uma
unidade de armazenamento, sendo uma tabela ou um ndice.
Aceita
Nome da coluna Tipo Comprimento
nulo Contedo
SCHEMAID CHAR 36 falso ID de esquema para o
conglomerado
TABLEID CHAR 36 falso identificador da tabela
(juno com
SYSTABLES.TABLEID)
CONGLOMERATENUMBER BIGINT 8 falso ID de conglomerado
para o conglomerado
(heap ou ndice)
CONGLOMERATENAME VARCHAR 128 verdade nome do ndice, se o
conglomerado for um
ndice, seno o ID da
tabela
ISINDEX BOOLEAN 1 falso indica se o
conglomerado um
ndice, ou no
DESCRIPTOR ' verdade tipo do sistema
org.apache.derby. descrevendo o ndice
catalog.IndexDescriptor:
Esta classe no faz
parte da API pblica.
ISCONSTRAINT BOOLEAN 1 verdade indica se o
conglomerado um
ndice gerado pelo
sistema para impor
uma restrio, ou no
CONGLOMERATEID CHAR 36 falso identificador nico
para o conglomerado
SYSCONSTRAINTS
Descreve as informaes comuns a todos os tipos de restrio no banco de dados
corrente (no momento inclui restries de chave primria, unicidade, chave estrangeira e
verificao).
Aceita
Nome da coluna Tipo Comprimento
nulo Contedo
CONSTRAINTID CHAR 36 falso identificador nico para a restrio
TABLEID CHAR 36 falso identificador para a tabela (juno
com SYSTABLES.TABLEID)
143
Direitos autorais reservados
Aceita
Nome da coluna Tipo Comprimento
nulo Contedo
CONSTRAINTNAME VARCHAR 128 falso nome da restrio (gerado
internamente se no for
especificado pelo usurio)
TYPE CHAR 1 falso P (chave primria), U (unicidade),
C (verificao) ou F (chave
estrangeira)
SCHEMAID CHAR 36 falso identificador do esquema ao qual a
restrio pertence (juno com
SYSSCHEMAS.SCHEMAID)
STATE CHAR 1 falso E para habilitado (enabled), D para
desabilitado (disabled)
REFERENCECOUNT INTEGER 1 falso o contador do nmero de
restries de chave estrangeira
que fazem referncia a esta
restrio; este nmero s pode ser
maior que zero para as restries
PRIMARY KEY e UNIQUE
SYSDEPENDS
Descreve os relacionamentos de dependncia entre objetos persistentes no banco de
dados. Os objetos persistentes podem ser dependentes (dependem de outros objetos)
e/ou fornecedores (outros objetos dependem destes).
Aceita
Nome da coluna Tipo Comprimento
nulo Contedo
DEPENDENTID CHAR 36 falso identificador nico para
o dependente
DEPENDENTFINDER org.apache.derby.catalog.1 falso tipo do sistema
DependableFinder: descrevendo a viso
Esta classe no faz
parte da API pblica.
PROVIDERID CHAR 36 falso identificador nico para
o fornecedor
PROVIDERFINDER org.apache.derby.catalog.1 falso tipo do sistema
DependableFinder Esta descrevendo as
classe no faz parte da tabelas,
API pblica. conglomerados e
restries que so
fornecedores
SYSFILES
Descreve os arquivos jar armazenados no banco de dados.
144
Direitos autorais reservados
SYSFOREIGNKEYS
Descreve as informaes especficas das restries de chave estrangeira no banco de
dados corrente.
O Derby gera um ndice de apoio para cada restrio de chave estrangeira; o nome
deste ndice o mesmo de SYSFOREIGNKEYS.CONGLOMERATEID.
SYSKEYS
Descreve as informaes especficas para as restries de chave primria e de
145
Direitos autorais reservados
unicidade no banco de dados corrente. O Derby gera um ndice na tabela para apoiar
cada restrio destes tipos. O nome do ndice o mesmo de
SYSKEYS.CONGLOMERATEID.
Aceita
Nome da coluna Tipo Comprimento
nulo Contedo
CONSTRAINTID CHAR 36 falso identificador nico para a
restrio
CONGLOMERATEID CHAR 36 falso identificador nico para o
ndice de apoio
SYSSCHEMAS
Descreve os esquemas no banco de dados corrente.
SYSSTATISTICS
Descreve as estatsticas no banco de dados corrente.
146
Direitos autorais reservados
SYSSTATEMENTS
Contm uma linha por instruo preparada.
SYSTABLES
Descreve as tabelas e vises no banco de dados corrente.
Aceita
Nome da coluna Tipo Comprimento
nulo Contedo
TABLEID CHAR 36 falso identificador nico para a tabela ou viso
TABLENAME VARCHAR 128 falso nome da tabela ou da viso
TABLETYPE CHAR 1 falso 'S' (tabela do sistema), 'T' (tabela do
usurio), ou 'V' (viso)
SCHEMAID CHAR 36 falso ID do esquema da tabela ou da viso
LOCK CHAR 1 falso Indica a granularidade do bloqueio da
GRANULARITY tabela
'T'
(bloqueio no nvel de tabela)
'R'
(bloqueio no nvel de linha, o padro)
SYSTRIGGERS
Descreve os gatilhos do banco de dados.
147
Direitos autorais reservados
Aceita
Nome da coluna Tipo Comprimento
nulo Contedo
TRIGGERID CHAR 36 falso identificador nico para o
gatilho
TRIGGERNAME VARCHAR 128 falso nome do gatilho
SCHEMAID CHAR 36 falso ID do esquema do gatilho
(juno com SYSSCHEMAS.
SCHEMAID)
CREATIONTIMESTAMP TIMESTAMP ' falso momento em que o gatilho foi
criado
EVENT CHAR 1 falso 'U' para atualizao (update),
'D' para excluso (delete), 'I'
para insero (insert)
FIRINGTIME CHAR 1 falso 'B' para antes (before) e 'A'
para aps (after)
TYPE CHAR 1 falso 'R' para linha (row), 'S' para
instruo (statement)
STATE CHAR 1 falso 'E' para habilitado (enabled),
'D' para desabilitado
(disabled)
TABLEID CHAR 36 falso ID da tabela para a qual o
gatilho foi definido
WHENSTMTID CHAR 36 verdade usado somente quando
existe a clusula WHEN
(ainda no suportado)
ACTIONSTMTID CHAR 36 verdade ID da instruo preparada
armazenada para a
instruo-SQL-engatilhada
(juno com
SYSSTATEMENTS.
STMTID)
REFERENCEDCOLUMNS org.apache.derby.catalog.
' verdade descritor das colunas
ReferencedColumns: referenciadas pelos gatilhos
Esta classe no faz de UPDATE
parte da API pblica.
TRIGGERDEFINITION LONG VARCHAR ' verdade texto da instruo SQL de
ao
REFERENCINGOLD BOOLEAN ' verdade indica se
OLDREFERENCINGNAME,
se no for nulo, faz referncia
linha ou tabela OLD, ou no
REFERENCINGNEW BOOLEAN ' verdade indica se
NEWREFERENCINGNAME,
se no for nulo, faz referncia
linha ou tabela NEW, ou
no
OLDREFERENCINGNAME VARCHAR 128 verdade pseudonome definido
utilizando a clusula
REFERENCING OLD AS
NEWREFERENCINGNAME VARCHAR 128 verdade pseudonome definido
utilizando a clusula
148
Direitos autorais reservados
Aceita
Nome da coluna Tipo Comprimento
nulo Contedo
REFERENCING NEW AS
SYSVIEWS
Descreve as definies das vises no banco de dados corrente.
149
Direitos autorais reservados
O Derby fornece valores para a mensagem e para os campos SQLState. Alm disso,
algumas vezes o Derby retorna vrias SQLException utilizando o encadeamento
nextException. A primeira exceo sempre a de maior severidade, com as excees
do padro SQL-92 precedendo as excees especficas do Derby.
Para obter informaes sobre como processar SQLException deve ser consultado o
Guia do Desenvolvedor do Derby.
150
Direitos autorais reservados
151
Direitos autorais reservados
152
Direitos autorais reservados
153
Direitos autorais reservados
Tabela 50. Cdigo de classe 42: Erro de sintaxe ou violao de regra de acesso
154
Direitos autorais reservados
155
Direitos autorais reservados
156
Direitos autorais reservados
157
Direitos autorais reservados
158
Direitos autorais reservados
159
Direitos autorais reservados
160
Direitos autorais reservados
161
Direitos autorais reservados
162
Direitos autorais reservados
163
Direitos autorais reservados
164
Direitos autorais reservados
165
Direitos autorais reservados
166
Direitos autorais reservados
167
Direitos autorais reservados
168
Direitos autorais reservados
169
Direitos autorais reservados
170
Direitos autorais reservados
171
Direitos autorais reservados
172
Direitos autorais reservados
173
Direitos autorais reservados
Tabela 77. Cdigo de classe XSDFx: RawStore - Data.Filesystem statement
exceptions
174
Direitos autorais reservados
175
Direitos autorais reservados
176
Direitos autorais reservados
Referncia do JDBC
O Derby vem com um driver de JDBC nativo. Isto torna a API do JDBC a nica API para
trabalhar com os bancos de dados do Derby. O driver um driver de protocolo nativo
totalmente Java (tipo nmero quatro, entre os tipos definidos pela Sun).
Este driver de JDBC implementa a interface padro de JDBC definida pela Sun. Ao ser
chamado a partir de um aplicativo executando na mesma JVM do Derby, o driver de
JDBC suporta conexes com o banco de dados do Derby no modo incorporado
(embedded). No requerido nenhum transporte de rede para acessar o banco de
dados. No modo cliente/servidor, o aplicativo cliente envia as requisies JDBC para o
servidor JDBC atravs da rede; o servidor, por sua vez, que executa na mesma JVM do
Derby, envia requisies para o Derby atravs do driver de JDBC incorporado.
java.sql.Driver
A classe que carrega o driver de JDBC local do Derby a classe
org.apache.derby.jdbc.EmbeddedDriver. Abaixo esto listadas algumas maneiras de
criar instncias desta classe. A classe no deve ser utilizada diretamente atravs da
interface java.sql.Driver. Deve ser utilizada a classe DriverManager para criar as
conexes.
Class.forName("org.apache.derby.jdbc.EmbeddedDriver")
Esta a maneira recomendada, porque assegura que a classe carregada em
todas as JVMs criando uma instncia ao mesmo tempo.
new org.apache.derby.jdbc.EmbeddedDriver()
177
Direitos autorais reservados
java -Djdbc.drivers=org.apache.derby.jdbc.EmbeddedDriver
classeAplicativo
O driver real que fica registrado em DriverManager para tratar o protocolo jdbc:derby:
no a classe org.apache.derby.jdbc.EmbeddedDriver; esta classe simplesmente
detecta o tipo de driver do Derby necessrio, e faz com que o driver apropriado do Derby
seja carregado.
java.sql.DriverManager.getConnection
Um aplicativo Java utilizando a API do JDBC estabelece a conexo com o banco de
dados obtendo um objeto Connection. A forma padro para obter um objeto Connection
chamando o mtodo DriverManager.getConnection, que recebe uma cadeia de
caracteres contendo a URL de conexo com o banco de dados. A URL (uniform
resource locator) de conexo com o banco de dados JDBC fornece a maneira de
identificar o banco de dados.
178
Direitos autorais reservados
Esta seo fornece apenas informaes de referncia. Para obter uma descrio mais
completa, incluindo exemplos, deve ser consultado "Conexo com bancos de dados", no
captulo 1 do Guia do Desenvolvedor do Derby.
Sintaxe da URL de conexo com banco de dados para aplicativos com bancos de
dados incorporados
Para aplicativos com bancos de dados incorporados, a sintaxe da URL de conexo com
banco de dados
jdbc:derby: [subsubprotocolo:][nomeBancoDados][;atributos]*
jdbc:derby:
No jargo do JDBC, derby o subprotocolo para conectar a um banco de dados
Derby. O subprotocolo sempre derby, no variando.
O subsubprotocolo:
O subsubprotocolo, que normalmente no especificado, especifica onde o Derby
procura pelo banco de dados: em um diretrio, em um caminho de classe, ou em
um arquivo jar. usado raramente, geralmente em bancos de dado
apenas-de-leitura. O subsubprotocolo um dos seguintes:
directory
classpath: Os bancos de dados so tratados como apenas-de-leitura, e todos
os nomeBancoDados devem comear com pelo menos uma barra, porque
so especificados como "relativos" ao diretrio do caminho de classes ou
arquivo (No necessrio especificar classpath como sendo o
subsubprotocolo; est implcito).
Os bancos de dados jar so tratados como bancos de dados
apenas-de-leitura.
jar: requer um elemento adicional, imediatamente antes do nomeBancoDados:
(caminhoArquivo)
179
Direitos autorais reservados
jdbc:default:connection
java.sql.Driver.getPropertyInfo
Para obter um objeto DriverPropertyInfo, este deve ser requisitado ao gerenciador de
drivers do driver de JDBC:
java.sql.DriverManager.getDriver("jdbc:derby:").
getPropertyInfo(URL, Prop)
Este mtodo deve retornar um objeto DriverPropertyInfo. No sistema Derby, este objeto
consiste de uma matriz de atributos da URL de conexo com o banco de dados. O
atributo mais til databaseName=nomeBancoDados, significando que o objeto consiste
de uma lista dos bancos de dados inicializados no sistema corrente.
180
Direitos autorais reservados
tambm tiver conectado ao banco de dados A:/dbs/turismo94, a matriz retornada
por getPropertyInfo conter um objeto correspondente ao atributo databaseName. O
campo choices do objeto DriverPropertyInfo conter uma matriz de trs cadeias de
caracteres com os valores bancoTurismo, bancoVoos e A:/dbs/turismo94. Deve ser
observado que este objeto ser retornado apenas se os objetos de conexo propostos
no incluirem o nome do banco de dados (em qualquer forma) ou o atributo shutdown
com o valor true.
java.sql.Connection
O objeto Connection do Derby no coletado pelo coletor de lixo at que todos os
outros objetos JDBC criados a partir desta conexo sejam fechados explicitamente, ou
sejam coletados pelo coletor de lixo. Uma vez fechada a conexo, no poder ser feita
nenhuma requisio JDBC adicional aos objetos criados a partir da conexo. O objeto
Connection no dever ser fechado explicitamente, at que este no seja mais
necessrio para a execuo das instrues.
Um exceo com severidade de sesso, ou maior, faz a conexo ser fechada e todos os
demais objetos JDBC associados a esta conexo serem fechados. Excees com
severidade de sistema causam a parada do sistema Derby, o que no apenas fecha a
conexo, mas significa tambm que no poder ser aberta nenhuma nova conexo na
JVM corrente.
java.sql.Connection.setTransactionIsolation
Esto disponveis os nveis de isolamento de transao
java.sql.Connection.TRANSACTION_SERIALIZABLE,
java.sql.Connection.TRANSACTION_REPEATABLE_READ,
java.sql.Connection.TRANSACTION_READ_COMMITTED e
java.sql.Connection.TRANSACTION_READ_UNCOMMITTED nos bancos de dados do
Derby.
Pelo padro JDBC, alterar o nvel isolamento corrente para a conexo atravs de
setConnection efetiva a transao corrente e inicia uma nova transao.
java.sql.Connection.setReadOnly
suportado java.sql.Connection.setReadOnly.
java.sql.Connection.isReadOnly
Se for feita uma conexo com um banco de dados apenas-de-leitura, ser retornado o
valor apropriado pelo mtodo isReadOnly de DatabaseMetaData. Por exemplo, as
conexes definidas como apenas-de-leitura utilizando o mtodo setReadOnly, as
conexes para as quais o usurio foi definido com readOnlyAccess (atravs de uma das
propriedades do Derby), e as conexes com bancos de dados em mdias
apenas-de-leitura, retornam verdade.
181
Direitos autorais reservados
java.sql.DatabaseMetaData
Esta sesso discute a funcionalidade de java.sql.DatabaseMetaData no Derby.
getProcedureColumns
O Derby suporta procedimentos Java. O Derby permite chamar procedimentos Java a
partir de instrues SQL. O Derby retorna informaes sobre os parmetros na chamada
a getProcedureColumns. Se o mtodo Java correspondente estiver sobrecarregado,
sero retornadas informaes sobre cada assinatura separadamente. O Derby retorna
informaes sobre todos os procedimentos Java definidos por CREATE PROCEDURE.
catalog
deve ser sempre utilizado NULL para este parmetro no Derby.
schemaPattern
procedimentos Java possuem esquema.
procedureNamePattern
um objeto String representando o padro de nome do procedimento.
columnNamePattern
um objeto String representando o padro de nome dos nomes dos parmetros, ou
dos nomes do valor retornado. Os procedimentos Java possuem nomes de
parmetro correspondentes aos definidos na instruo CREATE PROCEDURE.
Deve ser utilizado "%" para encontrar todos os nomes de parmetros.
182
Direitos autorais reservados
As colunas do ResultSet retornado por getProcedureColumns esto descritas na API.
Abaixo so mostrados detalhes adicionais para algumas colunas especficas:
PROCEDURE_CAT
sempre "NULL" no Derby
PROCEDURE_SCHEM
esquema do procedimento Java
PROCEDURE_NAME
nome do procedimento
COLUMN_NAME
nome do parmetro (consulte columnNamePattern)
COLUMN_TYPE
indicao do que a linha descreve. sempre
DatabaseMetaData.procedureColumnIn para parmetros de mtodo, a menos que
o parmetro seja uma matriz. Neste caso
DatabaseMetaData.procedureColumnInOut. Retorna sempre
DatabaseMetaData.procedureColumnReturn para os valores retornados.
TYPE_NAME
Nome especfico do Derby para o tipo.
NULLABLE
sempre retorna DatabaseMetaData.procedureNoNulls para parmetros primitivos, e
DatabaseMetaData.procedureNullable para parmetros de objeto
REMARKS
uma cadeia de caracteres descrevendo o tipo Java do parmetro do mtodo
METHOD_ID
coluna especfica do Derby.
PARAMETER_ID
coluna especfica do Derby.
Devido a esta ltima escolha, sempre encontra um conjunto de colunas que identifica
uma linha. Entretanto, havendo linhas duplicadas na tabela, a utilizao de todas as
colunas no identifica necessariamente uma nica linha da tabela.
183
Direitos autorais reservados
java.sql.Statement
O Derby no implementa os seguintes mtodos do JDBC 1.2 de java.sql.Statement:
cancel
setEscapeProcessing
setQueryTimeout
Objetos ResultSet
No caso de ocorrer um erro quando a instruo SELECT executada pela primeira vez,
isto impede que seja aberto um objeto ResultSet para a mesma. O mesmo erro no
fecha o ResultSet quando ocorre aps o ResultSet ter sido aberto.
Fechar um Statement faz com que todos os objetos ResultSet abertos para esta
instruo sejam fechados tambm.
O nome do cursor para o cursor do ResultSet pode ser definido antes das instruo ser
executada. Entretanto, uma vez executada, o nome do cursor no poder mais ser
alterado.
java.sql.PreparedStatement
O Derby fornece todas as converses de tipo requeridas pelo JDBC 1.2, e alm disso
permite o uso de mtodos setXXX individuais para cada tipo, como se a chamada
setObject(Value, JDBCTypeCode) tivesse sido feita.
Isto significa que pode ser utilizado setString em todos os tipos de dado de destino
nativos.
O JDBC permite que o parmetro IN seja definido como um fluxo de entrada do Java
para passagem de uma grande quantidade de dados em fraes menores. Quando a
instruo executada, o driver de JDBC faz chamadas repetidas a este fluxo de entrada,
184
Direitos autorais reservados
lendo seu contedo e transmitindo este contedo como dados do parmetro.
O Derby suporta os trs tipos de fluxo fornecidos pelo JDBC 1.2. Estes trs fluxos so:
setBinaryStream
para fluxos contendo bytes no interpretados
setAsciiStream
para fluxos contendo caracteres ASCII
setUnicodeStream
para fluxos contendo caracteres Unicode
O JDBC requer que seja especificado o comprimento do fluxo. O objeto de fluxo passado
para estes trs mtodos pode ser tanto um objeto de fluxo Java padro, quanto uma
subclasse prpria do usurio que implementa a interface java.io.InputStream padro.
De acordo com o padro JDBC, os fluxos somente podem ser armazenados em colunas
dos tipos de dado mostrados na tabela Tipos de dado JDBC que permitem fluxo. Os
fluxos no podem ser armazenados em colunas de outros tipos de dado nativos, ou em
tipos de dado definidos pelo usurio.
Tabela 85. Tipos de dado JDBC que permitem fluxo
O X maisculo indica o tipo de dado de destino preferido para o tipo de fluxo (Consulte
Mapeamento de java.sql.Types em tipos SQL.)
Note: Se o fluxo for armazenado em uma coluna de um tipo que no seja LONG
VARCHAR ou LONG VARCHAR FOR BIT DATA, dever ser possvel que todo o fluxo
caiba na memria de uma s vez. Os fluxos armazenados em colunas LONG VARCHAR
e LONG VARCHAR FOR BIT DATA no possuem esta limitao.
O exemplo a seguir mostra como o usurio pode armazenar java.io.File em uma coluna
LONG VARCHAR usando fluxo:
Statement s = conn.createStatement();
s.executeUpdate("CREATE TABLE minha_tabela (a INT, b LONG VARCHAR)");
conn.commit();
java.io.File arquivo = new java.io.File("derby.txt");
int comprArquivo = (int) arquivo.length();
// primeiro, criar o fluxo de entrada
java.io.InputStream fluxoEntrada = new java.io.FileInputStream(arquivo);
PreparedStatement ps = conn.prepareStatement(
"INSERT INTO minha_tabela VALUES (?, ?)");
ps.setInt(1, 1);
// definir o valor do parmetro de entrada como sendo o fluxo de entrada
ps.setAsciiStream(2, fluxoEntrada, comprArquivo);
ps.execute();
185
Direitos autorais reservados
conn.commit();
java.sql.CallableStatement
O Derby suporta todos os mtodos de CallableStatement do JDBC 1.2:
getBoolean()
getByte()
getBytes()
getDate()
getDouble()
getFloat()
getInt()
getLong()
getObject()
getShort()
getString()
getTime()
getTimestamp()
registerOutParamter()
wasNull()
Deve ser registrado o tipo de dado de sada do parmetro antes de executar a chamada.
O mtodo doubleIt deve receber uma matriz unidimensional de inteiros. Abaixo est
um cdigo fonte de amostra para este mtodo:
public static void dobreMeuInteiro(int[] i) {
i[0] *=2;
/* O Derby retorna o primeiro elemento da matriz. */
}
186
Direitos autorais reservados
Deve ser registrado o tipo de dado de sada do parmetro antes de executar a chamada.
Para os parmetros INOUT, boa prtica registrar o parmetro de sada antes de definir
seu valor de entrada.
java.sql.ResultSet
Uma atualizao ou excluso posicionada, emitida contra um cursor sendo acessado
atravs do objeto ResultSet, modifica ou exclui a linha corrente do objeto ResultSet.
Alguns protocolos intermedirios podem trazer linhas antecipadamente. Isto faz com que
as atualizaes e excluses posicionadas operem na linha sobre a qual se encontra o
cursor subjacente, e no na linha corrente do ResultSet.
O Derby fornece todas as converses de tipo requeridas pelo JDBC 1.2 para os mtodos
getXXX.
187
Direitos autorais reservados
Para obter um campo do ResultSet utilizando colunas de fluxo, podem ser utilizados os
mtodos getXXXStream se o tipo suport-los. Para obter uma lista dos tipos que
suportam vrios fluxos deve ser consultado Tipos de dado JDBC que permitem fluxo
(Consulte tambm Mapeamento de java.sql.Types em tipos SQL.)
Os dados de uma coluna com tipo de dado suportado podem ser trazidos na forma de
fluxo, independentemente de terem sido armazenados como um fluxo.
O exemplo a seguir mostra como o usurio pode trazer uma coluna LONG VARCHAR na
forma de fluxo:
// trazer os dados como um fluxo
ResultSet rs = s.executeQuery("SELECT b FROM minha_tabela");
while (rs.next()) {
// utilizar java.io.InputStream para trazer os dados
java.io.InputStream ip = rs.getAsciiStream(1);
// processar o fluxo -- esta apenas uma forma genrica// de se
mostrar os dados
int c;
int tamanhoColuna = 0;
byte[] buff = new byte[128];
for (;;) {
int size = ip.read(buff);
if (size == -1)
break;
tamanhoColuna += size;
String chunk = new String(buff, 0, size);
System.out.print(chunk);
}
}
rs.close();
s.close();
conn.commit();
java.sql.ResultSetMetaData
O Derby no verifica a fonte ou possibilidade de atualizao das colunas dos ResultSets,
e portanto sempre retorna as seguintes constantes para os seguintes mtodos:
java.sql.SQLException
O Derby fornece valores para as chamadas getMessage(), getSQLState() e
getErrorCode() de SQLException. Alm disso, algumas vezes o Derby retorna vrias
SQLException utilizando a cadeia nextException. A primeira exceo sempre a
exceo de maior severidade, com as excees do padro SQL-92 precedendo as
excees especficas do Derby. Para obter informaes sobre como processar
SQLException deve ser consultado "Trabalhando com SQLException do Derby em
aplicativos", no captulo 5 do Guia do Desenvolvedor do Derby.
java.sql.SQLWarning
O Derby pode gerar advertncias sob certas circunstncias. gerada uma advertncia,
por exemplo, quando se tenta conectar a um banco de dados com o atributo create
definido como true, e o banco de dados j existe. As agregaes, como sum(), tambm
188
Direitos autorais reservados
lanam advertncias quando so encontrados valores nulos durante o processamento.
Notas:
1. BIT vlido somente no JDBC 2.0 e ambientes mais recentes.
2. Os valores podem ser passados utilizando o cdigo de tipo FLOAT; entretanto,
estes valores so armazenados como valores DOUBLE PRECISION, e portanto
sempre possuem o cdigo de tipo DOUBLE quando trazidos.
java.sql.Blob e java.sql.Clob
No JDBC 2.0, java.sql.Blob o mapeamento para o tipo BLOB (objeto grande binrio) do
SQL; java.sql.Clob o mapeamento para o tipo CLOB (objeto grande caractere) do SQL.
189
Direitos autorais reservados
de uma cpia completa do objeto. O Derby processa somente uma pgina de dados na
memria por vez. No h necessidade de processar e armazenar todo o BLOB em
memria apenas para acessar alguns poucos bytes iniciais do objeto LOB
O Derby agora suporta os tipos de dado nativos BLOB e CLOB. O Derby tambm
fornece o seguinte suporte para estes tipos de dado:
Funcionalidades do BLOB O Derby suporta a interface java.sql.Blob, e os
mtodos relacionados ao BLOB em java.sql.PreparedStatement e
java.sql.ResultSet. Os mtodos getBlob de CallableStatement no esto
implementados.
Funcionalidades do CLOB O Derby suporta a interface java.sql.Clob, e os
mtodos relacionados ao CLOB em java.sql.PreparedStatement e
java.sql.ResultSet. Os mtodos getClob dos procedimentos de CallableStatement
no esto implementados.
O Derby utiliza cadeias UNICODE (caracteres com 2 bytes), enquanto outros produtos
de banco de dados podem utilizar caracteres ASCII (1 byte por caractere). Se forem
utilizadas vrias pginas de cdigo, cada caractere poder necessitar de vrios bytes.
Poder ser necessrio um tipo BLOB maior para acomodar uma cadeia normal no
Derby. Devem ser utilizados tipos CLOB para armazenar cadeias.
O Derby implementa todos os mtodos para estas interfaces do JDBC 2.0, exceto pelos
mtodos set e get da interface CallableStatement.
190
Direitos autorais reservados
Notas
O mecanismo normal de bloqueio do Derby (bloqueios compartilhados) impede que
outras transaes atualizem ou excluam um item do banco de dados para o qual o
objeto java.sql.Blob ou java.sql.Clob seja um ponteiro. Entretanto, em alguns casos, o
mecanismo de bloqueio instantneo do Derby pode admitir um perodo de tempo onde a
coluna subjacente a java.sql.Blob ou java.sql.Clob fique desprotegida. Uma chamada
subseqente ao mtodo getBlob/getClob, ou java.sql.Blob/java.sql.Clob, pode causar um
comportamento indefinido.
191
Direitos autorais reservados
Estes mtodos compartilham o mesmo fluxo subjacente; chamar mais de um destes
mtodos para a mesma coluna pode resultar em um comportamento indefinido. Por
exemplo:
ResultSet rs = s.executeQuery("SELECT text FROM CLOBS WHERE i = 1");
while (rs.next()) {
aclob=rs.getClob(1);
ip = rs.getAsciiStream(1);
}
Os fluxos que tratam colunas longas no so seguros quanto a thread. Isto significa que
se for decidido abrir vrias threads, e acessar o fluxo a partir de cada uma das threads, o
comportamento resultante ser indefinido.
java.sql.Connection
Tabela 90. Mtodos de conexo do JDBC 2.0 suportados
Retorna Assinatura
Statement createStatement( int resultSetType, int
resultSetConcurrency)
PreparedStatement prepareStatement(String sql, int resultSetType, int
resultSetConcurrency)
CallableStatement prepareCall(String sql, int resultSetType, int
resultSetConcurrency
Notas da implementao
ResultSet.TYPE_FORWARD_ONLY e ResultSet.TYPE_SCROLL_INSENSITIVE so os
nicos tipos de rolagem suportados. Se for requisitado TYPE_SCROLL_SENSITIVE, o
Derby emitir uma SQLWarning e retornar um
ResultSetTYPE_SCROLL_INSENSITIVE.
Estes mtodos suportam as simultaneidades ResultSet.CONCUR_READ_ONLY e
ResultSet.CONCUR_UPDATABLE. Entretanto, somente pode ser requisitado um
ResultSet atualizvel que possua o tipo de rolagem TYPE_FORWARD_ONLY. Se for
requisitado um ResultSet atualizvel com tipo SCROLL_SENSITIVE ou
SCROLL_INSENSITIVE, o Derby emitir uma SQLWarning e retornar um
ResultSetTYPE_SCROLL_INSENSITIVE READ_ONLY.
java.sql.ResultSet
Tabela 91. Mtodos de ResultSet do JDBC 2.0 suportados
192
Direitos autorais reservados
java.sql.Statement
Tabela 92. Mtodos java.sql.Statement do JDBC2.0 suportados
193
Direitos autorais reservados
java.sql.PreparedStatement
Tabela 93. Mtodos java.sql.PreparedStatement do JDBC 2.0 suportados
java.sql.CallableStatement
Tabela 94. Mtodos java.sql.CallableStatements do JDBC 2.0 suportados
java.sql.DatabaseMetaData
O Derby implementa todos os mtodos do JDBC 2.0 para esta interface.
java.sql.ResultSetMetaData
O Derby implementa todos os mtodos do JDBC 2.0 para esta interface.
194
Direitos autorais reservados
java.sql.BatchUpdateException
Lanada quando ocorre problema com atualizao em lote.
Para obter uma conexo sob as especificaes JSR169 deve ser utilizada a classe
org.apache.derby.jdbc.EmbeddedSimpleDataSource. Esta classe idntica,
em implementao, classe org.apache.derby.jdbc.EmbeddedDataSource.
Para obter informaes sobre a utilizao das propriedades da classe
org.apache.derby.jdbc.EmbeddedDataSource deve ser consultado o Guia do
Desenvolvedor do Derby.
Algumas outras funcionalidades a serem notadas relativas implementao de JSR169
utilizando o Derby:
Os aplicativos devem obter e definir valores DECIMAL utilizando mtodos getXXX
e setXXX alternativos do JDBC, como getString() e setString(). Qualquer
mtodo alternativo que funcione com o tipo DECIMAL no JDBC 2.0 ou 3.0 ir
funcionar no JSR169.
As funes e procedimentos Java que utilizam parmetros do JDBC do lado
servidor, como CONTAINS SQL, READS SQL DATA e MODIFIES SQL DATA, no
so suportadas no JSR169.
A API padro utilizada para obter a conexo (jdbc:default:connection) no
suportada no JSR169. Ocorre um erro em tempo de execuo quando a rotina
tenta obter a conexo utilizando jdbc:default:connection.
No so suportadas tabelas de diagnstico.
No so suportados gatilhos.
No so suportados bancos de dados criptografados.
No suportado DriverManager. No pode ser utilizado
DriverManager.getConnection() para obter a conexo.
As funcionalidades so:
Novos mtodos DatabaseMetaData. Consulte java.sql.DatabaseMetaData.
Acesso a metadados de parmetro. Consulte java.sql.ParameterMetaData e
java.sql.PreparedStatement.
Acesso a chaves auto-geradas. Consulte java.sql.Statement e
java.sql.DatabaseMetaData.
Pontos de salvamento. Consulte java.sql.Connection.
Cursores HOLD. Consulte java.sql.DatabaseMetaData.
Lista completa:
195
Direitos autorais reservados
java.sql.Connection
java.sql.DatabaseMetaData
java.sql.ParameterMetaData
java.sql.PreparedStatement
java.sql.Savepoint
java.sql.Statement
java.sql.Connection
Tabela 95. Mtodos de conexo do JDBC 3.0 suportados
java.sql.DatabaseMetaData
Tabela 96. Mtodos DatabaseMetaData do JDBC 3.0 suportados
java.sql.ParameterMetaData
ParameterMetaData uma novidade do JDBC 3.0. Descreve o nmero, tipo e
propriedades dos parmetros das instrues preparadas. O mtodo
PreparedStatement.getParameterMetaData retorna o objeto ParameterMetaData que
descreve os marcadores de parmetro que aparecem no objeto PreparedStatement.
Para obter mais informaes deve ser consultado java.sql.PreparedStatement.
196
Direitos autorais reservados
Os mtodos da interface ParameterMetaData esto listados abaixo.
Tabela 97. Mtodos de ParameterMetaData do JDBC 3.0
java.sql.PreparedStatement
O mtodo PreparedStatement.getParameterMetaData retorna um objeto
ParameterMetaData que descreve os marcadores de parmetro que aparecem no objeto
PreparedStatement. Para obter mais informaes deve ser consultado
java.sql.ParameterMetaData.
Tabela 98. Mtodos de PreparedStatement do JDBC 3.0
java.sql.Savepoint
A interface Savepoint uma novidade do JDBC 3.0. Contm novos mtodos para definir,
liberar e desfazer transaes at os pontos de salvamento designados. Uma vez
definido um ponto de salvamento, a transao pode ser desfeita at este ponto de
salvamento sem afetar o trabalho precedente. Os pontos de salvamento fornecem um
controle das transaes com granularidade mais fina, marcando pontos intermedirios
nas transaes.
197
Direitos autorais reservados
// definir o ponto de salvamento
Savepoint svpt1 = conn.setSavepoint("S1");
rows = stmt.executeUpdate("INSERT INTO TABELA1 (COL1) VALUES (2)");
...
conn.rollback(svpt1);
...
conn.commit();
O nome do ponto de salvamento poder ser reutilizado aps ter sido liberado
explicitamente (emitindo uma liberao do ponto de salvamento), ou implicitamente
(emitindo um COMMIT/ROLLBACK para a conexo).
java.sql.Statement
Tabela 100. Mtodos de Statement do JDBC 3.0
198
Direitos autorais reservados
Chaves autogeradas
Para utilizar chaves autogeradas nas instrues INSERT deve ser passado o sinalizador
Statement.RETURN_GENERATED_KEYS para o mtodo execute ou executeUpdate. O
Derby no suporta a passagem de nomes de colunas ou ndices de colunas para os
mtodos execute, executeUpdate e prepareStatement.
{palavra_chave }
O Derby suporta as seguintes palavras chave de escape do JDBC, sem diferenciar letras
maisculas e minsculas:
Palavra chave de escape do JDBC para instrues call
A palavra chave de escape para uso em CallableStatement.
Sintaxe de escape do JDBC
A palavra chave de escape para os formatos de data.
Sintaxe de escape do JDBC para clusulas LIKE
A palavra chave para especificar caracteres de escape para as clusulas LIKE.
Sintaxe de escape do JDBC para a palavra chave fn
199
Direitos autorais reservados
Sintaxe
{call instruo }
Sintaxe
{d 'yyyy-mm-dd'}
Equivalente a
DATE('yyyy-mm-dd')
VALUES {d '1999-01-09'}
Sintaxe
WHERE ExpressoCaractere [ NOT ] LIKE
ExpressoCaractereComCaractereCuringa
200
Direitos autorais reservados
{ ESCAPE 'CaractereDeEscape' }
Tambm pode ser utilizada a seqncia de caractere de escape para o LIKE sem utilizar
as chaves do JDBC; consulte Expresso booleana.
Sintaxe
{fn chamadaFuno}
concat (ExpressoCaractere,
ExpressoCaractere)
sqrt (ExpressoPontoFlutuante)
abs (ExpressoNumrica)
201
Direitos autorais reservados
mod(tipo_inteiro, tipo_inteiro)
Deve ser observado que TIMESTAMPADD uma funo do JDBC com escape, sendo
acessvel apenas utilizando a sintaxe de funo com escape do JDBC.
Deve ser observado que no deve ser colocada uma coluna data/hora dentro de uma
funo aritmtica de carimbo do tempo na clusula WHERE, porque o otimizador no
usar nenhum ndice na coluna.
Deve ser observado que TIMESTAMPDIFF uma funo do JDBC com escape, sendo
acessvel apenas utilizando a sintaxe de funo com escape do JDBC.
Deve ser observado que no deve ser colocada uma coluna data/hora dentro de uma
funo aritmtica de carimbo do tempo na clusula WHERE, porque o otimizador no
usar nenhum ndice para a coluna.
202
Direitos autorais reservados
SQL_TSI_HOUR
SQL_TSI_MINUTE
SQL_TSI_MONTH
SQL_TSI_QUARTER
SQL_TSI_SECOND
SQL_TSI_WEEK
SQL_TSI_YEAR
Exemplo de TIMESTAMPADD e TIMESTAMPDIFF
{fn TIMESTAMPADD( SQL_TSI_MONTH, 1, CURRENT_TIMESTAMP)}
Para obter informaes sobre operaes de juno deve ser consultada a Operao
JOIN.
Sintaxe
{oj Operao JOIN [Operao JOIN ]* }
Equivalente a
Operao JOIN [Operao JOIN ]*
-- juno externa
SELECT *
FROM
{oj PASES LEFT OUTER JOIN CIDADES ON
(PASES.COD_ISO_PAS=CIDADES.COD_ISO_PAS)}
-- outra operao de juno
SELECT *
FROM
{oj PASES JOIN CIDADES ON (PASES.COD_ISO_PAS=CIDADES.COD_ISO_PAS)}
-- a ExpressoTabela pode ser a OperaoJuno.
-- Portanto podem haver vrias operaes de
-- juno na clusula FROM
SELECT E.NUM_EMP, E.LTIMO_NOME, M.NUM_EMP, M.LTIMO_NOME
FROM {oj EMPREGADOS E INNER JOIN DEPARTAMENTOS
INNER JOIN EMPREGADOS M ON NUM_GER = M.NUM_EMP ON E.DEP_TRAB = NUM_DEP};
Sintaxe
{t 'hh:mm:ss'}
203
Direitos autorais reservados
Equivalente a
TIME 'hh:mm:ss'
VALUES {t '20:00:03'}
Sintaxe
{ts 'yyyy-mm-dd hh:mm:ss.f...'}
Equivalente a
TIMESTAMP 'yyyy-mm-dd hh:mm:ss.f...'
Pode ser omitida a parte fracionria das constantes carimbo do tempo (.f...).
204
Direitos autorais reservados
bootPassword=chave
Funo
Especifica a chave a ser utilizada para criptografar o novo banco de dados, ou para
carregar um banco de dados criptografado existente. Deve ser especificada uma cadeia
alfanumrica com comprimento de pelo menos oito caracteres.
create=true
Funo
Cria o banco de dados padro do sistema Derby especificado na URL de conexo com o
banco de dados, e conecta ao banco de dados. Se o banco de dados no puder ser
criado, o erro aparecer no log de erro, e a tentativa de conexo falhar com uma
SQLException indicando que o banco de dados no pde ser encontrado.
Se o banco de dados j existir, ser criada uma conexo com o banco de dados
existente e emitida uma SQLWarning.
205
Direitos autorais reservados
atributo.
Este atributo pode ser combinado com outros atributos. Para especificar o territrio ao
criar o banco de dados utilizado o atributo territory=ll_CC.
Note: Quando especificado create=true e o banco de dados j existe, lanada uma
SQLWarning.
jdbc:derby:bancoAmostra;create=true
jdbc:derby:;databaseName=bancoNovo;create=true;
databaseName=nomeBancoDados
Funo
Especifica o nome do banco de dados para a conexo; pode ser utilizado em vez de
especificar o nome do banco de dados aps o subprotocolo.
Por exemplo, estas combinaes de URL (e objeto Properties) so equivalentes:
jdbc:derby:bancoTurismo
jdbc:derby:;databaseName=bancoTurismo
jdbc:derby:(com a propriedade databaseName e seu valor bancoTurismo definida
no objeto Properties passado na requisio de conexo)
jdbc:derby:bancoTurismo;databaseName=bancoVoos
Permitir que o nome do banco de dados seja definido como um atributo, permite que o
mtodo getPropertyInfo retorne uma lista de escolhas para o nome do banco de dados,
baseado no conjunto de bancos de dados conhecidos pelo Derby. Para obter mais
informaes deve ser consultado java.sql.Driver.getPropertyInfo.
jdbc:derby:;databaseName=bancoNovo;create=true
dataEncryption=true
Funo
Especifica a criptografia dos dados em disco para o novo banco de dados (Para obter
informaes sobre criptografia dos dados, deve ser consultado "Criptografia do banco de
dados no disco" no Guia do Desenvolvedor do Derby.)
jdbc:derby:bancoCriptografado;create=true;dataEncryption=true;
bootPassword=cLo4u922sc23aPe
206
Direitos autorais reservados
encryptionProvider=nomeProvedor
Funo
Especifica o provedor para criptografia dos dados (Para obter informaes sobre
criptografia de dados, deve ser consultado "Criptografia do banco de dados no disco" no
Guia do Desenvolvedor do Derby.)
jdbc:derby:bancoCriptografado;create=true;dataEncryption=true;
encryptionProvider=com.sun.crypto.provider.SunJCE;
encryptionAlgorithm=DESede/CBC/NoPadding;
bootPassword=cLo4u922sc23aPe
encryptionAlgorithm=algoritmo
Funo
Especifica o algoritmo para criptografar os dados.
O algoritmo especificado de acordo com as convenes da linguagem Java:
algoritmo/modo/preenchimento
(Para obter informaes sobre criptografia de dados, deve ser consultado "Criptografia
do banco de dados no disco" no captulo 7 do Guia do Desenvolvedor do Derby).
jdbc:derby:bancoCriptografado;create=true;dataEncryption=true;
encryptionProvider=com.sun.crypto.provider.SunJCE;
encryptionAlgorithm=DESede/CBC/NoPadding;
bootPassword=cLo4u922sc23aPe
Note: Se o provedor especificado no suportar o algoritmo especificado, o Derby lanar
uma exceo.
territory=ll_CC
Funo
Ao criar ou atualizar um banco de dados, este atributo utilizado para associar um
territrio diferente do padro ao banco de dados. Definir o atributo territory sobrepe o
territrio padro do sistema para o banco de dados. O territrio padro do sistema
encontrado utilizando java.util.Locale.getDefault().
207
Direitos autorais reservados
Para consultar a lista completa dos cdigos ISO-639 deve ser vista a pgina
http://www.ics.uci.edu/pub/ietf/http/related/iso639.txt.
O cdigo do pas formado por um par de letras maisculas, em conformidade com o
padro ISO-3166.
Tabela 102. Amostra de cdigos de pas
jdbc:derby:bancoBrasil;create=true;territory=pt_BR
logDevice=caminhoDiretorioLog
Funo
O caminhoDiretorioLog especifica o caminho para o diretrio onde fica armazenado o log
do banco de dados durante a criao ou restaurao do banco de dados. Mesmo que
seja especificado como um caminho relativo, o caminhoDiretorioLog armazenado
internamente como um caminho absoluto.
208
Direitos autorais reservados
jdbc:derby:bancoNovo;create=true;logDevice=d:/logBancoNovo
password=senhaUsuario
Funo
Uma senha vlida para o nome de usurio fornecido.
jdbc:derby:bancoTurismo;user=jack;password=upTheHill
rollForwardRecoveryFrom=Caminho
Funo
O atributo rollForwardRecoveryFrom=Caminho pode ser especificado na URL de
conexo em tempo de inicializao, para restaurar o banco de dados utilizando uma
cpia de segurana, e realizar a recuperao de rolagem para frente (rollforward)
utilizando os logs arquivados e ativos.
Para restaurar um banco de dados utilizando uma recuperao de rolagem para frente,
deve haver uma cpia de segurana do banco de dados, todos os logs arquivados desde
ento, e os arquivos de log ativos. Todos os arquivos de log devem estar no diretrio de
log do banco de dados.
URL: jdbc:derby:wombat;rollForwardRecoveryFrom=d:/backup/wombat
createFrom=Caminho
Funo
O atributo createFrom=Caminho pode ser especificado na URL de conexo em tempo
de inicializao, para criar o banco de dados utilizando uma cpia de segurana
completa em um local especificado. Se existir em derby.system.home um banco de
dados com o mesmo nome, ocorrer um erro e o banco de dados existente ser deixado
intacto. Se no existir um banco de dados com o mesmo nome no local
derby.system.home corrente, todo o banco de dados ser copiado do local da cpia de
segurana para o local derby.system.home, e inicializado.
Os arquivos de log so copiados para o local padro. O atributo logDevice pode ser
utilizado junto com createFrom=Caminho para armazenar os logs em um local diferente.
Com createFrom=Caminho no h necessidade de copiar os arquivos de log
individualmente para o diretrio de log.
209
Direitos autorais reservados
URL: jdbc:derby:wombat;createFrom=d:/backup/wombat
restoreFrom=Caminho
Funo
O atributo restoreFrom=Caminho pode ser especificado na URL de conexo em tempo
de inicializao, para restaurar o banco de dados utilizando uma cpia de segurana
completa no local especificado. Se existir no local derby.system.home um banco de
dados com o mesmo nome, o banco de dados ser excludo por completo, copiado do
local da cpia de segurana, e depois reinicializado.
Os arquivos de log so copiados para o mesmo local onde estavam quando a cpia de
segurana foi pega. O atributo logDevice pode ser utilizado junto com
restoreFrom=Caminho, para armazenar os logs em um local diferente.
URL: jdbc:derby:wombat;restoreFrom=d:/backup/wombat
shutdown=true
Funo
Pra o banco de dados especificado, se for especificado o atributo databaseName (A
reconexo com o banco de dados reinicializa o banco de dados.)
Pra todo o sistema Derby se, e somente se, no for especificado o atributo
databaseName.
Quando est sendo parado um nico banco de dados, permite que o Derby realize um
ponto de controle (checkpoint) final no banco de dados.
Quando est sendo parado todo o sistema, permite que o Derby realize um ponto de
controle final em todos os bancos de dados do sistema, remova o registro do driver de
JDBC, e termine na JVM antes que esta encerre a execuo. Uma parada bem sucedida
sempre resulta em uma SQLException indicando que o Derby parou, e no h mais
conexo. Uma vez que o Derby tenha parado, este pode ser reinicializado recarregando
o driver. Para obter detalhes sobre a reinicializao do Derby, deve ser consultado
"Parar o sistema", no captulo 1 do Guia do Desenvolvedor do Derby.
210
Direitos autorais reservados
jdbc:derby:bancoVendas;shutdown=true
user=nomeUsurio
Especifica um nome de usurio vlido para o sistema, especificado com uma senha.
Quando a autenticao de usurio est habilitada, requerido um nome de usurio e
senha vlidos.
A seguinte URL de conexo com o banco de dados conecta o usurio jill ao banco de
dados bancoTurismo:
jdbc:derby:bancoTurismo;user=jill;password=toFetchAPail
(nenhum atributo)
Se no for especificado nenhum atributo, o nomeBancoDados dever ser especificado
na URL de conexo.
O Derby estabelece uma conexo com o banco de dados existente com este nome no
diretrio de sistema corrente. Se o banco de dados no existir, a tentativa de conexo
retornar uma SQLException indicando que o banco de dados no pde ser encontrado.
jdbc:derby:meuBanco
211
Direitos autorais reservados
Para obter mais informaes sobre a J2EE, deve ser vista a especificao da J2EE
disponvel na pgina http://java.sun.com/j2ee/docs.html.
212
Direitos autorais reservados
"Utilizao do Derby como gerenciador de recursos J2EE", no Guia do Desenvolvedor
do Derby.
A API do JTA
A API do JTA composta por duas interfaces e uma exceo que fazem parte do pacote
java.transaction.xa. O Derby implementa esta API em sua totalidade.
javax.transaction.xa.XAResource
javax.transaction.xa.Xid
javax.transaction.xa.XAException
A utilizao da chamada XAResource.prepare faz com que uma transao global entre
no estado preparado, permitindo que esta seja persistente. Normalmente, o estado
preparado apenas um estado de transio antes do resultado da transao ser
determinado. Entretanto, se o sistema cair, a recuperao coloca as transaes que
esto no estado preparado de volta neste estado, e aguarda instrues do gerenciador
de transaes.
XAConnections, nomes de usurios e senhas
Se o usurio abrir uma XAConnection com nome de usurio e senha, a transao criada
no poder ser anexada a uma XAConnection aberta com um nome de usurio e senha
diferente. A transao criada por XAConnection sem nome de usurio e senha pode ser
anexada a qualquer XAConnection.
213
Direitos autorais reservados
consultada a pgina
http://java.sun.com/products/jdbc/jdbc20.stdext.javadoc/javax/sql/package-summary.html).
javax.sql.DataSource
A implementao de DataSource no Derby significa que este suporta JNDI; como
um gerenciador de recursos, permite que o banco de dados receba nome e seja
registrado no servidor JNDI. Permite ao aplicativo que faz a chamada acessar o
banco de dados pelo nome (como uma fonte de dados), em vez de atravs de uma
URL de conexo com o banco de dados.
javax.sql.ConnectionPoolDataSource e javax.sql.PooledConnection
O estabelecimento de uma conexo com o banco de dados pode ser uma
operao relativamente dispendiosa em ambientes cliente/servidor. O
estabelecimento da conexo uma vez, seguida pela utilizao da mesma conexo
por vrias requisies, pode melhorar muito o desempenho do banco de dados.
214
Direitos autorais reservados
API do Derby
O Derby fornece arquivos HTML Javadoc das classes e interfaces da API no subdiretrio
javadoc.
Este apndice fornece uma breve viso geral da API. O Derby no fornece Javadoc para
os pacotes java.sql, a API principal para trabalhar com o Derby, porque est includa na
API do JDBC. Para obter informaes sobre a implementao do JDBC no Derby deve
ser consultada a Referncia do JDBC.
215
Direitos autorais reservados
org.apache.derby.jdbc.EmbeddedConnectionPoolDataSource
org.apache.derby.jdbc.EmbeddedXADataSource
Ambiente cliente-servidor:
org.apache.derby.jdbc.ClientDataSource
org.apache.derby.jdbc.ClientConnectionPoolDataSource
org.apache.derby.jdbc.ClientXADataSource
216
Direitos autorais reservados
Territrios suportados
A seguir est a relao dos territrios suportados:
217
Direitos autorais reservados
Limitaes do Derby
Esta seo lista as limitaes associadas ao Derby.
Limitaes numricas
Tabela 104. Limitaes numricas
A tabela a seguir contm as limitaes dos valores numricos no Derby.
Valor Limite
Menor INTEGER -2.147.483.648
Maior INTEGER 2.147.483.647
Menor BIGINT -9.223.372.036.854.775.808
Maior BIGINT 9.223.372.036.854.775.807
Menor SMALLINT -32.768
Maior SMALLINT 32.767
Maior preciso decimal 31.255
Menor DOUBLE -1.79769E+308
Maior DOUBLE 1.79769E+308
Menor DOUBLE positivo 2.225E-307
Maior DOUBLE negativo -2.225E-307
218
Direitos autorais reservados
Valor Limite
Menor REAL -3.402E+38
Maior REAL 3.402E+38
Menor REAL positivo 1.175E-37
Maior REAL negativo -1.175E-37
Valor Limite
Menor valor DATE 0001-01-01
Maior valor DATE 9999-12-31
Menor valor TIME 00:00:00
Maior valor TIME 24:00:00
Menor valor TIMESTAMP 0001-01-01-00.00.00.000000
Maior valor TIMESTAMP 9999-12-31-24.00.00.000000
Valor Limite
Nmero mximo de colunas em uma tabela 1.012
Nmero mximo de colunas em uma viso 5.000
219
Direitos autorais reservados
Valor Limite
Nmero mximo de parmetros em um 90
procedimento armazenado
Nmero mximo de ndices em uma tabela 32.767 ou a capacidade de armazenamento
Nmero mximo de tabelas referenciadas em uma capacidade de armazenamento
instruo SQL ou em uma viso
Nmero mximo de elementos na lista de seleo 1.012
Nmero mximo de predicados na clusula capacidade de armazenamento
WHERE e HAVING
Nmero mximo de colunas na clusula GROUP 32.677
BY
Nmero mximo de colunas na clusula ORDER 1.012
BY
Nmero mximo de instrues preparadas capacidade de armazenamento
Nmero mximo de de cursores declarados em capacidade de armazenamento
um programa
Nmero mximo de cursores abertos ao mesmo capacidade de armazenamento
tempo
Nmero mximo de restries na tabela capacidade de armazenamento
Nvel mximo de aninhamento da subconsulta capacidade de armazenamento
Nmero mximo de subconsultas em uma nica capacidade de armazenamento
instruo
Nmero mximo de linhas alteradas em uma capacidade de armazenamento
unidade de trabalho
Nmero mximo de constantes em uma instruo capacidade de armazenamento
Profundidade mxima de gatilhos em cascata 16
220
Direitos autorais reservados
Marcas registradas
Os seguintes termos so marcas registradas de outras empresas e foram utilizados em
pelo menos um dos documentos da biblioteca de documentao do Apache Derby:
UNIX uma marca registrada do The Open Group nos EUA e outros pases.
221