Vous êtes sur la page 1sur 239

Manual de Referncia do Derby

Version 10

Derby Document build: September 14, 2011, 7:53:36 PM (UTC)

Version 10 Manual de Referncia do Derby

Contents
Direitos autorais reservados............................................................................................... 8 Licena................................................................................................................................... 9 Sobre este documento....................................................................................................... 13 Finalidade deste documento.................................................................................. 13 Audincia.................................................................................................................. 13 Organizao deste documento...............................................................................13 Referncia da linguagem SQL...........................................................................................15 Letras maisculas e caracteres especiais............................................................ 15 Identificadores SQL................................................................................................. 16 Regras para identificadores SQL92.................................................................... 16 IdentificadorSQL92.............................................................................................. 16 nome-da-coluna................................................................................................... 17 nome-da-correlao.............................................................................................18 novo-nome-da-tabela...........................................................................................18 nome-do-esquema...............................................................................................18 nome-de-coluna-simples......................................................................................19 nome-do-sinnimo............................................................................................... 19 nome-da-tabela....................................................................................................19 nome-da-viso..................................................................................................... 19 nome-do-ndice.................................................................................................... 20 nome-da-restrio................................................................................................20 nome-do-cursor....................................................................................................20 nome-do-gatilho................................................................................................... 21 identificador-de-autorizao.................................................................................21 Instrues................................................................................................................. 21 Interao com o sistema de dependncias........................................................ 21 Instruo ALTER TABLE.....................................................................................23 Instrues CREATE............................................................................................ 26 Instrues DROP.................................................................................................40 Instrues RENAME............................................................................................42 Instrues SET.................................................................................................... 42 CALL (PROCEDIMENTO)................................................................................... 44 Clusula CONSTRAINT...................................................................................... 44 Instruo DECLARE GLOBAL TEMPORARY TABLE........................................ 51 Instruo DELETE...............................................................................................53 Clusula FOR UPDATE...................................................................................... 54 Clusula FROM................................................................................................... 54 Clusula GROUP BY.......................................................................................... 55 Clusula HAVING................................................................................................56 INNER JOIN........................................................................................................ 56 Instruo INSERT................................................................................................57 Operao JOIN....................................................................................................59 LEFT OUTER JOIN.............................................................................................59 Instruo LOCK TABLE...................................................................................... 60 Clusula ORDER BY...........................................................................................61 Consulta...............................................................................................................62 RIGHT OUTER JOIN.......................................................................................... 64 SubconsultaEscalar............................................................................................. 64 ExpressoSeleo............................................................................................... 65 Instruo SELECT...............................................................................................67 i

Version 10 Manual de Referncia do Derby

ExpressoTabela................................................................................................. 69 SubconsultaTabela.............................................................................................. 69 Instruo UPDATE.............................................................................................. 70 VALUES Expresso............................................................................................ 72 Clusula WHERE................................................................................................ 73 Clusula WHERE CURRENT OF....................................................................... 74 Funes nativas....................................................................................................... 74 Funes nativas padro...................................................................................... 74 Agregaes (funes de conjunto)..................................................................... 75 ABS ou ABSVAL................................................................................................. 76 AVG..................................................................................................................... 76 BIGINT................................................................................................................. 77 CAST................................................................................................................... 77 CHAR...................................................................................................................80 LENGTH.............................................................................................................. 82 Concatenao......................................................................................................82 Expresses NULLIF e CASE.............................................................................. 83 COUNT................................................................................................................ 83 COUNT(*)............................................................................................................ 84 CURRENT DATE................................................................................................ 84 CURRENT_DATE................................................................................................84 CURRENT ISOLATION....................................................................................... 85 CURRENT SCHEMA...........................................................................................85 CURRENT TIME................................................................................................. 85 CURRENT_TIME.................................................................................................85 CURRENT TIMESTAMP..................................................................................... 86 CURRENT_TIMESTAMP.................................................................................... 86 CURRENT_USER............................................................................................... 86 DATE................................................................................................................... 86 DAY......................................................................................................................87 DOUBLE.............................................................................................................. 87 HOUR.................................................................................................................. 88 IDENTITY_VAL_LOCAL...................................................................................... 88 INTEGER............................................................................................................. 90 LOCATE...............................................................................................................90 LCASE ou LOWER............................................................................................. 91 LTRIM.................................................................................................................. 91 MAX..................................................................................................................... 91 MIN...................................................................................................................... 92 MINUTE............................................................................................................... 93 MOD.....................................................................................................................93 MONTH................................................................................................................93 RTRIM..................................................................................................................94 SECOND..............................................................................................................94 SESSION_USER................................................................................................. 94 SMALLINT........................................................................................................... 95 SQRT................................................................................................................... 95 SUBSTR.............................................................................................................. 95 SUM..................................................................................................................... 96 TIME.................................................................................................................... 97 TIMESTAMP........................................................................................................ 97 UCASE ou UPPER............................................................................................. 98 USER................................................................................................................... 98 VARCHAR........................................................................................................... 98 YEAR................................................................................................................... 99 Funes do sistema nativas...................................................................................99 ii

Version 10 Manual de Referncia do Derby

SYSCS_UTIL.SYSCS_CHECK_TABLE..............................................................99 SYSCS_UTIL.SYSCS_GET_RUNTIMESTATISTICS......................................... 99 SYSCS_UTIL.SYSCS_GET_DATABASE_PROPERTY................................... 100 Procedimentos do sistema nativos..................................................................... 100 SYSCS_UTIL.SYSCS_COMPRESS_TABLE....................................................100 SYSCS_UTIL.SYSCS_INPLACE_COMPRESS_TABLE.................................. 101 SYSCS_UTIL.SYSCS_SET_RUNTIMESTATISTICS........................................103 SYSCS_UTIL.SYSCS_SET_STATISTICS_TIMING......................................... 104 SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY....................................104 SYSCS_UTIL.SYSCS_FREEZE_DATABASE.................................................. 105 SYSCS_UTIL.SYSCS_UNFREEZE_DATABASE............................................. 105 SYSCS_UTIL.SYSCS_CHECKPOINT_DATABASE......................................... 105 SYSCS_UTIL.SYSCS_BACKUP_DATABASE..................................................106 SYSCS_UTIL.SYSCS_EXPORT_TABLE..........................................................106 SYSCS_UTIL.SYSCS_EXPORT_QUERY........................................................ 107 SYSCS_UTIL.SYSCS_IMPORT_TABLE.......................................................... 108 SYSCS_UTIL.SYSCS_IMPORT_DATA............................................................ 110 Tipos de dado........................................................................................................ 111 Viso geral dos tipos de dado nativos..............................................................111 Tipos numricos................................................................................................ 111 Tipo de dado - atribuies e comparao, classificao e ordenao.............. 114 BIGINT............................................................................................................... 117 BLOB................................................................................................................. 118 CHAR.................................................................................................................118 CHAR FOR BIT DATA...................................................................................... 119 CLOB................................................................................................................. 119 DATE................................................................................................................. 121 DECIMAL........................................................................................................... 121 DOUBLE ...........................................................................................................122 DOUBLE PRECISION....................................................................................... 122 FLOAT............................................................................................................... 123 INTEGER........................................................................................................... 124 LONG VARCHAR..............................................................................................124 LONG VARCHAR FOR BIT DATA................................................................... 125 NUMERIC.......................................................................................................... 125 REAL..................................................................................................................125 SMALLINT......................................................................................................... 126 TIME.................................................................................................................. 126 TIMESTAMP...................................................................................................... 127 VARCHAR......................................................................................................... 128 VARCHAR FOR BIT DATA...............................................................................128 Expresses SQL.....................................................................................................129 Precedncia das expresses............................................................................ 132 Expresso booleana.......................................................................................... 132 Parmetros dinmicos....................................................................................... 134 Palavras reservadas do SQL........................................................................................... 138 Suporte do Derby s funcionalidades do SQL-92......................................................... 142 Tabelas do sistema Derby............................................................................................... 150 SYSALIASES...........................................................................................................150 SYSCHECKS........................................................................................................... 150 SYSCOLUMNS........................................................................................................ 151 SYSCONGLOMERATES......................................................................................... 152 SYSCONSTRAINTS................................................................................................ 153 SYSDEPENDS......................................................................................................... 153 iii

Version 10 Manual de Referncia do Derby

SYSFILES................................................................................................................ 154 SYSFOREIGNKEYS................................................................................................ 154 SYSKEYS................................................................................................................ 155 SYSSCHEMAS........................................................................................................ 155 SYSSTATISTICS..................................................................................................... 156 SYSSTATEMENTS.................................................................................................. 156 SYSTABLES............................................................................................................ 157 SYSTRIGGERS....................................................................................................... 157 SYSVIEWS...............................................................................................................159 Mensagens de exceo e estados SQL do Derby.........................................................160 Referncia de SQLState e mensagem de erro....................................................160 Referncia do JDBC......................................................................................................... 192 Classes, interfaces e mtodos java.sql do ncleo do JDBC.............................192 java.sql.Driver......................................................................................................... 192 java.sql.DriverManager.getConnection................................................................ 193 Sintaxe da URL de conexo com banco de dados Derby................................ 193 Sintaxe da URL de conexo com banco de dados para aplicativos com bancos de dados incorporados......................................................................................194 Sintaxe SQL adicional....................................................................................... 194 Atributos da URL de conexo com o banco de dados Derby........................... 194 java.sql.Driver.getPropertyInfo............................................................................. 195 java.sql.Connection .............................................................................................. 196 java.sql.Connection.setTransactionIsolation .................................................... 196 java.sql.Connection.setReadOnly .....................................................................196 java.sql.Connection.isReadOnly .......................................................................196 Funcionalidades de conexo no suportadas...................................................196 java.sql.DatabaseMetaData................................................................................... 196 Conjuntos de resultados DatabaseMetaData....................................................196 getProcedureColumnsgetProcedureColumns................................................... 197 Parmetros para getProcedureColumns........................................................... 197 Colunas do ResultSet retornado por getProcedureColumns............................ 197 Funcionalidades de DatabaseMetaData no suportadas..................................198 java.sql.Statement .................................................................................................198 Objetos ResultSet..............................................................................................198 java.sql.PreparedStatement.................................................................................. 199 Instrues preparadas e colunas de fluxo........................................................ 199 java.sql.CallableStatement ...................................................................................200 CallableStatement e parmetros OUT.............................................................. 200 CallableStatement e parmetros INOUT...........................................................201 java.sql.ResultSet ................................................................................................. 202 ResultSets e colunas de fluxo.......................................................................... 202 java.sql.ResultSetMetaData...................................................................................203 java.sql.SQLException...........................................................................................203 java.sql.SQLWarning............................................................................................. 203 Mapeamento de java.sql.Types em tipos SQL....................................................203 java.sql.Blob e java.sql.Clob.................................................................................204 Notas..................................................................................................................206 java.sql.Connection............................................................................................... 207 java.sql.ResultSet...................................................................................................207 java.sql.Statement.................................................................................................. 208 java.sql.PreparedStatement.................................................................................. 209 java.sql.CallableStatement ...................................................................................209 java.sql.DatabaseMetaData................................................................................... 209 java.sql.ResultSetMetaData...................................................................................210 java.sql.BatchUpdateException............................................................................ 210 iv

Version 10 Manual de Referncia do Derby

Pacote JDBC para Connected Device Configuration/Foundation Profile (JSR169).................................................................................................................. 210 Funcionalidades apenas do JDBC 3.0.................................................................210 java.sql.Connection .............................................................................................. 211 java.sql.DatabaseMetaData .................................................................................. 211 java.sql.ParameterMetaData..................................................................................212 java.sql.PreparedStatement.................................................................................. 212 java.sql.Savepoint.................................................................................................. 212 Definir e desfazer at um ponto de salvamento............................................... 213 Liberao de ponto de salvamento...................................................................213 Regras para pontos de salvamento.................................................................. 213 Restries dos pontos de salvamento.............................................................. 213 java.sql.Statement.................................................................................................. 214 Chaves autogeradas......................................................................................... 214 Sintaxe de escape do JDBC................................................................................. 214 Palavra chave de escape do JDBC para instrues call.................................. 215 Sintaxe de escape do JDBC.............................................................................215 Sintaxe de escape do JDBC para clusulas LIKE............................................ 216 Sintaxe de escape do JDBC para a palavra chave fn...................................... 216 Sintaxe de escape do JDBC para junes externas.........................................218 Sintaxe de escape do JDBC para formatos de hora........................................ 218 Sintaxe de escape do JDBC para formatos de carimbo do tempo................... 219 Definio de atributos para a URL de conexo com o banco de dados..................... 220 bootPassword=chave............................................................................................ 220 create=true.............................................................................................................. 220 databaseName=nomeBancoDados...................................................................... 221 dataEncryption=true.............................................................................................. 221 encryptionProvider=nomeProvedor..................................................................... 221 encryptionAlgorithm=algoritmo............................................................................222 territory=ll_CC........................................................................................................ 222 logDevice=caminhoDiretorioLog.......................................................................... 223 password=senhaUsuario.......................................................................................224 rollForwardRecoveryFrom=Caminho................................................................... 224 createFrom=Caminho............................................................................................ 224 restoreFrom=Caminho...........................................................................................224 shutdown=true........................................................................................................225 user=nomeUsurio.................................................................................................225 (nenhum atributo).................................................................................................. 226 Conformidade com o J2EE: API de transao Java e extenses javax.sql................ 227 JVM e bibliotecas para as funcionalidades do J2EE......................................... 228 A API do JTA..........................................................................................................228 Notas sobre o comportamento do produto....................................................... 228 javax.sql: Extenses JDBC...................................................................................229 API do Derby..................................................................................................................... 230 Ferramentas e utilitrios autnomos...................................................................230 Classes de implementao do JDBC.................................................................. 230 Driver de JDBC................................................................................................. 230 Classes de fonte de dados............................................................................... 230 Utilitrios e interfaces diversas........................................................................... 231 Territrios suportados......................................................................................................232 Limitaes do Derby.........................................................................................................233 Limitaes do comprimento de identificador..................................................... 233 Limitaes numricas........................................................................................... 233 v

Version 10 Manual de Referncia do Derby

Limitaes das cadeias.........................................................................................234 Limitaes de DATE, TIME e TIMESTAMP.......................................................... 234 Limitaes dos valores do gerenciador de banco de dados............................ 235 Marcas registradas............................................................................................................237

vi

Manual de Referncia do Derby

Apache Software FoundationManual de Referncia do DerbyApache Derby

Manual de Referncia do Derby

Direitos autorais reservados


Copyright 2004, 2006 The Apache Software Foundation Licenciado sob a Licena Apache, Verso 2.0 (doravante chamada apenas de "Licena"); este arquivo no pode ser utilizado a no ser em conformidade com a Licena. Pode ser obtida uma cpia da Licena em
http://www.apache.org/licenses/LICENSE-2.0

Informaes relacionadas Licena

Manual de Referncia do Derby

Licena
Licena Apache, Verso 2.0
Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems

Manual de Referncia do Derby

that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form that You distribute, all copyright, attribution notices from the Source excluding those notices that do not the Derivative Works; and of any Derivative Works patent, trademark, and form of the Work, pertain to any part of

(d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications

10

Manual de Referncia do Derby

and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.

11

Manual de Referncia do Derby

Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

12

Manual de Referncia do Derby

Sobre este documento


Para obter informaes gerais sobre a documentao do Derby, como a relao completa de documentos, convenes e leitura adicional, deve ser consultada a Introduo ao Derby.

Finalidade deste documento


Este documento, o Manual de Referncia do Derby, fornece informaes de referncia sobre o Derby. Cobre a linguagem SQL do Derby, a implementao do JDBC do Derby, os catlogos do sistema do Derby, as mensagens de erro do Derby, as propriedades do Derby, e as palavras chave do SQL.

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.

Organizao deste documento


Este documento inclui as seguintes sees: Referncia da linguagem SQL Informaes de referncia sobre a linguagem SQL do Derby, incluindo pginas de manual para instrues, funes e outros elementos da sintaxe. Palavras reservadas do SQL Palavras chave do SQL alm das palavras chave do padro SQL-92. Suporte do Derby s funcionalidades do SQL-92 Uma lista de funcionalidades do SQL-92 que o Derby d suporte e no d suporte. Tabelas do sistema Derby Informaes de referncia sobre os catlogos do sistema do Derby. Mensagens de exceo e estados SQL do Derby Informaes sobre as mensagens de exceo do Derby. Referncia do JDBC Informaes sobre a implementao da interface de JDBC do Derby, incluindo suporte a funcionalidades do JDBC 2.0. Definio de atributos para a URL de conexo com o banco de dados Informaes sobre os atributos suportados pela URL de conexo com o banco de dados do JDBC do Derby. Conformidade com o J2EE: API de transao Java e extenses javax.sql Informaes sobre os atributos suportados pelo suporte do Derby API de Transao Java. API do Derby

13

Manual de Referncia do Derby

Notas sobre as APIs proprietrias para o Derby.

14

Manual de Referncia do Derby

Referncia da linguagem SQL


O Derby implementa um subconjunto do ncleo do SQL-92, assim como algumas funcionalidades do SQL-99. 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.

Letras maisculas e caracteres especiais


Ao utilizar classes e mtodos do JDBC, so submetidas instrues SQL ao Derby na forma de cadeias. O conjunto de caracteres permitido nas cadeias contendo instrues SQL o Unicode. Nestas cadeias se aplicam as seguintes regras: Aspas delimitam os identificadores especiais, referidos no SQL-92 como identificadores delimitados. Apstrofos delimitam cadeias de caracteres. Na cadeia de caracteres, para representar um apstrofo (tambm chamado de aspas simples) so usados dois apstrofos (Em outras palavras, o apstrofo o caractere de escape do apstrofo). As aspas no necessitam de caractere de escape. Para representar aspas deve-se, simplesmente, utilizar aspas. Entretanto, deve ser observado que no programa Java as aspas necessitam do caractere de escape contrabarra (\). Exemplo:
-- o apstrofo o caractere de escape do apstrofo VALUES 'Maria D''Almeida' -- no ij no h necessidade de caractere de escape para aspas VALUES 'Ele disse, "Bom dia!"' -- no programa Java aspas necessitam de escape n = stmt.executeUpdate( "UPDATE minhaTabela SET stringCol = 'Ele disse, \"Bom dia!\"'");

As palavras chave do SQL no so sensveis a letras maisculas e minsculas. Por exemplo, a palavra chave SELECT pode ser escrita como SELECT, Select, select, ou sELECT. Os identificadores no estilo SQL-92 no so sensveis a letras maisculas e minsculas (consulte IdentificadorSQL92), a menos que estejam delimitados. Os identificadores no estilo Java so sensveis a letras maisculas e minsculas. O * um caractere curinga na ExpressoSeleo. Consulte O curinga *. Tambm pode ser o operador de multiplicao. Em todos os outros casos um meta-smbolo da sintaxe, sinalizando itens que podem ser repetidos zero ou mais vezes. % e _ so caracteres curinga quando utilizados nas cadeias de caracteres aps o operador LIKE (exceto quando precedidos pelo caractere de escape). Consulte Expresso booleana. De acordo com o padro SQL-92, dois hfens (--) e o caractere de nova-linha delimitam um comentrio. Os dois hfens iniciam o comentrio, e o caractere de nova-linha termina o comentrio.

15

Manual de Referncia do Derby

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 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. Cada tipo de identificador deve estar em conformidade com um conjunto diferente de regras. Os identificadores que representam objetos do dicionrio devem estar em conformidade com as regras de identificador do SQL-92, sendo portanto chamados de IdentificadorSQL92.

Regras para identificadores SQL92


Identificadores comuns so identificadores no envoltos por aspas. Os identificadores delimitados so identificadores envoltos por aspas. 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 identificador delimitado pode conter qualquer caractere entre as aspas. As aspas envoltrias no fazem parte do identificador; servem apenas para marcar seu comeo e seu fim. Os espaos no final do identificador delimitado no so significativos (so truncados). O Derby traduz duas aspas consecutivas no interior do identificador delimitado como uma aspas, ou seja, as duas aspas "traduzidas" se tornam um caractere do identificador delimitado. Os pontos dentro do identificador delimitado no so separadores, so parte do identificador (o nome do objeto do dicionrio sendo representado). Portanto, no exemplo a seguir:
"A.B"

um objeto do dicionrio, enquanto


"A"."B"

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.

16

Manual de Referncia do Derby

O Derby define palavras chave alm das especificadas pelo padro SQL-92 (consulte Palavras reservadas do SQL). Exemplo
-- o nome da viso armazenado nos -- catlogos do sistema como UMIDENTIFICADOR CREATE VIEW UmIdentificador (RECEBIDO) AS VALUES 1 -- o nome da viso armazenado nos -- catlogos do sistema intacto CREATE VIEW "UmIdentificadorComMaisculasEMinsculas" (RECEBIDO) AS VALUES 1

Esta seo descreve as regras para utilizar IdentificadorSQL92 para representar os objetos do dicionrio que se seguem.
Qualificao dos objetos do dicionrio

Uma vez que alguns objetos do dicionrio podem estar contidos em outros objetos, os nomes destes objetos do dicionrio podem ser qualificados. Cada componente separado do componente seguinte por um ponto. O IdentificadorSQL92 "separado-por-ponto". O nome do objeto do dicionrio qualificado para evitar ambiguidade.

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. Em algumas situaes, no se pode qualificar o nome-da-coluna com o nome-da-tabela ou com o nome-da-correlao. Em vez disso, utilizado um nome-de-coluna-simples. Estas situaes so: criao da tabela (Instruo CREATE TABLE) especificao das colunas atualizveis no cursor no nome de correlao da coluna em uma expresso SELECT (consulte ExpressoSeleo) no nome de correlao da coluna em uma ExpressoTabela (consulte ExpressoTabela) No pode ser utilizado o nome-da-correlao em colunas atualizveis; a utilizao do nome-da-correlao desta maneira causa 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 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

17

Manual de Referncia do Derby

nome-da-correlao
O nome-da-correlao atribudo expresso de tabela na clusula FROM como sendo 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. Os esquemas podem ser criados e removidos explicitamente. O esquema de usurio padro o esquema APP (se no for especificado nenhum nome de usurio no momento da conexo). No permitido criar objetos nos esquemas que comeam por SYS. Portanto, as referncias a tabelas podem ser qualificadas pelo nome do esquema. Quando o nome-do-esquema no especificado, o nome de esquema padro inserido implicitamente. As tabelas do sistema so colocadas no esquema SYS. Todas as referncias a tabelas do sistema devem ser qualificadas pelo identificador de esquema SYS. Para obter mais informaes sobre as tabelas do sistema deve ser consultado Tabelas do sistema Derby. 18

Manual de Referncia do Derby

O esquema o objeto de dicionrio no nvel mais alto da hierarquia, portanto o nome-do-esquema no pode ser qualificado. Sintaxe
IdentificadorSQL92

Exemplo
-- RH.FUNCIONRIOS o nome-da-tabela qualificado pelo nome-do-esquema SELECT COUNT(*) FROM RH.FUNCIONRIOS -- Os nomes dos catlogos do sistema devem ser qualificados pelo seu esquema, SYS SELECT COUNT(*) FROM SYS.SYSCOLUMNS

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

19

Manual de Referncia do Derby

nome-da-viso
O nome-da-viso representa uma tabela ou uma viso. O nome-da-viso pode ser qualificado pelo nome-do-esquema. 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. O nome-do-cursor no pode ser qualificado. Sintaxe
IdentificadorSQL92

20

Manual de Referncia do Derby

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. A menos que esteja explicitamente declarado o contrrio, as instrues de alto nvel, todas assinaladas com a palavra instruo, podem ser executadas, ou preparadas e executadas, atravs das interfaces fornecidas pelo JDBC. Este manual indica se a expresso pode ser executada como uma instruo de alto nvel. As sees fornecem informaes gerais sobre a utilizao de instrues, e descries de instrues especficas.

21

Manual de Referncia do Derby

Interao com o sistema de dependncias


O Derby acompanha internamente as dependncias das instrues preparadas, que so instrues SQL pr-compiladas antes de serem executadas. So tipicamente preparadas (pr-compiladas) uma vez, e executadas vrias vezes. As instrues preparadas dependem de objetos do dicionrio, e de instrues referenciadas pelas mesmas (Os objetos do dicionrio incluem tabelas, colunas, restries, ndices, vises e gatilhos). A remoo ou modificao de objetos do dicionrio ou de instrues que a instruo preparada depende a invalida internamente, significando que o Derby vai tentar recompilar automaticamente a instruo quando esta for executada. Se a recompilao da instruo no for bem-sucedida, o pedido de execuo falhar. Entretanto, se for tomada alguma ao para restaurar a dependncia quebrada (como a restaurao da tabela que falta), a instruo preparada poder ser executada, porque o Derby ir recompil-la automaticamente no prximo pedido de execuo. 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. Alm disso, as instrues preparadas no permitem a execuo de certas instrues de DDL quando existem conjuntos de resultados abertos para as mesmas. As pginas do manual de cada instruo detalham quais aes invalidam a instruo, caso esteja preparada. Abaixo segue um exemplo utilizando a ferramenta ij do Derby:
ij> CREATE TABLE MINHA_TABELA (MINHA_COLUNA INT); 0 rows inserted/updated/deleted ij> INSERT INTO MINHA_TABELA VALUES (1), (2), (3); 3 rows inserted/updated/deleted -- este exemplo utiliza o comando prepare do ij, -- que prepara a instruo ij> prepare p1 AS 'INSERT INTO MINHA_TABELA VALUES (4)'; -- p1 depende de MINHA_TABELA; ij> execute p1; 1 row inserted/updated/deleted -- O Derby executa sem recompilar ij> CREATE INDEX I1 ON MINHA_TABELA(MINHA_COLUNA); 0 rows inserted/updated/deleted -- p1 est temporariamente invlido por causa do novo ndice ij> execute p1; 1 row inserted/updated/deleted -- O Derby recompila automaticamente e executa p1 ij> DROP TABLE MINHA_TABELA; 0 rows inserted/updated/deleted -- O Derby permite remover a tabela -- porque o conjunto de resultados de p1 est fechado, -- entretanto a instruo p1 est temporariamente invlida ij> CREATE TABLE MINHA_TABELA (MINHA_COLUNA INT); 0 rows inserted/updated/deleted ij> INSERT INTO MINHA_TABELA VALUES (1), (2), (3); 3 rows inserted/updated/deleted ij> execute p1; 1 row inserted/updated/deleted -- Como p1 est invlida, o Derby tenta recompilar -- antes de executar. -- bem-sucedido e executa. ij> DROP TABLE MINHA_TABELA; 0 rows inserted/updated/deleted -- a instruo p1 agora est invlida, -- e desta vez a tentativa de recompilar -- na hora de executar vai falhar ij> execute p1;

22

Manual de Referncia do Derby

ERROR 42X05: Table/View 'MINHA_TABELA' does not exist.

Instruo ALTER TABLE


A instruo ALTER TABLE permite: adicionar coluna tabela adicionar restrio tabela remover da tabela uma restrio existente aumentar o comprimento de coluna VARCHAR, CHAR VARYING e CHARACTER VARYING sobrepor o bloqueio no nvel de linha para a tabela (ou remover a sobreposio) 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

Na alterao-da-coluna, SET INCREMENT BY constante-inteira especifica o intervalo entre valores consecutivos da coluna de identidade. O prximo valor a ser gerado para a coluna de identidade ser determinado a partir do ltimo valor atribudo e o incremento a ser aplicado. A coluna deve ter sido definida com o atributo IDENTITY. 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. Assim como em CREATE TABLE, se a definio da coluna incluir uma restrio de unicidade ou de chave primria, a coluna no poder conter valores nulos e, portanto, tambm deve ser especificado o atributo NOT NULL (SQLState 42831). Note: Se a tabela possuir um gatilho de UPDATE sem uma lista de colunas explcita, adicionar uma coluna tabela adicionar esta coluna lista de colunas de atualizao implcita sobre a qual o gatilho est definido, e todas as referncias a variveis de transio sero invalidadas para que incluam a nova coluna.

23

Manual de Referncia do Derby

Adio de restries ALTER TABLE ADD CONSTRAINT adiciona restrio no nvel-de-tabela a uma tabela 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. A remoo da restrio de chave primria, de unicidade ou de chave estrangeira remove o ndice fsico que impe a restrio (tambm conhecido por ndice de apoio). 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. No permitido diminuir o tamanho ou mudar o tipo de dado. No permitido aumentar o comprimento de uma coluna que faz parte de uma chave primria ou chave de unicidade referenciada por uma restrio de chave estrangeira, ou que seja parte de uma restrio de chave estrangeira. Especificao do intervalo entre valores consecutivos da coluna de identidade. Para definir o intervalo entre valores consecutivos da coluna de identidade deve ser especificada uma constante-inteira. A coluna deve ter sido definida anteriormente com o atributo IDENTITY (SQLState 42837). Caso existam linhas na tabela, os valores na coluna para a qual o padro para SET INCREMENT foi adicionado no mudam. 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.

24

Manual de Referncia do Derby

Para obter mais informaes sobre valor padro deve ser consultada a Instruo CREATE TABLE. Alterao da granularidade do bloqueio da tabela A clusula LOCKSIZE permite sobrepor o bloqueio no nvel-de-linha para uma determinada tabela, se o sistema utilizar a definio padro de bloqueio no nvel-de-linha (Se o sistema estiver definido com bloqueio no nvel-de-tabela, no ser possvel alterar a granularidade do bloqueio, embora o Derby permita utilizar a clusula LOCKSIZE nesta situao sem lanar uma exceo). Para sobrepor o bloqueio no nvel-de-linha de uma determinada tabela, deve ser definido o bloqueio da tabela como TABLE. Se a tabela tiver sido criada com a granularidade de bloqueio no nvel-de-tabela, o bloqueio poder passar a ser no nvel-de-linha especificando ROW na clusula LOCKSIZE da instruo ALTER TABLE. Para obter informaes sobre porque algumas vezes esta alterao til, deve ser consultado o Ajuste do Derby. 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;

25

Manual de Referncia do Derby

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
As instrues CREATE so utilizadas com funes, ndices, procedimentos, esquemas, sinnimos, tabelas, gatilhos e vises.
Instruo CREATE FUNCTION

A instruo CREATE FUNCTION permite criar funes Java que podem ser utilizadas em expresses. 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

Se o nome-do-esquema no for fornecido, o esquema corrente se tornar o esquema padro. Se for especificado um nome de procedimento qualificado, o nome do esquema no poder comear por SYS. parmetro-da-funo
[ nome_do_parmetro ] tipo-de-dado

O nome_do_parmetro deve ser nico na funo. A sintaxe do tipo-de-dado est descrita em Tipos de dado. Note: Os tipos-de-dado longos, como LONG VARCHAR, LONG VARCHAR FOR BIT DATA, CLOB e BLOB, no so permitidos como parmetros da instruo CREATE FUNCTION. elemento-da-funo
{ | | | | | } LANGUAGE { JAVA } EXTERNAL NAME cadeia-de-caracteres PARAMETER STYLE JAVA { NO SQL | CONTAINS SQL | READS SQL DATA } { RETURNS NULL ON NULL INPUT | CALLED ON NULL INPUT }

LANGUAGE JAVA- o gerenciador de banco de dados chama a funo como um mtodo esttico pblico de uma classe Java. EXTERNAL NAME cadeia-de-caracteres A cadeia-de-caracteres descreve o mtodo Java a ser chamado quando a funo for executada, e possui a seguinte forma:
nome-da-classe.nome-do-mtodo

O EXTERNAL NAME (nome externo) no pode conter espaos indevidos.

26

Manual de Referncia do Derby

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. O Derby no suporta tipos de coluna longos (por exemplo, LONG VARCHAR, BLOB, etc.). Ocasiona erro tentar utilizar um destes tipos de coluna longos. NO SQL, CONTAINS SQL, READS SQL DATA Indica se a funo emite instrues SQL e, se o fizer, de que tipo. CONTAINS SQL Indica que podem ser executadas pela funo instrues SQL que no lem nem modificam dados SQL. As instrues no suportadas por qualquer funo retornam um erro diferente. NO SQL Indica que a funo no pode executar nenhuma instruo SQL. READS SQL DATA Indica que podem ser includas na funo instrues SQL que no modificam dados SQL. As instrues no suportadas por qualquer funo retornam um erro diferente. Este o valor padro. RETURNS NULL ON NULL INPUT ou CALLED ON NULL INPUT Especifica se a funo ser chamada quando algum de seus argumentos de entrada for nulo. RETURNS NULL ON NULL INPUT Especifica que a funo no ser chamada quando o valor de algum de seus argumentos de entrada for nulo. O resultado ser o valor nulo. CALLED ON NULL INPUT Especifica que a funo ser chamada quando o valor de algum de seus argumentos de entrada for nulo. Esta especificao significa que a funo deve ser codificada para testar nulos nos valores dos argumentos. A funo poder retornar um valor nulo, ou no nulo. Esta a definio padro. 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 ]] * )

No Derby, o nmero mximo de colunas para chave do ndice 16. 27

Manual de Referncia do Derby

O nome do ndice no pode ter mais que 128 caracteres. O nome da coluna no pode aparecer mais de uma vez na mesma instruo CREATE INDEX. Entretanto, ndices diferentes podem incluir a mesma coluna. O Derby pode utilizar os ndices para melhorar o desempenho das instrues de manipulao de dados (consulte o Ajuste do Derby). Alm disso, os ndices UNIQUE fornecem uma maneira de verificar a integridade dos dados. Os nomes dos ndices so nicos no esquema (Alguns sistemas de banco de dados permitem que tabelas diferentes no mesmo esquema possuam ndices com o mesmo nome, mas o Derby no permite). assumido que a tabela e o ndice esto no mesmo esquema, se o nome do esquema for especificado para um dos nomes, mas no para o outro. Se o nome do esquema for especificado tanto para o ndice quanto para a tabela, ser lanada uma exceo se os nomes dos esquemas no forem o mesmo. Se no for especificado o nome do esquema nem para a tabela e nem para o ndice, ser utilizado o esquema corrente. 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. Se for especificado um nome de ndice qualificado, o nome do esquema no poder comear por SYS. 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:
SELECT CONGLOMERATENAME FROM SYS.SYSCONGLOMERATES, SYS.SYSCONSTRAINTS WHERE SYS.SYSCONGLOMERATES.TABLEID = SYSCONSTRAINTS.TABLEID AND CONSTRAINTNAME = 'PK_VOS' CREATE INDEX NDICE_ORIGEM ON VOS(AEROPORTO_ORIGEM); -- valores monetrios so geralmente ordenados do maior para o menor, -- portanto o ndice criado na ordem descendente CREATE INDEX PAG_DESC ON SAMP.EMPREGADOS (SALRIO); -- utilizar um tamanho de pgina maior para o ndice CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby.storage.pageSize','8192'); CREATE INDEX IDX_VENDAS ON SAMP.VENDAS (VENDAS); CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY('derby.storage.pageSize',NULL);

Tamanho da pgina e comprimento da chave

28

Manual de Referncia do Derby

Note: Em um ndice, o tamanho das colunas chave deve ser igual ou menor que a metade do tamanho da pgina. Se o comprimento das colunas chave, de uma linha existente na tabela, for maior que a metade do tamanho da pgina do ndice, a criao do ndice para a tabela com estas colunas chave falhar. Este erro somente ocorre ao criar o ndice, quando uma linha existente na tabela no respeita este critrio. Aps o ndice ser criado, as inseres falham se o tamanho da chave associada no respeitar este critrio. 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

A instruo CREATE PROCEDURE permite criar procedimentos armazenados em Java, que podem ser chamados utilizando a instruo CALL PROCEDURE. Sintaxe
CREATE PROCEDURE nome-do-procedimento ( [ parmetro-do-procedimento [, parmetro-do-procedimento] ] * ) [ elemento-do-procedimento ] *

nome-do-procedimento
[ nome-do-esquema. ] IdentificadorSQL92

Se o nome-do-esquema no for fornecido, o esquema corrente ser o esquema padro. Se for especificado um nome de procedimento qualificado, o nome do esquema no poder comear por SYS. parmetro-do-procedimento
[ { IN | OUT | INOUT } ] [ nome-do-parmetro ] tipo-de-dado

O valor padro para o parmetro IN. O nome-do-parmetro deve ser nico no procedimento. A sintaxe do tipo-de-dado est descrita em Tipos de dado. Note: Os tipos-de-dado longos, como LONG VARCHAR, LONG VARCHAR FOR BIT DATA, CLOB e BLOB, no podem ser usados como parmetros nas instrues CREATE PROCEDURE. elemento-do-procedimento
{ | | | | | } [ DYNAMIC ] RESULT SETS INTEGER LANGUAGE { JAVA } EXTERNAL NAME cadeia-de-caracteres PARAMETER STYLE JAVA { NO SQL | MODIFIES SQL DATA | CONTAINS SQL | READS SQL DATA }

DYNAMIC RESULT SETS integer Indica o limite superior estimado de conjuntos de resultados retornados pelo procedimento. O padro sem (zero) conjuntos de resultados dinmicos. LANGUAGE

29

Manual de Referncia do Derby

JAVA - o gerenciador de banco de dados chama o procedimento como um mtodo esttico pblico de uma classe Java. EXTERNAL NAME cadeia-de-caracteres A cadeia-de-caracteres descreve o mtodo Java a ser chamado quando o procedimento for executado, e possui a seguinte forma:
nome_da_classe.nome_do_mtodo

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. NO SQL, CONTAINS SQL, READS SQL DATA, MODIFIES SQL DATA Indica se o procedimento armazenado emite instrues SQL e, se o fizer, de que tipo. CONTAINS SQL Indica que podem ser executadas pelo procedimento armazenado instrues SQL que no lem nem modificam dados SQL. As instrues no suportadas por qualquer procedimento armazenado retornam um erro diferente. O valor padro MODIFIES SQL DATA. NO SQL Indica que o procedimento armazenado no pode executar nenhuma instruo SQL. READS SQL DATA Indica que podem ser includas no procedimento armazenado algumas instrues SQL que no modificam dados SQL. As instrues no suportadas por qualquer procedimento armazenado retornam um erro diferente. MODIFIES SQL DATA Indica que o procedimento armazenado pode executar qualquer instruo SQL, exceto as instrues no suportadas por procedimentos armazenados. Os elementos do procedimento podem estar em qualquer ordem, mas cada tipo de elemento pode aparecer somente uma nica vez. A definio do procedimento deve conter os seguintes elementos: LANGUAGE PARAMETER STYLE EXTERNAL NAME 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

O esquema uma forma de agrupar logicamente objetos em uma nica coleo, e fornecer um espao de nomes nico para os objetos. Sintaxe

30

Manual de Referncia do Derby

CREATE SCHEMA nome-do-esquema

A instruo CREATE SCHEMA utilizada para criar esquemas. O nome do esquema no pode possuir mais de 128 caracteres. Os nomes dos esquemas devem ser nicos no banco de dados.
-- Criar um esquema para as tabelas relacionadas com os empregados CREATE SCHEMA EMP; -- Criar um esquema para as tabelas relacionadas com as linhas areas CREATE SCHEMA VOS -- Criar uma tabela chamada "disponibilidade" em cada esquema CREATE TABLE VOS.DISPONIBILIDADE ( ID_VO CHAR(6) NOT NULL, NUM_SEGMENTO INT NOT NULL, DATA_VO DATE NOT NULL, ASSENTOS_ECONMICOS_OCUPADOS INT, ASSENTOS_EXECUTIVOS_OCUPADOS INT, ASSENTOS_PRIMEIRA_CLASSE_OCUPADOS INT, CONSTRAINT PK_VOS_DISPONIBILIDADE PRIMARY KEY (ID_VO, NUM_SEGMENTO, DATA_VO)); CREATE TABLE EMP.DISPONIBILIDADE ( ID_HOTEL INT NOT NULL, DATA_RESERVA DATE NOT NULL, QUARTOS_OCUPADOS INT, CONSTRAINT PK_HOTEL_DISPONIBILIDADE PRIMARY KEY (ID_HOTEL, DATA_RESERVA)); Instruo CREATE SYNONYM

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. Os sinnimos compartilham o mesmo espao de nomes das tabelas e vises. No pode ser criado um sinnimo com o mesmo nome de uma tabela que j existe no mesmo esquema. De maneira semelhante, no pode ser criada uma tabela ou viso com nome correspondente a um sinnimo j existente. 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 podem ser definidos sinnimos nos esquemas do sistema. Todos os esquemas comeando por 'SYS' so considerados esquemas do sistema, e so reservados pelo Derby. 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 31

Manual de Referncia do Derby

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
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). Para obter informaes sobre as restries deve ser consultada a Clusula CONSTRAINT. 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. Podem ser especificadas propriedades de armazenamento, como o tamanho da pgina para a tabela, chamando o procedimento do sistema SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY. Se for especificado um nome de tabela qualificado, o nome do esquema no poder comear por SYS. 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));

32

Manual de Referncia do Derby

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 ]*

A sintaxe do tipo-de-dado est descrita em Tipos de dado. As sintaxes de restrio no nvel-de-coluna e restrio no nvel-de-tabela esto descritas na Clusula CONSTRAINT. Valor padro da coluna Na definio do valor padro, a expresso-constante uma expresso que no faz referncia a nenhuma tabela. Pode incluir constantes, registros especiais de data e hora, esquemas correntes, usurios e nulo.

especificao-de-coluna-gerada:
[ GENERATED { ALWAYS | BY DEFAULT } AS IDENTITY [ ( START WITH ConstanteInteira [ ,INCREMENT BY ConstanteInteira] ) ] ] ]

Atributos da coluna de identidade Nas colunas SMALLINT, INT e BIGINT com atributo de identidade, o Derby atribui automaticamente valores inteiros incrementados para a coluna. Os atributos da coluna de identidade se comportam como os outros valores padro, ou seja, quando a instruo de insero no especifica o valor para a coluna, o Derby fornece automaticamente o valor. Entretanto, o valor no uma constante; o Derby incrementa automaticamente o valor padro na hora da insero. A palavra chave IDENTITY somente pode ser especificada quando o tipo de dado associado coluna for um dos seguintes tipos inteiros exatos. SMALLINT INT BIGINT Existem dois tipos de coluna de identidade no Derby: aquelas que so sempre geradas (GENERATED ALWAYS), e aquelas que so geradas por padro (GENERATED BY DEFAULT). GENERATED ALWAYS Uma coluna de identidade que sempre gerada, incrementa o valor padro em todas as inseres e armazena o valor incrementado na coluna. Ao contrrio dos outros valores padro, no possvel inserir diretamente um valor ou atualizar uma coluna de identidade que sempre gerada. Por isso, deve ser especificada a palavra chave DEFAULT ao fazer insero na coluna de identidade, ou no incluir a coluna de identidade na lista de colunas na insero. Por exemplo:
CREATE I CH INSERT INSERT TABLE SAUDAES ( INT GENERATED ALWAYS AS IDENTITY, CHAR(50)); INTO SAUDAES VALUES (DEFAULT, 'al'); INTO SAUDAES(CH) VALUES ('bom dia');

33

Manual de Referncia do Derby

Os valores gerados automaticamente na coluna de identidade GENERATED ALWAYS so nicos. A criao de uma coluna de identidade no cria um ndice para a coluna. GENERATED BY DEFAULT Uma coluna de identidade gerada por padro, somente incrementa e utiliza o valor padro nas inseres quando no fornecido nenhum valor explcito. Ao contrrio da colunas sempre geradas, pode ser especificado um valor na instruo de insero a ser utilizado no lugar do valor padro gerado. Para utilizar o valor gerado, deve ser especificada a palavra chave DEFAULT ao inserir na coluna de identidade, ou no incluir a coluna de identidade na lista de colunas da insero. Para especificar um valor, este deve ser includo na instruo de insero. Por exemplo:
CREATE TABLE SAUDAES ( I INT GENERATED BY DEFAULT AS IDENTITY, CH CHAR(50)); -- especificar o valor "1": INSERT INTO SAUDAES VALUES (1, 'ol'); -- usar o padro gerado INSERT INTO SAUDAES VALUES (DEFAULT, 'salut'); -- usar o padro gerado INSERT INTO SAUDAES(CH) VALUES ('bonjour');

Deve ser observado que ao contrrio das colunas GENERATED ALWAYS, as colunas GENERATED BY DEFAULT no garantem unicidade. Portanto, no exemplo acima as linhas ol e salut possuem o valor de identidade igual a "1", porque a coluna gerada comea por "1" e o valor especificado pelo usurio tambm "1". Para no permitir duplicidade, especialmente ao carregar ou importar dados, a tabela deve ser criada utilizando um valor para START WITH correspondente ao primeiro valor de identidade que o sistema deve atribuir. Para verificar esta condio e no permiti-la, pode ser utilizada uma chave primria ou restrio de unicidade na coluna de identidade GENERATED BY DEFAULT. Por padro, o valor inicial da coluna de identidade 1, e o valor do incremento 1. Podem ser especificados valores diferentes do padro para o valor inicial e para o incremento ao definir a coluna utilizando as palavras chave STARTS WITH e INCREMENT BY. Se for especificado um nmero negativo para o valor do incremento, o Derbydecrementar o valor a cada insero. Se o valor for 0, ou positivo, o Derby incrementar o valor a cada insero. Os valores mximos e mnimos permitidos nas colunas de identidade so determinados pelo tipo de dado da coluna. A tentativa de inserir um valor fora da faixa de valores suportados pelo tipo de dado lana uma exceo. Tabela 1. Valores mximos e mnimos para colunas com especificao de coluna gerada Tipo de dado SMALLINT INT BIGINT

Valor mximo 32.767 (java.lang.Short.MAX_VALUE) 2.147.483.647 (java.lang.Integer.MAX_VALUE) 9.223.372.036.854.775.807 (java.lang.Long.MAX_VALUE)

Valor mnimo -32.768 (java.lang.Short.MIN_VALUE) -2.147.483.648 (java.lang.Integer.MIN_VALUE) -9.223.372.036.854.775.808 (java.lang.Long.MIN_VALUE)

34

Manual de Referncia do Derby

Os valores gerados automaticamente na coluna de identidade so nicos. Deve ser utilizada uma restrio de chave primria ou de unicidade para garantir a unicidade. A criao da coluna de identidade no cria um ndice para a coluna. A funo IDENTITY_VAL_LOCAL uma funo no determinstica que retorna o valor atribudo mais recentemente a uma coluna de identidade. Consulte IDENTITY_VAL_LOCAL para obter mais informaes. Note: Deve ser especificado o nome do esquema, da tabela e da coluna utilizando letras maisculas e minsculas conforme os nomes estejam armazenados nas tabelas do sistema -- ou seja, todas as letras em maisculo, a menos que tenham sido utilizados identificadores delimitados para criar estes objetos no banco de dados. O Derby mantm o ltimo valor incrementado para a coluna no cache. Tambm armazena o prximo valor incrementado para a coluna no disco na coluna AUTOINCREMENTVALUE da tabela do sistema SYS.SYSCOLUMNS. Desfazer a transao no desfaz este valor, portanto transaes desfeitas podem deixar "espaos" nos valores inseridos automaticamente na coluna de identidade. O Derby se comporta desta maneira para evitar bloqueio na linha de SYS.SYSCOLUMNS pela durao da transao, e para manter a simultaneidade alta. Quando acontece uma insero em uma instruo-SQL-engatilhada, o valor inserido pela instruo-SQL-engatilhada na coluna de identidade disponvel a partir de ConnectionInfo somente dentro do cdigo do gatilho. O cdigo do gatilho tambm pode ver o valor inserido pela instruo que fez o gatilho disparar. Entretanto, a instruo que fez o gatilho disparar no pode ver o valor inserido pela instruo-SQL-engatilhada na coluna de identidade. Da mesma maneira, os gatilhos podem ser aninhados (ou recursivos). Uma instruo SQL pode fazer o gatilho T1 disparar. T1, por sua vez, executa uma instruo SQL que faz o gatilho T2 disparar. Se tanto T1 quanto T2 inserem linhas em uma tabela que faz o Derby inserir em uma coluna de identidade, o gatilho T1 no poder ver o valor produzido pela insero feita por T2, mas T2 poder ver o valor produzido pela insero feita por T1. Cada nvel de aninhamento pode ver os valores incrementados gerados por si prprio e pelos nveis de aninhamento anteriores, por todo o percurso at a instruo SQL de nvel superior que deu incio aos gatilhos recursivos. Somente podem existir 16 nveis de recursividade de gatilho. 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

O gatilho define um conjunto de aes a serem executadas quando ocorre um evento de banco de dados em uma determinada tabela. O evento de banco de dados uma operao de excluso, insero ou de atualizao. Por exemplo, se for definido um gatilho para excluso em uma determinada tabela, a ao do gatilho ocorre sempre que se remove uma ou mais linhas da tabela. 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.

35

Manual de Referncia do Derby

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. Se for especificado um nome de gatilho qualificado, o nome do esquema no poder comear por SYS. 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

Antes ou depois: quando os gatilhos disparam Os gatilhos so definidos para BEFORE (antes) ou AFTER (depois). 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). Insero, excluso e atualizao: o que faz o gatilho disparar O gatilho disparado por um dos seguintes eventos do banco de dados, dependendo de como foi definido (consulte Sintaxe acima): INSERT UPDATE DELETE 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. Referncia a valores antigos e novos: a clusula de referncia Muitas instrues-SQL-engatilhadas necessitam fazer referncia aos dados que esto sendo alterados no momento pelo evento de banco de dados que causou o disparo do gatilho. A instruo-SQL-engatilhada pode necessitar fazer referncia aos valores novos (ps-alterao ou "aps"). 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

pode-se ento fazer referncia a este nome de correlao na instruo-SQL-engatilhada:


DELETE FROM DISPONIBILIDADE_HOTEL WHERE ID_HOTEL = LINHA_APAGADA.ID_HOTEL

36

Manual de Referncia do Derby

As variveis de transio OLD e NEW so mapeadas a um java.sql.ResultSet de uma nica linha. Note: Somente os gatilhos de linha (consulte Gatilhos de instruo versus gatilhos de linha) podem utilizar variveis de transio. Os gatilhos de linha para INSERT no podem fazer referncia linha antiga. Os gatilhos de linha para DELETE no podem fazer referncia linha nova. Para os gatilhos de instruo, as tabelas de transio servem como identificador de tabela para a instruo-SQL-engatilhada ou para a qualificao do gatilho. A clusula de referncia permite fornecer um nome de correlao ou alis para estas tabelas de transio especificando OLD_TABLE/NEW_TABLE AS nome-da-correlao Por exemplo:
REFERENCING OLD_TABLE AS HOTIS_EXCLUDOS

permite utilizar este novo identificador (HOTIS_EXCLUDOS) na instruo-SQL-engatilhada:


DELETE FROM DISPONIBILIDADE_HOTEL WHERE ID_HOTEL IN (SELECT ID_HOTEL FROM HOTIS_EXCLUDOS)

As tabelas de transio antiga e nova so mapeadas a um java.sql.ResultSet com cardinalidade equivalente ao nmero de linhas afetadas pelo evento do gatilho. Note: Somente os gatilhos de instruo (consulte Gatilhos de instruo versus gatilhos de linha) podem utilizar tabelas de transio. Os gatilhos para a instruo INSERT no podem fazer referncia tabela OLD. Os gatilhos para a instruo DELETE no podem fazer referncia tabela NEW. A clusula REFERENCING pode designar apenas uma correlao ou identificador para novo, e apenas uma correlao ou identificador para antigo. Os gatilhos de linha no podem designar um identificador para a tabela de transio, e os gatilhos de instruo no podem designar uma correlao para as variveis de transio. Gatilhos de instruo versus gatilhos de linha Deve ser especificado se o gatilho um gatilho de instruo ou um gatilho de linha: gatilho de instruo O gatilho de instruo dispara uma vez por evento de gatilho, independentemente de alguma linha ser modificada pelo evento de insero, atualizao ou excluso. gatilho de linha O gatilho de linha dispara uma vez para cada linha afetada pelo evento de gatilho. Se nenhuma linha for afetada, o gatilho no vai disparar. Note: Uma atualizao que define o valor da coluna como o valor originalmente contido (por exemplo, UPDATE T SET C = C) faz com que o gatilho de linha dispare, embora o valor da coluna seja o mesmo que era antes do evento de gatilho. 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.

37

Manual de Referncia do Derby

Os gatilhos para antes no podem possuir instrues INSERT, UPDATE ou DELETE como sua ao. A instruo-SQL-engatilhada pode fazer referncia a outros objetos do banco de dados alm da tabela para a qual o gatilho declarado. Se algum destes objetos for removido, o gatilho ser invalidado. Se na prxima execuo a recompilao do gatilho no for bem-sucedida, a chamada lanar uma exceo e a instruo que causou o disparo ser desfeita. Para obter mais informaes sobre instruo-SQL-engatilhada deve ser consultado o Guia do Desenvolvedor do Derby. 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 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;

Note: Podem ser encontrados mais exemplos no Guia do Desenvolvedor do Derby. Recursividade de gatilho A profundidade de recursividade mxima de gatilho 16. 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

38

Manual de Referncia do Derby

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 so tabelas virtuais formadas por uma consulta. A viso um objeto do dicionrio que pode ser utilizado, at ser removido. As vises no so atualizveis. Se for especificado um nome de viso qualificado, o nome do esquema no poder comear por SYS. Sintaxe
CREATE VIEW nome-da-viso [ ( nome-de-coluna-simples [, nome-de-coluna-simples] * ) ] AS Consulta

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.
CREATE VIEW SAMP.V1 (COL_SUM, COL_DIFF) AS SELECT COMISS + BNUS, COMISS - BNUS FROM SAMP.EMPREGADOS; CREATE VIEW SAMP.V_EMP_CURR (CURRICULUM) AS VALUES 'Delores M. Quintana', 'Heather A. Nicholls', 'Bruce Adamson'; CREATE VIEW SAMP.PROJ_COMBO (NUM_PROJ, PROJ_DATA_FIM, PROJ_EQUIPE, PROJ_CHEFE) AS SELECT NUM_PROJ, PROJ_DATA_FIM, PROJ_EQUIPE, PROJ_CHEFE FROM SAMP.PROJETO UNION ALL SELECT NUM_PROJ, EMSTDATE, EMPTIME, NUM_EMP FROM SAMP.ATIV_EMP WHERE NUM_EMP IS NOT NULL;

Sistema de dependncia de instruo As definies das vises so dependentes das tabelas e vises referenciadas na definio da viso. As instrues de DML (linguagem de manipulao de dados) que contm referncia a vises dependem destas vises, assim como dos objetos nas definies das vises dos quais as vises dependem. As instrues que fazem referncia viso dependem dos ndices que as vises utilizam; o ndice utilizado pela viso pode mudar de uma instruo para outra, baseado em como a consulta otimizada. Por exemplo, dado:
CREATE TABLE T1 (C1 DOUBLE PRECISION); CREATE FUNCTION SIN (DATA DOUBLE) RETURNS DOUBLE EXTERNAL NAME 'java.lang.Math.sin' LANGUAGE JAVA PARAMETER STYLE JAVA; CREATE VIEW V1 (C1) AS SELECT SIN(C1) FROM T1;

39

Manual de Referncia do Derby

ento a instruo a seguir:


SELECT * FROM V1

dependente da viso V1, da tabela T1, e da funo escalar externa SIN.

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.
Instruo DROP INDEX

A instruo DROP INDEX remove o ndice especificado. Sintaxe


DROP INDEX nome-do-ndice DROP INDEX INDICE_ORIGEM DROP INDEX INDICE_DESTINO

Sistema de dependncia de instruo Se houver um cursor aberto na tabela de onde o ndice ser removido, a instruo DROP INDEX ir gerar um erro e no remover o ndice. Se no houver, as instrues que dependem da tabela do ndice sero invalidadas.
Instruo DROP PROCEDURE

Sintaxe
DROP PROCEDURE nome-do-procedimento

Identifica um determinado procedimento a ser removido, sendo vlida somente se houver exatamente uma instncia do procedimento com o nome-do-procedimento no esquema. O procedimento identificado pode ter qualquer nmero de parmetros definidos no mesmo. Se no houver nenhum procedimento com o nome indicado no esquema nomeado ou implcito, ocorrer um erro (SQLState 42704). Tambm ocorrer um erro quando existir mais de uma instncia do procedimento especificado no esquema nomeado ou implcito.
Instruo DROP SCHEMA

A instruo DROP SCHEMA remove um esquema. O esquema de destino deve estar vazio para a remoo ser bem-sucedida. Nem o esquema APP (o esquema padro do usurio), e nem o esquema SYS, podem ser removidos. Sintaxe 40

Manual de Referncia do Derby

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.
-- Remover o esquema SAMP -- O esquema SAMP somente poder ser removido do banco de dados -- se no existir nenhum objeto definido no esquema SAMP. DROP SCHEMA SAMP RESTRICT Instruo DROP SYNONYM

Remove o sinnimo especificado da tabela ou da viso. Sintaxe


DROP SYNONYM nome-do-sinnimo Instruo DROP TABLE

A instruo DROP TABLE remove a tabela especificada. Sintaxe


DROP TABLE nome-da-tabela

Sistema de dependncia de instruo Os gatilhos, as restries (chave primria, unicidade, verificao e referencial da tabela sendo removida) e os ndices da tabela so removidos em silncio. A existncia de um cursor aberto fazendo referncia tabela sendo removida faz com que a instruo DROP TABLE gere um erro, e a tabela no seja removida. A remoo da tabela invalida as instrues que dependem da tabela (Invalidar uma instruo faz com que esta seja recompilada na prxima execuo. Consulte a Interao com o sistema de dependncias.)
Instruo DROP TRIGGER

A instruo DROP TRIGGER remove o gatilho especificado. Sintaxe


DROP TRIGGER nome-do-gatilho DROP TRIGGER GAT1

Sistema de dependncia de instruo Quando uma tabela removida, todos os gatilhos da tabela so removidos automaticamente (No h necessidade de remover os gatilhos da tabela antes de remover a tabela).
Instruo DROP VIEW

Remove a viso especificada. Sintaxe


DROP VIEW nome-da-viso DROP VIEW um_identificador

Sistema de dependncia de instruo

41

Manual de Referncia do Derby

Todas as instrues que fazem referncia viso so invalidadas pela instruo DROP VIEW. A instruo DROP VIEW no permitida quando existem vises ou cursores abertos dependentes da viso. A viso deve ser removida antes que qualquer objeto do qual seja dependente possa ser removido.

Instrues RENAME
As instrues RENAME so utilizadas com ndices e tabelas.
Instruo RENAME INDEX

Esta instruo permite mudar o nome de um ndice no esquema corrente. Os usurios no podem mudar os nomes dos ndices do esquema SYS. Sintaxe
RENAME INDEX nome-do-ndice TO novo-nome-do-ndice RENAME INDEX NDICE_DESTINO TO NDICE_CHEGADA

Sistema de dependncia de instruo A instruo RENAME INDEX no permitida quando h cursores abertos fazendo referncia ao ndice sendo renomeado.
Instruo RENAME TABLE

A instruo RENAME TABLE permite renomear uma tabela existente em qualquer esquema (exceto o esquema SYS). 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.
RENAME TABLE SAMP.ATIV_EMP TO ATIVIDADES_EMPREGADOS

Para obter mais informaes consulte tambm a Instruo ALTER TABLE. Sistema de dependncia de instruo Mesmo que exista um ndice definido na tabela, a tabela pode ser renomeada. A instruo RENAME TABLE no permitida quando h cursores abertos fazendo referncia tabela sendo alterada.

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.

42

Manual de Referncia do Derby

A instruo SET SCHEMA no transacional: Se a instruo SET SCHEMA for parte de uma transao desfeita, a mudana de esquema permanecer aplicada. Sintaxe
SET [CURRENT] SCHEMA [=] { nome-do-esquema| USER | ? | '<constante-cadeia-de-caracteres>' } | SET CURRENT SQLID [=] { nome-do-esquema| USER | ? | '<constante-cadeia-de-caracteres>' }

O nome-do-esquema um identificador com comprimento mximo igual a 128. No diferencia letras maisculas de minsculas, a menos que esteja entre aspas (Por exemplo, SYS equivalente a sYs, SYs, sys, etc.). USER o usurio corrente. Se no houver usurio corrente definido, o esquema corrente padro ser o esquema APP (Se for especificado um nome de usurio na conexo, o nome de usurio ser o esquema padro para a conexo, caso exista um esquema com este nome). ? a especificao de um parmetro dinmico que pode ser utilizado em instrues preparadas. A instruo SET SCHEMA pode ser preparada uma vez e executada com valores de esquema diferentes. Os valores do esquema so tratados como constantes cadeia de caracteres, portanto diferenciando letras maisculas e minsculas. Por exemplo, para designar o esquema APP deve ser utilizada a cadeia de caracteres "APP", em vez de "app".
-- os comandos a seguir so todos equivalentes, -- e funcionam assumindo que exista um esquema chamado HOTEL SET SCHEMA HOTEL SET SCHEMA hotel SET CURRENT SCHEMA hotel SET CURRENT SQLID hotel SET SCHEMA = hotel SET CURRENT SCHEMA = hotel SET CURRENT SQLID = hotel SET SCHEMA "HOTEL" -- identificador entre aspas SET SCHEMA 'HOTEL' -- cadeia de caracteres entre apstrofos-- Este exemplo produz um erro, porque -- hotel em minsculas no ser encontrado SET SCHEMA = 'hotel' -- Este exemplo produz um erro, porque SQLID -- no permitido sem CURRENT SET SQLID hotel -- Este exemplo define o esquema como o ID do usurio corrente SET CURRENT SCHEMA USER // Abaixo est um exemplo da utilizao de SET SCHEMA em um programa Java PreparedStatement ps = conn.PrepareStatement("set schema ?"); ps.setString(1,"HOTEL"); ps.executeUpdate(); ... fazer alguma coisa ps.setString(1,"APP"); ps.executeUpdate(); ps.setString(1,"app"); //erro - a cadeia de caracteres diferencia // letras maisculas e minsculas; app no ser encontrado ps.setNull(1, Types.VARCHAR); //erro - no permitido nulo Instruo SET CURRENT ISOLATION

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.

43

Manual de Referncia do Derby

A emisso deste comando efetiva a transao corrente, o que consistente com o mtodo java.sql.Connection.setTransactionLevel. 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 }

SET ISOLATION SERIALIZABLE;

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. As restries de coluna incluem: NOT NULL Especifica que a coluna no pode conter valores nulos (no pode ser dado nome a restries deste tipo).

44

Manual de Referncia do Derby

PRIMARY KEY Especifica a coluna que identifica unicamente uma linha da tabela. A coluna identificada deve ser definida como NOT NULL. Note: Se for tentado adicionar uma chave primria utilizando a instruo ALTER TABLE, e alguma coluna includa na chave primria contiver valores nulos, ser gerado um erro e a chave primria no ser adicionada. Para obter mais informaes deve ser consultada a Instruo ALTER TABLE. UNIQUE Especifica que os valores na coluna devem ser nicos. No so permitidos valores nulos. FOREIGN KEY Especifica que os valores na coluna devem corresponder a valores em uma coluna de chave primria ou de chave nica referenciada, ou que so nulos. CHECK Especifica regras para os valores da coluna. As restries de tabela incluem: PRIMARY KEY Especifica a coluna ou colunas que identificam unicamente uma linha da tabela. No so permitidos valores nulos. UNIQUE Especifica que os valores nas colunas devem ser nicos. As colunas identificadas devem ser definidas como NOT NULL. FOREIGN KEY Especifica que os valores nas colunas devem corresponder a valores em colunas de uma chave primria ou chave nica referenciada, ou que so nulos. Note: Se a chave estrangeira for formada por vrias colunas, e se alguma coluna for nula, toda a chave ser considerada nula. A insero ser permitida no importando o que esteja presente nas colunas no-nulas. CHECK Especifica diversas regras para os valores na tabela. As restries de coluna e restries de tabela possuem a mesma funo; a diferena onde so especificadas. As restries de tabela permitem especificar mais de uma coluna na definio da restrio PRIMARY KEY, UNIQUE, CHECK e FOREIGN KEY. As restries no nvel-de-coluna (exceto as restries de verificao) fazem referncia a apenas uma coluna. 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.

45

Manual de Referncia do Derby

A tabela pode ter no mximo uma restrio PRIMARY KEY, mas pode ter vrias restries UNIQUE. Restries de chave estrangeira As chaves estrangeiras fornecem um meio de impor a integridade referencial de um banco de dados. A chave estrangeira uma coluna, ou grupo de colunas, dentro da tabela que fazem referncia a uma chave de alguma outra tabela (ou algumas vezes, embora raramente, mesma tabela). A chave estrangeira deve incluir sempre colunas cujos tipos correspondem exatamente aos tipos das colunas da restrio de chave primria ou de unicidade referenciada. Em uma restrio de chave estrangeira no nvel-de-tabela, para a qual so especificadas as colunas da tabela que compem a restrio, a mesma coluna no pode ser usada mais de uma vez. Se houver uma lista de colunas na EspecificaoReferencias (lista das colunas na tabela referenciada), esta lista dever corresponder a uma restrio de chave primria ou a uma restrio de unicidade da tabela referenciada. A EspecificaoReferencias pode omitir a lista de colunas da tabela referenciada, se esta tabela possuir uma chave primria declarada. Se no houver uma lista de colunas na EspecificaoReferencias, e a tabela referenciada no possuir uma chave primria, ser lanada uma exceo de instruo (Isto significa que se a tabela referenciada possuir apenas chaves nicas, necessrio incluir a lista de colunas na EspecificaoReferencias). A restrio de chave estrangeira est satisfeita quando h um valor correspondente na coluna de unicidade ou de chave primria correspondente. Se a chave estrangeira for composta por vrias colunas, o valor da chave estrangeira ser considerado nulo quando qualquer uma de suas colunas tiver o valor nulo. Note: possvel que uma chave estrangeira formada por vrias colunas permita que uma de suas colunas contenha um valor para o qual no exista valor correspondente nas colunas referenciadas, de acordo com o padro SQL-92. Para evitar esta situao, devem ser criadas restries NOT NULL em todas as colunas da chave estrangeira. Restries de chave estrangeira e a DML Quando feita uma insero ou atualizao em uma tabela que possui uma restrio de chave estrangeira habilitada, o Derby verifica se a linha no viola a restrio de chave estrangeira procurando a chave referenciada correspondente na tabela referenciada. Se a restrio no for satisfeita, o Derby rejeitar a insero ou a atualizao atravs de uma exceo de instruo. 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. O Derby realiza as verificaes de restrio no momento em que a instruo executada, e no quando a transao efetivada. 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 46

Manual de Referncia do Derby

KEY, no necessrio criar ndices nestas colunas para melhorar o desempenho, o Derby j ter criado o ndice. Consulte ndices e restries. Estes ndices ficam disponveis para o otimizador para a otimizao de comandos (consulte a Instruo CREATE INDEX), e possuem nomes gerados pelo sistema. No permitido remover um ndice de apoio atravs da instruo DROP INDEX; necessrio remover a restrio ou a tabela. 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. Requisitos da condio de procura Se a restrio de verificao for especificada como parte da definio-da-coluna, a referncia a coluna somente poder ser feita para a mesma coluna. As restries de verificao especificadas como parte da definio da tabela, podem possuir referncia a colunas que identificam colunas definidas anteriormente na instruo CREATE TABLE. A condio de procura deve retornar sempre o mesmo valor quando for aplicada aos mesmos valores. Portanto, no pode conter: Parmetros dinmicos (?) Funes de Data/Hora (CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP) Subconsultas Funes de usurio (tal como USER, SESSION_USER, CURRENT_USER) 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. A regra de atualizao ou de excluso da restrio referencial especificada quando a restrio referencial definida. A regra de atualizao aplicada quando uma linha da tabela me ou da tabela dependente atualizada. As escolhas so NO ACTION e RESTRICT. 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. Se a regra de atualizao for NO ACTION, o Derby verificar as tabelas dependentes com relao s restries de chave estrangeira aps todas as excluses terem sido executadas, mas antes dos gatilhos serem executados. Se alguma linha de tabela dependente violar a restrio de chave estrangeira, a instruo ser rejeitada. 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 47

Manual de Referncia do Derby

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 tabela me, a ao especificada ser aplicada, por sua vez, s suas tabelas dependentes. As escolhas so NO ACTION, RESTRICT, CASCADE e SET NULL. SET NULL somente poder ser especificada quando alguma coluna da chave estrangeira permitir valores nulos. Se a regra de excluso for: NO ACTION, o Derby verificar as tabelas dependentes com relao s restries referenciais aps todas as excluses terem sido executadas, mas antes dos gatilhos serem executados. Se alguma linha da tabela dependente violar a restrio de chave estrangeira, a instruo ser rejeitada. RESTRICT, o Derby verificar as tabelas dependentes com relao s chaves estrangeiras. Se alguma linha da tabela dependente violar a restrio de chave estrangeira, a transao ser desfeita. CASCADE, a operao de excluso ser propagada para a tabela dependente (e para as dependentes desta tabela, caso se aplique). 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 (

48

Manual de Referncia do Derby

ENVIO DESTINO ASSUNTO KEY, TEXTO_NOTA );

TIMESTAMP, CHAR(8), CHAR(64) NOT NULL CONSTRAINT PK_CAIXA_SADA PRIMARY VARCHAR(3000)

-- a definio de chave primria no nvel-de-tabela permite -- incluir duas colunas na definio da chave primria: CREATE TABLE SAMP.AGENDA ( COD_CLASSE CHAR(7) NOT NULL, DIA SMALLINT NOT NULL, INCIO TIME, FIM TIME, PRIMARY KEY (COD_CLASSE, DIA) ); -- Uso de uma restrio no nvel-de-coluna para verificao aritmtica. -- Uso de uma restrio no nvel-de-tabela para ter certeza que os -- impostos do empregado no so maiores que os bnus. CREATE TABLE SAMP.EMP ( NUM_EMP CHAR(6) NOT NULL CONSTRAINT PK_EMP PRIMARY KEY, NOME CHAR(12) NOT NULL, INICIAL_MEIO VARCHAR(12) NOT NULL, SOBRENOME VARCHAR(15) NOT NULL, SALRIO DECIMAL(9,2) CONSTRAINT VERIF_SAL CHECK (SALRIO >= 10000), BNUS DECIMAL(9,2), IMPOSTOS DECIMAL(9,2), CONSTRAINT VERIF_BNUS CHECK (BNUS > IMPOSTOS) ); -- Uso de uma restrio de verificao para permitir -- apenas as abreviaturas apropriadas para as refeies CREATE TABLE VOS ( ID_VO CHAR(6) NOT NULL , NMERO_SEGMENTO INTEGER NOT NULL , AEROPORTO_ORIGEM CHAR(3), HORA_PARTIDA TIME, AEROPORTO_DESTINO CHAR(3), HORA_CHEGADA TIME, REFEIO CHAR(1) CONSTRAINT VERIF_REFEIO CHECK (REFEIO IN ('B', 'L', 'D', 'S')), PRIMARY KEY (ID_VO, NMERO_SEGMENTO) ); CREATE TABLE METROPOLITANO ( ID_HOTEL INT NOT NULL CONSTRAINT PK_HOTIS PRIMARY KEY, NOME_HOTEL VARCHAR(40) NOT NULL, ID_CIDADE INT CONSTRAINT FK_METRO REFERENCES CIDADES ); -- criao de uma tabela com uma restrio de chave primria -- e uma restrio de chave estrangeira no nvel-de-tabela CREATE TABLE VOS_DISP ( ID_VO CHAR(6) NOT NULL, NMERO_SEGMENTO INT NOT NULL, DATA_VO DATE NOT NULL, ASSENTOS_ECONMICOS_OCUPADOS INT, ASSENTOS_EXECUTIVOS_OCUPADOS INT, ASSENTOS_PRIMEIRA_CLASSE_OCUPADOS INT, CONSTRAINT PK_VOS_DISP PRIMARY KEY (ID_VO, NMERO_SEGMENTO), CONSTRAINT FK_VOS FOREIGN KEY (ID_VO, NMERO_SEGMENTO)

49

Manual de Referncia do Derby

REFERENCES VOS (ID_VO, NMERO_SEGMENTO) ); -- adicionar uma restrio de unicidade a uma coluna ALTER TABLE SAMP.PROJETO ADD CONSTRAINT UNQ_PROJ UNIQUE (NOME_PROJ); -- criar uma tabela cuja coluna ID_CIDADE faa referncia -- chave primria da tabela CIDADES utilizando uma -- restrio de chave estrangeira no nvel-de-coluna CREATE TABLE CONDOMNIOS ( ID_COND INT NOT NULL CONSTRAINT PK_HOTIS PRIMARY KEY, NOME_COND VARCHAR(40) NOT NULL, ID_CIDADE INT CONSTRAINT FK_CIDADE REFERENCES CIDADES ON DELETE CASCADE ON UPDATE RESTRICT );

Sistema de dependncia de instruo As instrues INSERT e UPDATE dependem de todas as restries da tabela de destino. As instrues DELETE dependem das restries de unicidade, chave primria e de chave estrangeira. Estas instrues so invalidadas quando adicionada ou removida uma restrio na tabela de destino.
restrio no nvel-de-coluna { 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 REFERENCES nome-da-tabela [ ( nome-de-coluna-simples [ , nome-de-coluna-simples ]* ) ] [ ON DELETE {NO ACTION | RESTRICT | CASCADE | SET NULL}] [ ON UPDATE {NO ACTION | RESTRICT }] | [ ON UPDATE {NO ACTION | RESTRICT }] [ ON DELETE {NO ACTION | RESTRICT | CASCADE | SET NULL}]

50

Manual de Referncia do Derby

CondioProcura

A CondioProcura qualquer Expresso booleana que atenda aos requisitos especificados nos Requisitos da condio de procura. Quando no especificado o nome-da-restrio, o Derby gera um nome de restrio nico (tanto para a restrio de coluna quanto para a restrio de tabela).

Instruo DECLARE GLOBAL TEMPORARY TABLE


A instruo DECLARE GLOBAL TEMPORARY TABLE define uma tabela temporria para a conexo corrente. Estas tabelas no residem nos catlogos do sistema, e no so persistentes. As tabelas temporrias existem somente durante a conexo em que foram declaradas, no podendo ser referenciadas de fora da conexo. Ao fechar a conexo, as linhas da tabela so excludas e a descrio em-memria da tabela temporria removida. As tabelas temporrias so teis quando: a estrutura da tabela no conhecida antes de utilizar o aplicativo. os outros usurios no necessitam da mesma estrutura de tabela. os dados da tabela temporria so necessrios durante o uso do aplicativo. a tabela pode ser declarada e removida sem manter bloqueios no catlogo do sistema. 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

51

Manual de Referncia do Derby

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 Especifica a ao realizada na tabela temporria global quando uma operao de desfazer realizada. Quando realizada uma operao de ROLLBACK (ou ROLLBACK TO SAVEPOINT), se a tabela foi criada na unidade de trabalho (ou no ponto de salvamento), a tabela ser removida. Se a tabela foi removida na unidade de trabalho (ou no ponto de salvamento), a tabela ser restaurada sem nenhuma linha. ON ROLLBACK DELETE ROWS Este o valor padro para NOT LOGGED. NOT LOGGED [ON ROLLBACK DELETE ROWS ]] especifica a ao a ser realizada na tabela temporria global quando realizada uma operao de ROLLBACK (ou ROLLBACK TO SAVEPOINT). Se os dados da tabela foram modificados, todas as linhas sero excludas. 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.

52

Manual de Referncia do Derby

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 Restries das tabelas temporrias globais declaradas As tabelas temporrias no podem ser especificadas nas seguintes instrues: ALTER TABLE CREATE SYNONYM CREATE TRIGGER CREATE VIEW LOCK RENAME As tabelas temporrias no pode ser especificadas nas restries referenciais. No h suporte para restrio de verificao nas colunas. No podem ser utilizados os seguintes tipos de dado nas tabelas temporrias globais declaradas: BLOB CLOB LONG VARCHAR As tabelas temporrias no podem ser referenciadas por uma instruo-SQL-engatilhada. Se uma instruo realizando uma insero, atualizao ou excluso em uma tabela temporria encontrar um erro, todas as linhas da tabela sero excludas. Restries especficas do Derby O Derby no d suporte em tabelas temporrias a: ndices sinnimos, gatilhos e vises em tabelas no esquema SESSION (incluindo as tabelas fsicas e as tabelas temporrias) LOCK TABLE restries e chaves primrias especificao-de-coluna-gerada importao em tabelas temporrias As instrues fazendo referncia a tabelas e vises no esquema SESSION no ficam no cache.

Instruo DELETE
Sintaxe
{ DELETE FROM nome-da-tabela [WHERE clusula] | DELETE FROM nome-da-tabela WHERE CURRENT OF }

A primeira forma sinttica, chamada de excluso procurada, exclui todas as linhas identificadas pelo nome da tabela e pela clusula WHERE. 53

Manual de Referncia do Derby

A segunda forma sinttica, chamada de excluso posicionada, exclui a linha corrente de um cursor atualizvel aberto. Se no houver uma linha corrente, ou se a linha no mais satisfizer o comando do cursor, ser lanada uma exceo. Para obter mais informaes sobre cursores atualizveis deve ser consultada a Instruo SELECT. Exemplos
DELETE FROM SAMP.CAIXA_ENTRADA; stmt.executeUpdate("DELETE FROM SAMP.CAIXA_ENTRADA WHERE CURRENT OF " + resultSet.getCursorName())

Uma instruo de excluso procurada depende da tabela sendo atualizada, todos os seus conglomerados (unidades de armazenamento como heaps e ndices), e todas as outras tabelas citadas na clusula WHERE. Uma instruo CREATE ou DROP INDEX na tabela de destino de uma instruo de excluso procurada preparada, invalida a instruo de excluso procurada preparada. A instruo de excluso posicionada depende do cursor e de todas as tabelas referenciadas pelo cursor. A excluso posicionada pode ser compilada mesmo que o cursor ainda no tenha sido aberto. Entretanto, a remoo do cursor aberto atravs do mtodo close do JDBC invalida a excluso posicionada. Uma instruo CREATE ou DROP INDEX na tabela de destino de uma excluso posicionada preparada, invalida a instruo de excluso posicionada preparada.

Clusula FOR UPDATE


A clusula FOR UPDATE uma parte opcional da Instruo SELECT. A clusula FOR UPDATE especifica se o ResultSet de uma Instruo SELECT simples, que atende os requisitos para um cursor, atualizvel ou no. Para obter mais informaes sobre poder ser atualizvel, deve ser consultado Requisitos para cursores atualizveis e ResultSets atualizveis. Sintaxe
FOR { READ ONLY | FETCH ONLY | UPDATE [ OF nome-de-coluna-simples [ , nome-de-coluna-simples]* ] }

nome-de-coluna-simples faz referncia aos nomes visveis para a tabela especificada na clusula FROM da consulta subjacente. 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.
SELECT RECEBIDO, ORIGEM, ASSUNTO, TEXTO_NOTA FROM SAMP.CAIXA_ENTRADA FOR UPDATE;

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.

54

Manual de Referncia do Derby

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 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. Normalmente a clusula GROUP BY utilizada junto com expresses de agregao. 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. Os ItensSelecionados em uma ExpressoSeleo com clusula GROUP BY devem conter somente agregaes ou colunas de agrupamento.
-- calcular o TEMPO_VO mdio agrupado por aeroporto SELECT AVG (TEMPO_VO), AEROPORTO_ORIGEM FROM VOS GROUP BY AEROPORTO_ORIGEM SELECT MAX(CIDADE), REGIO FROM CIDADES, PASES WHERE CIDADES.COD_ISO_PAS = PASES.COD_ISO_PAS GROUP BY REGIO -- agrupar por um SMALLINT SELECT ID, AVG(SALRIO) FROM SAMP.EQUIPES GROUP BY ID -- Obter as colunas SALRIO_MDIO, NUM_EMP e NUM_DEP

55

Manual de Referncia do Derby

-- utilizando a clusula AS -- Agrupar pela coluna DEP_TRAB utilizando o nome de -- correlao OUTROS SELECT OUTROS.DEP_TRAB AS NUM_DEP, AVG(OUTROS.SALRIO) AS SALRIO_MDIO, COUNT(*) AS NUM_EMP FROM SAMP.EMPREGADOS OUTROS GROUP BY OUTROS.DEP_TRAB;

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

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;

As agregaes na clusula HAVING no precisam aparecer na lista de seleo. Se a clusula HAVING possuir uma subconsulta, a subconsulta poder fazer referncia ao bloco de consulta externo se, e somente se, fizer referncia a uma coluna de agrupamento.
-- Descobrir o nmero total de assentos econmicos -- ocupados no vo, agrupado por linha area, -- somente quando o grupo possuir pelo menos 2 linhas. SELECT SUM(ASSENTOS_ECONMICOS_OCUPADOS), LINHA_AREA_CHEIA FROM VOS_DISPONIBILIDADE, LINHAS_AREAS WHERE SUBSTR(VOS_DISPONIBILIDADE.ID_VO, 1, 2) = LINHA_AREA GROUP BY LINHA_AREA_CHEIA HAVING COUNT(*) > 1

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.

56

Manual de Referncia do Derby

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;

A clusula ON pode fazer referncia a tabelas que no esto sendo juntadas, e no obrigada a fazer referncia a nenhuma das tabelas sendo juntadas (embora tipicamente o faa).
-- Juno das tabelas ATIV_EMP e EMPREGADOS -- selecionar todas as colunas da tabela ATIV_EMP e -- adicionar o sobrenome do empregado (LTIMO_NOME) da tabela -- EMPREGADOS a todas as linhas do resultado SELECT SAMP.ATIV_EMP.*, LTIMO_NOME FROM SAMP.ATIV_EMP JOIN SAMP.EMPREGADO ON ATIV_EMP.NUM_EMP = EMPREGADOS.NUM_EMP; -- Juntar as tabelas EMPREGADOS e DEPARTAMENTOS, -- selecionar o nmero do empregado (NUM_EMP), -- o sobrenome do empregado (LTIMO_NOME), -- o nmero do departamento (DEP_TRAB na tabela EMPREGADOS e -- NUM_DEP na tabela DEPARTAMENTOS) -- e o nome do departamento (NOME_DEP) -- de todos os empregados nascidos (DATA_NASC) antes de 1930. SELECT NUM_EMP, LTIMO_NOME, DEP_TRAB, NOME_DEP FROM SAMP.EMPREGADOS JOIN SAMP.DEPARTAMENTOS ON DEP_TRAB = NUM_DEP AND YEAR(DATA_NASC) < 1930; -- Outro exemplo de "gerar" novos valores de dado, -- utilizando uma consulta que seleciona da clusula VALUES -- (que uma forma alternativa de FULLSELECT). SELECT * FROM (VALUES (3, 4), (1, 5), (2, 6)) AS TABELA1_VALORES(C1, C2) JOIN (VALUES (3, 2), (1, 2),(0, 3)) AS TABELA2_VALORES(C1, C2) ON TABELA1_VALORES.C1 = TABELA2_VALORES.C1; O que resulta em: C1 |C2 |C1 |2 ----------------------------------------------3 |4 |3 |2 1 |5 |1 |2 -- Listar todos os departamentos, juntamente com o -- nmero do empregado e o ltimo nome do gerente SELECT NUM_DEP, NOME_DEP, NUM_EMP, LTIMO_NOME FROM DEPARTAMENTOS INNER JOIN EMPREGADOS ON NUM_GER = NUM_EMP; -- Listar todos os nmeros do empregado e ltimo nome, juntamente -- com o nmero do empregado e ltimo nome de seus gerentes SELECT E.NUM_EMP, E.LTIMO_NOME, M.NUM_EMP, M.LTIMO_NOME FROM EMPREGADOS E INNER JOIN DEPARTAMENTOS INNER JOIN EMPREGADOS M ON NUM_GER = M.NUM_EMP ON E.DEP_TRAB = NUM_DEP;

Instruo INSERT
57

Manual de Referncia do Derby

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.
INSERT INTO PASES VALUES ('Taiwan', 'TW', 'sia'); -- Inserir um novo departamento na tabela DEPARTAMENTOS, -- sem atribuir gerente ao novo departamento INSERT INTO DEPARTAMENTOS (NUM_DEP, NOME_DEP, ADMRDEPT) VALUES ('E31', 'ARQUITETURA', 'E01'); -- Inserir dois novos departamentos na tabela DEPARTAMENTOS -- utilizando uma instruo, como no exemplo anterior, -- sem atribuir gerente aos novos departamentos. INSERT INTO DEPARTAMENTOS (NUM_DEP, NOME_DEP, ADMRDEPT) VALUES ('B11', 'COMPRAS', 'B01'), ('E41', 'ADMINISTRAO DE BANCO DE DADOS', 'E01'); -- Criar a tabela temporria MA_ATIV_EMP com as mesmas -- colunas da tabela ATIV_EMP. -- Carregar a tabela MA_ATIV_EMP com as linhas da tabela ATIV_EMP -- onde o nmero do projeto (NUM_PROJ) -- comea pelas letras 'MA'. CREATE TABLE MA_ATIV_EMP ( NUM_EMP CHAR(6) NOT NULL, NUM_PROJ CHAR(6) NOT NULL, ACTNO SMALLINT NOT NULL, EMPTIME DEC(5,2), EMSTDATE DATE, EMENDATE DATE ); INSERT INTO MA_ATIV_EMP SELECT * FROM ATIV_EMP WHERE SUBSTR(NUM_PROJ, 1, 2) = 'MA'; -- Inserir o valor DEFAULT para a coluna LOCALIZAO INSERT INTO DEPARTAMENTOS VALUES ('E31', 'ARQUITETURA', '00390', 'E01', DEFAULT);

Sistema de dependncia de instruo A instruo INSERT depende da tabela onde est sendo feita a insero, todos os seus conglomerados (unidades de armazenamento como heaps e ndices), e todas as outras 58

Manual de Referncia do Derby

tabelas citadas na consulta. Qualquer instruo que cria ou remove um ndice ou uma restrio da tabela de destino de uma instruo INSERT preparada, invalida a instruo INSERT preparada.

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. Expresses de juno e otimizao de consulta Para obter informaes sobre quais tipos de juno so otimizadas, consulte Ajuste do Derby.

LEFT OUTER JOIN


LEFT OUTER JOIN uma Operao JOIN que permite especificar a clusula de juno. Preserva as linhas sem correspondncia da primeira tabela (esquerda), juntando-as com uma linha nula na forma da segunda tabela (direita). Sintaxe
ExpressoTabela LEFT [ OUTER ] JOIN ExpressoTabela { ON ExpressoBooleana }

O escopo das expresses na clusula ON inclui as tabelas correntes, e as tabelas nos blocos de consulta externos ao SELECT corrente. A clusula ON pode fazer referncia a tabelas que no esto sendo juntadas, e no obrigada a fazer referncia a nenhuma das tabelas sendo juntadas (embora tipicamente o faa).
--correspondncia entre cidades e pases SELECT CIDADES.PAS, REGIO FROM PASES LEFT OUTER JOIN CIDADES ON ID_CIDADE=ID_CIDADE

59

Manual de Referncia do Derby

WHERE REGIO = 'sia'; -- uso da sintaxe sinnimo, LEFT JOIN, para obter exatamente -- os mesmos resultados da exemplo acima SELECT CIDADES.PAS, REGIO FROM PASES LEFT JOIN CIDADES ON ID_CIDADE=ID_CIDADE WHERE REGIO = 'sia'; -- Juno das tabelas EMPREGADOS e DEPARTAMENTOS, -- selecionar o nmero do empregado (NUM_EMP), -- o sobrenome do empregado (LTIMO_NOME), -- o nmero do departamento (DEP_TRAB na tabela EMPREGADOS e -- NUM_DEP na tabela DEPARTAMENTOS) -- e o nome do departamento (NOME_DEP) -- de todos os empregados nascidos (DATA_NASC) antes de 1930 SELECT NUM_EMP, LTIMO_NOME, DEP_TRAB, NOME_DEP FROM SAMP.EMPREGADOS LEFT OUTER JOIN SAMP.DEPARTAMENTOS ON DEP_TRAB = NUM_DEP AND YEAR(DATA_NASC) < 1930; -- Listar todos os departamentos, juntamente com o -- nmero do empregado e o ltimo nome do gerente, -- incluindo os departamentos sem gerente SELECT NUM_DEP, NOME_DEP, NUM_EMP, LTIMO_NOME FROM DEPARTAMENTOS LEFT OUTER JOIN EMPREGADOS ON NUM_GER = NUM_EMP;

Instruo LOCK TABLE


Permite ao usurio obter explicitamente um bloqueio de tabela, exclusivo ou compartilhado, na tabela especificada. O bloqueio da tabela permanece at o trmino da transao corrente. O bloqueio explcito da tabela til para: evitar a sobrecarga devido a vrios bloqueios na tabela (em outras palavras, escalada de bloqueio iniciada pelo usurio) evitar impasses (deadlocks) No possvel bloquear tabelas do sistema com esta instruo. 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. Se o bloqueio especificado no puder ser obtido porque outra conexo j possui um bloqueio na tabela, ser lanada uma excesso no nvel-de-instruo (SQLState X0X02) aps ser esgotado o tempo limite de impasse.
-- bloquear toda a tabela no modo compartilhado -- para evitar um nmero grande de bloqueios de linha LOCK TABLE VOS IN SHARE MODE; SELECT * FROM VOS

60

Manual de Referncia do Derby

WHERE AEROPORTO_ORIGEM > 'OOO'; -- bloquear toda a tabela no modo exclusivo -- para uma transao que ir atualizar muitas linhas, -- mas onde nenhuma instruo atualizar isoladamente um -- nmero suficiente de linhas para obter um bloqueio -- da tabela no modo exclusivo. -- No sistema de bloqueio no nvel-de-linha, a transao -- iria requerer um nmero grande de bloqueios e poderia -- causar um impasse. LOCK TABLE DISPONIBILIDADE_HOTEL IN EXCLUSIVE MODE; UPDATE DISPONIBILIDADE_HOTEL SET QUARTOS_RESERVADOS = (QUARTOS_RESERVADOS + 2) WHERE ID_HOTEL = 194 AND DATA_DE_RESERVA = DATE('1998-04-10'); UPDATE DISPONIBILIDADE_HOTEL SET QUARTOS_RESERVADOS = (QUARTOS_RESERVADOS + 2) WHERE ID_HOTEL = 194 AND DATA_DE_RESERVA = DATE('1998-04-11'); UPDATE DISPONIBILIDADE_HOTEL SET QUARTOS_RESERVADOS = (QUARTOS_RESERVADOS + 2) WHERE ID_HOTEL = 194 AND DATA_DE_RESERVA = DATE('1998-04-12'); UPDATE DISPONIBILIDADE_HOTEL SET QUARTOS_RESERVADOS = (QUARTOS_RESERVADOS + 2) WHERE ID_HOTEL = 194 AND DATA_DE_RESERVA = DATE('1998-04-12'); -- se a transao necessitar bloquear a tabela antes de -- atualiz-la, dever obter um bloqueio exclusivo antes -- de selecionar para evitar impasses. LOCK TABLE PESSOAS IN EXCLUSIVE MODE; SELECT MAX(ID_PESSOA) + 1 FROM PESSOAS; -- INSERT INTO PESSOAS . . .

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 ] ] *

A PosioColuna um valor inteiro que identifica o nmero da coluna no ItemSeleo na consulta subjacente da Instruo SELECT. A PosioColuna deve ser maior que zero, e no pode ser maior que o nmero de colunas na tabela de resultado. Em outras palavras, se for desejado ordenar pela posio da coluna, a coluna dever estar presente na lista de seleo. O nome-da-coluna se refere aos nomes visveis dos ItensSelecionados na consulta subjacente da Instruo SELECT. O nome da coluna de ordenao no precisa estar na lista de seleo. 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. A clusula ORDER BY impede que a instruo SELECT se torne um cursor atualizvel (Para obter mais informaes deve ser consultado Requisitos para cursores atualizveis e ResultSets atualizveis.)

61

Manual de Referncia do Derby

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.
-- ordenar pelo nome de correlao NAO SELECT NOME_CIDADE, PAS AS NAO FROM CIDADES ORDER BY NAO;

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 }

Pode-se colocar parnteses arbitrariamente em torno das consultas, ou utilizar parnteses para controlar a ordem de avaliao das operaes INTERSECT, EXCEPT e UNION. Estas operaes so avaliadas da esquerda para a direita quando no existem parnteses presentes, com exceo das operaes INTERSECT, que so avaliadas antes das operaes de UNION e EXCEPT. Linhas duplicadas nos resultados de UNION, INTERSECT e EXCEPT ALL As palavras chave ALL e DISTINCT determinam se as linhas duplicadas so eliminadas do resultado da operao. Se for especificada a palavra chave DISTINCT, ento o resultado no ter linhas duplicadas. Se for especificada a palavra chave ALL, ento podero existir linhas duplicadas no resultado, dependendo da existncia de linhas duplicadas na entrada. DISTINCT o padro, portanto se no for especificado nem ALL nem DISTINCT as linhas duplicadas sero eliminadas. Por exemplo, UNION constri um ResultSet intermedirio com todas as linhas das duas consultas, e elimina as linhas duplicadas antes de retornar as linhas remanescentes. UNION ALL retorna todas as linhas das duas consultas como resultado. 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;

62

Manual de Referncia do Derby

-- 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'

63

Manual de Referncia do Derby

FROM ATIV_EMP WHERE NUM_PROJ IN('MA2100', 'MA2110', 'MA2112') UNION VALUES ('NEWAAA', 'nova'), ('NEWBBB', 'nova');

RIGHT OUTER JOIN


RIGHT OUTER JOIN uma Operao JOIN que permite especificar a clusula de juno. Preserva as linhas sem correspondncia da segunda tabela (direita), juntando-as com uma linha nula na forma da primeira tabela (esquerda). (A LEFT OUTER JOIN B) equivalente a (B RIGHT OUTER JOIN A), com as colunas em uma ordem diferente. Sintaxe
ExpressoTabela RIGHT [ OUTER ] JOIN ExpressoTabela { ON ExpressoBooleana }

O escopo das expresses na clusula ON inclui as tabelas correntes, e as tabelas nos blocos de consulta externos ao SELECT corrente. A clusula ON pode fazer referncia a tabelas que no esto sendo juntadas, e no obrigada a fazer referncia a nenhuma das tabelas sendo juntadas (embora tipicamente o faa).
-- obter todos os pases e cidades correspondentes, -- incluindo os pases sem nenhuma cidade SELECT NOME_CIDADE, CIDADES.PAS FROM CIDADES RIGHT OUTER JOIN PASES ON CIDADES.COD_ISO_PAS = PASES.COD_ISO_PAS; -- obter todos pases da frica e as cidades correspondentes, -- incluindo os pases sem cidades SELECT NOME_CIDADE, CIDADES.PAS FROM CIDADES RIGHT OUTER JOIN PASES ON CIDADES.COD_ISO_PAS = PASES.COD_ISO_PAS; WHERE PASES.REGIO = 'frica'; -- uso da sintaxe sinnimo, RIGHT JOIN, para obter exatamente -- os mesmos resultados do exemplo acima SELECT NOME_CIDADE, CIDADES.PAS FROM CIDADES RIGHT JOIN PASES ON CIDADES.COD_ISO_PAS = PASES.COD_ISO_PAS WHERE PASES.REGIO = 'frica'; -- a ExpressoTabela pode ser uma OperaoJuno. Portanto, -- podem haver vrias operaes de juno na clusula FROM -- Listar todos os nmeros e ltimo nome dos empregados, -- juntamente com os nmeros e ltimo nome de seus gerentes SELECT E.NUM_EMP, E.LTIMO_NOME, M.NUM_EMP, M.LTIMO_NOME FROM EMPREGADOS E RIGHT OUTER JOIN DEPARTAMENTOS RIGHT OUTER JOIN EMPREGADOS M ON NUM_GER = M.NUM_EMP ON E.DEP_TRAB = NUM_DEP;

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. Algumas vezes tambm chamada de expresso de subconsulta. Sintaxe 64

Manual de Referncia do Derby

(Consulta) -- a mdia sempre retorna um nico valor, -- portanto a subconsulta uma SubconsultaEscalar SELECT NOME, COMISS FROM EQUIPE WHERE EXISTS (SELECT AVG(BNUS + 800) FROM EMPREGADOS WHERE COMISS < 5000 AND EMPREGADOS.LTIMO_NOME = UPPER(EQUIPES.NOME) ); -- Introduzir uma maneira de "gerar" novos valores de dados, -- utilizando uma consulta que seleciona da clusula VALUES -- (que uma forma alternativa de FULLSELECT). -- Esta consulta mostra como pode ser criada uma tabela chamada "X", -- possuindo duas colunas "R1" e "R2" e uma linha de dados. SELECT R1,R2 FROM (VALUES('GRUPO 1','GRUPO 2')) AS X(R1,R2);

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 SELECT contm uma lista de expresses e um quantificador opcional que aplicado aos resultados da Clusula FROM e da Clusula WHERE. Se for especificado DISTINCT, somente ser includa no resultado uma cpia de qualquer valor linha. Os nulos so considerados duplicados entre si para as finalidades do DISTINCT. Se no for especificado um quantificador, ou se for especificado ALL, nenhuma linha ser removida do resultado na aplicao da clusula SELECT (ALL o padro). O ItemSeleo projeta um ou mais valores coluna de resultado na tabela resultado sendo construda na ExpressoSeleo. O resultado da Clusula FROM o produto cruzado dos itens do FROM. A Clusula WHERE pode qualificar ainda mais este resultado. 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. A clusula GROUP BY agrupa as linhas do resultado em subconjuntos que possuem valores correspondentes em uma ou mais colunas. As clusulas GROUP BY so utilizadas normalmente com agregaes.

65

Manual de Referncia do Derby

Caso haja uma clusula GROUP BY, a clusula SELECT dever conter apenas agregaes ou colunas de agrupamento. Se for desejado incluir uma coluna no agrupada na clusula SELECT, esta coluna dever ser includa em uma expresso de 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. A clusula HAVING restringe a tabela agrupada, especificando uma condio de procura (muito semelhante clusula WHERE) que pode fazer referncia apenas s colunas de agrupamento ou agregaes do escopo corrente. A clusula HAVING aplicada a cada grupo da tabela agrupada. Se a clusula HAVING for avaliada como TRUE, a linha ser retida para processamento adicional. Se a clusula HAVING for avaliada como FALSE ou NULL, a linha ser desprezada. Se houver uma clusula HAVING mas no houver GROUP BY, a tabela ser agrupada implicitamente em um grupo para toda a tabela. O Derby processa a ExpressoSeleo na seguinte ordem: Clusula FROM Clusula WHERE GROUP BY (ou GROUP BY implcito) Clusula HAVING Clusula SELECT O resultado da ExpressoSeleo sempre uma tabela. Quando a consulta no possui uma clusula FROM (quando est sendo construdo um valor, e no obtendo dados de uma tabela), utilizada a instruo VALUES, e no a ExpressoSeleo. Por exemplo:
VALUES CURRENT_TIMESTAMP

Consulte Expresso VALUES. O curinga * O * expandido como todas as colunas presentes nas tabelas da clusula FROM associada. nome-da-tabela.* e nome-da-correlao.* so expandidos como todas as colunas da tabela identificada. Esta tabela deve estar listada na clusula FROM associada. Atribuir nomes s colunas Pode ser atribudo um nome a uma coluna do ItemSeleo utilizando a clusula AS. Quando a ExpressoSeleo aparece no operador UNION, INTERSECT ou EXCEPT, os nomes da primeira ExpressoSeleo so usados como os nomes das colunas no resultado da operao. Se uma coluna do ItemSeleo no for uma expresso simples de RefernciaColuna, ou no for dado um nome atravs da clusula AS, ser atribudo para a mesma um nome nico gerado. Estes nomes de colunas so teis em vrios casos: So tornados disponveis no ResultSetMetaData do JDBC. 66

Manual de Referncia do Derby

So utilizados como nomes das colunas na tabela resultante, quando a ExpressoSeleo utilizada como subconsulta de tabela na clusula FROM. So utilizados na clusula ORDER BY como nomes de coluna disponveis para classificao.
-- este exemplo mostra SELECT-FROM-WHERE -- com uma clusula ORDER BY -- e nome-da-correlao para as tabelas SELECT CONSTRAINTNAME, COLUMNNAME FROM SYS.SYSTABLES t, SYS.SYSCOLUMNS col, SYS.SYSCONSTRAINTS cons, SYS.SYSCHECKS checks WHERE t.TABLENAME = 'VOS' AND t.TABLEID = col.REFERENCEID AND t.TABLEID = cons.TABLEID AND cons.CONSTRAINTID = checks.CONSTRAINTID ORDER BY CONSTRAINTNAME; -- Este exemplo mostra a utilizao da clusula DISTINCT SELECT DISTINCT NUM_ATIV FROM ATIV_EMP; -- Este exemplo mostra como mudar o nome de uma expresso. -- Utilizando a tabela EMPREGADOS, -- listar o nmero do departamento (DEP_TRAB) e -- o maior salrio do departamento (SALRIO) com nome mudado para BOSS -- para todos os departamentos cujo salrio mximo seja menor que o -- salrio mdio de todos os outros departamentos. SELECT DEP_TRAB AS DPT, MAX(SALRIO) AS BOSS FROM EMPREGADOS EMP_COR GROUP BY DEP_TRAB HAVING MAX(SALRIO) < (SELECT AVG(SALRIO) FROM EMPREGADOS WHERE NOT DEP_TRAB = EMP_COR.DEP_TRAB) ORDER BY BOSS;

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). A Clusula ORDER BY garante a ordem do ResultSet. A Clusula FOR UPDATE torna o resultado um cursor atualizvel. A instruo SELECT suporta a clusula FOR FETCH ONLY. A clusula FOR FETCH ONLY sinnimo da clusula FOR READ ONLY. Lembre-se: Para se obter um ResultSet atualizvel, deve ser includa a clusula FOR UPDATE com a clusula SELECT. Sintaxe
Consulta [Clusula ORDER BY] [Clusula FOR UPDATE] WITH {RR|RS|CS|UR}

Pode ser definido o nvel de isolamento da instruo SELECT utilizando a sintaxe WITH {RR|RS|CS|UR}.
-- listar o nome da expresso SALRIO+BNUS+COMISS -- como PAGAMENTO_TOTAL, -- e ordenar pelo novo nome PAGAMENTO_TOTAL SELECT PRIMEIRO_NOME, SALRIO+BNUS+COMISS AS PAGAMENTO_TOTAL FROM EMPREGADOS

67

Manual de Referncia do Derby

ORDER BY PAGAMENTO_TOTAL; -- criar um cursor atualizvel atravs da clusula FOR UPDATE -- para atualizar as colunas data de incio (PROJ_DATA_INCIO) e -- data de trmino (PROJ_DATA_FIM) da tabela PROJETO SELECT NUM_PROJ, PROJ_DATA_INCIO, PROJ_DATA_FIM FROM PROJETO FOR UPDATE OF PROJ_DATA_INCIO, PROJ_DATA_FIM; -- definir o nvel de isolamento como RR apenas para esta instruo SELECT * FROM VOS WHERE ID_VO BETWEEN 'AA1111' AND 'AA1112' WITH RR;

A instruo SELECT retorna um ResultSet. O cursor um ponteiro para uma linha especfica do ResultSet. Nos aplicativos Java, todos os ResultSets so cursores. O cursor atualizvel, ou seja, podem ser atualizadas e excludas linhas ao se caminhar atravs do ResultSet, se a instruo SELECT que gerou o cursor e sua consulta subjacente atenderem aos requisitos de poder ser atualizvel, conforme detalhado abaixo. Deve ser utilizada a clusula FOR UPDATE quando se deseja gerar um cursor atualizvel. Note: A clusula ORDER BY permite ordenar os resultados do SELECT. Sem a clusula ORDER BY, os resultados so retornados em ordem aleatria. Se a instruo SELECT atender aos requisitos listados abaixo, os cursores sero atualizveis apenas se for especificado FOR UPDATE na clusula FOR (consulte a Clusula FOR UPDATE). Requisitos para cursores atualizveis e ResultSets atualizveis Somente os cursores simples, com SELECT em uma nica tabela, e os ResultSets FORWARD_ONLY, podem ser atualizveis. A instruo SELECT para ResultSet atualizvel possui a mesma sintaxe que a instruo SELECT para cursor atualizvel. Para gerar cursores atualizveis: A instruo SELECT no pode incluir a clusula ORDER BY. A Consulta subjacente deve ser uma ExpressoSeleo. A ExpressoSeleo da Consulta subjacente no pode incluir: DISTINCT Agregaes Clusula GROUP BY Clusula HAVING A clusula FROM na Consulta subjacente no pode ter: mais de uma tabela qualquer outra coisa alm de um nome de tabela ExpressoSeleo subconsultas 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). Sistema de dependncia de instruo A instruo SELECT depende de todas as tabelas e vises especificadas na consulta, e dos conglomerados (unidades de armazenamento, como heaps e ndices) escolhidos como caminho de acesso para estas tabelas. A instruo CREATE INDEX no invalida a instruo SELECT preparada. A instruo DROP INDEX invalida a instruo SELECT preparada, se o ndice for um caminho de acesso na instruo. Quando o SELECT 68

Manual de Referncia do Derby

inclui vises, tambm depende dos objetos do dicionrio dos quais as vises dependem (consulte a Instruo CREATE VIEW). Toda instruo UPDATE WHERE CURRENT ou DELETE WHERE CURRENT preparada sobre cursor de SELECT depende do SELECT. A remoo do SELECT atravs de uma instruo java.sql.Statement.close invalida UPDATE WHERE CURRENT e DELETE WHERE CURRENT. O SELECT depende de todos os aliases utilizados na consulta. Remover um alis invalida a instruo SELECT preparada, se a instruo utilizar o alis.

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. A Consulta na SubconsultaTabela que aparece no ItemFrom pode conter vrias colunas e retornar vrias linhas. Consulte SubconsultaTabela. Para obter informaes sobre as redefinies do otimizador que podem ser especificadas, consulte Ajuste do Derby. Sintaxe
{ ExpressoTabelaOuViso | Operao JOIN }

-- selecionar de uma expresso de juno SELECT E.NUM_EMP, E.LTIMO_NOME, M.NUM_EMP, M.LTIMO_NOME FROM EMPREGADOS E LEFT OUTER JOIN DEPARTAMENTOS INNER JOIN EMPREGADOS M ON NUM_GER = M.NUM_EMP ON E.DEP_TRAB = NUM_DEP ExpressoTabelaOuViso {nome-da-tabela |nome-da-viso} [ [ AS ] nome-da-correlao [ (nome-de-coluna-simples [ , nome-de-coluna-simples]* ) ] ] ]

69

Manual de Referncia do Derby

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. 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. Quando utilizada com IN ou comparaes quantificadas, deve retornar uma nica coluna. Sintaxe
(Consulta) -- subconsulta utilizada como ExpressoTabela na clusula FROM SELECT TABELA_VOS_VIRTUAL.ID_VO FROM (SELECT ID_VO, AEROPORTO_ORIGEM, AEROPORTO_DESTINO FROM VOS WHERE (AEROPORTO_ORIGEM = 'SFO' OR AEROPORTO_DESTINO = 'SCL') ) AS TABELA_VOS_VIRTUAL -- subconsulta (VALUES expresso) utilizada como uma ExpressoTabela -- na clusula FROM SELECT MINHA_COLUNA1 FROM (VALUES (1, 2), (3, 4)) AS MINHA_TABELA (MINHA_COLUNA1, MINHA_COLUNA2) -- subconsulta com EXISTS SELECT * FROM VOS WHERE EXISTS (SELECT * FROM VOS WHERE AEROPORTO_DESTINO = 'SFO' AND AEROPORTO_ORIGEM = 'GRU') -- subconsulta usada com IN SELECT ID_VO, NMERO_SEGMENTO FROM VOS WHERE ID_VO IN (SELECT ID_VO FROM VOS WHERE AEROPORTO_ORIGEM = 'SFO' OR AEROPORTO_DESTINO = 'SCL') -- subconsulta utilizada com uma comparao quantificada SELECT NOME, COMISS FROM EQUIPES WHERE COMISS > (SELECT AVG(BNUS + 800) FROM EMPREGADOS WHERE COMISS < 5000);

Instruo UPDATE
A instruo UPDATE define o valor na coluna. Pode ser atualizada a linha corrente de um cursor atualizvel aberto. Se no houver linha corrente, ou a linha corrente no satisfizer mais a consulta do cursor, ser lanada um exceo. Sintaxe

70

Manual de Referncia do Derby

{ UPDATE nome-da-tabela SET nome-da-coluna [ , nome-da-coluna [Clusula WHERE] | UPDATE nome-da-tabela SET nome-da-coluna [ , nome-da-coluna WHERE CURRENT OF } = Valor = Valor} ]* = Valor = Valor ]*

A primeira forma sinttica chamada de atualizao procurada. A segunda forma sinttica chamada de atualizao posicionada. Nas atualizaes procuradas, so atualizadas todas as linhas da tabela para as quais a clusula WHERE avaliada como TRUE. Nas atualizaes posicionadas, somente podem ser atualizadas as colunas includas na Clusula FOR UPDATE da instruo SELECT que criou o cursor. Se a instruo SELECT no incluir a clusula FOR UPDATE, o cursor ser apenas-de-leitura, no podendo ser utilizado para atualizaes. A especificao de DEFAULT para o valor atualizado, define o valor da coluna como o valor padro definido nesta tabela.
-- Todos os empregados, exceto o gerente, -- do departamento (DEP_TRAB) 'E21' foram temporariamente -- reatribudos. Indique isto alterando seus cargos (CARGO) -- para NULL, e os valores de seus pagamentos (SALRIO, BNUS, COMISS) -- para zero, na tabela EMPREGADOS. UPDATE EMPREGADOS SET CARGO=NULL, SALRIO=0, BNUS=0, COMISS=0 WHERE DEP_TRAB = 'E21' AND CARGO <> 'GERENTE' -- Promover o cargo (CARGO) de determinado empregado para GERENTE UPDATE EMPREGADOS SET CARGO = 'GERENTE' WHERE CURRENT OF CURS1; -- Multiplicar a equipe do projeto (PROJ_EQUIPE) por 1.5 stmt.executeUpdate("UPDATE PROJETO SET PROJ_EQUIPE = " "PROJ_EQUIPE * 1.5" + "WHERE CURRENT OF" + ResultSet.getCursorName()); -- Alterar o cargo (CARGO) do empregado nmero (NUM_EMP) '000290' -- na tabela EMPREGADOS para o seu valor DEFAULT que NULL UPDATE EMPREGADOS SET CARGO = DEFAULT WHERE NUM_EMP = '000290';

Sistema de dependncia de instruo A instruo de atualizao procurada depende da tabela sendo atualizada, de todos os seus conglomerados (unidades de armazenamento como heaps e ndices), todas as suas restries, e de todas as outras tabelas referenciadas na clusula WHERE e nas expresses SET. A execuo de uma instruo CREATE ou DROP INDEX, ou de uma instruo ALTER TABLE, na tabela de destino de uma instruo de atualizao procurada preparada, invalida a instruo de atualizao procurada preparada. A instruo de atualizao posicionada depende do cursor e de todas as tabelas que o cursor faz referncia. A atualizao posicionada pode ser compilada mesmo se o cursor ainda no tiver sido aberto. Entretanto, a remoo do cursor aberto atravs do mtodo close do JDBC invalida a atualizao posicionada.

71

Manual de Referncia do Derby

A execuo de uma instruo CREATE ou DROP INDEX, ou de uma instruo ALTER TABLE, na tabela de destino de uma instruo de atualizao posicionada preparada, invalida a instruo de atualizao posicionada preparada. A remoo de um alis invalida a instruo de atualizao preparada, se a instruo utilizar o alis. Remover ou adicionar gatilhos na tabela de destino da atualizao invalida a instruo de atualizao.
Valor Expresso | DEFAULT

VALUES Expresso
"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. A palavra chave DEFAULT permitida somente quando a expresso VALUES est em uma instruo INSERT. A especificao de DEFAULT para a 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.
-- 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)

72

Manual de Referncia do Derby

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 TRUE so retornadas no resultado, ou no caso da instruo DELETE, excludas, ou no caso da instruo UPDATE, atualizadas. Sintaxe
WHERE Expresso booleana

So permitidas expresses booleanas na clusula WHERE. A maioria das expresses gerais listadas na Tabela de Expresses podem resultar em um valor booleano. Alm disso, l esto as expresses booleanas mais comuns. Os operadores booleanos especficos listados na Tabela 10 recebem um ou mais operandos; as expresses retornam um valor booleano.
-- descobrir os vos onde nenhum assento da -- classe executiva foi reservado SELECT * FROM DISPONIBILIDADE_VO WHERE ASSENTOS_EXECUTIVOS_OCUPADOS IS NULL OR ASSENTOS_EXECUTIVOS_OCUPADOS = 0 -- Juno das tabelas ATIV_EMP e EMPREGADOS -- selecionar todas as colunas da tabela ATIV_EMP, e adicionar o -- sobrenome do empregado (LTIMO_NOME) da tabela EMPREGADOS -- a todas as linhas do resultado. SELECT SAMP.ATIV_EMP.*, LTIMO_NOME FROM SAMP.ATIV_EMP, SAMP.EMPREGADOS WHERE ATIV_EMP.NUM_EMP = EMPREGADOS.NUM_EMP; -- Determinar o nmero do empregado e o salrio dos representantes de venda -- junto com o salrio mdio e a conta principal de seus departamentos. -- Esta consulta dever criar primeiro um novo-nome-de-coluna especificado -- na clusula AS, que est fora do FULLSELECT (DINFO), -- para obter as colunas SALRIO_MDIO e CONTA_EMP, -- assim como a coluna NUM_DEP utilizada na clusula WHERE SELECT THIS_EMP.NUM_EMP, THIS_EMP.SALRIO, DINFO.SALRIO_MDIO, DINFO.CONTA_EMP FROM EMPREGADOS THIS_EMP, (SELECT OUTROS.DEP_TRAB AS NUM_DEP, AVG(OUTROS.SALRIO) AS SALRIO_MDIO, COUNT(*) AS CONTA_EMP FROM EMPREGADOS OUTROS GROUP BY OUTROS.DEP_TRAB

73

Manual de Referncia do Derby

) AS DINFO WHERE THIS_EMP.CARGO = 'REP_VENDAS' AND THIS_EMP.DEP_TRAB = DINFO.NUM_DEP;

Clusula WHERE CURRENT OF


A clusula WHERE CURRENT OF uma clusula de algumas instrues UPDATE e DELETE. Permite realizar atualizaes e excluses posicionadas em cursores atualizveis. Para obter mais informaes sobre cursores atualizveis deve ser consultada a Instruo SELECT. 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");

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.

Funes nativas padro


ABS ou ABSVAL BIGINT CAST CHAR Concatenao Expresses NULLIF e CASE CURRENT_DATE CURRENT ISOLATION CURRENT_TIME CURRENT_TIMESTAMP CURRENT_USER DATE DAY DOUBLE HOUR IDENTITY_VAL_LOCAL INTEGER LENGTH LOCATE LCASE ou LOWER LTRIM 74

Manual de Referncia do Derby

MINUTE MOD MONTH RTRIM SECOND SESSION_USER SMALLINT SQRT SUBSTR TIME TIMESTAMP UCASE ou UPPER USER VARCHAR YEAR

Agregaes (funes de conjunto)


Esta seo descreve as agregaes (tambm descritas como funes de conjunto no ANSI SQL-92 e como funes de coluna em algumas literaturas sobre banco de dados). As agregaes fornecem meios de avaliar uma expresso para um conjunto de linhas. Enquanto as outras funes nativas operam sobre uma nica expresso, as funes de agregao operam sobre conjuntos de valores reduzindo-os a um nico valor escalar. As agregaes nativas podem calcular o valor mnimo, o valor mximo, a soma e a mdia 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 ' Todos os tipos COUNT MIN MAX AVG SUM X ' ' ' ' Tipos de dado numricos nativos X X X X X

As agregaes so permitidas apenas: No ItemSeleo da ExpressoSeleo. Na Clusula HAVING. Na Clusula ORDER BY (utilizando um nome alis) se a agregao aparecer no resultado do bloco de consulta relevante. Ou seja, permitido um alis para uma agregao na Clusula ORDER BY se, e somente se, a agregao aparecer no ItemSeleo da ExpressoSeleo. Todas as expresses nos ItensSelecionados da ExpressoSeleo devem ser agregaes ou colunas agrupadas (consulte a Clusula GROUP BY) (O mesmo verdade se houver uma clusula HAVING sem uma clusula GROUP BY). Isto se deve ao fato do ResultSet da ExpressoSeleo dever ser um escalar (valor nico) ou um vetor (vrios valores), mas no a uma mistura dos dois (as agregaes tm como resultado um valor escalar, e a referncia a uma coluna pode ter como resultado um 75

Manual de Referncia do Derby

vetor). Por exemplo, a consulta a seguir mistura valor escalar e vetor e, portanto, no vlida:
-- invlido SELECT MIN(TEMPO_VO), ID_VO FROM VOS

No so permitidas agregaes em referncias externas (correlaes). Isto significa que se a subconsulta contiver uma agregao, esta agregao no poder avaliar uma expresso que inclua uma referncia a uma coluna do bloco de consulta externo. Por exemplo, a seguinte consulta no vlida porque SUM opera sobre uma coluna da consulta externa:
SELECT c1 FROM t1 GROUP BY c1 HAVING c2 > (SELECT t2.x FROM t2 WHERE t2.y = SUM(t1.c3))

O cursor declarado em um ResultSet que inclui uma agregao no bloco de consulta externo no atualizvel. Esta seo inclui as seguintes agregaes: AVG 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 )

O qualificador DISTINCT elimina as linhas duplicadas. O qualificador ALL mantm as linhas duplicadas. ALL o valor padro, se nem ALL nem DISTINCT for especificado. Por exemplo, se uma coluna contiver os valores 1.0, 1.0, 1.0, 1.0 e 2.0, AVG(coluna) retornar um valor menor que AVG(DISTINCT coluna). Somente permitida uma expresso de agregao DISTINCT por ExpressoSeleo. Por exemplo, a seguinte consulta no vlida:

76

Manual de Referncia do Derby

SELECT AVG (DISTINCT TEMPO_VO), SUM (DISTINCT MILHAS) FROM VOS

A expresso pode conter vrias referncias a colunas ou expresses, mas no pode conter outra agregao ou subconsulta. Deve ter como resultado um tipo de dado numrico do SQL-92. Portanto, podem ser chamados mtodos que tm como resultado tipos de dado SQL-92. Se uma expresso for avaliada como NULL, a agregao saltar este valor. O tipo de dado do resultado o mesmo da expresso em que opera (nunca estoura). Por exemplo, a seguinte consulta retorna o INTEGER 1, que pode no ser o esperado:
SELECT AVG(C1) FROM (VALUES (1), (1), (1), (1), (2)) AS MINHA_TABELA (C1)

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
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. Utilizando a tabela EMPREGADOS selecionar a coluna NUM_EMP na forma de inteiro grande para processamento posterior no aplicativo:
SELECT BIGINT (NUM_EMP) FROM EMPREGADOS

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. As expresses CAST so permitidas em qualquer lugar onde uma expresso permitida. 77

Manual de Referncia do Derby

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. Converses CAST entre tipos de dado SQL-92 A tabela a seguir mostra as converses explcitas vlidas entre tipos de origem e tipos de destino para os tipos de dado do SQL. Tabela 3. Converses explcitas entre tipos de origem e tipos de destino para os tipos de dado do SQL Esta tabela mostra quais converses explcitas entre tipos de dado so vlidas. A primeira coluna da tabela lista o tipo de origem, enquanto a primeira linha lista os tipos de destino. "S" indica que a converso da origem para o destino vlida. Tipos S M A L L I N T I N T E G E R B I G I N T D R E E C A I L M A L D O U B L E F L O A T C H A R V A R C H A R L O N G V A R C H A R C H A R F O R B I T D A T A V A R C H A R F O R B I T D A T A L C O L N O G B V A R C H A R F O R B I T D A T A SMALLINT INTEGER BIGINT DECIMAL REAL DOUBLE FLOAT CHAR VARCHAR S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S B L O B D A T E T T I I M M E E S T A M P

78

Manual de Referncia do Derby

Tipos

S M A L L I N T

I N T E G E R

B I G I N T

D R E E C A I L M A L

D O U B L E

F L O A T

C H A R

V A R C H A R

L O N G V A R C H A R

C H A R F O R B I T D A T A

V A R C H A R F O R B I T D A T A

L C O L N O G B V A R C H A R F O R B I T D A T A

B L O B

D A T E

T T I I M M E E S T A M P

LONG VARCHAR CHAR FOR BIT DATA VARCHAR FOR BIT DATA LONG VARCHAR FOR BIT DATA CLOB BLOB DATE TIME

S -

S -

S -

S S

S S

S S

S S S

S S

S S S S

S S S S

S -

S -

S -

S S

S S

S S S

TIME STAMP -

Se a converso for vlida, ento CAST ser permitida. Incompatibilidades de tamanhos entre os tipos de origem e de destino podem causar erros em tempo de execuo. 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) 79

Manual de Referncia do Derby

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 Converses de tipos de dado numricos Um tipo numrico pode ser convertido para qualquer outro tipo numrico. Se o tipo de destino no puder representar o componente no-fracionrio sem truncamento, ser lanada uma excesso. Se o destino numrico no puder representar o componente fracionrio (escala) da origem numrica, ento a origem ser truncada em silncio para caber no destino. Por exemplo, converter 763.1234 para INTEGER tem como resultado 763. Converses de/para cadeias de bits As cadeias de bits podem ser convertidas para outras cadeias de bits, mas no para cadeias de caracteres. As cadeias que so convertidas para cadeias de bits so preenchidas com zero no final, para se ajustarem ao tamanho da cadeia de bits do destino. O tipo BLOB mais limitado, e requer converso explcita. Na maioria dos casos o tipo BLOB no pode ser convertido de, ou para, outros tipos. Converses de valores de data/hora Um valor data/hora sempre pode ser convertido de e para TIMESTAMP. Se DATE for convertido para TIMESTAMP, o componente TIME do TIMESTAMP resultante ser sempre 00:00:00. Se um valor de dado TIME for convertido para TIMESTAMP, o componente DATE de TIMESTAMP ser definido como o valor de CURRENT_DATE do momento da execuo de CAST. Se TIMESTAMP for convertido para DATE, o componente TIME ser truncado em silncio. Se TIMESTAMP for convertido para TIME, o componente DATE ser truncado em silncio.
SELECT CAST (MILHAS AS INT) FROM VOS -- converter de carimbo do tempo para texto INSERT INTO MINHA_TABELA (COLUNA_TEXTO) VALUES (CAST (CURRENT_TIMESTAMP AS VARCHAR(100))) -- NULL deve ser convertido para algum tipo de dado para poder ser usado SELECT LINHA_AREA FROM LINHAS_AREAS UNION ALL VALUES (CAST (NULL AS CHAR(2))) -- converso de preciso dupla para decimal SELECT CAST (TEMPO_VO AS DECIMAL(5,2)) FROM VOS -- converso de SMALLINT para BIGINT VALUES CAST (CAST (12 AS SMALLINT) AS BIGINT)

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. 80

Manual de Referncia do Derby

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). Sintaxe inteiro para caractere
CHAR (ExpressoInteira)

ExpressoInteira Uma expresso que retorna um valor com tipo de dado inteiro (SMALLINT, INTEGER ou BIGINT). O resultado a representao cadeia de caracteres do argumento na forma de uma constante inteira do SQL. O resultado consiste de n caracteres, que so os dgitos significativos que representam o valor do argumento, precedidos pelo sinal menos se o argumento for negativo. alinhado esquerda. Se o primeiro argumento for um SMALLINT: O comprimento do resultado ser igual a 6. Se o nmero de caracteres do resultado for menor que 6, ento o resultado ser preenchido direita com brancos at o comprimento 6. Se o primeiro argumento for um INTEGER: O comprimento do resultado ser igual 11. Se o nmero de caracteres no resultado for menor que 11, ento o resultado ser preenchido direita com brancos at o comprimento 11. Se o primeiro argumento for um BIGINT: O comprimento do resultado ser igual a 20. Se o nmero de caracteres no resultado for menor que 20, ento o resultado ser preenchido direita com brancos at o comprimento 20. Sintaxe de data/hora para caractere
CHAR (ExpressoDataHora)

ExpressoDataHora Uma expresso de um dos trs seguintes tipos de dado: DATE: O resultado a representao caractere da data. O comprimento do resultado 10. TIME: O resultado a representao caractere da hora. O comprimento do resultado 8.

81

Manual de Referncia do Derby

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 por quatro brancos).

' (18 seguido

LENGTH
LENGTH aplicado tanto a expresses cadeia de caracteres quanto a expresses cadeia de bits, e retorna o nmero de caracteres no resultado. Como todos os tipos de dado nativos so convertidos implicitamente em cadeias, esta funo pode atuar em todos os tipos de dados nativos. 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. Como todos os tipos de dado nativos so convertidos implicitamente em cadeias, esta funo pode atuar em todos os tipos de dado nativos. Sintaxe
{ { ExpressoCaractere || ExpressoCaractere } | { ExpressoBit || ExpressoBit } }

82

Manual de Referncia do Derby

Nas cadeias de caracteres, se os operandos esquerdo e direito forem do tipo CHAR, o tipo do resultado ser CHAR; seno, ser VARCHAR. As regras normais de preenchimento/corte para CHAR e VARCHAR se aplicam ao resultado deste operador. O comprimento da cadeia resultante a soma dos comprimentos dos dois operandos. 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'

Expresses NULLIF e CASE


So utilizadas as expresses CASE e NULLIF para as expresses condicionais no Derby. Sintaxe da expresso NULLIF
NULLIF(L,R)

A expresso NULLIF muito semelhante expresso CASE. Por exemplo:


NULLIF(V1,V2)

equivale seguinte expresso CASE:


CASE WHEN V1=V2 THEN NULL ELSE V1 END

Sintaxe da expresso CASE A expresso CASE pode ser colocada em qualquer lugar onde permitida uma expresso. Escolhe a expresso a ser avaliada baseado em um teste booleano.
CASE WHEN ExpressoBooleana THEN ExpressoThen ELSE ExpressoElse END

A ExpressoThen e a ExpressoElse so expresses que devem possuir tipos compatveis. Para os tipos nativos, isto significa que estes tipos devem ser o mesmo, ou deve haver uma converso nativa de alargamento entre os tipos. No necessrio utilizar a expresso CASE para evitar NullPointerExceptions quando uma coluna que pode ter nulo se torna receptora do mtodo.
-- retorna 3 VALUES CASE WHEN 1=1 THEN 3 ELSE 4 END;

Se o valor da instncia especificada na chamada do mtodo de instncia for nulo, o resultado da chamada ser nulo (SQL NULL). Entretanto, ainda necessrio utilizar a 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. 83

Manual de Referncia do Derby

Sintaxe
COUNT ( [ DISTINCT | ALL ] Expresso )

O qualificador DISTINCT elimina as linhas duplicadas. O qualificador ALL mantm as linhas duplicadas. assumido ALL se no for especificado nem ALL nem DISTINCT. Por exemplo, se uma coluna contiver os valores 1, 1, 1, 1 e 2, COUNT(coluna) retornar um valor maior que COUNT(DISTINCT coluna). Somente permitida uma expresso de agregao DISTINCT por ExpressoSeleo . Por exemplo, a seguinte consulta no permitida:
-- consulta no permitida SELECT COUNT (DISTINCT TEMPO_VO), SUM (DISTINCT MILHAS) FROM VOS

A expresso pode conter vrias referncias a colunas ou expresses, mas no pode conter outra agregao ou subconsulta. Se a Expresso resultar em NULL, a agregao no ser processada para este valor. O tipo de dado do resultado de COUNT BIGINT.
-- Contar o nmero de pases em cada regio, -- mostrando apenas as regies que possuem ao menos 2 pases SELECT COUNT (PAS), REGIO FROM PASES GROUP BY REGIO HAVING COUNT (PAS) > 1

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(*)

O tipo de dado do resultado BIGINT.


-- Contar o nmero de linhas da tabela VOS SELECT COUNT(*) FROM VOS

CURRENT DATE
CURRENT DATE sinnimo de CURRENT_DATE.

CURRENT_DATE
CURRENT_DATE retorna a data 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_DATE

ou, como alternativa


CURRENT DATE -- descobrir os vos futuros disponveis:

84

Manual de Referncia do Derby

SELECT * FROM VOS_DISPONIBILIDADE WHERE DATA_VO > 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 VALUES 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 -- Fazer com que a coluna NOME tenha como valor padro -- o esquema corrente: CREATE TABLE MINHA_TABELA (ID INT, NOME VARCHAR(128) DEFAULT CURRENT SQLID) -- Inserir o valor padro igual ao valor do -- esquema corrente na tabela: INSERT INTO MINHA_TABELA(ID) VALUES (1) -- Retornar as linhas com o mesmo nome do esquema corrente: SELECT NOME FROM MINHA_TABELA WHERE NOME = CURRENT SCHEMA

CURRENT TIME
CURRENT TIME sinnimo de CURRENT_TIME.

CURRENT_TIME
CURRENT_TIME retorna a hora 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_TIME

ou, como alternativa


CURRENT TIME VALUES CURRENT_TIME -- ou, como alternativa:

85

Manual de Referncia do Derby

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

ou, como alternativa


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. USER e SESSION_USER so sinnimos. Estas funes retornam uma cadeia de at 128 caracteres. Sintaxe
CURRENT_USER VALUES CURRENT_USER

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.

86

Manual de Referncia do Derby

Se o argumento for uma cadeia de caracteres com comprimento 7: O resultado ser a data representada pela cadeia de caracteres. Sintaxe
DATE ( expresso )

Este exemplo resulta na representao interna de '1988-12-25'.


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: 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. Cadeia de caracteres para preciso dupla
DOUBLE (ExpressoCadeiaCaracteres )

ExpressoCadeiaCaracteres

87

Manual de Referncia do Derby

O argumento pode ser do tipo CHAR ou VARCHAR na forma de uma constante numrica. Os brancos iniciais e finais no argumento so ignorados. O resultado da funo um nmero de ponto flutuante de preciso dupla. O resultado pode ser nulo; se o argumento for nulo, o resultado ser o valor nulo. O resultado o mesmo nmero que seria produzido se a cadeia de caracteres fosse considerada uma constante e atribuda 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 )

Selecionar as aulas que comeam no perodo da tarde na tabela chamada TABELA1.


SELECT * FROM TABELA1 WHERE HOUR(INCIO) BETWEEN 12 AND 17

IDENTITY_VAL_LOCAL
O Derby suporta a funo IDENTITY_VAL_LOCAL. Sintaxe:
IDENTITY_VAL_LOCAL ( )

A funo IDENTITY_VAL_LOCAL uma funo no determinstica, que retorna o valor atribudo mais recentemente a uma coluna identidade para a conexo, onde a atribuio ocorreu como resultado de uma instruo INSERT de um nica linha utilizando uma clusula VALUES. A funo IDENTITY_VAL_LOCAL no possui parmetros de entrada. O resultado um DECIMAL (31,0), independentemente do tipo de dado real da coluna identidade correspondente. O valor retornado pela funo IDENTITY_VAL_LOCAL, para a conexo, o valor atribudo coluna identidade da tabela identificada na instruo INSERT de uma nica linha mais recente. A instruo INSERT deve conter a clusula VALUES na tabela que contm a coluna de identidade. O valor atribudo um valor identidade gerado pelo Derby. A funo retorna o valor nulo quando no tiver sido emitida uma instruo INSERT de uma nica linha com a clusula VALUES para uma tabela contendo coluna identidade. O resultado da funo no afetado por:

88

Manual de Referncia do Derby

Uma instruo INSERT de uma nica linha com a clusula VALUES para uma tabela sem coluna identidade Uma instruo INSERT de vrias linhas com a clusula VALUES Uma instruo INSERT com um FULLSELECT Se a tabela com a coluna identidade possuir um gatilho para INSERT definido, que insere em outra tabela com outra coluna identidade, ento a funo IDENTITY_VAL_LOCAL() retornar o valor gerado para a tabela da instruo, e no para a tabela modificada pelo gatilho. Exemplos:
ij> CREATE TABLE T1(C1 INT GENERATED ALWAYS AS IDENTITY, C2 INT); 0 rows inserted/updated/deleted ij> INSERT INTO T1(C2) VALUES (8); 1 row inserted/updated/deleted ij> VALUES IDENTITY_VAL_LOCAL(); 1 ------------------------------1 1 row selected ij> SELECT IDENTITY_VAL_LOCAL()+1, IDENTITY_VAL_LOCAL()-1 FROM T1; 1 |2 ------------------------------------------------------------------2 |0 1 row selected ij> INSERT INTO T1(C2) VALUES (IDENTITY_VAL_LOCAL()); 1 row inserted/updated/deleted ij> SELECT * FROM T1; C1 |C2 ------------------------------1 |8 2 |1 2 rows selected ij> VALUES IDENTITY_VAL_LOCAL(); 1 ------------------------------2 1 row selected ij> INSERT INTO T1(C2) VALUES (8), (9); 2 rows inserted/updated/deleted ij> -- insero de vrios valores; -- 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 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 -------------------------------

89

Manual de Referncia do Derby

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. Utilizando a tabela EMPREGADOS selecionar uma lista contendo o salrio (SALRIO) dividido pelo nvel de educao (NVEL_EDUC). Truncar a parte decimal nos clculos. A lista tambm deve conter os valores utilizados no clculo e o nmero do empregado (NUM_EMP). A lista deve estar em ordem descendente do valor calculado:
SELECT INTEGER (SALRIO / NVEL_EDUC), SALRIO, NVEL_EDUC, NUM_EMP FROM EMPREGADOS ORDER BY 1 DESC

LOCATE
Se a subcadeia especificada for encontrada na cadeia de procura especificada, LOCATE retornar o ndice onde a subcadeia foi encontrada na cadeia de procura. Quando a subcadeia no encontrada, LOCATE retorna 0. Sintaxe
LOCATE(ExpressoCaractere, ExpressoCaractere [, PosioInicial] )

A segunda ExpressoCaractere a cadeia de procura, que procurada desde o incio, a menos que seja especificada a PosioInicial, caso em que a procura comea nesta posio; o ndice comea por 1. Retorna 0 se a cadeia no for encontrada. O tipo retornado por LOCATE um inteiro.

90

Manual de Referncia do Derby

-- 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 )

A ExpressoCaractere do tipo de dado CHAR, VARCHAR ou LONG VARCHAR, ou qualquer tipo de dado nativo convertido implicitamente para uma cadeia de caracteres (exceto uma expresso de bit). 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. O comprimento e o comprimento mximo do valor retornado so idnticos ao comprimento e comprimento mximo do parmetro. Se a ExpressoCaractere for avaliada como nula, esta funo retornar nulo.
-- 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)

A ExpressoCaractere do tipo de dado CHAR, VARCHAR ou LONG VARCHAR, ou de qualquer tipo de dado nativo que seja convertido implicitamente em uma cadeia de caracteres. LTRIM retorna NULL se a ExpressoCaractere for avaliada como nula.
-- retorna 'asdf ' VALUES LTRIM(' asdf ')

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:

91

Manual de Referncia do Derby

SELECT COUNT (DISTINCT TEMPO_VO), MAX (DISTINCT MILHAS) FROM VOS

A Expresso pode conter vrias referncias a colunas ou expresses, mas no pode conter outra agregao ou subconsulta. Deve ter como resultado um tipo de dado nativo. Portanto, podem ser chamados mtodos que tm como resultado tipos de dado nativos (Por exemplo, um mtodo que retorna java.lang.Integer ou int tem como resultado um INTEGER.) Se uma expresso for avaliada como NULL, a agregao saltar este valor. Para os tipos de dado CHAR, VARCHAR e LONG VARCHAR, o nmero de espaos em branco no final do valor pode afetar como MAX avaliada. Por exemplo, se 'z' e 'z ' estiverem armazenados em uma coluna, no pode ser controlado qual dos dois ser retornado como mximo, porque o espao em branco no possui valor. O tipo de dado do resultado idntico ao da expresso em que opera (nunca estoura).
-- encontrar a data mais tarde da tabela DISPONIBILIDADE_VO SELECT MAX (DATA_VO) FROM DISPONIBILIDADE_VO -- encontrar o vo mais longo a partir de cada aeroporto, -- mas somente quando o vo mais longo tiver mais de 10 horas SELECT MAX(TEMPO_VO), AEROPORTO_ORIGEM FROM VOS GROUP BY AEROPORTO_ORIGEM HAVING MAX(TEMPO_VO) > 10

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 permitida:
SELECT COUNT (DISTINCT TEMPO_VO), MIN (DISTINCT MILHAS) FROM VOS

A Expresso pode conter vrias referncias a colunas ou expresses, mas no pode conter outra agregao ou subconsulta. Deve ter como resultado um tipo de dado nativo. Portanto, podem ser chamados mtodos que tm como resultado tipos de dado nativos (Por exemplo, um mtodo que retorna java.lang.Integer ou int tem como resultado um INTEGER.) Se uma expresso for avaliada como NULL, a agregao saltar este valor. As regras de comparao do tipo determinam o valor mximo. Para CHAR, VARCHAR e LONG VARCHAR, o nmero de espaos em branco no final do valor pode afetar o resultado. O tipo de dado do resultado idntico ao da expresso em que opera (nunca estoura).
-- no vlido: SELECT DISTINCT TEMPO_VO, MIN(DISTINCT MILHAS) FROM VOS -- no vlido: SELECT COUNT(DISTINCT TEMPO_VO), MIN(DISTINCT MILHAS) FROM VOS

92

Manual de Referncia do Derby

-- 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 ) -- Selecionar todas as aulas que no terminam na hora exata; SELECT * FROM TABELA1 WHERE MINUTE(FIM) < 60;

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)

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.

93

Manual de Referncia do Derby

Sintaxe
MONTH ( expresso )

Selecionar todas as linhas da tabela EMPREGADOS para as pessoas nascidas (DATA_NASC) em dezembro.
SELECT * FROM EMPREGADOS WHERE MONTH(DATA_NASC) = 12

RTRIM
RTRIM remove brancos do final da expresso cadeia de caracteres. Sintaxe
RTRIM(ExpressoCaractere)

A ExpressoCaractere do tipo de dado CHAR, VARCHAR ou LONG VARCHAR, ou de qualquer tipo de dado nativo convertido implicitamente em uma cadeia de caracteres. RTRIM retorna NULL quando a ExpressoCaractere avaliada como nula.
-- retorna ' asdf' VALUES RTRIM(' asdf -- retorna 'asdf' VALUES RTRIM('asdf ') ')

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 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 )

Assumindo que a coluna RECEBIDO (TIMESTAMP) possua um valor interno equivalente a 1988-12-25-17.12.30.000000.
SECOND(RECEBIDO)

Retorna o valor 30.

SESSION_USER
SESSION_USER retorna o identificador de autorizao ou nome do usurio corrente. Se no houver usurio corrente, ser retornado APP. USER, CURRENT_USER, e SESSION_USER so sinnimos. 94

Manual de Referncia do Derby

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 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 95

Manual de Referncia do Derby

VARCHAR FOR BIT DATA. O comprimento do resultado o comprimento mximo do tipo de origem. Sintaxe
SUBSTR({ ExpressoCaractere }, PosioInicial [, ComprimentoCadeia ] )

A PosioInicial e o parmetro opcional ComprimentoCadeia so ambos expresses inteiras (O primeiro caractere ou bit possui PosioInicial igual a 1; se for especificado 0, o Derby assume que 1). A ExpressoCaractere do tipo de dado CHAR, VARCHAR ou LONG VARCHAR, ou de qualquer tipo de dado nativo que seja convertido implicitamente em uma cadeia (exceto a expresso de bit). Para as expresses caractere, tanto PosioInicial quanto ComprimentoCadeia se referem a caracteres. Para expresses de bit, tanto PosioInicial quanto ComprimentoCadeia se referem a bits. SUBSTR retorna NULL se for especificado ComprimentoCadeia, e este for menor que zero. Se PosioInicial for positiva, ento se refere a posio a partir do incio da expresso de origem (contando o primeiro caractere como 1). Se PosioInicial for negativa, ento a posio a partir do fim da origem. Se no for especificado ComprimentoCadeia, ento SUBSTR retornar a subcadeia da expresso desde a PosioInicial at o fim da expresso de origem. Se for especificado 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 )

Os qualificadores DISTINCT e ALL eliminam ou mantm as linhas duplicadas. assumido ALL se no for especificado nem ALL nem DISTINCT. Por exemplo, se a coluna contiver os valores 1, 1, 1, 1 e 2, SUM(coluna) retorna um valor maior que SUM(DISTINCT coluna). Somente permitida uma expresso de agregao DISTINCT por ExpressoSeleo. Por exemplo, a seguinte consulta no permitida:
SELECT AVG (DISTINCT TEMPO_VO), SUM (DISTINCT MILHAS) FROM VOS

A expresso pode conter vrias referncias a colunas ou expresses, mas no pode conter outra agregao ou subconsulta. Deve ter como resultado um tipo de dado numrico nativo. Se uma expresso for avaliada como NULL, a agregao saltar este valor. O tipo de dado do resultado idntico ao da expresso em que opera (pode estourar).
-- descobrir a quantidade de assentos econmicos disponveis: SELECT SUM (ASSENTOS_ECONMICOS) FROM LINHAS_AREAS;

96

Manual de Referncia do Derby

-- utilizar SUM fazendo referncia a vrias colunas -- (descobrir o nmero total de todos os assentos ocupados): SELECT SUM (ASSENTOS_ECONMICOS_OCUPADOS + ASSENTOS_EXECUTIVOS_OCUPADOS + ASSENTOS_PRIMEIRA_CLASSE_OCUPADOS) AS ASSENTOS_OCUPADOS FROM VOS_DISPONIBILIDADE;

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 ) VALUES TIME(CURRENT_TIMESTAMP)

Se a hora corrente for 5:03 da tarde, o valor retornado ser 17:03:00.

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.

97

Manual de Referncia do Derby

Sintaxe
TIMESTAMP ( expresso [, expresso ] )

Assumindo que a coluna DATA_INCIO (DATA) possua um valor equivalente a 1988-12-25, e a coluna HORA_INCIO (HORA) possua um valor equivalente a 17.12.30.
TIMESTAMP(DATA_INCIO, HORA_INCIO)

Retorna o valor '1988-12-25-17.12.30.000000'.

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. O comprimento e o comprimento mximo do valor retornado so idnticos ao comprimento e comprimento mximo do parmetro.
-- 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. USER, CURRENT_USER e SESSION_USER so sinnimos. 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 98

Manual de Referncia do Derby

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 999. Um resultado diferente de zero possui o mesmo sinal do argumento. Sintaxe
YEAR ( expresso )

Selecionar todos os projetos da tabela PROJETO agendados para iniciar (PROJ_DATA_INCIO) e terminar (PROJ_DATA_FIM) no mesmo ano.
SELECT * FROM PROJETO WHERE YEAR(PROJ_DATA_INCIO) = YEAR(PROJ_DATA_FIM)

Funes do sistema nativas


Esta seo descreve as diferentes funes do sistema nativas disponveis no Derby.

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))

Ocorre um erro se SCHEMANAME ou TABLENAME for nulo. 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 99

Manual de Referncia do Derby

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
A funo SYSCS_UTIL.SYSCS_GET_DATABASE_PROPERTY retorna o valor da propriedade especificada por KEY, do banco de dados na conexo corrente. Sintaxe
VARCHAR(32762) SYSCS_UTIL.SYSCS_GET_DATABASE_PROPERTY(IN KEY VARCHAR(128))

Retorna erro se KEY for nulo. Exemplo


VALUES SYSCS_UTIL.SYSCS_GET_DATABASE_PROPERTY('cadeia_com_valor_da_chave');

Procedimentos do sistema nativos


Alguns procedimentos nativos no so compatveis com a sintaxe SQL utilizada por outros bancos de dados relacionais. Estes procedimentos somente podem ser utilizados no Derby.

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. 100

Manual de Referncia do Derby

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:
CALL SYSCS_UTIL.SYSCS_COMPRESS_TABLE('US', 'CLIENTE', 1)

Exemplo Java Para comprimir a tabela chamada CLIENTE no esquema chamado US, utilizando a opo SEQUENTIAL:
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();

Se o parmetro SEQUENTIAL no for especificado, o Derby reconstruir todos os ndices simultaneamente com a tabela base. Se no for especificado o argumento SEQUENTIAL, este procedimento poder fazer uso intenso da memria e utilizar muito espao temporrio em disco (uma quantidade aproximadamente igual a duas vezes o espao utilizado, mais o espao alocado mas no utilizado). Isto acontece porque o Derby comprime a tabela copiando as linhas ativas para o novo espao alocado (em vez de embaralhar e truncar o espao existente). O espao extra utilizado retornado ao sistema operacional no COMMIT. Quando especificado SEQUENTIAL, o Derby comprime a tabela base e depois comprime cada um dos ndices seqencialmente. Utilizar SEQUENTIAL faz com que seja usado menos memria e espao em disco, mas demora mais tempo. Deve ser utilizado o argumento SEQUENTIAL para reduzir a utilizao de memria e espao em disco. O procedimento do sistema SYSCS_UTIL.SYSCS_COMPRESS_TABLE no pode devolver espao em disco para o sistema operacional enquanto o COMMIT no for executado. Isto significa que o espao ocupado pela tabela base e seus ndices no pode ser retornado para o sistema operacional enquanto COMMIT no for executado (somente o espao em disco alocado temporariamente pela classificao externa pode ser retornado para o sistema operacional antes de COMMIT). Recomenda-se utilizar o procedimento SYSCS_UTIL.SYSCS_COMPRESS_TABLE no modo de auto-efetivao. Note: Este procedimento obtm um bloqueio exclusivo na tabela sendo comprimida. Todos os planos de instruo dependentes da tabela e de seus ndices so invalidados. Para obter informaes sobre como identificar espao no utilizado deve ser consultado o Guia do Servidor e Administrao do Derby.

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 101

Manual de Referncia do Derby

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( 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);

102

Manual de Referncia do Derby

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 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();

Recomenda-se que o procedimento SYSCS_UTIL.SYSCS_INPLACE_COMPRESS_TABLE seja executado no modo de auto-efetivao. Note: Este procedimento obtm um bloqueio exclusivo na tabela sendo comprimida. Todos os planos de instruo dependentes da tabela ou de seus ndices so invalidados. Para obter informaes sobre como identificar espao no utilizado deve ser consultado o Guia do Servidor e Administrao do Derby.

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 103

Manual de Referncia do Derby

-- 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. A estatstica dos tempos ligada chamando este procedimento com um argumento diferente de zero. A estatstica dos tempos desligada chamando este procedimento com um argumento igual a zero. 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))

Este procedimento no retorna resultado. Exemplo JDBC Definir a propriedade derby.locks.deadlockTimeout com o valor 10:
CallableStatement cs = conn.prepareCall ("CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY(?, ?)");

104

Manual de Referncia do Derby

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
O procedimento do sistema SYSCS_UTIL.SYSCS_FREEZE_DATABASE congela temporariamente o banco de dados para fazer cpia de segurana. Sintaxe
SYSCS_UTIL.SYSCS_FREEZE_DATABASE()

Este procedimento no retorna resultado. 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()

Este procedimento no retorna resultado. 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
105

Manual de Referncia do Derby

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()

Este procedimento no retorna resultado. Exemplo JDBC


CallableStatement cs = conn.prepareCall ("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())

Este procedimento no retorna resultado. BACKUPDIR Um argumento de entrada do tipo VARCHAR(32672), que especifica o caminho de sistema completo do diretrio onde ser armazenada a cpia de segurana do banco de dados. Exemplo JDBC O exemplo a seguir faz a cpia de segurana do banco de dados no diretrio c:/copia_seguranca:
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),

106

Manual de Referncia do Derby

IN COLUMNDELIMITER CHAR(1), IN CHARACTERDELIMITER CHAR(1), IN CODESET VARCHAR(128))

Este procedimento no retorna resultado. SCHEMANAME Um argumento de entrada do tipo VARCHAR(128), que especifica o nome do esquema da tabela. Passar um valor nulo resulta na utilizao do nome de esquema padro TABLENAME Um argumento de entrada do tipo VARCHAR(128), que especifica o nome da 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.
CALL SYSCS_UTIL.SYSCS_EXPORT_TABLE (null, 'EQUIPE', 'meu_arquivo.csv', null, null, null);

Para obter mais informaes sobre exportao deve ser consultado o Guia das Ferramentas e Utilitrios do Derby.

SYSCS_UTIL.SYSCS_EXPORT_QUERY

107

Manual de Referncia do Derby

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))

Este procedimento no retorna resultado. SELECTSTATEMENT Um argumento de entrada do tipo VARCHAR(32672), que especifica a instruo 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.
CALL SYSCS_UTIL.SYSCS_EXPORT_QUERY('SELECT * FROM EQUIPE WHERE NUM_DEP =20', 'c:/saida/meu_arquivo.csv', null, null, null);

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 108

Manual de Referncia do Derby

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)

Este procedimento no retorna resultado. SCHEMANAME Um argumento de entrada do tipo VARCHAR(128), que especifica o nome do esquema da tabela. Passar um valor nulo resulta na utilizao do nome de esquema 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 109

Manual de Referncia do Derby

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 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)

Este procedimento no retorna resultado. SCHEMANAME Um argumento de entrada do tipo VARCHAR(128), que especifica o nome do esquema da tabela. Passar um valor nulo resulta na utilizao do nome de esquema 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. INSERTCOLUMNS Um argumento de entrada do tipo VARCHAR (32762), que especifica os nomes das colunas (separados por vrgula) da tabela para onde os dados sero importados. Passar um valor nulo resulta em erro. COLUMNINDEXES Um argumento de entrada do tipo VARCHAR (32762), que especifica os ndices (numerados a partir de 1 e separados por vrgulas) dos campos de dado da entrada a serem importados. Passar um valor nulo faz com que sejam utilizados todos os campos de dado de entrada presentes no arquivo. 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 110

Manual de Referncia do Derby

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 da 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 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.

Viso geral dos tipos de dado nativos


O sistema de tipos de dado do SQL utilizado pelo compilador da linguagem para determinar o tipo da expresso em tempo de compilao, e pelo sistema de execuo da linguagem para determinar o tipo da expresso em tempo de execuo, que pode ser um subtipo ou uma implementao do tipo em tempo de compilao. 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. A sintaxe apresentada nesta seo a sintaxe utilizada ao especificar o tipo de dado da coluna na instruo CREATE TABLE.

Tipos numricos
Tipos numricos utilizados no Derby. 111

Manual de Referncia do 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 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 Tipo do resultado da expresso DOUBLE PRECISION DOUBLE PRECISION DECIMAL BIGINT INTEGER INTEGER

Maior tipo que aparece na expresso DOUBLE PRECISION REAL DECIMAL BIGINT INTEGER SMALLINT 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)

Armazenamento de valores de um tipo de dado numrico em colunas de outro tipo de dado numrico

A tentativa de colocar um tipo de ponto flutuante com tamanho de armazenamento maior em um local com tamanho de armazenamento menor falha apenas se o valor no puder ser armazenado no local com tamanho menor. Por exemplo:
CREATE TABLE MINHA_TABELA (R REAL, D DOUBLE PRECISION); 0 rows inserted/updated/deleted INSERT INTO MINHA_TABELA (R, D) VALUES (3.4028236E38, 3.4028235E38); ERRO X0X41: O nmero '3.4028236E38' est fora da faixa para o tipo de dado REAL.

Pode ser armazenado um tipo de ponto flutuante em uma coluna INTEGER; a parte fracionria do nmero truncada. Por exemplo: 112

Manual de Referncia do Derby

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. Os inteiros podem ser armazenados em decimais, se a preciso do DECIMAL for grande o suficiente para o valor. Por exemplo:
ij> INSERT INTO MINHA_TABELA (COLUNA_DECIMAL) VALUES (55555555556666666666); ERRO X0Y21: O nmero '55555555556666666666' est fora da faixa do tipo de dado de destino DECIMAL/NUMERIC(5,2).

A tentativa de colocar um valor inteiro com tamanho de armazenamento maior em um 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. Dada uma expresso aritmtica envolvendo dois operandos decimais: lp significa a preciso do operando esquerda rp significa a preciso do operando direita ls significa a escala do operando esquerda rs significa a escala do operando direita So utilizadas as seguintes frmula para determinar a escala do tipo de dado resultante para os seguintes tipos de expresses aritmticas: multiplicao ls + rs diviso 31 - lp + ls - rs AVG() max(max(ls, rs), 4) todas as outras max(ls, rs) Por exemplo, a escala do tipo de dado resultante da expresso a seguir 27:
11.0/1111.33 // 31 - 3 + 1 - 2 = 27

So utilizadas as seguintes frmula para determinar a preciso do tipo de dado resultante para os seguintes tipos de expresses aritmticas: multiplicao

113

Manual de Referncia do Derby

lp + rp adio 2 * (p - s) + s diviso lp - ls + rp + max(ls + rp - rs + 1, 4) todas as outras max(lp - ls, rp - rs) + 1 + max(ls, rs)

Tipo de dado - atribuies e comparao, classificao e ordenao


Tabela 5. Atribuies permitidas pelo Derby Esta tabela mostra as atribuies vlidas entre tipos de dado no Derby. "S" indica que a atribuio vlida. Tipos S I M N A T L E L G I E N R T B D R I E E G C A I I L N M T A L D O U B L E F L O A T C H A R V A R C H A R L O N G V A R C H A R C H A R F O R B I T D A T A V A R C H A R F O R B I T D A T A L C O L N O G B V A R C H A R F O R B I T D A T A SMALL INT INTEGER BIGINT DECIMAL REAL DOUBLE FLOAT CHAR VARCHAR S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S S B L O B D A T E T T I I M M E E S T A M P

114

Manual de Referncia do Derby

Tipos

S I M N A T L E L G I E N R T

B D R I E E G C A I I L N M T A L

D O U B L E

F L O A T

C H A R

V A R C H A R

L O N G V A R C H A R

C H A R F O R B I T D A T A

V A R C H A R F O R B I T D A T A

L C O L N O G B V A R C H A R F O R B I T D A T A

B L O B

D A T E

T T I I M M E E S T A M P

LONG VARCHAR CHAR FOR BIT DATA VARCHAR FOR BIT DATA LONG VARCHAR FOR BIT DATA CLOB BLOB DATE TIME TIME STAMP

S -

S -

S -

S S

S S

S S

S -

S S S S

S S S S

S -

S -

S -

S -

S -

Tabela 6. Comparaes permitidas pelo Derby Esta tabela mostra as comparaes vlidas entre tipos de dado no Derby. "S" indica que a comparao permitida.

115

Manual de Referncia do Derby

Tipos

S I B D R D F M N I E E O L A T G C A U O L E I I L B A L G N M L T I E T A E N R L T

C H A R

V L C A O H R N A C G R H A V F R A O R R C H B A I R T D A T A

V A R C H A R F O R B I T D A T A

L C B D T O L L A I N O O T M G B B E E V A R C H A R F O R B I T D A T A

T I M E S T A M P

SMALL INT INTEGER BIGINT DECIMAL REAL DOUBLE FLOAT CHAR VARCHAR LONG VARCHAR CHAR FOR BIT DATA VARCHAR FOR BIT DATA LONG VARCHAR FOR BIT DATA CLOB BLOB

S S S S S S S -

S S S S S S S -

S S S S S S S -

S S S S S S S -

S S S S S S S -

S S S S S S S -

S S S S S S S -

S S -

S S -

S S

S S

S S -

S S S S -

116

Manual de Referncia do Derby

Tipos

S I B D R D F M N I E E O L A T G C A U O L E I I L B A L G N M L T I E T A E N R L T

C H A R

V L C A O H R N A C G R H A V F R A O R R C H B A I R T D A T A

V A R C H A R F O R B I T D A T A

L C B D T O L L A I N O O T M G B B E E V A R C H A R F O R B I T D A T A

T I M E S T A M P

DATE TIME TIME STAMP

S S S

S S S

S S -

BIGINT
BIGINT fornece 8 bytes de armazenamento para valores inteiros. Sintaxe
BIGINT

Tipo Java correspondente em tempo de compilao java.lang.Long Tipo do metadado do JDBC (java.sql.Types) 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. A tentativa de colocar um valor inteiro com tamanho de armazenamento maior em um local com tamanho de armazenamento menor falha apenas se o valor no puder ser armazenado no local com tamanho menor. Os tipos inteiros sempre podem ser 117

Manual de Referncia do Derby

colocados com sucesso em valores numricos aproximados, embora com uma possvel perda de preciso. Os valores BIGINT podem ser armazenados em decimais, se a preciso do DECIMAL for grande o suficiente para o valor.
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. O comprimento do BLOB especificado em bytes, a menos que seja especificado um dos sufixos K, M ou G, relacionados aos mltiplos 1024, 1024*1024 e 1024*1024*1024, respectivamente. Note: O comprimento do BLOB especificado em bytes. Sintaxe
{ BLOB | BINARY LARGE OBJECT } ( comprimento [{K |M |G }]))

Tipo Java correspondente em tempo de compilao java.sql.Blob Tipo do metadado do JDBC (java.sql.Types) BLOB No java.sql.ResultSet utilizado o mtodo getBlob para obter um tratador de BLOB para os dados subjacentes. Informaes relacionadas Consulte java.sql.Blob e java.sql.Clob
CREATE TABLE IMAGENS( NOME VARCHAR(32) NOT NULL PRIMARY KEY, IMAGEM BLOB(16M)); -- Encontrar todas as imagens de logotipos SELECT LENGTH(IMAGEM), NOME FROM IMAGENS WHERE NOME LIKE '%logo%'; -- Encontrar todas as imagens duplicadas (comparao de BLOBs) SELECT A.NOME AS DUPLICADA_1, B.NOME AS DUPLICADA_2 FROM IMAGENS AS A, IMAGENS AS B WHERE A.NOME < B.NOME AND A.IMAGEM = B.IMAGEM ORDER BY 1,2;

CHAR
CHAR fornece armazenamento para cadeias de comprimento fixo. Sintaxe
CHAR[ACTER] [(comprimento)]

O comprimento uma constante inteira sem sinal. O comprimento padro de CHAR 1. Tipo Java correspondente em tempo de compilao java.lang.String

118

Manual de Referncia do Derby

Tipo do metadado do JDBC (java.sql.Types) CHAR 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. Quando se mistura CHAR e VARCHAR em expresses, o valor mais curto completado com espaos at o comprimento do valor mais longo. O tipo de uma constante cadeia CHAR. Aspectos definidos pela implementao O nico limite de comprimento para os tipos de dado CHAR o valor java.lang.Integer.MAX_VALUE.
-- Dentro de uma constante cadeia utilizar dois -- apstrofos para representar um nico apstrofo VALUES 'Ol, esta a cadeia da Maria D''Almeida'

CHAR FOR BIT DATA


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 um literal inteiro sem sinal designando o comprimento em bytes. O comprimento padro para o tipo de dado CHAR FOR BIT DATA 1, e o tamanho mximo do comprimento so 254 bytes. Tipo do metadado do JDBC (java.sql.Types) BINARY 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.
CREATE TABLE T (B CHAR(2) FOR BIT DATA); INSERT INTO T VALUES (X'DE'); SELECT * FROM T; -- produz o seguinte resultado B ----de20

119

Manual de Referncia do Derby

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. O comprimento do CLOB especificado em caracteres, a menos que seja especificado um dos sufixos K, M ou G, relacionados aos mltiplos 1024, 1024*1024 e 1024*1024*1024, respectivamente. Note: O comprimento do CLOB especificado em caracteres (UNICODE). Sintaxe
{CLOB |CHARACTER LARGE OBJECT}(comprimento [{{K |M |G}]))

Tipo Java correspondente em tempo de compilao java.sql.Clob Tipo do metadado do JDBC (java.sql.Types) CLOB Tipo do metadado do JDBC java.sql.Clob Tipo do metadado do JDBC (java.sql.Types) CLOB No java.sql.ResultSet utilizado o mtodo getClob para obter um tratador de CLOB para os dados subjacentes. 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);

120

Manual de Referncia do Derby

// - 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. Sintaxe
DATE

Tipo Java correspondente em tempo de compilao java.sql.Date Tipo do metadado do JDBC (java.sql.Types) DATE As expresses no devem misturar datas, horas e carimbos do tempo. permitido qualquer valor reconhecido pelo mtodo java.sql.Date na coluna com tipo de dado data/hora SQL correspondente. O Derby suporta os seguintes formatos para DATE:
yyyy-mm-dd mm/dd/yyyy dd.mm.yyyy

O primeiro dos trs formatos acima o formato de java.sql.Date. O ano deve ser sempre expresso com quatro dgitos, enquanto os meses e os dias podem ter um ou dois dgitos. O Derby tambm aceita cadeias no formato de data/hora especfico do idioma, utilizando idioma do servidor de banco de dados. No caso de haver ambiguidade, os formatos nativos acima tm precedncia. Exemplos
VALUES DATE('1994-02-23') VALUES '1993-09-01'

121

Manual de Referncia do Derby

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. Quando a escala no especificada, utilizado o valor padro igual a 0. Quando a preciso no especificada, utilizada a preciso padro igual a 5. A tentativa de colocar um valor numrico em um DECIMAL permitida, desde que a preciso no fracionria no seja perdida. Ao remover os dgitos finais do valor DECIMAL, o Derby arredonda para baixo. Por exemplo:
-- esta converso perde apenas a preciso fracionria VALUES CAST (1.798765 AS DECIMAL(5,2)); 1 -------1.79 -- 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. Consulte tambm Armazenamento de valores de um tipo de dado numrico em colunas de outro tipo de dado numrico. Quando so misturados dois valores decimais em uma expresso, a escala e a preciso do valor resultante seguem as regras mostradas em Escala na aritmtica decimal. Tipo Java correspondente em tempo de compilao java.math.BigDecimal Tipo do metadado do JDBC (java.sql.Types) DECIMAL
VALUES 123.456 VALUES 0.001

As constantes inteiras muito grandes para BIGINT so tornadas constantes DECIMAL.

DOUBLE
O tipo de dado DOUBLE um sinnimo para o tipo de dado DOUBLE PRECISION. Sintaxe
DOUBLE

122

Manual de Referncia do Derby

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

ou, como alternativa


DOUBLE

DOUBLE pode ser utilizado como sinnimo para DOUBLE PRECISION. Limitaes Faixa dos valores DOUBLE: Menor valor DOUBLE: -1.79769E+308 Maior valor DOUBLE: 1.79769E+308 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;

Tipo Java correspondente em tempo de compilao java.lang.Double Tipo do metadado do JDBC (java.sql.Types) DOUBLE 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. Consulte tambm Armazenamento de valores de um tipo de dado numrico em colunas de outro tipo de dado numrico. 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) ]

123

Manual de Referncia do Derby

A preciso padro para FLOAT 53, e equivalente a DOUBLE PRECISION. A preciso igual a 23, ou menor, torna FLOAT equivalente a REAL. A preciso igual a 24, ou maior, torna FLOAT equivalente a DOUBLE PRECISION. Se for especificada uma preciso igual a 0, ocorrer um erro. Se for especificada uma preciso negativa, ocorrer um erro de sintaxe. Tipo do metadado do JDBC (java.sql.Types) REAL ou DOUBLE 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.

INTEGER
INTEGER fornece 4 bytes de armazenamento para valores inteiros. Sintaxe
{ INTEGER | INT }

Tipo Java correspondente em tempo de compilao java.lang.Integer Tipo do metadado do JDBC (java.sql.Types) INTEGER 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. Consulte tambm Armazenamento de valores de um tipo de dado numrico em colunas de outro tipo de dado numrico.
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

Tipo Java correspondente em tempo de compilao java.lang.String

124

Manual de Referncia do Derby

Tipo do metadado do JDBC (java.sql.Types) LONGVARCHAR Ao converter valores Java para valores SQL, nenhum tipo da linguagem Java corresponde a LONG VARCHAR.

LONG VARCHAR FOR BIT DATA


O tipo de dado LONG VARCHAR FOR BIT DATA permite armazenar cadeias de bits de at 32.700 bytes. idntico a VARCHAR FOR BIT DATA, exceto por no ser necessrio 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 ])]

Tipo Java correspondente em tempo de compilao java.math.BigDecimal JDBC metadata Ttype (java.sql.Types) NUMERIC
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

Tipo Java correspondente em tempo de compilao java.lang.Float Tipo do metadado do JDBC (java.sql.Types) 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.

125

Manual de Referncia do Derby

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 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. Consulte tambm Armazenamento de valores de um tipo de dado numrico em colunas de outro tipo de dado numrico. As constantes so sempre mapeadas para DOUBLE PRECISION; deve ser utilizado CAST para converter para REAL.

SMALLINT
SMALLINT fornece 2 bytes de armazenamento. Sintaxe
SMALLINT

Tipo Java correspondente em tempo de compilao java.lang.Short Tipo do metadado do JDBC (java.sql.Types) 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. Consulte tambm Armazenamento de valores de um tipo de dado numrico em colunas de outro tipo de dado numrico. As constantes no formato apropriado sempre so mapeadas para INTEGER ou BIGINT, dependendo de seus comprimento.

TIME
TIME fornece armazenamento para valor da hora do dia. Sintaxe
TIME

Tipo Java correspondente em tempo de compilao java.sql.Time

126

Manual de Referncia do Derby

Tipo do metadado do JDBC (java.sql.Types) TIME Datas, horas e carimbos do tempo no podem ser misturados em expresses, exceto com CAST. permitido qualquer valor reconhecido pelo mtodo java.sql.Time na coluna com tipo de dado data/hora SQL correspondente. O Derby suporta os seguintes formatos para TIME:
hh:mm[:ss] hh.mm[.ss] hh[:mm] {AM | PM}

O primeiro dos trs formatos acima o formato de java.sql.Time. As horas podem ter um ou dois dgitos. Os minutos e os segundos, se estiverem presentes, devem ter dois dgitos. O Derby tambm aceita cadeias no formato de data/hora especfico do idioma, utilizando o idioma do servidor de banco de dados. No caso de haver ambiguidade, os formatos nativos acima tm precedncia. 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

Tipo Java correspondente em tempo de compilao java.sql.Timestamp Tipo do metadado do JDBC (java.sql.Types) TIMESTAMP Datas, horas e carimbos do tempo no podem ser misturados em expresses, exceto com CAST. O Derby suporta os seguintes formatos para TIMESTAMP:
yyyy-mm-dd hh:mm:ss[.nnnnnn] yyyy-mm-dd-hh.mm.ss[.nnnnnn]

O primeiro dos dois formatos acima o formato de java.sql.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. O Derby tambm aceita cadeias no formato de data/hora especfico do idioma, utilizando o idioma do servidor de banco de dados. No caso de haver ambiguidade, os formatos nativos acima tm precedncia. Exemplos
VALUES '1960-01-01 23:03:20'

127

Manual de Referncia do Derby

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. O comprimento mximo para uma cadeia VARCHAR 32672 caracteres. Tipo Java correspondente em tempo de compilao java.lang.String Tipo do metadado do JDBC (java.sql.Types) VARCHAR O Derby no completa o valor VARCHAR com comprimento menor que o especificado. O Derby trunca espaos do valor cadeia, quando fornecida uma cadeia com comprimento maior que o esperado pelo VARCHAR. Os caracteres diferentes de espao no so truncados; em vez disto faz com que seja lanada uma exceo. Quando so aplicados operadores de comparao binrios a VARCHAR os comprimentos dos operandos no so alterados, e os espaos no final dos valores so ignorados. Quando so misturados CHAR e VARCHAR em expresses, o valor mais curto completado com espaos at o comprimento do valor mais longo. O tipo da constante cadeia CHAR, e no VARCHAR.

VARCHAR FOR BIT DATA


O tipo de dado VARCHAR FOR BIT DATA permite armazenar cadeias binrias menores ou iguais ao comprimento especificado. til para dados no estruturados, onde as cadeias de caracteres no so apropriadas (por exemplo, imagens). Sintaxe
{ VARCHAR | CHAR VARYING | CHARACTER VARYING } (comprimento) FOR BIT DATA

O comprimento um literal inteiro sem sinal designando o comprimento em bytes. 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. Tipo do metadado do JDBC (java.sql.Types) VARBINARY VARCHAR FOR BIT DATA armazena cadeias de bytes de comprimento varivel. Diferentemente dos valores CHAR FOR BIT DATA, os valores VARCHAR FOR BIT DATA no so completados at o comprimento do destino. Uma operao envolvendo valores VARCHAR FOR BIT DATA e CHAR FOR BIT DATA (por exemplo, uma concatenao) produz um valor VARCHAR FOR BIT DATA.

128

Manual de Referncia do Derby

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. Quando no especificado o contrrio, permitida uma expresso em qualquer lugar onde aparece Expresso na sintaxe. Isto inclui: ExpressoSeleo Instruo UPDATE (poro SET) VALUES Expresso Clusula WHERE Obviamente, muitas outras instrues incluem estes elementos como blocos de construo e, portanto, permitem expresses como parte destes elementos. Tabela 7. Tabela de Expresses ' ' ' Tipo da expresso Expresses gerais Referncia a coluna Permitida na ExpressoSeleo, na instruo UPDATE e na clusula WHERE das instrues de manipulao de dados. Explicao Todas as expresses que podem resultar em um valor de qualquer tipo. O nome-da-coluna que faz referncia ao valor da coluna tornado visvel para a expresso que contm a referncia a coluna. O nome-da-coluna deve ser qualificado pelo nome da tabela ou pelo nome da correlao se houver ambiguidade. O qualificador do nome-da-coluna deve ser o nome da correlao, se for atribudo nome de correlao tabela na Clusula FROM. O nome da tabela no mais visvel como qualificador para nome-da-coluna aps a tabela ter recebido um alis pelo nome da correlao. ' Constante A maioria dos tipos de dado nativos normalmente possuem constantes associadas aos mesmos (conforme mostrado em Tipos de dado). NULL uma constante sem tipo que representa um valor desconhecido.

'

NULL Permitido nas expresses CAST, na lista de valores do INSERT, e na clusula SET do UPDATE. Utilizado na expresso CAST o nulo recebe um tipo de dado especfico.

'

Parmetro dinmico

Parmetro dinmico o parmetro de uma instruo SQL para o qual no especificado valor quando a instruo 129

Manual de Referncia do Derby

'

Tipo da expresso Permitido em qualquer lugar na expresso onde o tipo de dado pode ser facilmente deduzido. Consulte Parmetros dinmicos.

Explicao criada. Em vez disto, a instruo possui um ponto de interrogao (?) marcando a posio de cada um dos parmetros dinmicos. Consulte Parmetros dinmicos. Os parmetros dinmicos so permitidos apenas em instrues preparadas. Devem ser especificados valores para os mesmos antes da instruo preparada ser executada. Os valores especificados devem corresponder aos tipos esperados.

'

Expresso CAST

Permite especificar o tipo de dado de NULL ou de um parmetro dinmico, ou converter um valor para outro tipo de dado. Consulte CAST. Uma subconsulta que retorna uma nica linha com uma nica coluna. Consulte SubconsultaEscalar. Uma subconsulta que retorna mais de uma coluna e mais de uma linha. Consulte SubconsultaTabela.

'

Subconsulta escalar

'

Subconsulta tabela Permitida como ExpressoTabela na clusula FROM, e com EXISTS, IN e comparaes quantificadas.

'

Expresso condicional

A expresso condicional escolhe a expresso a ser avaliada baseado em um teste booleano. Expresses que resultam em valores booleanos. A maioria das expresses gerais podem resultar em valores booleanos. Geralmente as expresses booleanas usadas na clusula WHERE so feitas de operandos operados por operadores SQL. Consulte Operadores booleanos SQL.

'

Expresses booleanas

'

Expresses numricas

Expresses que resultam em valores numricos. A maioria das expresses gerais podem resultar em valores numricos. Os valores numricos possuem um dos seguintes tipos de dado: SMALLINT, INTEGER, BIGINT, REAL, DOUBLE PRECISION, DECIMAL.

'

Expresses +, -, *, /, e + - unrios

+ -, *, /, e + - unrios Avaliam a operao matemtica esperada nos operandos. Se os dois operandos forem do mesmo tipo, o tipo do resultado no ser promovido, e portanto o operador de diviso em operandos inteiros resulta em um inteiro que o truncamento do resultado numrico real. Quando so misturados tipos de dado

130

Manual de Referncia do Derby

'

Tipo da expresso

Explicao diferentes, estes so promovidos conforme descrito em Tipos de dado. O + unrio um no-operador (ou seja, +4 o mesmo que 4). O - unrio o mesmo que multiplicar o valor por -1, mudando efetivamente o sinal.

' ' '

AVG SUM LENGTH

Retorna a mdia de um conjunto de valores numricos. AVG Retorna a soma de um conjunto de valores numricos. SUM Retorna o nmero de caracteres em uma cadeia de caracteres ou de bits. Consulte LENGTH. Consulte LCASE ou LOWER. Retorna o contagem de um conjunto de valores. Consulte COUNT e COUNT(*). Expresses que resultam em um valor CHAR ou VARCHAR. A maioria das expresses gerais podem resultar em um valor CHAR ou VARCHAR. Os caracteres curinga % e _ transformam a cadeia de caracteres em um padro com relao ao qual o operador LIKE pode procurar por uma correspondncia. Em uma operao de concatenao, o operador de concatenao, "||", concatena seu operando direita ao seu operando esquerda. Opera em cadeias de caracteres e de bits. Consulte Concatenao. As funes de cadeia nativas atuam em uma cadeia e retornam uma cadeia. Consulte LTRIM, LCASE ou LOWER, RTRIM, SUBSTR e UCASE ou UPPER As funes USER retornam informaes sobre o usurio corrente na forma de uma cadeia de caracteres. Consulte CURRENT_USER, SESSION_USER, e USER Uma expresso data/hora resulta em um valor do tipo DATE, TIME, ou TIMESTAMP. A maioria das expresses gerais podem resultar em um valor data/hora. Retorna a data corrente. Consulte CURRENT_DATE. Retorna a hora corrente. Consulte CURRENT_TIME.

' ' '

LOWER COUNT Expresses de caractere

'

Um valor CHAR ou VARCHAR que utiliza curingas. Usadas no padro do LIKE.

'

Expresso de concatenao

'

Funes de cadeia nativas

'

Funes USER

'

Expresses de data e hora

' ' '

CURRENT_DATE CURRENT_TIME CURRENT_TIMESTAMP 131

Manual de Referncia do Derby

'

Tipo da expresso

Explicao Retorna o carimbo do tempo corrente. Consulte CURRENT_TIMESTAMP.

Precedncia das expresses


A precedncia das operaes, da mais alta para a mais baixa, : (), ?, Constante (incluindo sinal), NULL, RefernciaColuna, SubconsultaEscalar, CAST LENGTH, CURRENT_DATE, CURRENT_TIME, CURRENT_TIMESTAMP, e outras operaes nativas + e - unrios *, /, || (concatenao) + e - binrios comparaes, comparaes quantificadas, EXISTS, IN, IS NULL, LIKE, BETWEEN, IS NOT AND OR A precedncia pode ser especificada explicitamente colocando as expresses entre parnteses. A expresso entre parnteses avaliada antes de qualquer operao fora dos parnteses ser aplicada a mesma.
Exemplo (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. As expresses booleanas podem incluir um ou mais operadores booleanos, listados em Operadores booleanos SQL. Tabela 8. Operadores booleanos SQL Operador AND, OR, NOT Explicao e exemplo Avalia os operandos, que so expresses booleanas
(AEROPORTO_ORIGEM = 'SFO') OR (AEROPORTO_DESTINO = 'GRU') -- retorna verdade

Sintaxe
{ Expresso AND Expresso | Expresso OR Expresso | NOT Expresso } Expresso { < | = | > | <= | >= | <>

Comparaes

<, =, >, <=, >=, <> so aplicveis a todos os tipos nativos.


DATE('1998-02-26') < DATE('1998-03-01') -- retorna verdade

132

Manual de Referncia do Derby

Operador

Explicao e exemplo

Sintaxe
} Expresso

IS NULL, IS NOT NULL

Testa se o resultado de uma expresso nulo ou no.


WHERE NOME_DO_MEIO IS NULL

Expresso IS [ NOT ] NULL

LIKE

Tenta fazer a correspondncia entre uma expresso de caractere e um padro de caractere, que uma cadeia de caracteres que inclui um ou mais caracteres curinga. O caractere % corresponde a qualquer nmero (zero ou mais) de caracteres na posio correspondente na primeira expresso de caractere. O caractere _ corresponde a um caractere na posio correspondente na expresso de caractere. Qualquer outro caractere corresponde apenas a este caractere na posio correspondente na expresso de caractere.
cidade LIKE 'Sant_'

ExpressoCaractere [ NOT ] LIKE ExpressoCaractere ComCaractereCuringa [ ESCAPE 'CaractereDeEscape']

Para tratar os caracteres % e _ como caracteres constante, o caractere deve ser precedido por um caractere de escape opcional, especificado na clusula ESCAPE.
SELECT a FROM tabA WHERE a LIKE '%=_' ESCAPE '='

BETWEEN

Testa se o primeiro operando est entre o segundo e o terceiro operandos. O segundo operando deve ser menor que o terceiro operando. Aplicvel apenas aos tipos de dado onde se pode aplicar <= e >=.
WHERE DATA_DE_RESERVA BETWEEN DATE('1998-02-26') AND DATE('1998-03-01')

Expresso [ NOT ] BETWEEN Expresso AND Expresso

IN

Opera sobre uma subconsulta a tabela { Expresso [ NOT ] ou uma lista de valores. Retorna IN TRUE se o valor da expresso esquerda est presente no resultado SubconsultaTabela | da subconsulta a tabela ou na lista Expresso [ NOT ] de valores. A subconsulta a tabela IN ( Expresso pode retornar vrias linhas, mas deve [, Expresso ]* retornar uma nica coluna. )
} WHERE DATA_DE_RESERVA NOT IN (SELECT DATA_DE_RESERVA FROM

133

Manual de Referncia do Derby

Operador

Explicao e exemplo
RESERVAS_EM_HOTEL WHERE QUARTOS_DISPONVEIS = 0)

Sintaxe

EXISTS

[NOT] EXISTS Opera sobre uma subconsulta SubconsultaTabela a tabela. Retorna TRUE se a subconsulta a tabela retornar alguma linha, e FALSE se no retornar nenhuma linha. A subconsulta a tabela pode retornar vrias colunas (somente se for utilizado * para indicar vrias colunas) e linhas. WHERE EXISTS (SELECT * FROM VOS WHERE AEROPORTO_DESTINO = 'SFO' AND AEROPORTO_ORIGEM = 'GRU')

Comparao quantificada

A comparao quantificada um operador de comparao (<, =, >, <=, >=, <>) com ALL, ANY ou SOME aplicado. Opera sobre subconsultas a tabela, que podem retornar vrias linhas, mas devem retornar uma nica coluna. Se for utilizado ALL, a comparao dever ser verdade para todos os valores retornados pela subconsulta a tabela. Se for utilizado ANY ou SOME, a comparao dever ser verdade para pelo menos um valor da subconsulta a tabela. ANY e SOME so equivalentes.
WHERE TAXA_NORMAL < ALL (SELECT ORAMENTO/550 FROM GRUPOS)

Expresso OperadorComparao { ALL | ANY | SOME } SubconsultaTabela

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 ?. Os documentos da API do JDBC fazem referncia aos parmetros dinmicos como parmetros IN, INOUT ou OUT. Na linguagem SQL, estes so sempre parmetros IN. Novo: O Derby suporta a interface ParameterMetaData, nova no JDBC 3.0. Esta interface descreve o nmero, tipo e propriedades dos parmetros da instruo preparada. Para obter mais informaes deve ser consultado o Guia do Desenvolvedor do Derby. Devem ser especificados valores para os parmetros dinmicos antes de executar a instruo. Os valores especificados devem corresponder aos tipos esperados.

134

Manual de Referncia do Derby

Exemplo de parmetros dinmicos PreparedStatement ps2 = conn.prepareStatement( "UPDATE DISPONIBILIDADE_HOTEL SET QUARTOS_DISPONVEIS = " + "(QUARTOS_DISPONVEIS - ?) WHERE ID_HOTEL = ? " + "AND DATA_DE_RESERVA BETWEEN ? AND ?"); -- este cdigo de exemplo define os valores dos parmetros dinmicos -- como sendo iguais aos valores de variveis do programa ps2.setInt(1, numeroQuartos); ps2.setInt(2, oHotel.idHotel); ps2.setDate(3, chegada); ps2.setDate(4, saida); updateCount = ps2.executeUpdate(); Onde so permitidos parmetros dinmicos

Os parmetros dinmicos podem ser utilizados em qualquer lugar da expresso onde seu tipo de dado pode ser facilmente deduzido. 1. permitido o uso como primeiro operando do BETWEEN, se o segundo ou o terceiro operando no for um parmetro dinmico. O tipo de dado do primeiro operando assumido como sendo o tipo de dado do parmetro que no dinmico, ou o resultado da unio dos tipos do segundo e do terceiro operandos, se estes dois no forem parmetros dinmicos.
WHERE ? BETWEEN DATE('1996-01-01') AND ? -- tipos assumidos como sendo DATE

2. permitido o uso como segundo ou terceiro operando do BETWEEN. O tipo de dado assumido como sendo o tipo de dado do operando esquerda.
WHERE DATE('1996-01-01') BETWEEN ? AND ? -- tipos assumidos como sendo DATE

3. permitido o uso como operando esquerda da lista IN se pelo menos um item da lista no for um parmetro dinmico. O tipo de dado do operando esquerda assumido como sendo o resultado da unio dos tipos de dado dos parmetros no dinmicos da lista.
WHERE ? NOT IN (?, ?, 'Santiago') -- tipos assumidos como sendo CHAR

4. permitido o uso na lista de valores do predicado IN, se o primeiro operando no 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 135

Manual de Referncia do Derby

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 ? 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 +.

136

Manual de Referncia do Derby

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+?)

O parmetro dinmico assumido como sendo do tipo INTEGER (porque o outro operando operador binrio + do tipo INT). Como se sabe seu tipo, permitido como operando do - unrio.

137

Manual de Referncia do Derby

Palavras reservadas do SQL


Esta seo lista todas as palavras reservadas do Derby, incluindo as do padro SQL-92. O Derby retorna erro quando se utiliza uma destas palavras chave como nome de identificador, a menos que o nome do identificador seja envolto por aspas ("). Consulte Regras para identificadores SQL92. ADD ALL ALLOCATE ALTER AND ANY ARE AS ASC ASSERTION AT AUTHORIZATION AVG BEGIN BETWEEN BIT BOOLEAN BOTH BY CALL CASCADE CASCADED CASE CAST CHAR CHARACTER CHECK CLOSE COLLATE COLLATION COLUMN COMMIT CONNECT CONNECTION CONSTRAINT CONSTRAINTS CONTINUE CONVERT CORRESPONDING COUNT CREATE CURRENT CURRENT_DATE CURRENT_TIME CURRENT_TIMESTAMP CURRENT_USER CURSOR

138

Manual de Referncia do Derby

DEALLOCATE DEC DECIMAL DECLARE 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 139

Manual de Referncia do Derby

INTERSECT INTO IS ISOLATION JOIN KEY LAST 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 140

Manual de Referncia do Derby

SCHEMA SCROLL SECOND SELECT SESSION_USER SET SMALLINT SOME SPACE SQL 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

141

Manual de Referncia do Derby

Suporte do Derby s funcionalidades do SQL-92


Existem quatro nveis de suporte ao SQL-92: SQL92E Entrada (entry) SQL92T Transicional (transitional), um nvel definido pelo NIST em uma publicao chamada FIPS 127-2 SQL92I Intermedirio (intermediate) SQL92F Completo (full) Tabela 9. Suporte s funcionalidades do SQL-92: Tipos bsicos Funcionalidade SMALLINT INTEGER DECIMAL(p,s) NUMERIC(p,s) REAL FLOAT(p) DOUBLE PRECISION CHAR(n) SQL92E SQL92E SQL92E SQL92E SQL92E SQL92E SQL92E SQL92E Origem sim sim sim sim sim sim sim sim Derby

Tabela 10. Suporte s funcionalidades do SQL-92: Operaes matemticas bsicas Funcionalidade +, *, -, /, + unrio, - unrio SQL92E Origem sim Derby

Tabela 11. Suporte s funcionalidades do SQL-92: Comparaes bsicas Funcionalidade <, >, <= ,>=, <>, = SQL92E Origem sim Derby

Tabela 12. Suporte s funcionalidades do SQL-92: Predicados bsicos Funcionalidade BETWEEN, LIKE, NULL SQL92E Origem sim Derby

Tabela 13. Suporte s funcionalidades do SQL-92: Predicados quantificados Funcionalidade IN, ALL/SOME, EXISTS SQL92E 142 Origem sim Derby

Manual de Referncia do Derby

Tabela 14. Suporte s funcionalidades do SQL-92: Definio do esquema Funcionalidade tabelas vises privilgios SQL92E SQL92E SQL92E Origem sim sim sim Derby

Tabela 15. Suporte s funcionalidades do SQL-92: Atributos das colunas Funcionalidade valor padro nulo SQL92E SQL92E Origem sim sim Derby

Tabela 16. Suporte s funcionalidades do SQL-92: Restries (no-postergveis) Funcionalidade NOT NULL UNIQUE/PRIMARY KEY FOREIGN KEY CHECK Viso com WITH CHECK OPTION SQL92E SQL92E SQL92E SQL92E SQL92E Origem Derby sim (no armazenada em SYSCONSTRAINTS) sim sim sim no, uma vez que as vises no so atualizveis

Tabela 17. Suporte s funcionalidades do SQL-92: Cursores Funcionalidade DECLARE, OPEN, FETCH, SQL92E CLOSE UPDATE, DELETE CURRENT SQL92E Origem Derby realizadas atravs do JDBC sim

Tabela 18. Suporte s funcionalidades do SQL-92: SQL dinmico 1 Funcionalidade ALLOCATE / SQL92T DEALLOCATE / GET / SET DESCRIPTOR PREPARE / EXECUTE / EXECUTE IMMEDIATE Cursor dinmico DECLARE, OPEN, FETCH, CLOSE, UPDATE, DELETE Sada DESCRIBE SQL92T SQL92T Origem Derby realizadas atravs do JDBC

realizadas atravs do JDBC realizadas atravs do JDBC

SQL92T 143

realizadas atravs do JDBC

Manual de Referncia do Derby

Tabela 19. Suporte s funcionalidades do SQL-92: Esquema de informaes bsico Funcionalidade TABLES SQL92T Origem Derby SYS.SYSTABLES, SYS.SYSVIEWS, SYS.SYSCOLUMNS SYS.SYSTABLES, SYS.SYSVIEWS, SYS.SYSCOLUMNS SYS.SYSTABLES, SYS.SYSVIEWS, SYS.SYSCOLUMNS

VIEWS

SQL92T

COLUMNS

SQL92T

Tabela 20. Suporte s funcionalidades do SQL-92: Manipulao bsica de esquema Funcionalidade CREATE / DROP TABLE CREATE / DROP VIEW GRANT / REVOKE ALTER TABLE ADD COLUMN ALTER TABLE DROP COLUMN SQL92T SQL92T SQL92T SQL92T SQL92T Origem sim sim no sim no Derby

Tabela 21. Suporte s funcionalidades do SQL-92: Tabela juntada Funcionalidade INNER JOIN juno natural LEFT, RIGHT OUTER JOIN condio de juno juno de colunas nomeada SQL92T SQL92T SQL92T SQL92T SQL92T Origem sim no sim sim sim Derby

Tabela 22. Suporte s funcionalidades do SQL-92: Tabela juntada Funcionalidade DATE, TIME, TIMESTAMP, SQL92T INTERVAL simples constantes data/hora matemtica data/hora comparaes de data/hora SQL92T SQL92T SQL92T 144 Origem Derby sim, menos INTERVAL sim pode ser feito com mtodos Java sim

Manual de Referncia do Derby

Funcionalidade predicados: OVERLAPS SQL92T

Origem

Derby pode ser feito com mtodos Java

Tabela 23. Suporte s funcionalidades do SQL-92: VARCHAR Funcionalidade LENGTH concatenao (||) SQL92T SQL92T Origem sim sim Derby

Tabela 24. Suporte s funcionalidades do SQL-92: Isolamento de transao Funcionalidade READ WRITE / READ ONLY SQL92T Origem Derby atravs do JDBC, propriedades do banco de dado e meio de armazenamento. sim

RU, RC, RR, SER

SQL92T

Tabela 25. Suporte s funcionalidades do SQL-92: Vrios esquemas por usurio Funcionalidade Viso SCHEMATA SQL92T Origem Derby SYS.SYSSCHEMAS

Tabela 26. Suporte s funcionalidades do SQL-92: Privilgios em tabelas Funcionalidade TABLE_PRIVILEGES COLUMNS_PRIVILEGES USAGE_PRIVILEGES SQL92T SQL92T SQL92T Origem no no no Derby

Tabela 27. Suporte s funcionalidades do SQL-92: Operaes de tabela Funcionalidade Relaxamento de UNION EXCEPT INTERSECT CORRESPONDING SQL92I SQL92I SQL92I SQL92I Origem sim sim sim no Derby

Tabela 28. Suporte s funcionalidades do SQL-92: Instruo de definio de esquema Funcionalidade CREATE SCHEMA SQL92I Origem Derby sim, parcialmente

145

Manual de Referncia do Derby

Tabela 29. Suporte s funcionalidades do SQL-92: Autorizao de usurio Funcionalidade SET SESSION AUTHORIZATION CURRENT_USER SESSION_USER SYSTEM_USER SQL92I SQL92I SQL92I SQL92I Origem Derby usado SET SCHEMA sim sim no

Tabela 30. Suporte s funcionalidades do SQL-92: Restries de tabela Funcionalidade TABLE CONSTRAINTS REFERENTIAL CONSTRAINTS CHECK CONSTRAINTS SQL92I SQL92I SQL92I Origem Derby SYS.SYSCONSTRAINTS SYS.SYSFOREIGNKEYS SYS.SYSCHECKS

Tabela 31. Suporte s funcionalidades do SQL-92: Esquema de documentao Funcionalidade SQL_FEATURES SQL_SIZING Origem SQL92I/FIPS 127-2 SQL92I/FIPS 127-2 Derby usado JDBC DatabaseMetaData usado JDBC DatabaseMetaData

Tabela 32. Suporte s funcionalidades do SQL-92: DATETIME completo Funcionalidade preciso para TIME e TIMESTAMP SQL92F Origem sim Derby

Tabela 33. Suporte s funcionalidades do SQL-92: Funes de caractere completa Funcionalidade Expresso POSITION Funes UPPER/LOWER SQL92F SQL92F Origem Derby usado mtodos Java ou LOCATE sim

Tabela 34. Suporte s funcionalidades do SQL-92: Diversas Funcionalidade Identificadores delimitados Subconsultas correlacionadas SQL92E SQL92E Origem sim sim Derby

146

Manual de Referncia do Derby

Funcionalidade Instrues de insero, atualizao e excluso Junes Qualificaes no WHERE GROUP BY HAVING Funes de agregao ORDER BY Expresses de seleo SELECT * SQLCODE SQLSTATE UNION, INTERSECT e EXCEPT em vises Converso numrica implcita Converso de caractere implcita Obter diagnstico Operaes agrupadas * qualificado na lista de seleo Identificadores em minsculas PRIMARY KEY com nulo Suporte a vrios mdulos Aes de excluso referencial Funes CAST Expresses INSERT Padres explcitos Relaxamento de palavra chave Definio de domnio Expresso CASE Constantes cadeia de caracteres compostas Melhorias no LIKE SQL92E SQL92E SQL92E SQL92E SQL92E SQL92E SQL92E SQL92E SQL92E SQL92E SQL92E SQL92T SQL92T SQL92T SQL92T SQL92T SQL92T SQL92T SQL92T SQL92T SQL92T SQL92T SQL92T SQL92T SQL92T SQL92I SQL92I SQL92I SQL92I 147

Origem sim sim sim sim sim sim sim sim sim

Derby

no, em obsolescncia no SQL-92 sim sim sim sim usado JDBC SQLException sim sim sim no no (no requerido e no faz parte do JDBC) CASCADE, SET NULL, RESTRICT e NO ACTION. sim sim sim sim no suporte parcial usado concatenao sim

Manual de Referncia do Derby

Funcionalidade Predicado UNIQUE Utilizao de tabelas Esquema de informao intermedirio SQL92I SQL92I SQL92I

Origem no

Derby

SYS.SYSDEPENDS usado JDBC DatabaseMetaData e tabelas do sistema do Derby no relevante para o JDBC, que muito mais rico no sim sim no no parcial (rolagem no sensvel ao conjunto de resultados atravs do JDBC 2.0) parcial suporta idiomas do Java suporta idiomas do Java sim sim sim (ADD/DROP CONSTRAINT) sim no somente sintaxe especfica da IBM no sim sim sim sim

Suporte a subprograma

SQL92I

Sinalizao SQL intermediria Manipulao de esquema Identificadores longos Juno externa completa Especificao de zona horria Cursores rolados

SQL92I SQL92I SQL92I SQL92I SQL92I SQL92I

Suporte a funes de conjunto intermedirio Definio de conjunto de caracteres Conjuntos de caracteres nomeados Valores de subconsulta escalar Predicado nulo expandido Gerenciamento de restries Tipos FOR BIT DATA Restries de assero Tabelas temporrias SQL dinmico completo Expresses de valor completa Testes de valor verdade tabelas derivadas no FROM Sublinhado no final

SQL92I SQL92I SQL92I SQL92I SQL92I SQL92I SQL92F SQL92F SQL92F SQL92F SQL92F SQL92F SQL92F SQL92F 148

Manual de Referncia do Derby

Funcionalidade Tipos de dado indicador Ordem de nome referencial Sinalizao SQL completa Construtores de linha e de tabela Qualificadores de nome de catlogo Tabelas simples Subconsultas no CHECK Juno de unio Agrupamento e traduo Aes de atualizao referenciais ALTER domnio INSERT privilgios em colunas Tipos MATCH referenciais Melhorias de CHECK em vises Gerenciamento de sesso SQL92F SQL92F SQL92F SQL92F SQL92F SQL92F SQL92F SQL92F SQL92F SQL92F

Origem

Derby no relevante para o JDBC no no sim no no no, mas pode ser feito com mtodos Java no Suportados os idiomas do Java RESTRICT e NO ACTION. As demais podem ser feitas com gatilhos. no no no no, as vises no so atualizveis usado JDBC usado JDBC sim Sim, atravs do JDBC 2.0 parcialmente no no no

SQL92F SQL92F SQL92F SQL92F SQL92F

Gerenciamento de conexo SQL92F Operaes de auto-referenciamento Cursores no sensveis Funo de conjunto completa Sinalizao de catlogo Referncias a tabela local Atualizao de cursor completa SQL92F SQL92F SQL92F SQL92F SQL92F SQL92F

149

Manual de Referncia do Derby

Tabelas do sistema Derby


O Derby inclui tabelas do sistema. As tabelas do sistema podem ser consultadas, mas no podem ser alteradas. Todas as tabelas do sistema residem no esquema SYS. Como este no o esquema padro, todas as consultas que acessam tabelas do sistema devem ser qualificadas pelo nome de esquema SYS. 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. Nome da coluna ALIASID ALIAS SCHEMAID Aceita Comprimento nulo 36 128 36 255 1 1 ' falso falso verdade falso falso falso falso

Tipo CHAR VARCHAR CHAR

Contedo identificador nico para o alis alis reservado para uso futuro o nome da classe Java 'F' (funo), 'P' (procedimento) 'F' (funo), 'P' (procedimento) verdade (fornecido pelo sistema ou alis nativo) falso (alis criado pelo usurio)

JAVACLASSNAME LONGVARCHAR ALIASTYPE CHAR

NAMESPACE CHAR SYSTEMALIAS BOOLEAN

ALIASINFO

org.apache.derby. catalog.AliasInfo: Esta classe no faz parte da API pblica

'

verdade

interface Java que encapsula informaes adicionais especficas de um alis identificador gerado pelo sistema

SPECIFICNAME VARCHAR

128

falso

SYSCHECKS
Descreve as restries de verificao no banco de dados corrente.

150

Manual de Referncia do Derby

Nome da coluna CONSTRAINTID CHECKDEFINITION

Tipo CHAR LONG VARCHAR

Aceita Comprimento nulo 36 ' falso falso

Contedo identificador nico para a restrio texto da definio da restrio de verificao descrio das colunas referenciadas pela restrio de verificao

REFERENCEDCOLUMNS org.apache.derby.catalog. ' ReferencedColumns: Esta classe no faz parte da API pblica.

falso

SYSCOLUMNS
Descreve as colunas de todas as tabelas do banco de dados corrente: Aceita Comprimento nulo 36 128 4 falso falso falso falso

Nome da coluna REFERENCEID COLUMNNAME COLUMNNUMBER COLUMNDATATYPE

Tipo CHAR CHAR INT

Contedo

identificador da tabela (juno com SYSTABLES.TABL nome da coluna ou do parmetro posio da coluna na tabela tipo do sistema que descreve a preciso, comprimento, escala, se pode ser nulo, nome do tipo, e tipo de armazenamento do dado

org.apache.derby.catalog. ' TypeDescriptor Esta classe no faz parte da API pblica.

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. verdade identificador nico para o valor padro verdade qual ser o prximo valor para a coluna,

COLUMNDEFAULTID AUTOINCREMENT COLUMNVALUE

CHAR BIGINT

36 '

151

Manual de Referncia do Derby

Nome da coluna

Tipo

Aceita Comprimento nulo

Contedo se a coluna for uma coluna identidade

AUTOINCREMENT COLUMNSTART

BIGINT

'

verdade valor inicial da coluna (se especificado), se a coluna for uma coluna de identidade verdade quantidade incrementada automaticamente no valor da coluna, se a coluna for uma coluna identidade

AUTOINCREMENT COLUMNINC

BIGINT

'

SYSCONGLOMERATES
Descreve os conglomerados do banco de dados corrente. O conglomerado uma unidade de armazenamento, sendo uma tabela ou um ndice. Aceita Comprimento nulo 36 falso

Nome da coluna SCHEMAID

Tipo CHAR

Contedo ID de esquema para o conglomerado identificador da tabela (juno com SYSTABLES.TABLEID) ID de conglomerado para o conglomerado (heap ou ndice) nome do ndice, se o conglomerado for um ndice, seno o ID da tabela indica se o conglomerado um ndice, ou no tipo do sistema descrevendo o ndice

TABLEID

CHAR

36

falso

CONGLOMERATENUMBER BIGINT

falso

CONGLOMERATENAME

VARCHAR

128

verdade

ISINDEX

BOOLEAN

falso

DESCRIPTOR

org.apache.derby. ' catalog.IndexDescriptor: Esta classe no faz parte da API pblica.

verdade

ISCONSTRAINT

BOOLEAN

verdade

indica se o conglomerado

152

Manual de Referncia do Derby

Nome da coluna

Tipo

Aceita Comprimento nulo

Contedo 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 Comprimento nulo 36 36 falso falso

Nome da coluna CONSTRAINTID TABLEID

Tipo CHAR CHAR

Contedo identificador nico para a restrio identificador para a tabela (juno com SYSTABLES.TABLEID) nome da restrio (gerado internamente se no for especificado pelo usurio) P (chave primria), U (unicidade), C (verificao) ou F (chave estrangeira) identificador do esquema ao qual a restrio pertence (juno com SYSSCHEMAS.SCHEMAID) E para habilitado (enabled), D para desabilitado (disabled) 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

CONSTRAINTNAME

VARCHAR

128

falso

TYPE

CHAR

falso

SCHEMAID

CHAR

36

falso

STATE

CHAR

falso

REFERENCECOUNT INTEGER

falso

SYSDEPENDS

153

Manual de Referncia do Derby

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). Os fornecedores so tabelas, conglomerados e restries. Os dependentes so vises. Aceita Comprimento nulo 36 falso falso

Nome da coluna DEPENDENTID DEPENDENTFINDER

Tipo CHAR

Contedo identificador nico para o dependente tipo do sistema descrevendo a viso

org.apache.derby.catalog. 1 DependableFinder: Esta classe no faz parte da API pblica. CHAR 36

PROVIDERID PROVIDERFINDER

falso falso

identificador nico para o fornecedor tipo do sistema descrevendo as tabelas, conglomerados e restries que so fornecedores

org.apache.derby.catalog. 1 DependableFinder Esta classe no faz parte da API pblica.

SYSFILES
Descreve os arquivos jar armazenados no banco de dados. Aceita Comprimento nulo 36 36 falso falso

Nome da coluna FILEID SCHEMAID

Tipo CHAR CHAR

Contedo identificador nico para o arquivo jar ID do esquema do arquivo jar (juno com SYSSCHEMAS. SCHEMAID) nome SQL do arquivo jar Nmero de gerao do arquivo. Quando os arquivos jar so substitudos, seus identificadores de gerao so alterados.

FILENAME GENERATIONID

VARCHAR BIGINT

128 '

falso falso

SYSFOREIGNKEYS

154

Manual de Referncia do Derby

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. Aceita Comprimento nulo 36 falso

Nome da coluna CONSTRAINTID

Tipo CHAR

Contedo identificador nico para a restrio de chave estrangeira (juno com SYSCONSTRAINTS. CONSTRAINTID) identificador nico para o ndice de apoio da restrio de chave estrangeira (juno com SYSCONGLOMERATES. CONGLOMERATEID) identificador nico para a restrio de chave primria ou de unicidade referenciada por esta chave estrangeira (SYSKEYS. CONSTRAINTID ou SYSCONSTRAINTS. CONSTRAINTID) R para NO ACTION (padro), S para RESTRICT, C para CASCADE, U para SET NULL R para NO ACTION(padro), S para RESTRICT

CONGLOMERATEID

CHAR

36

falso

KEYCONSTRAINTID

CHAR

36

falso

DELETERULE

CHAR

falso

UPDATERULE

CHAR

falso

SYSKEYS
Descreve as informaes especficas para as restries de chave primria e de 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 Comprimento nulo 36 36 falso falso

Nome da coluna CONSTRAINTID CONGLOMERATEID

Tipo CHAR CHAR

Contedo identificador nico para a restrio identificador nico para o ndice de apoio

SYSSCHEMAS
Descreve os esquemas no banco de dados corrente.

155

Manual de Referncia do Derby

Nome da coluna SCHEMAID SCHEMANAME AUTHORIZATIONID

Tipo CHAR

Aceita Comprimento nulo 36 falso falso falso

Contedo identificador nico para o esquema nome do esquema o identificador de autorizao do dono do esquema

VARCHAR 128 VARCHAR 128

SYSSTATISTICS
Descreve as estatsticas no banco de dados corrente. Aceita Comprimento nulo 36 36 falso falso

Nome da coluna STATID REFERENCEID

Tipo CHAR CHAR

Contedo identificador nico para a estatstica o conglomerado para o qual a estatstica foi criada (juno com SYSCONGLOMERATES. CONGLOMERATEID) a tabela para a qual a informao foi coletada momento em que a estatstica foi criada ou atualizada tipo da estatstica se a estatstica ainda vlida nmero de colunas na estatstica informao estatstica

TABLEID

CHAR

36

falso falso

CREATIONTIMESTAMP TIMESTAMP '

TYPE VALID COLCOUNT STATISTICS

CHAR BOOLEAN INTEGER

1 ' '

falso falso falso

org.apache.derby.catalog. ' verdade Statistics: Esta classe no faz parte da API pblica.

SYSSTATEMENTS
Contm uma linha por instruo preparada.

156

Manual de Referncia do Derby

Nome da coluna STMTID STMTNAME SCHEMAID TYPE VALID TEXT LASTCOMPILED

Tipo CHAR VARCHAR CHAR CHAR BOOLEAN LONG VARCHAR TIMESTAMP

Aceita Comprimento nulo 36 128 36 1 ' ' ' falso falso falso falso falso falso verdade

Contedo identificador nico para a instruo nome da instruo o esquema onde a instruo reside sempre 'S' TRUE se vlida, FALSE se invlida texto da instruo momento em que a instruo foi compilada ID do esquema contendo a instruo texto da clusula USING da instruo CREATE STATEMENT e ALTER STATEMENT

COMPILATION SCHEMAID USINGTEXT

CHAR LONG VARCHAR

36 '

falso verdade

SYSTABLES
Descreve as tabelas e vises no banco de dados corrente. Nome da coluna TABLEID TABLENAME TABLETYPE SCHEMAID Aceita Comprimento nulo 36 128 1 36 1 falso falso falso falso falso

Tipo CHAR VARCHAR CHAR CHAR

Contedo identificador nico para a tabela ou viso nome da tabela ou da viso 'S' (tabela do sistema), 'T' (tabela do usurio), ou 'V' (viso) ID do esquema da tabela ou da viso Indica a granularidade do bloqueio da tabela 'T' (bloqueio no nvel de tabela) 'R' (bloqueio no nvel de linha, o padro)

LOCK GRANULARITY CHAR

157

Manual de Referncia do Derby

SYSTRIGGERS
Descreve os gatilhos do banco de dados. Aceita Comprimento Contedo nulo 36 128 36 falso falso falso identificador nico para o gatilho nome do gatilho ID do esquema do gatilho (juno com SYSSCHEMAS. SCHEMAID) momento em que o gatilho foi criado 'U' para atualizao (update), 'D' para excluso (delete), 'I' para insero (insert) 'B' para antes (before) e 'A' para aps (after) 'R' para linha (row), 'S' para instruo (statement) 'E' para habilitado (enabled), 'D' para desabilitado (disabled) ID da tabela para a qual o gatilho foi definido

Nome da coluna TRIGGERID TRIGGERNAME SCHEMAID

Tipo CHAR VARCHAR CHAR

CREATIONTIMESTAMP TIMESTAMP EVENT CHAR

' 1

falso falso

FIRINGTIME TYPE

CHAR CHAR

1 1

falso falso

STATE

CHAR

falso

TABLEID WHENSTMTID

CHAR CHAR

36 36

falso

verdade usado somente quando existe a clusula WHEN (ainda no suportado) verdade ID da instruo preparada armazenada para a instruo-SQLengatilhada (juno com SYSSTATEMENTS. STMTID)

ACTIONSTMTID

CHAR

36

REFERENCEDCOLUMNSrg.apache.derby.catalog. verdade descritor das colunas o ' ReferencedColumns: referenciadas pelos Esta classe no gatilhos de UPDATE faz parte da API pblica. TRIGGERDEFINITION LONG VARCHAR REFERENCINGOLD BOOLEAN ' ' verdade texto da instruo SQL de ao verdade indica se OLDREFERENCINGNAME, se no for nulo, faz

158

Manual de Referncia do Derby

Nome da coluna

Tipo

Aceita Comprimento Contedo nulo 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 verdade pseudonome definido utilizando a clusula REFERENCING OLD AS verdade pseudonome definido utilizando a clusula REFERENCING NEW AS

OLDREFERENCINGNAME VARCHAR

128

NEWREFERENCINGNAME VARCHAR

128

Todo texto SQL que faz parte da instruo-SQL-engatilhada compilado e armazenado em SYSSTATEMENTS. ACTIONSTMTID e WHENSTMTID so chaves estrangeiras que fazem referncia a SYSSTATEMENTS.STMTID. As instrues para o gatilho esto sempre no mesmo esquema do gatilho.

SYSVIEWS
Descreve as definies das vises no banco de dados corrente. Aceita Comprimento nulo 36 falso

Nome da coluna TABLEID

Tipo CHAR

Contedo identificador nico para a viso (chamada TABLEID uma vez que feita a juno com uma coluna com este nome em SYSTABLES) texto da definio da viso 'N' (opo de verificao, ainda no suportada) ID do esquema que contm a viso

VIEWDEFINITION CHECKOPTION

LONG VARCHAR CHAR

' 1

falso falso

COMPILATION SCHEMAID

CHAR

36

falso

159

Manual de Referncia do Derby

Mensagens de exceo e estados SQL do Derby


O driver de JDBC retorna SQLException para todos os erros do Derby. Se a exceo for originria de um tipo do usurio, mas no for em si mesma uma SQLException, a exceo ser envolta por uma SQLException. As SQLException especficas do Derby utilizam cdigos de classe SQLState comeados por X. retornado o valor padro de SQLState para a exceo quando apropriado. Aspectos no implementados do driver de JDBC retornam uma SQLException com uma mensagem declarando "Funcionalidade no implementada", e um SQLState igual a XJZZZ. Estas partes no implementadas so de funcionalidades no suportadas pelo Derby. 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.

Referncia de SQLState e mensagem de erro


As tabelas a seguir listam os SQLState para as excees. As excees que comeam por X so especficas do Derby. Deve ser observado que alguns SQLState especficos do cliente da rede podero mudar nas verses futuras. Tabela 35. Cdigo de classe 01: Advertncia SQLSTATE 01003 0100E 01500 01501 01502 01503 01504 01505 01522 01J01 01J02 01J03 Texto da mensagem Null values were eliminated from the argument of a column function. XX Attempt to return too many result sets. The constraint <constraintName> on table <tableName> has been dropped. The view <viewName> has been dropped. The trigger <triggerName> on table <tableName> has been dropped. The column <columnName> on table <tableName> has been modified by adding a not null constraint. The new index is a duplicate of an existing index: <index>. The value <valueName> may be truncated. The newly defined synonym '<synonymName>' resolved to the object '<objectName>' which is currently undefined. Database '<databaseName>' not created, connection made to existing database instead. Scroll sensitive cursors are not currently implemented. Scroll sensitive and scroll insensitive updatable ResultSets are not currently implemented.

160

Manual de Referncia do Derby

SQLSTATE 01J04

Texto da mensagem The class '<className>' for column '<columnName>' does not implement java.io.Serializable or java.sql.SQLData. Instances must implement one of these interfaces to allow them to be stored. Database upgrade succeeded. The upgraded database is now ready for use. Revalidating stored prepared statements failed. See next exception for details about failure. ResultSet not updatable. Query does not qualify to generate an updatable ResultSet.

01J05

01J06

Tabela 36. Cdigo de classe 04: Autenticao no banco de dados SQLSTATE 04501 Texto da mensagem Database connection refused.

Tabela 37. Cdigo de classe 07: Erro de SQL dinmico SQLSTATE 07000 07004 Texto da mensagem At least one parameter to the current statement is uninitialized. Parameter <parameterName> is a <procedureName> procedure parameter and must be registered with CallableStatement.registerOutParameter before execution. No input parameters.

07009

Tabela 38. Cdigo de classe 08: Exceo de conexo SQLSTATE 08000 08003 08004 08006 Texto da mensagem Connection closed by unknown interrupt. No current connection. Connection refused : <connectionName> Database '<databaseName>'

Tabela 39. Cdigo de classe 0A: Funcionalidade no suportada SQLSTATE 0A000 Texto da mensagem Feature not implemented: <featureName>.

Tabela 40. Cdigo de classe 21: Violao de cardinalidade SQLSTATE 21000 Texto da mensagem Scalar subquery is only allowed to return a single row.

Tabela 41. Cdigo de classe 22: Exceo de dado

161

Manual de Referncia do Derby

SQLSTATE 2200L 22001 22003 22005 22007 22007 22008 22011 22012 22013 22014

Texto da mensagem XMLPARSE operand is not an XML document; see next exception for details. A truncation error was encountered trying to shrink <value> '<value>' to length <value> The resulting value is outside the range for the data type <datatypeName>. An attempt was made to get a data value of type '<typeName>' from a data value of type '<typeName>'. The string representation of a datetime value is out of range. The syntax of the string representation of a datetime value is incorrect. '<argument>' is an invalid argument to the <functionName> function. The second or third argument of the SUBSTR function is out of range. Attempt to divide by zero. Attempt to take the square root of a negative number, '<number>'. The start position for LOCATE is invalid; it must be a positive integer. The index to start the search from is '<index>'. The string to search for is '<index>'. The string to search from is '<index>'. The '<functionName>' function is not allowed on the following set of types. First operand is of type '<typeName>'. Second operand is of type '<typeName>'. Third operand (start position) is of type '<typeName>'. Invalid character string format for type <typeName>. Invalid escape sequence, '<sequenceName>'. The escape string must be exactly one character. It cannot be a null or more than one character. Escape character must be followed by escape character, _, or %. It cannot be followed by any other character or be at the end of the pattern. The built-in TRIM() function only supports a single trim character. The LTRIM() and RTRIM() built-in functions support multiple trim characters. An ESCAPE clause of NULL returns undefined results and is not allowed.

22015

22018 22019 22025 22027 22501

Tabela 42. Cdigo de classe 23: Violao de restrio SQLSTATE 23502 23503 Texto da mensagem Column '<columnName>' cannot accept a NULL value. <value> on table '<tableName>' caused a violation of foreign key constraint '<constraintName>' for key <keyName>. The statement has been rolled back. The statement was aborted because it would have caused a duplicate key value in a unique or primary key constraint or unique index identified by '<value>' defined on '<value>'. The check constraint '<constraintName>' was violated while performing an INSERT or UPDATE on table '<tableName>'.

23505

23513

162

Manual de Referncia do Derby

Tabela 43. Cdigo de classe 24: Estado do cursor invlido SQLSTATE 24000 Texto da mensagem Invalid cursor state - no current row.

Tabela 44. Cdigo de classe 25: Estado da transao invlido SQLSTATE 25000 25501 25502 25503 25505 Invalid transaction state. Unable to set the connection read-only property in an active transaction. An SQL data change is not permitted for a read-only connection, user or database. DDL is not permitted for a read-only connection, user or database. A read-only user or a user in a read-only database is not permitted to disable read-only mode on a connection. Texto da mensagem

Tabela 45. Cdigo de classe 28: Especificao de autorizao invlida SQLSTATE 28501 28502 28503 28504 Texto da mensagem Invalid database authorization property '<value>=<value>'. The user name '<userName>' is not valid. User(s) '<userName>' must not be in both read-only and full-access authorization lists. Repeated user(s) '<userName>' in access list '<listName>'.

Tabela 46. Cdigo de classe 38: Exceo de funo externa SQLSTATE 38000 38001 38002 38004 Texto da mensagem The exception '<exception>' was thrown while evaluating an expression. The external routine is not allowed to execute SQL statements. The routine attempted to modify data, but the routine was not defined as MODIFIES SQL DATA. The routine attempted to read data, but the routine was not defined as READS SQL DATA.

Tabela 47. Cdigo de classe 39: Exceo de funo externa SQLSTATE 39004 Texto da mensagem A NULL value cannot be passed to a method which takes a parameter of primitive type '<type>'.

Tabela 48. Cdigo de classe 3B: SAVEPOINT invlido

163

Manual de Referncia do Derby

SQLSTATE 3B001 3B002 3B501 3B502

Texto da mensagem SAVEPOINT, <savepoint> does not exist or is not active in the current transaction. The maximum number of savepoints has been reached. A SAVEPOINT with the passed name already exists in the current transaction. A RELEASE or ROLLBACK TO SAVEPOINT was specified, but the savepoint does not exist.

Tabela 49. Cdigo de classe 40: Transao desfeita SQLSTATE 40001 40XC0 40XD0 40XD1 40XD2 40XL1 40XL2 40XT0 40XT1 40XT2 40XT4 40XT5 40XT6 40XT7 Texto da mensagem A lock could not be obtained due to a deadlock, cycle of locks and waiters is: <value>. The selected victim is XID : <value>. Dead statement. This may be caused by catching a transaction severity error inside this statement. Container has been closed. Container was opened in read-only mode. Container <containerName> cannot be opened; it either has been dropped or does not exist. A lock could not be obtained within the time requested. A lock could not be obtained within the time requested. The lockTable dump is: <tableDump>. An internal error was identified by RawStore module. An exception was thrown during transaction commit. An exception was thrown during rollback of a SAVEPOINT. An attempt was made to close a transaction that was still active. The transaction has been aborted. Exception thrown during an internal transaction. Database is in quiescent state, cannot activate transaction. Please wait for a moment until it exits the inactive state. Operation is not supported in an internal transaction.

Tabela 50. Cdigo de classe 42: Erro de sintaxe ou violao de regra de acesso SQLSTATE 42000 42601 42601 Texto da mensagem Syntax error or access rule violation; see additional errors for details. ALTER TABLE statement cannot add an IDENTITY column to a table. In an ALTER TABLE statement, the column '<columnName>' has been specified as NOT NULL and either the DEFAULT clause was not specified or was specified as DEFAULT NULL. The number of arguments for function '<functionName>' is incorrect.

42605

164

Manual de Referncia do Derby

SQLSTATE 42606 42610

Texto da mensagem An invalid hexadecimal constant starting with '<number>' has been detected. All the arguments to the COALESCE/VALUE function cannot be parameters. The function needs at least one argument that is not a parameter. The length, precision, or scale attribute for column, or type mapping '<value>' is not valid. Multiple or conflicting keywords involving the '<clause>' clause are present. A check constraint or generated column that is defined with '<value>' is invalid. The name '<name>' is too long. The maximum length is '<maximumLength>'. Name '<name>' specified in context '<context>' is not unique. The number of values assigned is not the same as the number of specified or implied columns. An expression containing the column '<columnName>' appears in the SELECT list and is not part of a GROUP BY clause. The replacement value for '<value>' is invalid. The data type, length or value of arguments '<firstArguement>' and '<secondArguement>' is incompatible. Comparisons between '<value>' and '<value>' are not supported. The floating point literal '<string>' contains more than 30 characters. Columns of type '<type>' cannot hold values of type '<type>'. An operand of LIKE is not a string, or the first operand is not a column. '<columnName>' cannot be a column of a primary key or unique key because it can contain null values. SET NULL cannot be specified because FOREIGN KEY '<key>' cannot contain null values. ALTER TABLE '<tableName>' specified attributes for column '<columnName>' that are not compatible with the existing column. Cannot convert types '<type>' to '<type>'. A qualified column name '<columnName>' is not allowed in the ORDER BY clause. No authorized routine named '<routineName>' of type '<type>' having compatible arguments was found. '<value>' parameter '<value>' requires a parameter marker '<parameter>'. DEFAULT value or IDENTITY attribute value is not valid for column '<columnName>'. Only one identity column is allowed in a table.

42611 42613 42621 42622 42734 42802 42803 42815 42815 42818 42820 42821 42824 42831 42834 42837 42846 42877 42884 42886 42894 428C1 428EK

165

Manual de Referncia do Derby

SQLSTATE

Texto da mensagem The qualifier for a declared global temporary table name must be SESSION.

42903 42908 42915 42916 42939 42962 42972 42995 42X01 42X02 42X03 42X04

Invalid use of an aggregate function. The CREATE VIEW statement does not include a column list. Foreign Key '<key>' is invalid because '<value>'. Synonym '<synonym2>' cannot be created for '<synonym1>' as it would result in a circular synonym chain. An object cannot be created with the schema name '<nome-do-esquema>'. Long column type column or parameter '<columnName>' not permitted in declared global temporary tables or procedure definitions. An ON clause associated with a JOIN operator is not valid. The requested function does not apply to global temporary tables. Syntax error: <error>. <value>. Column name '<columnName>' is in more than one table in the FROM list. Column '<columnName>' is either not in any table in the FROM list or appears within a join specification and is outside the scope of the join specification or appears in a HAVING clause and is not in the GROUP BY list. If this is a CREATE or ALTER TABLE statement then '<columnName>' is not a column in the target table. Table '<tableName>' does not exist. Too many result columns specified for table '<tableName>'. Null is only allowed in a VALUES clause within an INSERT statement. The constructor for class '<className>' cannot be used as an external virtual table because the class does not implement '<constructorName>'. The table or alias name '<tableName>' is used more than once in the FROM list. '<tableName>' is not an exposed table name in the scope in which it appears. Column name '<tableName>' appears more than once in the CREATE TABLE statement. Column name '<columnName>' appears more than once in the column list of an INSERT statement. '<columnName>' is not a column in table or VTI '<value>'. Column name '<columnName>' appears in a statement without a FROM list. Column name '<columnName>' appears multiple times in the SET clause of an UPDATE statement. In the Properties list of a FROM clause, the value '<value>' is not valid as a joinOrder specification. Only the values FIXED and UNFIXED are valid. 166

42X05 42X06 42X07 42X08 42X09 42X10 42X12 42X13 42X14 42X15 42X16 42X17

Manual de Referncia do Derby

SQLSTATE 42X19 42X23 42X25 42X26 42X28 42X29 42X30 42X31 42X32 42X33 42X34 42X35 42X36 42X37 42X38 42X39 42X40 42X41 42X42 42X43

Texto da mensagem The WHERE or HAVING clause or CHECK CONSTRAINT definition is a '<value>' expression. It must be a BOOLEAN expression. Cursor <cursorName> is not updatable. The '<functionName>' function is not allowed on the '<type>' type. The class '<className> for column '<columnName>' does not exist or is inaccessible. This can happen if the class is not public. Delete table '<tableName>' is not target of cursor '<cursorName>'. Update table '<tableName>' is not the target of cursor '<cursorName>'. Cursor '<cursorName>' not found. Verify that autocommit is OFF. Column '<columnName>' is not in the FOR UPDATE list of cursor '<cursorName>'. The number of columns in the derived column list must match the number of columns in table '<tableName>'. The derived column list contains a duplicate column name '<columnName>'. There is a ? parameter in the select list. This is not allowed. It is not allowed for both operands of '<value>' to be ? parameters. The '<operator>' operator is not allowed to take a ? parameter as an operand. The unary '<operator>' operator is not allowed on the '<type>' type. 'SELECT *' only allowed in EXISTS and NOT EXISTS subqueries. Subquery is only allowed to return a single column. A NOT statement has an operand that is not boolean . The operand of NOT must evaluate to TRUE, FALSE, or UNKNOWN. In the Properties clause of a FROM list, the property '<propertyName>' is not valid (the property was being set to '<value>'). Correlation name not allowed for column '<columnName>' because it is part of the FOR UPDATE list. The ResultSetMetaData returned for the class/object '<className>' was null. In order to use this class as an external virtual table, the ResultSetMetaData cannot be null. Invalid length '<length>' in column specification. <type> is an invalid type for argument number <value> of <value>. Value '<value>' is not a valid precision for <value>. Value '<value>' is not a valid integer literal. No method was found that matched the method call <methodName>.<value>(<value>), tried all combinations of object and primitive types and any possible type conversion for any parameters the method call may have. The method might exist but it is not public and/or static, or the parameter types are not method invocation convertible.

42X44 42X45 42X48 42X49 42X50

167

Manual de Referncia do Derby

SQLSTATE 42X51 42X52 42X53 42X54 42X55 42X56

Texto da mensagem The class '<className>' does not exist or is inaccessible. This can happen if the class is not public. Calling method ('<methodName>') using a receiver of the Java primitive type '<type>" is not allowed. The LIKE predicate can only have 'CHAR' or 'VARCHAR' operands. Type '<type>' is not permitted. The Java method '<methodName>' has a ? as a receiver. This is not allowed. Table name '<tableName>' should be the same as '<value>'. The number of columns in the view column list does not match the number of columns in the underlying query expression in the view definition for '<value>'. The getColumnCount() for external virtual table '<tableName>' returned an invalid value '<value>'. Valid values are greater than or equal to 1. The number of columns on the left and right sides of the <tableName> must be the same. The number of columns in each VALUES constructor must be the same. Invalid value '<value>' for insertMode property specified for table '<tableName>'. Types '<type>' and '<type>' are not <value> compatible. '<value>' is not allowed in the '<nome-do-esquema>' schema. The USING clause did not return any results. No parameters can be set. In the Properties list, the invalid value '<value>' was specified for the useStatistics property. The only valid values are TRUE or FALSE . Index '<index>' does not exist. Column name '<columnName>' appears more than once in the CREATE INDEX statement. No field '<fieldName>' was found belonging to class '<className>'. The field might exist, but it is not public, or the class does not exist or is not public. It is not allowed to reference a field ('<fieldName>') using a referencing expression of the Java primitive type '<type>'. No static field '<fieldName>' was found belonging to class '<className>'. The field might exist, but it is not public and/or static, or the class does not exist or the class is not public. Method resolution for signature <value>.<value>(<value>) was ambiguous. (No single maximally specific method.) Invalid CALL statement syntax. No constructor was found with the signature <value>(<value>). It may be that the parameter types are not method invocation convertible. At least one column, '<columnName>', in the primary key being added is nullable. All columns in a primary key must be non-nullable.

42X57 42X58 42X59 42X60 42X61 42X62 42X63 42X64 42X65 42X66 42X68

42X69 42X72

42X73 42X74 42X75 42X76

168

Manual de Referncia do Derby

SQLSTATE 42X77 42X78 42X79 42X80 42X82 42X83 42X84 42X85 42X86 42X87 42X88 42X89 42X90 42X91 42X92 42X93 42X94 42X96 42X98 42Y00

Texto da mensagem Column position '<columnPosition>' is out of range for the query expression. Column '<columnName>' is not in the result of the query expression. Column name '<columnName>' appears more than once in the result of the query expression. VALUES clause must contain at least one element. Empty elements are not allowed. The USING clause returned more than one row. Only single-row ResultSets are permissible. The constraints on column '<columnName>' require that it be both nullable and not nullable. Index '<index>' was created to enforce constraint '<constraintName>'. It can only be dropped by dropping the constraint. Constraint '<constraintName>' is required to be in the same schema as table '<tableName>'. ALTER TABLE failed. There is no constraint '<constraintName>' on table '<tableName>'. At least one result expression (THEN or ELSE) of the '<expresso>' expression must not be a '?'. A conditional has a non-boolean operand. The operand of a conditional must evaluate to TRUE, FALSE, or UNKNOWN. Types '<type>' and '<type>' are not type compatible. Neither type is assignable to the other type. More than one primary key constraint specified for table '<tableName>'. Constraint name '<constraintName>' appears more than once in the CREATE TABLE statement. Column name '<columnName>' appears more than once in a constraint's column list. Table '<tableName>' contains a constraint definition with column '<columnName>' which is not in the table. <value> '<value>' does not exist. The database classpath contains an unknown jar file '<fileName>'. Parameters are not allowed in a VIEW definition. Class '<className>' does not implement org.apache.derby.iapi.db.AggregateDefinition and thus cannot be used as an aggregate expression. Constraint '<constraintName>' is invalid. '<statement>' is not recognized as a function or procedure. Cannot create a procedure or function with EXTERNAL NAME '<name>' because it is not a list separated by periods. The expected format is <fulljavapath>.<method name>. There is no Foreign Key named '<key>'. 169

42Y01 42Y03 42Y04

42Y05

Manual de Referncia do Derby

SQLSTATE 42Y07 42Y08 42Y09 42Y10

Texto da mensagem Schema '<nome-do-esquema>' does not exist. Foreign key constraints are not allowed on system tables. Void methods are only allowed within a CALL statement. A table constructor that is not in an INSERT statement has all ? parameters in one of its columns. For each column, at least one of the rows must have a non-parameter. A join specification is required with the '<clauseName>' clause. The ON clause of a JOIN is a '<expressionType>' expression. It must be a BOOLEAN expression. Column name '<columnName>' appears more than once in the CREATE VIEW statement. No public static method '<methodName>' was found in class '<className>'. The method might exist, but it is not public, or it is not static. '<columnName>' appears multiple times in the GROUP BY list. Columns in the GROUP BY list must be unambiguous. Aggregate <aggregateType> cannot operate on type <type>. Incorrect JDBC type info returned for column <columnName>. View '<viewName>' is not updatable. (Views are currently not updatable.) '<tableName>' is a system table. Users are not allowed to modify the contents of this table. Parameters are not allowed in the trigger action. The SELECT list of a non-grouped query contains at least one invalid expression. When the SELECT list contains at least one aggregate then all entries must be valid aggregate expressions. The SELECT list of a grouped query contains at least one invalid expression. If a SELECT list has a GROUP BY, the list may only contain grouping columns and valid aggregate expressions. Aggregator class '<className> aggregate '<aggregateName>' on type <type> does not implement com.ibm.db2j.aggregates.Aggregator. Aggregate <aggregateName> contains one or more aggregates. Column name '<columnName>' matches more than one result column in table '<tableName>'. Column reference '<reference>' is invalid. When the SELECT list contains at least one aggregate then all entries must be valid aggregate expressions. Column reference '<value>' is invalid. For a SELECT list with a GROUP BY, the list may only contain grouping columns and valid aggregate expressions. '<value>' is a Java primitive and cannot be used with this operator.
insertMode = replace

42Y11 42Y12 42Y13 42Y16

42Y19 42Y22 42Y23 42Y24 42Y25 42Y27 42Y29

42Y30

42Y32 42Y33 42Y34 42Y35

42Y36

42Y37 42Y38

170

Manual de Referncia do Derby

SQLSTATE

Texto da mensagem is not permitted on an insert where the target table, '<tableName>', is referenced in the SELECT.

42Y39 42Y40 42Y41 42Y42 42Y43 42Y44 42Y45 42Y46 42Y48

'<value>' may not appear in a CHECK CONSTRAINT definition because it may return non-deterministic results. '<value>' appears multiple times in the UPDATE OF column list for trigger '<triggerName>'. '<value>' cannot be directly invoked via EXECUTE STATEMENT because it is part of a trigger. Scale '<scaleValue>' is not a valid scale for a <value>. Scale '<scaleValue>' is not a valid scale with precision of '<precision>'. Invalid key '<key>' specified in the Properties list of a FROM list. The case-sensitive keys that are currently supported are '<key>'. VTI '<value>' cannot be bound because it is a special trigger VTI and this statement is not part of a trigger action or WHEN clause. Invalid Properties list in FROM list. There is no index '<index>' on table '<tableName>'. Invalid Properties list in FROM list. Either there is no named constraint '<constraintName>' on table '<tableName>' or the constraint does not have a backing index. Multiple values specified for property key '<key>'. Properties list for table '<tableName>' may contain values for index or for constraint but not both. '<value>' cannot be performed on '<value>' because it does not exist. Invalid join strategy '<strategyValue>' specified in Properties list on table '<tableName>'. The currently supported values for a join strategy are:
hash

42Y49 42Y50 42Y55 42Y56

and
nestedloop

. 42Y58 42Y59 42Y60 42Y61 42Y62 42Y63 NumberFormatException occurred when converting value '<value>' for optimizer override '<value>'. Invalid value, '<value>', specified for hashInitialCapacity override. Value must be greater than 0. Invalid value, '<value>', specified for hashLoadFactor override. Value must be greater than 0.0 and less than or equal to 1.0. Invalid value, '<value>' specified for hashMaxCapacity override. Value must be greater than 0. '<value>' is not allowed on '<value>' because it is a view. Hash join requires an optimizable equijoin predicate on a column in the selected index or heap. An optimizable equijoin predicate does not

171

Manual de Referncia do Derby

SQLSTATE

Texto da mensagem exist on any column in table or index '<index>'. Use the 'index' optimizer override to specify such an index or the heap on table '<tableName>'.

42Y64 42Y65 42Y66 42Y67 42Y69

bulkFetch value of '<value>' is invalid. The minimum value for bulkFetch is 1. bulkFetch is not permitted on '<joinType>' joins. bulkFetch is not permitted on updatable cursors. Schema '<nome-do-esquema>' cannot be dropped. No valid execution plan was found for this statement. This may have one of two causes: either you specified a hash join strategy when hash join is not allowed (no optimizable equijoin) or you are attempting to join two external virtual tables, each of which references the other, and so the statement cannot be evaluated. The user specified an illegal join order. This could be caused by a join column from an inner table being passed as a parameter to an external virtual table. System function or procedure '<procedureName>' cannot be dropped. System generated stored prepared statement '<statement>' that cannot be dropped using DROP STATEMENT. It is part of a trigger. An untyped null is not permitted as an argument to aggregate <aggregateName>. Please cast the null to a suitable type. '<value>' may not appear in a DEFAULT definition. The DEFAULT keyword is only allowed in a VALUES clause when the VALUES clause appears within an INSERT statement. FOR UPDATE is not permitted in this type of statement. The USING clause is not permitted in an EXECUTE STATEMENT for a trigger action. <triggerName> triggers may only reference <value> transition variables/tables. Illegal REFERENCING clause: only one name is permitted for each type of transition variable/table. An AND or OR has a non-boolean operand. The operands of AND and OR must evaluate to TRUE, FALSE, or UNKNOWN. The '<operatorName>' operator with a left operand type of '<operandType>' and a right operand type of '<operandType>' is not supported. Invalid escape character at line '<lineNumber>', column '<columnName>'. Multiple DISTINCT aggregates are not supported at this time. Aggregates are not permitted in the ON clause. Bulk insert replace is not permitted on '<value>' because it has an enabled trigger (<value>). Invalid type specified for column '<columnName>'. The type of a column may not be changed. 172

42Y70

42Y71 42Y82 42Y83 42Y84 42Y85 42Y90 42Y91 42Y92 42Y93 42Y94 42Y95

42Y97 42Z02 42Z07 42Z08 42Z15

Manual de Referncia do Derby

SQLSTATE 42Z16 42Z17 42Z18

Texto da mensagem Only columns of type VARCHAR may have their length altered. Invalid length specified for column '<columnName>'. Length must be greater than the current column length. Column '<columnName>' is part of a foreign key constraint '<constraintName>'. To alter the length of this column, you should drop the constraint first, perform the ALTER TABLE, and then recreate the constraint. Column '<columnName>' is being referenced by at least one foreign key constraint '<constraintName>'. To alter the length of this column, you should drop referencing constraints, perform the ALTER TABLE, and then recreate the constraints. Column '<columnName>' cannot be made nullable. It is part of a primary key, which cannot have any nullable columns. Invalid increment specified for identity for column '<columnName>'. Increment cannot be zero. Invalid type specified for identity column '<columnName>'. The only valid types for identity columns are BIGINT, INT and SMALLINT. Attempt to modify an identity column '<columnName>'. Overflow occurred in identity value for column '<columnName>' in table '<tableName>'. INTERNAL ERROR identity counter. Update was called without arguments with
current value = NULL

42Z19

42Z20 42Z21 42Z22 42Z23 42Z24 42Z25

. 42Z26 42Z27 42Z50 42Z53 42Z90 42Z91 42Z92 42Z93 42Z97 42Z99 42Z9A 42Z9B A column, '<columnName>', with an identity default cannot be made nullable. A nullable column, '<columnName>', cannot be modified to have identity default. INTERNAL ERROR: Unable to generate code for <value>. INTERNAL ERROR: Do not know what type of activation to generate for node choice <value>. Class '<className>' does not return an updatable ResultSet. subquery repeatable read Constraints '<constraintName>' and '<constraintName>' have the same set of columns, which is not allowed. Renaming column '<columnName>' will cause check constraint '<constraintName>' to break. String or Hex literal cannot exceed 64K. read uncommitted The external virtual table interface does not support BLOB or CLOB columns. '<value>' column '<value>'. 173

Manual de Referncia do Derby

SQLSTATE 42Z9D 42Z9E 42Z9F

Texto da mensagem '<statement>' statements are not allowed in '<triggerName>' triggers. Constraint '<constraintName>' is not a <value> constraint. Too many indexes (<index>) on the table <tableName>. The limit is <number>.

Tabela 51. Cdigo de classe XOX: Exceo de execuo SQLState X0X02 X0X03 X0X05 X0X07 X0X0E X0X0F X0X10 X0X11 X0X13 X0X14 X0X15 X0X16 X0X17 X0X18 X0X57 Texto da mensagem Table '<tableName>' cannot be locked in '<mode>' mode. Invalid transaction state - held cursor requires same isolation level Table '<tableName>' does not exist. Cannot drop jar file '<fileName>' because its on your db2j.database.classpath '<classpath>'. The column position '<columnPosition>' listed in the auto-generated column selection array was not found in the insert table. Column name '<columnName>' listed in auto-generated column selection array not found in the insert table. The USING clause returned more than one row; only single-row ResultSets are permissible. The USING clause did not return any results so no parameters can be set. Jar file '<fileName>' does not exist in schema '<nome-do-esquema>'. Binding directly to an XML value is not allowed; try using XMLPARSE. XML values are not allowed in top-level result sets; try using XMLSERIALIZE. XML syntax error; missing keyword(s): '<keywords>'. Invalid target type for XMLSERIALIZE: '<value>'. XML feature not supported: '<featureName>'. An attempt was made to put a Java value of type '<type>' into a SQL value, but there is no corresponding SQL type. The Java value is probably the result of a method call or field access. A cursor with name '<cursorName>' already exists. The values for column '<value>' in index '<value>' and table '<value>.<value>' do not match for row location <value>. The value in the index is '<value>', while the value in the base table is '<value>'. The full index key, including the row location, is '<value>'. The suggested corrective action is to recreate the index. Inconsistency found between table '<tableName>' and index '<index>'. Error when trying to retrieve row location '<rowLocation>' from the table. The full index key, including the row location, is '<index>'. The suggested corrective action is to recreate the index. Got IOException '<value>'.

X0X60 X0X61

X0X62

X0X63

174

Manual de Referncia do Derby

SQLState X0X67

Texto da mensagem Columns of type '<type>' may not be used in CREATE INDEX, ORDER BY, GROUP BY, UNION, INTERSECT, EXCEPT or DISTINCT statements because comparisons are not supported for that type. <value> '<value>' does not exist. Index '<index>' was not created because '<type>' is not a valid index type. 0 is an invalid parameter value for
ResultSet.absolute(int row)

X0X81 X0X85 X0X86

. X0X87
ResultSet.relative(int row)

cannot be called when the cursor is not positioned on a row. X0X95 X0X99 X0XML Operation '<operation>' cannot be performed on object '<object>' because there is an open ResultSet dependent on that object. Index '<index>' does not exist. Encountered unexpected error while processing XML; see next exception for details.

Tabela 52. Cdigo de classe X0Y: Excees de execuo SQLSTATE X0Y16 X0Y23 X0Y24 X0Y25 X0Y26 X0Y28 X0Y32 X0Y38 X0Y41 Texto da mensagem '<value>' is not a view. If it is a table, then use DROP TABLE instead. Operation '<operation>' cannot be performed on object '<object>' because VIEW '<viewName>' is dependent on that object. Operation '<operation>' cannot be performed on object '<object>' because STATEMENT '<statement>' is dependent on that object. Operation '<value>' cannot be performed on object '<value>' because <value> '<value>' is dependent on that object. Index '<index>' is required to be in the same schema as table '<tableName>'. Index '<index>' cannot be created on system table '<tableName>'. Users cannot create indexes on system tables. <value> '<value>' already exists in <value> '<value>'. Cannot create index '<index>' because table '<tableName>' does not exist. Constraint '<constraintName>' is invalid because the referenced table <tableName> has no primary key. Either add a primary key to <tableName> or explicitly specify the columns of a unique constraint that this foreign key references. Constraint '<constraintName>' is invalid: the types of the foreign key columns do not match the types of the referenced columns

X0Y42

175

Manual de Referncia do Derby

SQLSTATE X0Y43

Texto da mensagem Constraint '<value>' is invalid: the number of columns in <value> (<value>) does not match the number of columns in the referenced key (<value>). Constraint '<constraintName>' is invalid: there is no unique or primary key constraint on table '<tableName>' that matches the number and types of the columns in the foreign key. Foreign key constraint '<constraintName>' cannot be added to or enabled on table <tableName> because one or more foreign keys do not have matching referenced keys. Constraint '<constraintName>' is invalid: referenced table <tableName> does not exist. Schema '<nome-do-esquema>' cannot be dropped because it is not empty. The number of rows in the base table does not match the number of rows in at least 1 of the indexes on the table. Index '<value>' on table '<value>.<value>' has <value> rows, but the base table has <value> rows. The suggested corrective action is to recreate the index. '<value>' is not allowed on the System table '<value>'. A non-nullable column cannot be added to table '<tableName>' because the table contains at least one row. Non-nullable columns can only be added to empty tables. Attempt to add a primary key constraint to table '<tableName>' failed because the table already has a constraint of that type. A table can only have a single primary key constraint. Attempt to add or enable constraint(s) on table '<tableName>' failed because the table contains <rowName> row(s) that violate the following check constraint(s): <constraintName>. The command on table '<tableName>' failed because null data was found in the primary key or unique constraint/index column(s). All columns in a primary or unique index key must not be null. Cannot issue commit in a nested connection when there is a pending operation in the parent connection. Cannot issue rollback in a nested connection when there is a pending operation in the parent connection. <value> '<value>' already exists. <value> is not permitted because trigger <triggerName> is active on <value>. INSERT, UPDATE and DELETE are not permitted on table <tableName> because trigger <triggerName> is active. Transaction manipulation such as SET ISOLATION is not permitted because trigger <triggerName> is active. Bulk insert replace is not permitted on '<value>' because it has an enabled trigger (<value>).

X0Y44

X0Y45

X0Y46 X0Y54 X0Y55

X0Y56 X0Y57

X0Y58

X0Y59

X0Y63

X0Y66 X0Y67 X0Y68 X0Y69 X0Y70 X0Y71 X0Y72

176

Manual de Referncia do Derby

SQLSTATE X0Y77

Texto da mensagem Cannot issue set transaction isolation statement on a global transaction that is in progress because it would have implicitly committed the global transaction. Statement.executeQuery() cannot be called with a statement that returns a row count. Statement.executeUpdate() cannot be called with a statement that returns a ResultSet. ALTER table '<tableName>' failed. Null data found in column '<columnName>'. WARNING: While deleting a row from a table the index row for base table row <rowName> was not found in index with conglomerate id <id>. This problem has automatically been corrected as part of the delete operation.

X0Y78 X0Y79 X0Y80 X0Y83

Tabela 53. Cdigo de classe XBCA: CacheService SQLSTATE XBCA0 Texto da mensagem Cannot create new object with key <key> in <cache> cache. The object already exists in the cache.

Tabela 54. Cdigo de classe XBCM: ClassManager SQLSTATE XBCM1 XBCM2 XBCM3 Texto da mensagem Java linkage error thrown during load of generated class <className>. Cannot create an instance of generated class <className>. Method <methodName> () does not exist in generated class <className>.

Tabela 55. Cdigo de classe XBCX: Criptografia SQLSTATE XBCX0 XBCX1 XBCX2 XBCX5 XBCX6 XBCX7 XBCX8 XBCX9 XBCXA Texto da mensagem Exception from Cryptography provider. See next exception for details. Initializing cipher with illegal mode, must be either ENCRYPT or DECRYPT. Initializing cipher with a boot password that is too short. The password must be at least <number> characters long. Cannot change boot password to null. Cannot change boot password to a non-string serializable type. Wrong format for changing boot password. Format must be : old_boot_password, new_boot_password. Cannot change boot password for a non-encrypted database. Cannot change boot password for a read-only database. Wrong boot password.

177

Manual de Referncia do Derby

SQLSTATE XBCXB XBCXC XBCXD XBCXE XBCXF XBCXG XBCXH XBCXI XBCXJ

Texto da mensagem Bad encryption padding '<value>' or padding not specified. 'NoPadding' must be used. Encryption algorithm '<algorithmName>' does not exist. Please check that the chosen provider '<providerName>' supports this algorithm. The encryption algorithm cannot be changed after the database is created. The encryption provider cannot be changed after the database is created. The class '<className>' representing the encryption provider cannot be found. The encryption provider '<providerName>' does not exist. The encryptionAlgorithm '<algorithmName>' is not in the correct format. The correct format is algorithm/feedbackMode/NoPadding. The feedback mode '<mode>' is not supported. Supported feedback modes are CBC, CFB, OFB and ECB. The application is using a version of the Java Cryptography Extension (JCE) earlier than 1.2.1. Please upgrade to JCE 1.2.1 and try the operation again. The given encryption key does not match the encryption key used when creating the database. Please ensure that you are using the correct encryption key and try again. The verification process for the encryption key was not successful. This could have been caused by an error when accessing the appropriate file to do the verification process. See next exception for details.

XBCXK

XBCXL

Tabela 56. Cdigo de classe XBM: Monitor SQLSTATE XBM01 XBM02 XBM05 XBM06 XBM07 XBM08 XBM0G Texto da mensagem Startup failed due to an exception. See next exception for details. Startup failed due to missing functionality for <value>. Please ensure your classpath includes the correct Derby Derby software. Startup failed due to missing product version information for <value>. Startup failed. An encrypted database cannot be accessed without the correct boot password. Startup failed. Boot password must be at least 8 bytes long. Could not instantiate <value> StorageFactory class <value>. Failed to start encryption engine. Please make sure you are running Java 2 and have downloaded an encryption provider such as jce and put it in your classpath. Directory <directoryName> cannot be created. Directory <directoryName> cannot be removed. Directory <directoryName> already exists. Unknown sub-protocol for database name <databaseName>. 178

XBM0H XBM0I XBM0J XBM0K

Manual de Referncia do Derby

SQLSTATE XBM0L XBM0M XBM0N XBM0P XBM0Q XBM0R XBM0S XBM0T XBM0U XBM0V XBM0W XBM0X

Texto da mensagem Specified authentication scheme class <className> does implement the authentication interface <interfaceName>. Error creating instance of authentication scheme class <className>. JDBC Driver registration with java.sql.DriverManager failed. See next exception for details. Service provider is read-only. Operation not permitted. File <fileName> not found. Please make sure that backup copy is the correct one and it is not corrupted. Unable to remove file <fileName>. Unable to rename file '<fileName>' to 'fileName>' Ambiguous sub-protocol for database name <databaseName>. No class was registered for identifier <identifierName>. An exception was thrown while loading class <className> registered for identifier <identifierName>. An exception was thrown while creating an instance of class <className> registered for identifier <identifierName>. Supplied territory description '<value>' is invalid, expecting ln[_CO[_variant]] ln=lower-case two-letter ISO-639 language code, CO=upper-case two-letter ISO-3166 country codes, see java.util.Locale. Backup database directory <directoryName> not found. Please make sure that the specified backup path is right. Unable to copy file '<value>' to '<value>'. Please make sure that there is enough space and permissions are correct.

XBM0Y XBM0Z

Tabela 57. Cdigo de classe XCL: Non-SQLSTATE SQLSTATE XCL01 XCL05 XCL07 XCL08 XCL09 XCL10 XCL12 XCL13 XCL14 Texto da mensagem ResultSet does not return rows. Operation <operationName> not permitted. Activation closed. Operation <operationName> not permitted. Cursor '<cursorName>' is closed. Verify that autocommit is OFF. Cursor '<cursorName>' is not on a row. An Activation was passed to the '<methodName>' method that does not match the PreparedStatement. A PreparedStatement has been recompiled and the parameters have changed. If you are using JDBC you must prepare the statement again. An attempt was made to put a data value of type '<type>' into a data value of type '<type>'. The parameter position '<parameterPosition>' is out of range. The number of parameters for this prepared statement is '<number>'. The column position '<value>' is out of range. The number of columns for this ResultSet is '<number>'. 179

Manual de Referncia do Derby

SQLSTATE XCL15

Texto da mensagem A ClassCastException occurred when calling the compareTo() method on an object '<object>'. The parameter to compareTo() is of class 'className>'. ResultSet not open. Operation '<operation>' not permitted. Verify that autocommit is OFF. Statement not allowed in this database. Missing row in table '<tableName>' for key '<key>'. Catalogs at version level '<versionLevel>' cannot be upgraded to version level '<versionLevel>'. You are trying to execute a Data Definition statement (CREATE, DROP, or ALTER) while preparing a different statement. This is not allowed. It can happen if you execute a Data Definition statement from within a static initializer of a Java class that is being used from within a SQL statement. Parameter <parameterName> cannot be registered as an OUT parameter because it is an IN parameter. SQL type number '<type>' is not a supported type by registerOutParameter(). Parameter <parameterName> appears to be an output parameter, but it has not been so designated by registerOutParameter(). If it is not an output parameter, then it has to be set to type <type>. Parameter <parameterName> cannot be registered to be of type <type> because it maps to type <type> and they are incompatible. Parameter <parameterName> is not an output parameter. Return output parameters cannot be set. An IOException was thrown when reading a '<value>' from an InputStream. Statement closed. The table cannot be defined as a dependent of table <tableName> because of delete rule restrictions. (The relationship is self-referencing and a self-referencing relationship already exists with the SET NULL delete rule.) The table cannot be defined as a dependent of table <tableName> because of delete rule restrictions. (The relationship forms a cycle of two or more tables that cause the table to be delete-connected to itself (all other delete rules in the cycle would be CASCADE)). The table cannot be defined as a dependent of table <tableName> because of delete rule restrictions. (The relationship causes the table to be delete-connected to the indicated table through multiple relationships and the delete rule of the existing relationship is SET NULL). The delete rule of foreign key must be <ruleName>. (The referential constraint is self-referencing and an existing self-referencing constraint has the indicated delete rule (NO ACTION, RESTRICT or CASCADE).)

XCL16 XCL17 XCL19 XCL20 XCL21

XCL22 XCL23 XCL24

XCL25 XCL26 XCL27 XCL30 XCL31 XCL33

XCL34

XCL35

XCL36

180

Manual de Referncia do Derby

SQLSTATE XCL37

Texto da mensagem The delete rule of foreign key must be <ruleName>. (The referential constraint is self-referencing and the table is dependent in a relationship with a delete rule of CASCADE.) The delete rule of foreign key must be <ruleName>. (The relationship would cause the table to be delete-connected to the same table through multiple relationships and such relationships must have the same delete rule (NO ACTION, RESTRICT or CASCADE).) The delete rule of foreign key cannot be CASCADE. (A self-referencing constraint exists with a delete rule of SET NULL, NO ACTION or RESTRICT.) The delete rule of foreign key cannot be CASCADE. (The relationship would form a cycle that would cause a table to be delete-connected to itself. One of the existing delete rules in the cycle is not CASCADE, so this relationship may be definable if the delete rule is not CASCADE.) the delete rule of foreign key can not be CASCADE. (The relationship would cause another table to be delete-connected to the same table through multiple paths with different delete rules or with delete rule equal to SET NULL.) CASCADE SET NULL RESTRICT NO ACTION SET DEFAULT Use of '<value>' requires database to be upgraded from version <versionNumber> to version <versionNumber> or later. TRUNCATE TABLE is not permitted on '<value>' because unique/primary key constraints on this table are referenced by enabled foreign key constraints from other tables. TRUNCATE TABLE is not permitted on '<value>' because it has an enabled DELETE trigger (<value>). Upgrading the database from a previous version is not supported. The database being accessed is at version level 'versionNumber>', this software is at version level '<versionNumber>'. The requested function cannot reference tables in SESSION schema.

XCL38

XCL39

XCL40

XCL41

XCL42 XCL43 XCL44 XCL45 XCL46 XCL47 XCL48

XCL49 XCL50

XCL51

Tabela 58. Cdigo de classe XCW: Atualizao no suportada SQLSTATE XCW00 Texto da mensagem Unsupported upgrade from '<value>' to '<value>'.

Tabela 59. Cdigo de classe XCXA: Erro de anlise de ID SQLSTATE XCXA0 Invalid identifier. Texto da mensagem

181

Manual de Referncia do Derby

Tabela 60. Cdigo de classe XCXB: DB_Class_Path_Parse_Error SQLSTATE XCXB0 Texto da mensagem Invalid database classpath: '<classpath>'.

Tabela 61. Cdigo de classe XCXC: Erro de anlise de lista de ID SQLSTATE XCXC0 Invalid id list. Texto da mensagem

Tabela 62. Cdigo de classe XCXE: Sem idioma SQLSTATE XCXE0 Texto da mensagem You are trying to do an operation that uses the territory of the database, but the database does not have a territory.

Tabela 63. Cdigo de classe XCY: Propriedades SQLSTATE XCY00 XCY02 XCY03 Texto da mensagem Invalid value for property '<value>'='<value>'. The requested property change is not supported '<value>'='<value>'. Required property '<propertyName>' has not been set.

Tabela 64. Cdigo de classe XCZ: org.apache.derby.database.UserUtility SQLSTATE XCZ00 XCZ01 XCZ02 Texto da mensagem Unknown permission '<permissionName>'. Unknown user '<userName>'. Invalid parameter '<value>'='<value>'.

Tabela 65. Cdigo de classe XD00x: Gerenciador de dependncias SQLSTATE XD003 XD004 Texto da mensagem Unable to restore dependency from disk. DependableFinder = '<value>'. Further information: '<value>'. Unable to store dependencies.

Tabela 66. Cdigo de classe XIE: Importao/Exportao SQLSTATE XIE01 XIE03 XIE04 Connection was null. Data found on line <lineNumber> for column <columnName> after the stop delimiter. Data file not found: <fileName>. Texto da mensagem

182

Manual de Referncia do Derby

SQLSTATE XIE05 XIE06 XIE07 XIE08 XIE09 XIE0B XIE0D XIE0E XIE0I XIE0J XIE0K XIE0M Data file cannot be null. Entity name was null.

Texto da mensagem

Field and record separators cannot be substrings of each other. There is no column named: <columnName>. The total number of columns in the row is: <number>. Column '<columnName>' in the table is of type <type>, it is not supported by the import/export feature. Cannot find the record separator on line <lineNumber>. Read endOfFile at unexpected place on line <lineNumber. An IOException occurred while writing data to the file. A delimiter is not valid or is used more than once. The period was specified as a character string delimiter. Table '<tableName>' does not exist.

Tabela 67. Cdigo de classe XJ: Erros de conectividade SQLSTATE XJ004 XJ009 XJ010 XJ011 XJ012 XJ013 XJ014 XJ015 XJ016 XJ017 XJ018 XJ020 XJ022 XJ023 XJ025 XJ028 XJ030 XJ040 Texto da mensagem Database '<databaseName>' not found. Use of CallableStatement required for stored procedure call or use of output parameters: <value> Cannot issue savepoint when autoCommit is on. Cannot pass null for savepoint name. '<value>' already closed. No ID for named savepoints. No name for un-named savepoints. Derby system shutdown. Method '<methodName>' not allowed on prepared statement. No savepoint command allowed inside the trigger code. Column name cannot be null. Object type not convertible to TYPE '<typeName>', invalid java.sql.Types value, or object was null. Unable to set stream: '<name>'. Input stream held less data than requested length. Input stream cannot have negative length. The URL '<urlValue>' is not properly formed. Cannot set AUTOCOMMIT ON when in a nested connection. Failed to start database '<databaseName>', see the next exception for details.

183

Manual de Referncia do Derby

SQLSTATE XJ041 XJ042 XJ044 XJ045

Texto da mensagem Failed to create database '<databaseName>', see the next exception for details. '<value>' is not a valid value for property '<propertyName>'. '<value>' is an invalid scale. Invalid or (currently) unsupported isolation level, '<value>', passed to Connection.setTransactionIsolationLevel(). The currently supported values are java.sql.Connection.TRANSACTION_SERIALIZABLE, java.sql.Connection.TRANSACTION_REPEATABLE_READ, java.sql.Connection.TRANSACTION_READ_COMMITTED, and java.sql.Connection.TRANSACTION_READ_UNCOMMITTED. Conflicting create attributes specified. Batch cannot contain a command that attempts to return a result set. CallableStatement batch cannot contain output parameters. Cannot set AUTOCOMMIT ON when in an XA connection. Cannot commit a global transaction using the Connection. Commit processing must go through XAResource interface. Cannot rollback a global transaction using the Connection, commit processing must go through XAResource interface. Cannot close a connection while a global transaction is still active. JDBC attribute '<attributeName>' has an invalid value '<value>', Valid values are '<value>'. Cannot set holdability ResultSet.HOLD_CURSORS_OVER_COMMIT for a global transaction. The '<valueName>' method is only allowed on scroll cursors. Invalid parameter value '<value>' for ResultSet.setFetchSize(int rows). Invalid parameter value '<value>' for Statement.setMaxRows(int maxRows). Parameter value must be >= 0. Invalid parameter value '<value>' for setFetchDirection(int direction). Invalid parameter value '<value>' for Statement.setFetchSize(int rows). Invalid parameter value '<value>' for Statement.setMaxFieldSize(int max). SQL text pointer is null. Only executeBatch and clearBatch allowed in the middle of a batch. No SetXXX methods allowed in case of USING execute statement. Negative or zero position argument '<argument>' passed in a Blob or Clob method. Zero or negative length argument '<argument>' passed in a BLOB or CLOB method. Null pattern or searchStr passed in to a BLOB or CLOB position method. The data in this BLOB or CLOB is no longer available. The BLOB or CLOB's transaction may be committed, or its connection is closed. 184

XJ049 XJ04B XJ04C XJ056 XJ057 XJ058 XJ059 XJ05B XJ05C XJ061 XJ062 XJ063 XJ064 XJ065 XJ066 XJ067 XJ068 XJ069 XJ070 XJ071 XJ072 XJ073

Manual de Referncia do Derby

SQLSTATE XJ076 XJ077 XJ080 XJ081 XJ081

Texto da mensagem The position argument '<argument>' exceeds the size of the BLOB/CLOB. Got an exception when trying to read the first byte/character of the BLOB/CLOB pattern using getBytes/getSubString. USING execute statement passed <numparameters> parameters rather than <numparameters>. Conflicting create/restore/recovery attributes specified. Invalid value '<value>' passed as parameter '<parameterName>' to method '<moduleName>'.

Tabela 68. Cdigo de classe XSAIx: Armazenamento - access.protocol.interface statement exceptions SQLSTATE XSAI2 XSAI3 Texto da mensagem The conglomerate (<value>) requested does not exist. Feature not implemented.

Tabela 69. Cdigo de classe XSAMx: Armazenamento - AccessManager SQLSTATE XSAM0 XSAM2 XSAM3 XSAM4 XSAM5 XSAM6 Texto da mensagem Exception encountered while trying to boot module for '<value>'. There is no index or conglomerate with conglom id '<conglomID>' to drop. There is no index or conglomerate with conglom id '<conglomID>'. There is no sort called '<sortName>'. Scan must be opened and positioned by calling next() before making other calls. Record <recordnumber> on page <page> in container <containerName> not found.

Tabela 70. Cdigo de classe XSASx: Armazenamento - Sort SQLSTATE XSAS0 XSAS1 XSAS3 XSAS6 Texto da mensagem A scan controller interface method was called which is not appropriate for a scan on a sort. An attempt was made to fetch a row before the beginning of a sort or after the end of a sort. The type of a row inserted into a sort does not match the sorts template. Could not acquire resources for sort.

Tabela 71. Cdigo de classe XSAXx: Armazenamento - access.protocol.XA statement exception

185

Manual de Referncia do Derby

SQLSTATE XSAX0 XSAX1 XA protocol violation.

Texto da mensagem

An attempt was made to start a global transaction with an Xid of an existing global transaction.

Tabela 72. Cdigo de classe XSCBx: Armazenamento - BTree SQLSTATE XSCB0 XSCB1 XSCB2 XSCB3 XSCB4 Texto da mensagem Could not create container. Container <containerName> not found. The required property <propertyName> not found in the property list given to createConglomerate() for a btree secondary index. Unimplemented feature. A method on a btree open scan was called prior to positioning the scan on the first row (that is, no next() call has been made yet). The current state of the scan is (<value>). During logical undo of a btree insert or delete, the row could not be found in the tree. Limitation: Record of a btree secondary index cannot be updated or inserted due to lack of space on the page. Use the parameters derby.storage.pageSize and/or derby.storage.pageReservedSpace to work around this limitation. An internal error was encountered during a btree scan - current_rh is null = <value>, position key is null = <value>. The btree conglomerate <value> is closed. Reserved for testing.

XSCB5 XSCB6

XSCB7 XSCB8 XSCB9

Tabela 73. Cdigo de classe XSCG0: Conglomerado SQLSTATE XSCG0 Texto da mensagem Could not create a template.

Tabela 74. Cdigo de classe XSCHx: Heap SQLSTATE XSCH0 XSCH1 XSCH4 XSCH5 Texto da mensagem Could not create container. Container <containerName> not found. Conglomerate could not be created. In a base table there was a mismatch between the requested column number <columnnumber> and the maximum number of columns <maxcol>. The heap container with container id <containerID> is closed. The scan is not positioned.

XSCH6 XSCH7

186

Manual de Referncia do Derby

SQLSTATE XSCH8

Texto da mensagem The feature is not implemented.

Tabela 75. Cdigo de classe XSDAx: RawStore - Data.Generic statement exceptions SQLSTATE XSDA1 XSDA2 XSDA3 Texto da mensagem An attempt was made to access an out of range slot on a page. An attempt was made to update a deleted record. Limitation: Record cannot be updated or inserted due to lack of space on the page. Use the parameters derby.storage.pageSize and/or derby.storage.pageReservedSpace to work around this limitation. An unexpected exception was thrown. An attempt was made to undelete a record that was not deleted. Column <column> of row is null, it needs to be set to point to an object. Restore of a serializable or SQLData object of class <className>, attempted to read more data than was originally stored. Exception during restore of a serializable or SQLData object of class <className>. Class not found during restore of a serializable or SQLData object of class <className>. Illegal time stamp <timestamp>, either time stamp is from a different page or of incompatible implementation. Cannot set a null time stamp. Attempt to move either rows or pages from one container to another. Attempt to move zero rows from one page to another. Can only make a record handle for special record handle IDs. Using special record handle as if it were a normal record handle. The allocation nested top transaction cannot open the container Page <page> being removed is already locked for deallocation. Exception during write of a serializable or SQLData object. The wrong page was retrieved for record handle <value>. Record handle <value> unexpectedly points to overflow page.

XSDA4 XSDA5 XSDA6 XSDA7 XSDA8 XSDA9 XSDAA XSDAB XSDAC XSDAD XSDAE XSDAF XSDAG XSDAI XSDAJ XSDAK XSDAL

Tabela 76. Cdigo de classe XSDBx: RawStore - Data.Generic transaction exceptions SQLSTATE XSDB0 XSDB1 XSDB2 XSDB3 187 Texto da mensagem Unexpected exception on in-memory page <page>. Unknown page format at page <page>. Unknown container format at container <containerName> : <value>.

Manual de Referncia do Derby

SQLSTATE

Texto da mensagem Container information cannot change once written: was <value>, now <value>.

XSDB4

Page <page> is at version <value> but the log file contains change version <value>. Either the log records for this page are missing or this page was not written to disk properly. Log has change record on page <page>, which is beyond the end of the container. Another instance of Derby may have already booted the database <value>. WARNING: Derby (instance <value>) is attempting to boot the database <value> even though Derby (instance <value>) might still be active. Only one instance of Derby should boot a database at a time. Severe and non-recoverable corruption can result and might have already occurred. WARNING: Derby (instance <value>) is attempting to boot the database <value> even though Derby (instance <value>) might still be active. Only one instance of Derby should boot a database at a time. Severe and non-recoverable corruption can result if two instances of Derby boot on the same database at the same time. The db2j.database.forceDatabaseLock=true property is set so the database will not boot until the db.lck is no longer present. Normally this file is removed when the first instance of Derby to boot on the database exits. However, it is not removed in some shutdowns. If the file is not removed, you must remove it manually. It is important to verify that no other VM is accessing the database before manually deleting the db.lck file. Stream container <containerName> is corrupt. Attempt to allocate object <object> failed.

XSDB5 XSDB6 XSDB7

XSDB8

XSDB9 XSDBA

Tabela 77. Cdigo de classe XSDFx: RawStore - Data.Filesystem statement exceptions SQLSTATE XSDF0 XSDF1 XSDF2 XSDF3 XSDF4 XSDF6 XSDF7 XSDF8 XSDFB XSDFD Texto da mensagem Could not create file <fileName> as it already exists. Exception during creation of file <fileName> for container. Exception during creation of file <fileName> for container, file could not be removed. The exception was: <value>. Cannot create segment <segmentName>. Exception during remove of file <fileName> for dropped container, file could not be removed <value>. Cannot find the allocation page <page>. Newly created page failed to be latched <value>. Cannot find page <page> to reuse. Operation not supported by a read only database. Different page image read on two I/Os on Page <page>. The first image has an incorrect checksum, the second image has a correct checksum. Page images follows: <value> <value>. 188

Manual de Referncia do Derby

SQLSTATE XSDFF

Texto da mensagem The requested operation failed due to an unexpected exception.

Tabela 78. Cdigo de classe XSDGx: RawStore - Data.Filesystem database exceptions SQLSTATE XSDG0 XSDG1 XSDG2 XSDG3 XSDG5 XSDG6 Texto da mensagem Page <page> could not be read from disk. Page <page> could not be written to disk, please check if disk is full. Invalid checksum on Page <page>, expected=<value>, on-disk version=<value>, page dump follows: <value>. Meta-data for Container <containerName> could not be accessed. Database is not in create mode when createFinished is called. Data segment directory not found in <value> backup during restore. Please make sure that backup copy is the right one and it is not corrupted. Directory <directoryName> could not be removed during restore. Please make sure that permissions are correct. Unable to copy directory '<directoryName>' to '<value>' during restore. Please make sure that there is enough space and permissions are correct.

XSDG7 XSDG8

Tabela 79. Cdigo de classe XSLAx: RawStore - Log.Generic database exceptions SQLSTATE XSLA0 XSLA1 XSLA2 XSLA3 XSLA4 Texto da mensagem Cannot flush the log file to disk <value>. Log Record has been sent to the stream, but it cannot be applied to the store (Object <object>). This may cause recovery problems also. An IOException occurred while accessing the log file. The system will shut down. The log file is corrupt. The log stream contains invalid data. Unable to write to the log, most likely because the log is full. It is also possible that the file system is read-only, the disk failed, or another problem occurred with the media. Delete unnecessary files. Cannot read log stream for some reason to rollback transaction <value>. Cannot recover the database. Cannot redo operation <operation> in the log. Cannot rollback transaction <value>, trying to compensate <value> operation with <value>. The store has been marked for shutdown by an earlier exception. Cannot find log file <logfileName>. Verify that the logDevice property is set with the correct path separator for your platform. Database at <value> have incompatible format with the current version of software, it may have been created by or upgraded by a later version. 189

XSLA5 XSLA6 XSLA7 XSLA8 XSLAA XSLAB XSLAC

Manual de Referncia do Derby

SQLSTATE XSLAD XSLAE XSLAF XSLAH XSLAI XSLAJ

Texto da mensagem Log record at instance <value> in log file <logfileName> is corrupted. Expected log record length <value>, actual length <value>. Control file at <value> cannot be written or updated. A read-only database was created with dirty data buffers. A read-only database is being updated. Cannot log the checkpoint log record. The log record size <value> exceeds the maximum allowable log file size <maxSize>. An error was encountered in log file <fileName>, position <value>. Database has exceeded largest log file number <value>. The log record size <value> exceeds the maximum allowable log file size <maxSize>. An error was encountered in log file <fileName>, position <value>. Cannot verify database format at <value> due to IOException. Database at <value> has an incompatible format with the current version of the software. The database was created by or upgraded by version <version>. Recovery failed. Unexpected problem <value>. Database at <value> is at version <version>. Beta databases cannot be upgraded. Cannot create log file at directory <directory>. Unable to copy log file '<logfileName>' to '<value>' during restore. Please make sure that there is enough space and permissions are correct. Log directory <directory> not found in backup during restore. Please make sure that backup copy is the correct one and it is not corrupted. Log directory <directory> exists. Please make sure specified logDevice location is correct.

XSLAK XSLAL

XSLAM XSLAN

XSLAO XSLAP XSLAQ XSLAR XSLAS XSLAT

Tabela 80. Cdigo de classe XSLBx: RawStore - Log.Generic statement exceptions SQLSTATE XSLB1 Texto da mensagem Log operation <logoperation> encounters error writing itself out to the log stream, this could be caused by an errant log operation or internal log buffer full due to excessively large log operation. Log operation <logoperation> logging excessive data, it filled up the internal log buffer. Cannot find truncationLWM <value>. Illegal truncationLWM instance <value> for truncation point <value>. Legal range is from <value> to <value>. Trying to log a 0 or -ve length log Record. Trying to reset a scan to <value>, beyond its limit of <value>. Unable to issue any more changes. Log factory has been stopped. 190

XSLB2 XSLB4 XSLB5 XSLB6 XSLB8 XSLB9

Manual de Referncia do Derby

Tabela 81. Cdigo de classe XSRSx: RawStore - protocol.Interface statement exceptions SQLSTATE XSRS0 XSRS1 XSRS4 XSRS5 XSRS6 XSRS7 XSRS8 XSRS9 Texto da mensagem Cannot freeze the database after it is already frozen. Cannot backup the database to <value>, which is not a directory. Error renaming file (during backup) from <value> to <value>. Error copying file (during backup) from <path> to <path>. Cannot create backup directory <directoryName>. Backup caught unexpected exception. Log device can only be set during database creation time, it cannot be changed after the database is created. Record <recordName> no longer exists.

Tabela 82. Cdigo de classe XSTA2: XACT_TRANSACTION_ACTIVE SQLSTATE XSTA2 Texto da mensagem A transaction was already active when an attempt was made to activate another transaction.

Tabela 83. Cdigo de classe XSTBx: RawStore - Transactions.Basic system exceptions SQLSTATE XSTB0 XSTB2 XSTB3 XSTB5 XSTB6 Texto da mensagem An exception was thrown during transaction abort. Unable to log transaction changes, possibly because the database is read-only. Cannot abort transaction because the log manager is null, probably due to an earlier error. Creating database with logging disabled encountered unexpected problem. Cannot substitute a transaction table with another while one is already in use.

Tabela 84. Cdigo de classe XXXXX : No SQLSTATE SQLSTATE XXXXX Texto da mensagem Normal database session close.

191

Manual de Referncia do Derby

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 captulo fornece informaes de referncia sobre a implementao da API do JDBC do Derby, e documenta sua conformidade com as APIs 2.0 e 3.0 do JDBC. Consulte o Guia do Desenvolvedor do Derby para obter instrues orientadas a tarefa sobre como trabalhar com este driver. 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. A implementao de JDBC do Derby fornece acesso aos bancos de dados do Derby, e fornece todas as interfaces JDBC requeridas. Os aspectos no implementados do driver de JDBC retornam uma SQLException com uma mensagem declarando "Funcionalidade no implementada", e SQLState igual a XJZZZ. As partes no implementadas so de funcionalidades no suportadas pelo Derby.

Classes, interfaces e mtodos java.sql do ncleo do JDBC


Esta seo detalha a implementao no Derby das seguintes classes, interfaces e mtodos java.sql: java.sql.Driver java.sql.DriverManager.getConnection java.sql.Driver.getPropertyInfo java.sql.Connection java.sql.DatabaseMetaData java.sql.Statement java.sql.PreparedStatement java.sql.CallableStatement java.sql.ResultSet java.sql.ResultSetMetaData java.sql.SQLException java.sql.SQLWarning Mapeamento de java.sql.Types em tipos SQL

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. 192

Manual de Referncia do Derby

new org.apache.derby.jdbc.EmbeddedDriver() O mesmo que Class.forName("org.apache.derby.jdbc.EmbeddedDriver"), exceto por requerer que a classe seja encontrada quando o cdigo compilado. Class c = org.apache.derby.jdbc.EmbeddedDriver.class Tambm o mesmo que Class.forName("org.apache.derby.jdbc.EmbeddedDriver"), exceto por requerer que a classe seja encontrada quando o cdigo compilado. O campo pseudo-esttico class resulta na classe nomeada. Definio da propriedade do sistema jdbc.drivers Para definir uma propriedade do sistema, deve ser alterada a linha de comando da chamada, ou as propriedades do sistema no aplicativo. No possvel alterar as propriedades do sistema em uma applet.
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. A nica maneira suportada para conectar ao sistema Derby atravs do protocolo jdbc:derby: utilizando DriverManager para obter o driver (java.sql.Driver) ou a conexo (java.sql.Connection), atravs das chamadas de mtodo getDriver e getConnection.

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. DriverManager.getConnection pode receber um argumento, alm da URL de conexo com o banco de dados, que um objeto Properties. O objeto Properties pode ser utilizado para definir atributos da URL de conexo com o banco de dados. Tambm podem ser fornecidas cadeias de caracteres representando nomes de usurios e senhas. Quando so fornecidos, o Derby verifica se so vlidos para o sistema corrente, se a autenticao de usurio estiver habilitada. Os nomes de usurio so passados para o Derby como identificadores de autorizao, utilizados para determinar se o usurio est autorizado a acessar o banco de dados, e para determinar o esquema padro. Quando a conexo estabelecida, se no for fornecido um usurio, o Derby define o usurio padro como APP, que o Derby utiliza para dar nome ao esquema padro. Se for fornecido um usurio, o nome de esquema padro ser o mesmo nome do usurio.

Sintaxe da URL de conexo com banco de dados Derby


A URL de conexo com o banco de dados Derby consiste da URL de conexo com o banco de dados bsica, seguida por um subsubprotocolo opcional e atributos opcionais. 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. 193

Manual de Referncia 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)

O caminhoArquivo o caminho para o arquivo jar ou zip que contm o banco de dados, e inclui o nome do arquivo jar ou zip. Para obter exemplos de URLs de conexo com bancos de dados apenas-de-leitura deve ser consultado o Guia do Desenvolvedor do Derby. nomeBancoDados Deve ser especificado o nomeBancoDados para se conectar a um banco de dados existente ou a um banco de dados novo. Pode ser especificado apenas o nome do banco de dados, ou junto com um caminho absoluto ou relativo. Consulte "Conexes padro - Conectar a bancos de dados no sistema de arquivos", no captulo 1 do Guia do Desenvolvedor do Derby. atributos So especificados zero ou mais atributos da URL de conexo com banco de dados, conforme detalhado em Atributos da URL de conexo com o banco de dados Derby.

Sintaxe SQL adicional


O Derby tambm suporta a seguinte sintaxe do padro SQL para obter uma referncia conexo corrente em um procedimento ou mtodo JDBC do lado do servidor:
jdbc:default:connection

Atributos da URL de conexo com o banco de dados Derby

194

Manual de Referncia do Derby

Pode ser fornecida uma lista de atributos, opcional, para a URL de conexo com o banco de dados. O Derby traduz estes atributos em propriedades, portanto tambm podem ser definidos atributos no objeto Properties passado para DriverManager.getConnection (Estes atributos no podem ser definidos como propriedades do sistema, somente em um objeto passado para o mtodo DriverManager.getConnection). Estes atributos so especficos do Derby, sendo listados em Definio de atributos para a URL de conexo com o banco de dados. Os pares nome/valor do atributo so convertidos em propriedades, e adicionados s propriedades fornecidas na chamada de conexo. Se no for fornecida nenhuma propriedade na chamada da conexo, ser criado um conjunto de propriedades contendo apenas as propriedades obtidas da URL de conexo com o banco de dados.
import java.util.Properties; Connection conn = DriverManager.getConnection( "jdbc:derby:bancoAmostra;create=true"); -- definio de um atributo no objeto Properties Properties minhasPropriedades = new Properties(); minhasPropriedades.put("create", "true"); Connection conn = DriverManager.getConnection( "jdbc:derby:bancoAmostra", minhasPropriedades); -- passagem do nome do usurio e da senha Connection conn = DriverManager.getConnection( "jdbc:derby:bancoAmostra", "dba", "senha");

Note: Os atributos no so analisados quanto correo. Se for passado um atributo, ou seu valor correspondente, incorreto, este ser simplesmente ignorado (O Derby fornece uma ferramenta para analisar a correo dos atributos. Para obter mais informaes deve ser consultado o Guia das Ferramentas e Utilitrios do Derby).

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)

No deve ser requisitado a org.apache.derby.jdbc.EmbeddedDriver, que somente uma classe intermediria que carrega o driver real. 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. Por exemplo, se o sistema Derby possuir os bancos de dados bancoTurismo e bancoVoos no seu diretrio de sistema, estiver configurado para inicializar automaticamente todos os bancos de dados quando o sistema inicializado, e o usurio 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.

195

Manual de Referncia do Derby

Para obter mais informaes sobre java.sql.Driver.getPropertyInfo deve ser consultado "Oferecimento de escolhas de conexo para o usurio", no captulo 8 do Guia do Desenvolvedor do Derby.

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. TRANSACTION_READ_COMMITTED o nvel de isolamento padro. 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.

Funcionalidades de conexo no suportadas


O Derby no utiliza nomes de catlogo; os mtodos getCatalog e setCatalog resultam na SQLException "Funcionalidade no implementada", com SQLState igual a XJZZZ.

java.sql.DatabaseMetaData
Esta sesso discute a funcionalidade de java.sql.DatabaseMetaData no Derby.

196

Manual de Referncia do Derby

Conjuntos de resultados DatabaseMetaData


Os conjuntos de resultados DatabaseMetaData no fecham os conjuntos de resultados das outras instrues, mesmo quanto a auto-efetivao (auto-commit) est ativa. Os conjuntos de resultados DatabaseMetaData so fechados se o usurio realizar qualquer outra ao em um objeto JDBC que faa com que ocorra um COMMIT automtico. Se houver necessidade dos conjuntos de resultados DatabaseMetaData ficarem acessveis enquanto se executa outras aes que causam COMMIT automtico, dever ser desativada a auto-efetivao utilizando setAutoCommit(false).

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. getProcedureColumns retorna um ResultSet. Cada linha descreve um nico parmetro ou o valor retornado.

Parmetros para getProcedureColumns


A API do JDBC define os seguintes parmetros para a chamada deste mtodo: 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.

Colunas do ResultSet retornado por getProcedureColumns


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 197

Manual de Referncia do Derby

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.

Funcionalidades de DatabaseMetaData no suportadas


Na verso corrente, o Derby no fornece todas as funcionalidades de DatabaseMetaData. As seguintes requisies de JDBC resultam em conjuntos de resultados vazios, no formato requerido pela API do JDBC: getColumnPrivileges getTablePrivileges O Derby no implementa privilgios e, portanto, no possui informaes para fornecer para estas chamadas. getBestRowIdentifier procura pelos identificadores nesta ordem: chave primria da tabela restrio de unicidade ou ndice nico na tabela todas as colunas da tabela 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.

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. Por exemplo, se ocorrer um erro de diviso-por-zero quando o mtodo executeQuery for chamado por java.sql.Statement ou java.sql.PreparedStatement, ser lanada uma exceo e no ser retornado nenhum conjunto de resultados, enquanto que, se ocorrer o mesmo erro quando o mtodo next for chamado no objeto ResultSet, isto no far com que o conjunto de resultados seja fechado.

198

Manual de Referncia do Derby

Podem ocorrer erros durante a criao do ResultSet, se o sistema executar parcialmente a consulta antes da primeira linha ser trazida. Isto pode acontecer em qualquer consulta que utiliza mais de uma tabela, e em consultas que utilizam agregaes, GROUP BY, ORDER BY, DISTINCT, INTERSECT, EXCEPT e UNION. 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. Pode ser utilizado o mtodo setCursorName no PreparedStatement, antes da requisio de execuo, para controlar o nome do cursor usado quando o cursor criado.

Instrues preparadas e colunas de fluxo


As requisies setXXXStream realizam um fluxo de dados entre o aplicativo e o banco de dados. 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, 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 Valores da coluna CLOB CHAR Tipo AsciiStream UnicodeStream BinaryStream correspondente java.sql.Clob ' 199 x x x x ' '

Manual de Referncia do Derby

Valores da coluna VARCHAR LONGVARCHAR BINARY BLOB VARBINARY

Tipo AsciiStream UnicodeStream BinaryStream correspondente ' ' ' java.sql.Blob ' x X x x x x x X x x x x ' ' x x x X

LONGVARBINARY '

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(); 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()

CallableStatement e parmetros OUT


200

Manual de Referncia do Derby

O Derby suporta todos os parmetros OUT e instrues CALL que retornam valores, conforme mostrado no exemplo a seguir:
CallableStatement cs = conn.prepareCall( "? = CALL getDriverType(cast (? as INT))" cs.registerOutParameter(1, Types.INTEGER); cs.setInt(2, 35); cs.executeUpdate();

Note: A utilizao da instruo CALL com um procedimento que retorna valor somente suportada atravs da sintaxe ? =. Deve ser registrado o tipo de dado de sada do parmetro antes de executar a chamada.

CallableStatement e parmetros INOUT


Os parmetros INOUT so mapeados em uma matriz do tipo do parmetro no Java (O mtodo deve receber uma matriz como seu parmetro). Isto est em conformidade com as recomendaes do padro SQL. Dado o seguinte exemplo:
CallableStatement call = conn.prepareCall( "{CALL dobreMeuInteiro(?)}"); // para os parmetros INOUT, boa prtica registrar // o parmetro de sada antes de definir o valor de entrada call.registerOutParameter(1, Types.INTEGER); call.setInt(1,10); call.execute(); int retval = call.getInt(1);

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. */ }

Note: O valor retornado no empacotado em uma matriz, mesmo que o parmetro para o mtodo seja. Tabela 86. Correspondncia de tipo do parmetro INOUT Tipo da matriz para o parmetro do mtodo long[] byte[][] boolean[] java.sql.Date[] double[] double[] int[] byte[][] float[] short[] 201

Tipo do JDBC BIGINT BINARY BIT DATE DOUBLE FLOAT INTEGER LONGVARBINARY REAL SMALLINT

Valor e tipo retornado long byte[] boolean java.sql.Date double double int byte[] float short

Manual de Referncia do Derby

Tipo do JDBC TIME TIMESTAMP VARBINARY OTHER JAVA_OBJECT (vlido apenas nos ambientes Java2/JDBC 2.0)

Tipo da matriz para o parmetro do mtodo java.sql.Time[] java.sql.Timestamp[] byte[][] seuTipo[] seuTipo[]

Valor e tipo retornado java.sql.Time java.sql.Timestamp byte[] seuTipo seuTipo

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. O JDBC no define o tipo de arredondamento a ser utilizado por ResultSet.getBigDecimal. O Derby utiliza java.math.BigDecimal.ROUND_HALF_DOWN.

ResultSets e colunas de fluxo


Se o objeto subjacente tambm for da classe OutputStream, getBinaryStream retornar o objeto diretamente. 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)

202

Manual de Referncia do Derby

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: Nome do mtodo isDefinitelyWritable isReadOnly isWritable Valor falso falso falso

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 lanam advertncias quando so encontrados valores nulos durante o processamento. Todas as outras mensagens informativas so escritas no arquivo derby.log do sistema Derby.

Mapeamento de java.sql.Types em tipos SQL


A tabela Mapeamento de java.sql.Types em tipos SQL mostra o mapeamento de java.sql.Types em tipos SQL. Tabela 87. Mapeamento de java.sql.Types em tipos SQL java.sql.Types BIGINT BINARY BIT
1

Tipos SQL BIGINT CHAR FOR BIT DATA CHAR FOR BIT DATA BLOB (JDBC 2.0 ou mais recente) 203

BLOB

Manual de Referncia do Derby

java.sql.Types CHAR CLOB DATE DECIMAL DOUBLE FLOAT INTEGER LONGVARBINARY LONGVARCHAR NULL NUMERIC REAL SMALLINT TIME TIMESTAMP VARBINARY VARCHAR

Tipos SQL CHAR CLOB (JDBC 2.0 ou mais recente) DATE DECIMAL DOUBLE PRECISION DOUBLE PRECISION INTEGER LONG VARCHAR FOR BIT DATA LONG VARCHAR No um tipo de dado; sempre um valor de um determinado tipo DECIMAL REAL SMALLINT TIME TIMESTAMP VARCHAR FOR BIT DATA VARCHAR
2

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. java.sql.Blob e java.sql.Clob fornecem um ponteiro lgico para um objeto grande, em vez 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.

204

Manual de Referncia do Derby

Para utilizar as funcionalidades java.sql.Blob e java.sql.Clob: Utilizar o tipo BLOB do SQL para armazenamento; Os tipos LONG VARCHAR FOR BIT DATA, BINARY e VARCHAR FOR BIT DATA tambm funcionam. Utilizar o tipo CLOB do SQL para armazenamento; Os tipos LONG VARCHAR, CHAR e VARCHAR tambm funcionam. Utilizar os mtodos getBlob ou getClob da interface java.sql.ResultSet, para obter um tratador de BLOB ou CLOB para os dados subjacentes. No podem ser chamados mtodos estticos (Extenso SQL sobre SQL) em qualquer coluna LOB. Alm disso, a converso entre cadeias e BLOBs no recomendada, porque a converso dependente da plataforma e do banco de dados. 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. Restries de BLOB, CLOB, (tipos-LOB): Os tipos-LOB no podem ser comparados com relao a igualdade (=) e desigualdade (!=, <>). Os valores dos tipos-LOB no so ordenveis, portanto no so suportados os testes <, <=, >, >=. Os tipos-LOB no podem ser utilizados em ndices, ou como colunas de chave primria. Tambm so proibidas as clusulas DISTINCT, GROUP BY e ORDER BY nos tipos-LOB. Os tipos-LOB no podem estar envolvidos em converses implcitas como outros tipos base. O Derby implementa todos os mtodos para estas interfaces do JDBC 2.0, exceto pelos mtodos set e get da interface CallableStatement. Recomendaes: Como o tempo de vida de java.sql.Blob e java.sql.Clob termina quando a transao efetivada, deve ser desativada a auto-efetivao (auto-commit) quando se usa as funcionalidades java.sql.Blob e java.sql.Clob. Tabela 88. Mtodos java.sql.Blob do JDBC 2.0 suportados Retorna Assinatura Notas de implementao ' So lanadas excees se pos < 1, se pos for maior que o comprimento, ou se length <= 0. ' So lanadas excees se pattern == null, se start < 1, ou se pattern for uma matriz de comprimento 0. So lanadas excees se pattern == null, se start < 1, se pattern possuir comprimento 0, ou se for lanada uma exceo ao tentar ler o primeiro byte de pattern.

InputStream getBinaryStream() byte[] long long getBytes(long pos, int length) length() position(byte[] pattern, long start) position(Blob pattern, long start)

long

Tabela 89. Mtodos java.sql.Clob do JDBC 2.0 suportados

205

Manual de Referncia do Derby

Retorna

Assinatura

Notas de implementao ' NO SUPORTADO So lanadas excees se pos < 1, se pos for maior que o comprimento de Clob, ou se length <= 0. ' So lanadas excees se searchStr == null, se start < 1, se searchStr possuir comprimento 0, ou se for lanada uma exceo ao tentar ler o primeiro caractere de searchStr. So lanadas excees se searchStr == null, se start < 1, ou se o padro for uma cadeia vazia.

InputStreamgetAsciiStream() Reader String getCharacterStream() getSubString(long pos, int length) length() position(Clob searchstr, long start)

long long

long

position(String searchstr, long start)

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. Alm disso, no h nada que impea a transao que mantm java.sql.Blob/java.sql.Clob (ao contrrio das outras transaes) atualizar a linha subjacente (O mesmo problema existe com os mtodos getXXXStream). Os aplicativos devem ser programados para impedir atualizaes no objeto subjacente, enquanto houver um java.sql.Blob/java.sql.Clob aberto para o objeto; se isto no for feito, pode resultar em um comportamento indefinido. No deve ser chamado mais de um mtodo getXXX de ResultSet para a mesma coluna, se um dos mtodos for um dos seguintes: getBlob getClob getAsciiStream getBinaryStream getUnicodeStream 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. 206

Manual de Referncia do Derby

OS Clobs no so afetados pelo idioma.

java.sql.Connection
Tabela 90. Mtodos de conexo do JDBC 2.0 suportados Retorna Statement PreparedStatement CallableStatement Assinatura createStatement( int resultSetType, int resultSetConcurrency) prepareStatement(String sql, int resultSetType, int resultSetConcurrency) 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. (Para ver as advertncias deve ser utilizado Connection.getWarnings)

java.sql.ResultSet
Tabela 91. Mtodos de ResultSet do JDBC 2.0 suportados Retorna void void void void Assinatura afterLast() beforeFirst() beforeFirst() deleteRow() Notas da implementao ' ' ' Aps a linha ser atualizada, o objeto ResultSet ser posicionado antes da prxima linha. Antes de executar qualquer mtodo diferente de close no objeto ResultSet, o programa precisar reposicionar o objeto ResultSet utilizando o mtodo next(). ' Consulte java.sql.Blob e java.sql.Clob

boolean Blob Blob Clob Clob

first() getBlob(int columnIndex) getBlob(String columnName) getClob(int columnIndex) getClob(String columnName) 207

Manual de Referncia do Derby

Retorna int

Assinatura getConcurrency()

Notas da implementao Se o objeto Statement possuir a simultaneidade CONCUR_READ_ONLY, ento este mtodo retornar ResultSet.CONCUR_READ_ONLY. Mas se o objeto Statement possuir a simultaneidade CONCUR_UPDATABLE, ento o valor retornado depender do ResultSet da linguagem subjacente ser atualizvel ou no. Se o ResultSet da linguagem for atualizvel, ento getConcurrency() retornar ResultSet.CONCUR_UPDATABLE. Se o ResultSet da linguagem no for atualizvel, ento getConcurrency() retornar ResultSet.CONCUR_READ_ONLY. ' Sempre retorna 1. ' ' ' ' ' ' ' ' ' O tamanho de busca igual a 1 o nico tamanho suportado. Aps a linha ser atualizada, o objeto ResultSet ser posicionado antes da prxima linha. Antes de executar qualquer mtodo diferente de close no objeto ResultSet, o programa precisar reposicionar o objeto ResultSet utilizando o mtodo next().

int int int boolean boolean boolean boolean boolean boolean boolean void void void

getFetchDirection() getFetchSize() getRow() isAfterLast() isBeforeFirst isFirst() isLast() last() previous() relative(int rows) setFetchDirection(int direction) setFetchSize(int rows) updateRow()

Note: No requerido que o JDBC esteja com auto-efetivao desabilitada ao se utilizar ResultSet atualizvel. No momento, o Derby no suporta o mtodo insertRow() em ResultSet atualizvel.

java.sql.Statement
Tabela 92. Mtodos java.sql.Statement do JDBC2.0 suportados

208

Manual de Referncia do Derby

Retorna Assinatura void void int[] int int int void void void void void void addBatch(String sql) clearBatch() executeBatch() getFetchDirection() getFetchSize() getMaxFieldSize() getMaxRows() setEscapeProcessing(boolean enable) setFetchDirection(int direction) setFetchSize(int rows) setMaxFieldSize(int max) setMaxRows()

Notas da implementao ' ' ' Chamar este mtodo no lana uma exceo, mas a chamada ignorada. Chamar este mtodo no lana uma exceo, mas a chamada ignorada. ' ' ' Chamar este mtodo no lana uma exceo, mas a chamada ignorada. Chamar este mtodo no lana uma exceo, mas a chamada ignorada. Sem efeito em Blobs e Clobs. '

java.sql.PreparedStatement
Tabela 93. Mtodos java.sql.PreparedStatement do JDBC 2.0 suportados Notas da implementao ' ' ' '

Retorna void ResultSetMetaData void void

Assinatura addBatch() getMetaData() setBlob(int i, Blob x) setClob(int i, Clob x)

java.sql.CallableStatement
Tabela 94. Mtodos java.sql.CallableStatements do JDBC 2.0 suportados Notas da implementao ' ' ' '

Retorna BigDecimal Date Time Timestamp

Assinatura getBigDecimal getDate(int, Calendar) getTime(int,Calendar) getTimestamp(int, Calendar)

209

Manual de Referncia do Derby

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.

java.sql.BatchUpdateException
Lanada quando ocorre problema com atualizao em lote.

Pacote JDBC para Connected Device Configuration/Foundation Profile (JSR169)


O Derby suporta a API do JDBC definida para a Connected Device Configuration/Foundation Profile, tambm conhecida por JSR169. As funcionalidades suportadas so um subconjunto da especificao JDBC 3.0. O suporte a JSR169 est limitado ao driver incorporado. O Derby no suporta a utilizao do Network Server sob a JSR169. 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.

Funcionalidades apenas do JDBC 3.0


O JDBC 3.0 adiciona algumas funcionalidades API ncleo. Esta seo documenta as funcionalidades suportadas pelo Derby. Note: Estas funcionalidades esto presentes apenas no Java 2 verso 1.4 ou mais recente. As funcionalidades so: Novos mtodos DatabaseMetaData. Consulte java.sql.DatabaseMetaData. 210

Manual de Referncia do Derby

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: 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 Retorna Assinatura SavepointsetSavepoint (String name) Notas da implementao Cria um ponto de salvamento na transao corrente com o nome fornecido, e retorna o novo objeto Savepoint que representa o mesmo. Cria um ponto de salvamento sem nome na transao corrente, e retorna o novo objeto Savepoint que representa o mesmo. Remove da transao corrente o objeto Savepoint especificado. Desfaz todas as alteraes realizadas aps o objeto Savepoint especificado ter sido definido.

SavepointsetSavepoint ()

void void

releaseSavepoint (Savepoint savepoint) rollback(Savepoint savepoint)

java.sql.DatabaseMetaData
Tabela 96. Mtodos DatabaseMetaData do JDBC 3.0 suportados Retorna Assinatura boolean supportsSavepoints() int int int int int getDatabaseMajorVersion() getDatabaseMinorVersion() getJDBCMajorVersion() getJDBCMinorVersion() getSQLStateType() Notas da implementao ' ' ' ' ' ' ' '

boolean supportsNamedParameters() boolean supportsMultipleOpenResults()

211

Manual de Referncia do Derby

Retorna Assinatura boolean supportsGetGeneratedKeys() boolean supportsResultSetHoldability(int holdability) int getResultSetHoldability()

Notas da implementao ' ' retorna ResultSet.HOLD_CURSORS_OVER_COMMIT

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. Os mtodos da interface ParameterMetaData esto listados abaixo. Tabela 97. Mtodos de ParameterMetaData do JDBC 3.0 Retorna Assinatura int int boolean int int int String String int getParameterCount() isNullable(int param) isSigned(int param) getPrecision(int param) getScale(int param) getParameterType(int param) getParamterTypeName (int param) getParamterClassName (int param) getParameterMode (int param) Notas da implementao ' ' ' ' ' ' ' ' '

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 Retorna Assinatura Notas da implementao '

ParameterMetaData getParameterMetaData()

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

212

Manual de Referncia do Derby

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.

Definir e desfazer at um ponto de salvamento


A API do JDBC 3.0 adiciona o mtodo Connection.setSavepoint, que define um ponto de salvamento na transao corrente. O mtodo Connection.rollback foi sobrecarregado para receber o argumento ponto de salvamento. Para obter mais informaes deve ser consultado java.sql.Connection. O cdigo do exemplo abaixo insere uma linha na tabela, define o ponto de salvamento svpt1, e insere uma segunda linha. Quando mais tarde a transao desfeita at svpt1, a segunda insero desfeita, mas a primeira insero permanece intacta. Em outras palavras, quando a transao efetivada somente a linha contendo '1' adicionada TABELA1.
// A auto-efetivao deve estar desativada // para utilizar pontos de salvamento. conn.setAutoCommit(false); Statement stmt = conn.createStatement(); int rows = stmt.executeUpdate("INSERT INTO TABELA1 (COL1) VALUES(1)"); // definir o ponto de salvamento Savepoint svpt1 = conn.setSavepoint("S1"); rows = stmt.executeUpdate("INSERT INTO TABELA1 (COL1) VALUES (2)"); ... conn.rollback(svpt1); ... conn.commit();

Liberao de ponto de salvamento


O mtodo Connection.releaseSavepoint recebe como parmetro um objeto Savepoint, e o remove da transao corrente. Uma vez que o ponto de salvamento tenha sido liberado, uma tentativa de referenci-lo em uma operao de desfazer faz com que seja lanada uma SQLException. Todos os pontos de salvamento criados na transao so automaticamente liberados e tornam-se invlidos, quando a transao efetivada ou quando toda a transao desfeita. Desfazer uma transao at um determinado ponto de salvamento libera automaticamente, e torna invlido, todos os outros pontos de salvamento criados aps o ponto de salvamento em questo.

Regras para pontos de salvamento


O ponto de salvamento no pode ser definido dentro de lotes de instrues para habilitar a recuperao parcial. Se for definido um ponto de salvamento em qualquer momento anterior ao mtodo executeBatch ser chamado, este ser definido antes de qualquer instruo adicionada ao lote ser executada. 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).

Restries dos pontos de salvamento


213

Manual de Referncia do Derby

O Derby no suporta pontos de salvamento em gatilhos. O Derby no libera bloqueios como parte de desfazer at o ponto de salvamento. Tabela 99. Mtodos de Savepoint do JDBC 3.0 Retorna Assinatura int getSavepointId() Notas da implementao Lana uma SQLException se for um ponto de salvamento com nome. Obtm o ID gerado para o ponto de salvamento que este objeto Savepoint representa.

String

getSavepointName() Lana uma SQLException se for um ponto de salvamento sem nome. Obtm o nome do ponto de salvamento que este objeto Savepoint representa.

java.sql.Statement
Tabela 100. Mtodos de Statement do JDBC 3.0 Retorna ResultSet Assinatura getGeneratedKeys() Notas da implementao '

Chaves autogeradas
A funcionalidade de chaves autogeradas do JDBC 3.0 fornece uma maneira de obter valores de colunas que fazem parte de um ndice ou possuem um valor padro atribudo. O Derby suporta a funcionalidade de auto-incremento, que permite aos usurios criarem colunas em tabelas para as quais o sistema de banco de dados atribui automaticamente valores inteiros incrementais. No JDBC 3.0, pode ser chamado o mtodo Statement.getGeneratedKeys para obter o valor de uma coluna como esta. Este mtodo retorna um objeto ResultSet com uma coluna para a chave gerada automaticamente. Chamando-se ResultSet.getMetaData no objeto ResultSet retornado por getGeneratedKeys produz um objeto ResultSetMetaData semelhante ao retornado por IDENTITY_VAL_LOCAL. Quando a instruo executada ou preparada, deve ser passado para os mtodos execute, executeUpdate ou prepareStatement um sinalizador indicando que devem ser retornadas todas as colunas autogerada. Abaixo segue um exemplo que retorna um ResultSet com valores para as colunas autogeradas da TABELA1:
Statement stmt = conn.createStatement(); int rows = stmt.executeUpdate("INSERT INTO TABELA1 (C11, C12) VALUES (1,1)", Statement.RETURN_GENERATED_KEYS); ResultSet rs = stmt.getGeneratedKeys();

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.

Sintaxe de escape do JDBC

214

Manual de Referncia do Derby

O JDBC fornece uma maneira de suavizar algumas diferenas entre as maneiras como os diferentes fornecedores de SGBDs implementam o SQL. Isto chamado de sintaxe de escape. A sintaxe de escape sinaliza que o driver de JDBC, fornecido por um determinado fornecedor, procura pela sintaxe de escape e a converte em um cdigo que este determinado banco de dados compreende. Isto torna a sintaxe de escape independente do SGBD. A clusula de escape do JDBC comea e termina por chaves ({}). O caractere abre-chaves sempre seguido por uma palavra chave:
{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 A palavra chave de escape para as funes escalares. Sintaxe de escape do JDBC para junes externas A palavra chave de escape para as junes externas. Sintaxe de escape do JDBC para formatos de hora A palavra chave de escape para formatos de hora. Sintaxe de escape do JDBC para formatos de carimbo do tempo A palavra chave de escape para formatos de carimbo do tempo. As demais palavras chave de escape do JDBC no so suportadas. Note: O Derby retorna o SQL inalterado na chamada Connection.nativeSQL, uma vez que a sintaxe de escape nativa do SQL. Alm disso, por este motivo no necessrio chamar Statement.setEscapeProcessing.

Palavra chave de escape do JDBC para instrues call


Esta sintaxe suportada para java.sql.Statement e java.sql.PreparedStatement adicionalmente a CallableStatement. Sintaxe
{call instruo } -- Chamar um procedimento Java { call TOURS.BOOK_TOUR(?, ?) }

Sintaxe de escape do JDBC


O Derby interpreta a sintaxe de escape do JDBC para datas como como equivalente a sintaxe SQL para datas. Sintaxe
{d 'yyyy-mm-dd'}

215

Manual de Referncia do Derby

Equivalente a
DATE('yyyy-mm-dd') VALUES {d '1999-01-09'}

Sintaxe de escape do JDBC para clusulas LIKE


O sinal de percentagem (%) e sublinhado (_) so metacaracteres nas clusulas LIKE do SQL. O JDBC fornece uma sintaxe para forar a interpretao literal destes caracteres. A clusula JDBC imediatamente aps a expresso LIKE permite especificar um caractere de escape: Sintaxe
WHERE ExpressoCaractere [ NOT ] LIKE ExpressoCaractereComCaractereCuringa { ESCAPE 'CaractereDeEscape' } -- descobrir todas SELECT a FROM tabA -- descobrir todas SELECT a FROM tabA as linhas que comeam pelo caractere "%" WHERE a LIKE '$%%' {escape '$'} as linhas que terminam pelo caractere "_" WHERE a LIKE '%=_' {escape '='}

Note: No permitido utilizar ? como caractere de escape se o padro do LIKE tambm for um parmetro dinmico (?). Em alguns idiomas, um nico caractere formado por mais de uma unidade de agrupamento (caractere de 16 bits). O CaractereDeEscape utilizado na clusula de escape deve ser uma unidade de agrupamento nica para que funcione adequadamente. Tambm pode ser utilizada a seqncia de caractere de escape para o LIKE sem utilizar as chaves do JDBC; consulte Expresso booleana.

Sintaxe de escape do JDBC para a palavra chave fn


A palavra chave fn permite utilizar vrias funes escalares. O nome da funo vem imediatamente aps a palavra chave fn. Sintaxe
{fn chamadaFuno}

onde chamadaFuno uma das seguintes funes:


concat (ExpressoCaractere, ExpressoCaractere)

Cadeia de caracteres formada anexando a segunda cadeia primeira; se uma das cadeias for nula, o resultado ser nulo. {fn concat (ExpressoCaractere, ExpressoCaractere) equivalente sintaxe nativa { ExpressoCaractere || ExpressoCaractere }. Para obter mais detalhes deve ser consultado Concatenao.
sqrt (ExpressoPontoFlutuante)

Raiz quadrada do nmero de ponto flutuante. {fn sqrt (ExpressoPontoFlutuante)} equivalente sintaxe nativa SQRT(ExpressoPontoFlutuante). Para obter mais detalhes deve ser consultado SQRT.

216

Manual de Referncia do Derby

abs (ExpressoNumrica)

Valor absoluto do nmero. {fn abs(ExpressoNumrica)} equivalente sintaxe nativa ABSOLUTE(ExpressoNumrica). Para obter mais detalhes deve ser consultado ABS ou ABSVAL.
locate(ExpressoCaractere, ExpressoCaractere [, posioIncio] )

Posio na segunda ExpressoCaractere da primeira ocorrncia da primeira ExpressoCaractere, procurando a partir do incio da segunda expresso caractere, a menos que esteja especificada a posioIncio. {fn locate(ExpressoCaractere,ExpressoCaractere [, posioIncio])} equivalente sintaxe nativa LOCATE(ExpressoCaractere, ExpressoCaractere [, PosioIncio] ). Para obter mais detalhes deve ser consultado LOCATE.
substring(ExpressoCaractere, posioIncio, comprimento)

A cadeia de caracteres formada pela extrao de comprimento caracteres da ExpressoCaractere a partir da posioIncio; a posio comea em 1.
mod(tipo_inteiro, tipo_inteiro)

MOD retorna o resto (mdulo) do argumento 1 dividido pelo argumento 2. O resultado ser negativo apenas se o argumento 1 for negativo. Para obter mais detalhes deve ser consultado MOD. Note: Esta sintaxe permite o uso de qualquer funo nativa do Derby, e no apenas as listadas nesta seo.
TIMESTAMPADD( intervalo, expressoInteira, expressoCarimboTempo )

Utiliza a funo TIMESTAMPADD para adicionar o valor de um intervalo a um carimbo do tempo. A funo aplica o inteiro ao carimbo do tempo especificado baseado no tipo de intervalo, e retorna a soma como um novo carimbo do tempo. Pode ser realizada subtrao no carimbo do tempo utilizando inteiros negativos. Deve ser observado que TIMESTAMPADD uma funo do JDBC com escape, sendo acessvel apenas utilizando a sintaxe de funo com escape do JDBC. Para realizar TIMESTAMPADD em datas e horas, necessrio convert-los para carimbo do tempo. As datas so convertidas em carimbos do tempo colocando 00:00:00.0 no campo das horas. As horas so convertidas em carimbos do tempo colocando a data corrente no campo da data. 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.
TIMESTAMPDIFF( intervalo, expressoCarimboTempo1, expressoCarimboTempo2 )

Utiliza a funo TIMESTAMPDIFF para descobrir a diferena entre dois valores de carimbo do tempo no intervalo especificado. Por exemplo, a funo pode retornar o nmero de minutos entre dois carimbos do tempo especificados. Deve ser observado que TIMESTAMPDIFF uma funo do JDBC com escape, sendo acessvel apenas utilizando a sintaxe de funo com escape do JDBC. Para realizar TIMESTAMPDIFF em datas e horas, necessrio convert-los em carimbo do tempo. As datas so convertidas em carimbos do tempo colocando 00:00:00.0 no campo das horas. As horas so convertidas em carimbos do tempo colocando a data corrente no campo da data.

217

Manual de Referncia do Derby

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. Intervalos vlidos para TIMESTAMPADD e TIMESTAMPDIFF As funes TIMESTAMPADD e TIMESTAMPDIFF podem ser utilizadas para realizar aritmtica com carimbos do tempo. Estas duas funes utilizam os seguintes intervalos vlidos para as operaes aritmticas: SQL_TSI_DAY SQL_TSI_FRAC_SECOND 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)}

Retorna um valor carimbo do tempo um ms aps o carimbo do tempo corrente.


{fn TIMESTAMPDIFF(SQL_TSI_WEEK, CURRENT_TIMESTAMP, timestamp('2001-01-01-12.00.00.000000'))}

Retorna o nmero de semanas entre agora e a hora especificada em 1 de janeiro de 2001.

Sintaxe de escape do JDBC para junes externas


O Derby interpreta a sintaxe de escape do JDBC para as junes externas (e para todas as operaes de juno) como equivalente sintaxe SQL correta para junes externas ou para a operao de juno apropriada. 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};

218

Manual de Referncia do Derby

Sintaxe de escape do JDBC para formatos de hora


O Derby interpreta a sintaxe de escape do JDBC para hora como equivalente sintaxe SQL correta para hora. O Derby tambm suporta o formato ISO de 8 caracteres (6 dgitos e 2 pontos decimais). Sintaxe
{t 'hh:mm:ss'}

Equivalente a
TIME 'hh:mm:ss' VALUES {t '20:00:03'}

Sintaxe de escape do JDBC para formatos de carimbo do tempo


O Derby interpreta a sintaxe de escape do JDBC para carimbos do tempo como equivalente sintaxe SQL correta para carimbos do tempo. O Derby tambm suporta o formato ISO de 23 caracteres (17 dgitos, 3 hfens e 3 pontos decimais). 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...).
VALUES {ts '1999-01-09 20:11:11.123455'}

219

Manual de Referncia do Derby

Definio de atributos para a URL de conexo com o banco de dados


O Derby permite que seja fornecida uma lista de atributos para sua URL de conexo com o banco de dados, o que uma funcionalidade do JDBC. Os atributos so especficos do Derby. Normalmente, os atributos so definidos em uma lista separada por ponto-e-vrgula colocada aps o protocolo e o subprotocolo. Para obter informaes sobre como definir os atributos deve ser consultado Atributos da URL de conexo com o banco de dados Derby. Este captulo fornece apenas informaes de referncia. Note: Os atributos no so analisados quanto correo. Se for passado um atributo, ou seu valor correspondente, incorreto, este ser simplesmente ignorado.

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. Combinao com outros atributos Ao criar um novo banco de dados, este atributo deve ser combinado com create=true e dataEncryption=true. Ao carregar um banco de dados criptografado existente, no h necessidade de nenhum outro atributo.
-- inicializao de um banco de dados criptografado jdbc:derby:bancoCriptografado;bootPassword=cseveryPlace -- criao de um banco de dados criptografado jdbc:derby:bancoNovo;create=true;dataEncryption=true; bootPassword=cseveryPlace

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. O JDBC no remove o banco de dados devido falha na conexo em tempo de criao, se a falha ocorrer depois que ocorre a chamada ao banco de dados. Se a URL de conexo com o banco de dados usar create=true, e a conexo no for criada, dever ser verificado o diretrio do banco de dados. Se o diretrio existir, dever ser removido junto com seu contedo antes da prxima tentativa de criar o banco de dados. Combinao com outros atributos

220

Manual de Referncia do Derby

Deve ser especificado o nomeBancoDados (aps o subprotocolo na URL de conexo com o banco de dados), ou o atributo databaseName=nomeBancoDados com este 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) Se o nome do banco de dados for especificado tanto na URL (como um subnome) quanto como atributo, o nome do banco de dados definido como subnome ter prioridade. Por exemplo, a seguinte URL de conexo com banco de dados conecta ao bancoTurismo:
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. Combinao com outros atributos Este atributo pode ser combinado com todos os outros atributos.
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.) Combinao com outros atributos Deve ser combinado com create=true e bootPassword=chave. Tambm pode ser especificado encryptionProvider=nomeProvedor e encryptionAlgorithm=algoritmo.
jdbc:derby:bancoCriptografado;create=true;dataEncryption=true; bootPassword=cLo4u922sc23aPe

221

Manual de Referncia do Derby

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.) Se este atributo no for especificado, o provedor de criptografia padro ser o includo na JVM sendo utilizada. Combinao com outros atributos Deve ser combinado com create=true,bootPassword=chave e dataEncryption=true. Tambm pode ser especificado encryptionAlgorithm=algoritmo.
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

O nico tipo de preenchimento (padding) permitido no Derby NoPadding. Se no for especificado um algoritmo de criptografia, ser utilizado o valor padro DES/CBC/NoPadding. (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). Combinao com outros atributos Deve ser combinado com create=true,bootPassword=chave, dataEncryption=true e encryptionProvider=nomeProvedor.
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(). O territrio especificado na forma ll_CC, onde ll o cdigo de duas letras do idioma, e CC o cdigo de duas letras do pas.

222

Manual de Referncia do Derby

O cdigo do idioma formado por um par de letras minsculas, em conformidade com o padro ISO-639. Tabela 101. Amostra de cdigos de idioma Cdigo do idioma de en es ja pt Descrio Alemo Ingls Espanhol Japons Portugus

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 Cdigo do pas BR DE US ES MX JP Descrio Brasil Alemanha Estados Unidos Espanha Mxico Japo

Pode ser obtida uma cpia do padro ISO-3166 na pgina http://www.chemie.fu-berlin.de/diverse/doc/ISO_3166.html. Combinao com outros atributos O atributo territory utilizado apenas ao criar o banco de dados. No exemplo a seguir, o novo banco de dados possui um territrio com o idioma Portugus e a nacionalidade Brasileira.
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. Combinao com outros atributos Utilizado junto com create=true, createFrom, restoreFrom ou rollFowardRecoveryFrom.
jdbc:derby:bancoNovo;create=true;logDevice=d:/logBancoNovo

223

Manual de Referncia do Derby

password=senhaUsuario
Funo Uma senha vlida para o nome de usurio fornecido. Combinao com outros atributos Utilizado junto com user=nomeUsurio.
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. Aps o banco ser restaurado a partir da cpia de segurana completa, so refeitas as transaes dos logs arquivados online e dos logs ativos. Combinao com outros atributos Este atributo no pode ser combinado com createFrom, restoreFrom ou create.
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. Combinao com outros atributos Este atributo no deve ser combinado com rollforwardrecoveryFrom, restoreFrom ou create.
URL: jdbc:derby:wombat;createFrom=d:/backup/wombat

224

Manual de Referncia do Derby

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. Combinao com outros atributos Este atributo no pode ser combinado com createFrom, rollforwardrecoveryFrom ou create.
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. Criar um ponto de controle significa escrever todos os dados e informaes de transao no disco, para no ser necessrio realizar uma recuperao na prxima conexo. Utilizado para parar todo o sistema apenas quando est incorporado ao aplicativo. Note: Toda requisio a DriverManager com o atributo shutdown=true lana uma exceo.
-- parar todo o sistema jdbc:derby:;shutdown=true -- parar bancoVendas 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. 225

Manual de Referncia do Derby

Combinao com outros atributos Deve ser utilizado junto com password=senhaUsuario. 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

226

Manual de Referncia do Derby

Conformidade com o J2EE: API de transao Java e extenses javax.sql


A J2EE, ou Java 2 Platform, Enterprise Edition, um padro para desenvolvimento de aplicativos empresariais, baseado em componentes reutilizveis em um ambiente de vrias camadas (multi-tier). Alm das funcionalidades da Java 2 Platform, Standard Edition (J2SE), a J2EE adiciona suporte a Enterprise Java Beans (EJBs), Java Server Pages (JSPs), Servlets, XML, e muito mais. A arquitetura J2EE utilizada para unir tecnologias existentes e aplicativos empresariais em um nico ambiente gerencivel. O Derby um componente em conformidade com a J2EE em um sistema J2EE distribudo. Como tal, parte de um sistema maior que inclui, entre outras coisas, um servidor JNDI , um mdulo de pool de conexes, um gerenciador de transaes, um gerenciador de recursos, e aplicativos dos usurios. Dentro deste sistema, o Derby pode servir como gerenciador de recursos. Para obter mais informaes sobre a J2EE, deve ser vista a especificao da J2EE disponvel na pgina http://java.sun.com/j2ee/docs.html. Para se qualificar como um gerenciador de recursos em um sistema J2EE, requerido pela J2EE suporte a estas reas bsicas: Suporte JNDI. Permite aos aplicativos que fazem a chamada registrar nomes para os bancos de dados, e acess-los atravs destes nomes em vez de atravs de URL de conexo com o banco de dados. A implementao de uma das extenses do JDBC, javax.sql.DataSource, fornece este suporte. Pool de conexes. Mecanismo pelo qual um servidor de pool de conexes mantm um conjunto de conexes abertas para o gerenciador de recursos (Derby). Um usurio requisitando uma conexo pode obt-la entre as conexes disponveis no pool. Este pool de conexes til em ambientes cliente/servidor, porque o estabelecimento de uma conexo relativamente dispendioso. Em um ambiente incorporado as conexes so muito menos dispendiosas, tornando a melhoria de desempenho do pool de conexes insignificante. A implementao de duas extenses do JDBC, javax.sql.ConnectionPoolDataSource e javax.sql.PooledConnection, fornecem este suporte. Suporte ao XA.

O XA um dos diversos padres para gerenciamento de transaes distribudas. baseado na efetivao de duas fases (two-phase commit). As interfaces javax.sql.XAxxx, junto com o pacote java.transaction.xa, so uma implementao abstrata do XA. Para obter mais informaes sobre o XA deve ser consultado X/Open CAE Specification-Distributed Transaction Processing: The XA Specification, X/Open Document No. XO/CAE/91/300 ou ISBN 1 872630 24 3. A implementao da API do JTA, as interfaces do pacote java.transaction.xa (javax.sql.XAConnection,javax.sql.XADataSource,javax.transaction.xa.XAResource,javax.transaction e javax.transaction.xa.XAException), fornecem este suporte.

227

Manual de Referncia do Derby

Exceto pelas interfaces JDBC do ncleo, estas interfaces no so visveis pelos aplicativos do usurio final; em vez disso, so utilizadas no sistema somente pelos outros componentes do lado servidor. Note: Para obter informaes sobre as classes que implementam estas interfaces, e como utilizar o Derby como gerenciador de recursos, deve ser visto o captulo 6, "Utilizao do Derby como gerenciador de recursos J2EE", no Guia do Desenvolvedor do Derby.

JVM e bibliotecas para as funcionalidades do J2EE


Estas funcionalidades requerem o seguinte: Ambiente Java 2 Platform, Standard Edition v 1.2 (J2SE), ou superior Bibliotecas javax.sql Os binrios de extenso do padro JDBC 2.0 esto disponveis na pgina http://java.sun.com/products/jdbc/download.html. Estas bibliotecas fazem parte do ambiente padro da Java 2 Platform, Standard Edition v 1.4, ou mais recente. Bibliotecas javax.transaction.xa Estas bibliotecas fazem parte do ambiente padro da Java 2 Platform, Standard Edition v 1.4, ou mais recente. Para as bibliotecas do JTA deve ser aberta a pgina http://java.sun.com/products/jta/, e baixada a especificao e os arquivos de ajuda javadoc para as interfaces do JTA. O Derby (derby.jar)

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

Notas sobre o comportamento do produto


Transaes globais recuperadas

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. Entretanto, o nome de usurio e senha das transaes globais recuperadas so perdidos; qualquer XAConnection pode efetivar ou desfazer esta transao duvidosa. Note: Quando for requerido suporte ao XA em um ambiente remoto (cliente/servidor), deve ser utilizada a interface DataSource do XA do driver cliente da rede (org.apache.derby.jdbc.ClientXADataSource).

228

Manual de Referncia do Derby

javax.sql: Extenses JDBC


Esta seo documenta as extenses do JDBC que o Derby implementa para conformidade com o J2EE (Para obter mais detalhes sobre estas extenses deve ser consultada a pgina http://java.sun.com/javase/reference/api.jsp). 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. A implementao do Derby de ConnectionPoolDataSource e PooledConnection permite a um servidor de pool de conexes manter um conjunto de conexes com o gerenciador de recursos (Derby). Em um ambiente incorporado as conexes so muito menos dispendiosas, tornando o pool de conexes desnecessrio. javax.sql.XAConnection Uma XAConnection produz um XAResource, e durante o seu tempo de vida vrias Connection. Permite transaes distribudas. javax.sql.XADataSource Um XADataSource simplesmente um ConnectionPoolDataSource que produz XAConnection. Alm disso, o Derby fornece trs mtodos para XADataSource, DataSource e ConnectionPoolDataSource. O Derby suporta algumas propriedades de fonte de dados adicionais: setCreateDatabase(String create) Define a propriedade para criar o banco de dados na prxima conexo. O argumento cadeia de caracteres deve ser "create". setShutdownDatabase(String shutdown) Define a propriedade para parar o banco de dados. Pra o banco de dados na prxima conexo. O argumento cadeia de caracteres deve ser "shutdown". Note: Estas propriedades devem ser definidas antes de obter a conexo.

229

Manual de Referncia do Derby

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. Este documento divide as classes e interfaces da API em vrias categorias. As ferramentas e utilitrios autnomos (stand-alone) so classes Java que se sustentam por si prprias, e so chamadas em uma janela de comandos. As classes de implementao do JDBC so APIs do JDBC padro, no sendo chamadas na linha de comando. Em vez disso, so chamadas apenas em um contexto especfico a partir de outro aplicativo.

Ferramentas e utilitrios autnomos


Estas classes esto nos pacotes org.apache.derby.tools. org.apache.derby.tools.ij Uma ferramenta de script SQL que pode ser executada como um aplicativo incorporado ou cliente/servidor. Consulte o Guia das Ferramentas e Utilitrios do Derby. org.apache.derby.tools.sysinfo Um utilitrio de linha de comando, do lado servidor, que mostra informaes sobre a JVM e o produto Derby. Consulte o Guia das Ferramentas e Utilitrios do Derby. org.apache.derby.tools.dblook Um utilitrio para ver todas as partes da Linguagem de Definio de Dados (DDL) para um determinado banco de dados. Consulte o Guia das Ferramentas e Utilitrios do Derby.

Classes de implementao do JDBC


Driver de JDBC
Este o driver de JDBC para o Derby: org.apache.derby.jdbc.EmbeddedDriver Utilizado para inicializar um driver de JDBC nativo incorporado e o sistema Derby. org.apache.derby.jdbc.ClientDriver Utilizado para conectar ao Network Server do Derby no modo cliente-servidor. Consulte o Guia do Desenvolvedor do Derby.

Classes de fonte de dados


Estas classes so todas relacionadas implementao do Derby de javax.sql.DataSource e APIs relacionadas. Para obter mais informaes deve ser consultado o Guia do Desenvolvedor do Derby. Ambiente incorporado: org.apache.derby.jdbc.EmbeddedDataSource org.apache.derby.jdbc.EmbeddedConnectionPoolDataSource 230

Manual de Referncia do Derby

org.apache.derby.jdbc.EmbeddedXADataSource Ambiente cliente-servidor: org.apache.derby.jdbc.ClientDataSource org.apache.derby.jdbc.ClientConnectionPoolDataSource org.apache.derby.jdbc.ClientXADataSource

Utilitrios e interfaces diversas


org.apache.derby.authentication.UserAuthenticator Uma interface fornecida pelo Derby. As classes que fornecem esquema de autenticao de usurio alternativa devem implementar esta interface. Para obter informaes sobre usurios deve ser consultado "Trabalhando com autenticao de usurio", no captulo 7 do Guia do Desenvolvedor do Derby.

231

Manual de Referncia do Derby

Territrios suportados
A seguir est a relao dos territrios suportados: Territrio Japons Coreano Chins (Tradicional) Chins (Simplificado) Francs Alemo Italiano Espanhol Portugus (Brasil) ja_JP ko_KR zh_TW zh_CN fr de_DE it es pt_BR Definio de territrio no Derby (derby.territory)

232

Manual de Referncia do Derby

Limitaes do Derby
Esta seo lista as limitaes associadas ao Derby.

Limitaes do comprimento de identificador


Tabela 103. Limitaes do comprimento de identificador A tabela a seguir lista as limitaes dos comprimentos dos identificadores no Derby. Identificador nome de restrio nome de correlao nome de cursor nome de coluna de fonte de dados nome de ndice de fonte de dados nome de fonte de dados nome de ponto de salvamento nome de esquema nome de coluna no qualificado nome de funo no qualificado nome de ndice no qualificado nome de procedimento no qualificado nome de parmetro nome de gatilho no qualificado nome de tabela, nome de viso, nome de procedimento armazenado no qualificados Nmero mximo de caracteres permitido 128 128 128 128 128 128 128 128 128 128 128 128 128 128 128

Limitaes numricas
Tabela 104. Limitaes numricas A tabela a seguir contm as limitaes dos valores numricos no Derby. Valor Menor INTEGER Maior INTEGER Menor BIGINT Maior BIGINT Menor SMALLINT Maior SMALLINT 233 Limite -2.147.483.648 2.147.483.647 -9.223.372.036.854.775.808 9.223.372.036.854.775.807 -32.768 32.767

Manual de Referncia do Derby

Valor Maior preciso decimal Menor DOUBLE Maior DOUBLE Menor DOUBLE positivo Maior DOUBLE negativo Menor REAL Maior REAL Menor REAL positivo Maior REAL negativo

Limite 31.255 -1.79769E+308 1.79769E+308 2.225E-307 -2.225E-307 -3.402E+38 3.402E+38 1.175E-37 -1.175E-37

Limitaes das cadeias


Tabela 105. Limitaes das cadeias A tabela a seguir contm as limitaes dos valores cadeia no Derby. Valor Comprimento de CHAR Comprimento de VARCHAR Comprimento de LONG VARCHAR Comprimento de CLOB Comprimento de BLOB Comprimento de constante caractere Comprimento de cadeia de caracteres concatenada Comprimento de cadeia binria concatenada Nmero de dgitos da constante hexadecimal Comprimento da constante com valor DOUBLE Limite mximo 254 caracteres 32.672 caracteres 32.700 caracteres 2.147.483.647 caracteres 2.147.483.647 caracteres 32.672 2.147.483.647 2.147.483.647 16.336 30 caracteres

Limitaes de DATE, TIME e TIMESTAMP


Tabela 106. Limitaes de DATE, TIME e TIMESTAMP A tabela a seguir lista as limitaes dos valores data, hora e carimbo do tempo no Derby. Valor Menor valor DATE Maior valor DATE Menor valor TIME Limite 0001-01-01 9999-12-31 00:00:00

234

Manual de Referncia do Derby

Valor Maior valor TIME Menor valor TIMESTAMP Maior valor TIMESTAMP

Limite 24:00:00 0001-01-01-00.00.00.000000 9999-12-31-24.00.00.000000

Limitaes dos valores do gerenciador de banco de dados


Tabela 107. Limitaes do gerenciador de banco de dados A tabela a seguir lista as limitaes de vrios valores do gerenciador de banco de dados no Derby. Valor Nmero mximo de colunas em uma tabela Limite 1.012

Nmero mximo de colunas em uma viso 5.000 Nmero mximo de parmetros em um procedimento armazenado Nmero mximo de ndices em uma tabela Nmero mximo de tabelas referenciadas em uma instruo SQL ou em uma viso Nmero mximo de elementos na lista de seleo Nmero mximo de predicados na clusula WHERE e HAVING Nmero mximo de colunas na clusula GROUP BY Nmero mximo de colunas na clusula ORDER BY 90 32.767 ou a capacidade de armazenamento capacidade de armazenamento 1.012 capacidade de armazenamento 32.677 1.012

Nmero mximo de instrues preparadas capacidade de armazenamento Nmero mximo de de cursores declarados em um programa Nmero mximo de cursores abertos ao mesmo tempo Nmero mximo de restries na tabela Nvel mximo de aninhamento da subconsulta Nmero mximo de subconsultas em uma nica instruo Nmero mximo de linhas alteradas em uma unidade de trabalho Nmero mximo de constantes em uma instruo capacidade de armazenamento capacidade de armazenamento capacidade de armazenamento capacidade de armazenamento capacidade de armazenamento capacidade de armazenamento capacidade de armazenamento

235

Manual de Referncia do Derby

Valor Profundidade mxima de gatilhos em cascata

Limite 16

236

Manual de Referncia do Derby

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: Cloudscape, DB2, DB2 Universal Database, DRDA e IBM so marcas registradas da International Business Machines Corporation nos EUA, outros pases, ou ambos. Microsoft, Windows, Windows NT e o logotipo do Windows so marcas registradas da Microsoft Corporation nos EUA, outros pases, ou ambos. Java e todas as marcas registradas baseadas no Java so marcas registradas da Sun Microsystems, Inc. nos EUA, outros pases, ou ambos. UNIX uma marca registrada do The Open Group nos EUA e outros pases. Outros nomes de empresas, produtos ou servios podem ser marcas registradas ou marcas de servios de terceiros.

237

Vous aimerez peut-être aussi