Manual de Referência do Derby. Version 10 Derby Document build: December 11, 2006, 7:17:42 AM (PST) - PDF
Manual de Referência do Derby. Version 10 Derby Document build: December 11, 2006, 7:17:42 AM (PST)
Download "Manual de Referência do Derby. Version 10 Derby Document build: December 11, 2006, 7:17:42 AM (PST)"
Rafael Castelo Bonilha
1 Manual de Referência do Derby Version 10 Derby Document build: December 11, 2006, 7:17:42 AM (PST)
3 Contents Direitos autorais reservados... 7 Sobre este documento...8 Finalidade deste documento...8 Audiência... 8 Organização deste documento... 8 Referência da linguagem SQL...10 Letras maiúsculas e caracteres especiais...10 Identificadores SQL Regras para identificadores SQL IdentificadorSQL nome-da-coluna nome-da-correlação...12 novo-nome-da-tabela...13 nome-do-esquema...13 nome-de-coluna-simples...14 nome-do-sinônimo nome-da-tabela...14 nome-da-visão nome-do-índice nome-da-restrição...15 nome-do-cursor...15 nome-do-gatilho identificador-de-autorização...16 Instruções Interação com o sistema de dependências Instrução ALTER TABLE Instruções CREATE...20 Instruções DROP Instruções RENAME Instruções SET CALL (PROCEDIMENTO) Cláusula CONSTRAINT...39 Instrução DECLARE GLOBAL TEMPORARY TABLE...45 Instrução DELETE Cláusula FOR UPDATE...49 Cláusula FROM Cláusula GROUP BY Cláusula HAVING INNER JOIN...51 Instrução INSERT Operação JOIN LEFT OUTER JOIN Instrução LOCK TABLE Cláusula ORDER BY Consulta...56 RIGHT OUTER JOIN SubconsultaEscalar ExpressãoSeleção Instrução SELECT ExpressãoTabela SubconsultaTabela Instrução UPDATE...64 VALUES Expressão...65 Cláusula WHERE...66 Cláusula WHERE CURRENT OF Funções nativas i
4 Funções nativas padrão...68 Agregações (funções de conjunto) ABS ou ABSVAL...70 AVG BIGINT CAST CHAR...73 LENGTH Concatenação...75 Expressões NULLIF e CASE COUNT COUNT(*) CURRENT DATE...77 CURRENT_DATE...77 CURRENT ISOLATION CURRENT SCHEMA CURRENT TIME...78 CURRENT_TIME...78 CURRENT TIMESTAMP CURRENT_TIMESTAMP CURRENT_USER DATE DAY...80 DOUBLE HOUR IDENTITY_VAL_LOCAL INTEGER LOCATE...83 LCASE ou LOWER LTRIM MAX MIN MINUTE MOD...86 MONTH...87 RTRIM...87 SECOND...87 SESSION_USER SMALLINT SQRT SUBSTR SUM TIME TIMESTAMP UCASE ou UPPER USER VARCHAR YEAR Funções do sistema nativas SYSCS_UTIL.SYSCS_CHECK_TABLE...93 SYSCS_UTIL.SYSCS_GET_RUNTIMESTATISTICS SYSCS_UTIL.SYSCS_GET_DATABASE_PROPERTY Procedimentos do sistema nativos SYSCS_UTIL.SYSCS_COMPRESS_TABLE...94 SYSCS_UTIL.SYSCS_INPLACE_COMPRESS_TABLE SYSCS_UTIL.SYSCS_SET_RUNTIMESTATISTICS...97 SYSCS_UTIL.SYSCS_SET_STATISTICS_TIMING SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY...98 SYSCS_UTIL.SYSCS_FREEZE_DATABASE ii
5 SYSCS_UTIL.SYSCS_UNFREEZE_DATABASE SYSCS_UTIL.SYSCS_CHECKPOINT_DATABASE SYSCS_UTIL.SYSCS_BACKUP_DATABASE SYSCS_UTIL.SYSCS_EXPORT_TABLE SYSCS_UTIL.SYSCS_EXPORT_QUERY SYSCS_UTIL.SYSCS_IMPORT_TABLE SYSCS_UTIL.SYSCS_IMPORT_DATA Tipos de dado Visão geral dos tipos de dado nativos Tipos numéricos Tipo de dado - atribuições e comparação, classificação e ordenação BIGINT BLOB CHAR CHAR FOR BIT DATA CLOB DATE DECIMAL DOUBLE DOUBLE PRECISION FLOAT INTEGER LONG VARCHAR LONG VARCHAR FOR BIT DATA NUMERIC REAL SMALLINT TIME TIMESTAMP VARCHAR VARCHAR FOR BIT DATA Expressões SQL Precedência das expressões Expressão booleana Parâmetros dinâmicos Palavras reservadas do SQL Suporte do Derby às funcionalidades do SQL Tabelas do sistema Derby SYSALIASES SYSCHECKS SYSCOLUMNS SYSCONGLOMERATES SYSCONSTRAINTS SYSDEPENDS SYSFILES SYSFOREIGNKEYS SYSKEYS SYSSCHEMAS SYSSTATISTICS SYSSTATEMENTS SYSTABLES SYSTRIGGERS SYSVIEWS Mensagens de exceção e estados SQL do Derby Referência de SQLState e mensagem de erro Referência do JDBC Classes, interfaces e métodos java.sql do núcleo do JDBC java.sql.driver java.sql.drivermanager.getconnection iii
6 da URL de conexão com banco de dados Derby da URL de conexão com banco de dados para aplicativos com bancos de dados incorporados SQL adicional Atributos da URL de conexão com o banco de dados Derby java.sql.driver.getpropertyinfo java.sql.connection java.sql.connection.settransactionisolation java.sql.connection.setreadonly java.sql.connection.isreadonly Funcionalidades de conexão não suportadas java.sql.databasemetadata Conjuntos de resultados DatabaseMetaData getprocedurecolumnsgetprocedurecolumns Parâmetros para getprocedurecolumns Colunas do ResultSet retornado por getprocedurecolumns Funcionalidades de DatabaseMetaData não suportadas java.sql.statement Objetos ResultSet java.sql.preparedstatement Instruções preparadas e colunas de fluxo java.sql.callablestatement CallableStatement e parâmetros OUT CallableStatement e parâmetros INOUT java.sql.resultset ResultSets e colunas de fluxo java.sql.resultsetmetadata java.sql.sqlexception java.sql.sqlwarning Mapeamento de java.sql.types em tipos SQL java.sql.blob e java.sql.clob Notas java.sql.connection java.sql.resultset java.sql.statement java.sql.preparedstatement java.sql.callablestatement java.sql.databasemetadata java.sql.resultsetmetadata java.sql.batchupdateexception Pacote JDBC para Connected Device Configuration/Foundation Profile (JSR169) Funcionalidades apenas do JDBC java.sql.connection java.sql.databasemetadata java.sql.parametermetadata java.sql.preparedstatement java.sql.savepoint Definir e desfazer até um ponto de salvamento Liberação de ponto de salvamento Regras para pontos de salvamento Restrições dos pontos de salvamento java.sql.statement Chaves autogeradas de escape do JDBC Palavra chave de escape do JDBC para instruções call de escape do JDBC de escape do JDBC para cláusulas LIKE de escape do JDBC para a palavra chave fn iv
7 de escape do JDBC para junções externas de escape do JDBC para formatos de hora de escape do JDBC para formatos de carimbo do tempo Definição de atributos para a URL de conexão com o banco de dados bootpassword=chave create=true databasename=nomebancodados dataencryption=true encryptionprovider=nomeprovedor encryptionalgorithm=algoritmo territory=ll_cc logdevice=caminhodiretoriolog password=senhausuario rollforwardrecoveryfrom=caminho createfrom=caminho restorefrom=caminho shutdown=true user=nomeusuário (nenhum atributo) Conformidade com o J2EE: API de transação Java e extensões javax.sql JVM e bibliotecas para as funcionalidades do J2EE A API do JTA Notas sobre o comportamento do produto javax.sql: Extensões JDBC API do Derby Ferramentas e utilitários autônomos Classes de implementação do JDBC Driver de JDBC Classes de fonte de dados Utilitários e interfaces diversas Territórios suportados Limitações do Derby Limitações do comprimento de identificador Limitações numéricas Limitações das cadeias Limitações de DATE, TIME e TIMESTAMP Limitações dos valores do gerenciador de banco de dados Marcas registradas v
8 Apache Software FoundationManual de Referência do DerbyApache Derby 6
9 Direitos autorais reservados Segunda Edição (Julho de 2005) Copyright 1997, 2005 Apache Software Foundation, ou seus concessores de licença, conforme se aplique. Licenciado sob a Licença Apache, Versão 2.0 (doravante chamada apenas de "Licença"); este arquivo não pode ser utilizado a não ser em conformidade com a Licença. Pode ser obtida uma cópia da Licença em A menos que seja requerido por lei aplicável, ou concordado por escrito, o programa distribuído sob esta Licença é distribuído na BASE DE "COMO É", SEM GARANTIAS OU CONDIÇÕES DE QUALQUER ESPÉCIE, sejam expressas ou implícitas. Veja na Licença as condições específicas que governam as permissões e limitações sob a Licença. 7
10 Sobre este documento Para obter informações gerais sobre a documentação do Derby, como a relação completa de documentos, convenções e leitura adicional, deve ser consultada a Introdução ao Derby. Finalidade deste documento Audiência Este documento, o Manual de Referência do Derby, fornece informações de referência sobre o Derby. Cobre a linguagem SQL do Derby, a implementação do JDBC do Derby, os catálogos do sistema do Derby, as mensagens de erro do Derby, as propriedades do Derby, e as palavras chave do SQL. Este documento é a referência para os usuários do Derby, que são tipicamente desenvolvedores de aplicativos. Os usuários do Derby não familiarizados com o padrão SQL, ou com a linguagem de programação Java, serão beneficiados pela consulta a livros sobre estes tópicos. Os usuários do Derby que desejarem uma abordagem para trabalhar com o Derby do tipo como fazer, ou uma introdução aos conceitos do Derby, devem consultar o Guia do Desenvolvedor do Derby. Organização deste documento Este documento inclui as seguintes seções: Referência da linguagem SQL Informações de referência sobre a linguagem SQL do Derby, incluindo páginas de manual para instruções, funções e outros elementos da sintaxe. Palavras reservadas do SQL Palavras chave do SQL além das palavras chave do padrão SQL-92. Suporte do Derby às funcionalidades do SQL-92 Uma lista de funcionalidades do SQL-92 que o Derby dá suporte e não dá suporte. Tabelas do sistema Derby Informações de referência sobre os catálogos do sistema do Derby. Mensagens de exceção e estados SQL do Derby Informações sobre as mensagens de exceção do Derby. Referência do JDBC Informações sobre a implementação da interface de JDBC do Derby, incluindo suporte a funcionalidades do JDBC 2.0. Definição de atributos para a URL de conexão com o banco de dados Informações sobre os atributos suportados pela URL de conexão com o banco de dados do JDBC do Derby. Conformidade com o J2EE: API de transação Java e extensões javax.sql Informações sobre os atributos suportados pelo suporte do Derby à API de Transação Java. API do Derby 8
11 Notas sobre as APIs proprietárias para o Derby. 9
12 Referência da linguagem SQL O Derby implementa um subconjunto do núcleo do SQL-92, assim como algumas funcionalidades do SQL-99. Esta seção fornece uma visão geral da linguagem SQL corrente, através da descrição das instruções, funções nativas, tipos de dado, expressões e caracteres especiais presentes na linguagem. Letras maiúsculas e caracteres especiais Ao utilizar classes e métodos do JDBC, são submetidas instruções SQL ao Derby na forma de cadeias. O conjunto de caracteres permitido nas cadeias contendo instruções SQL é o Unicode. Nestas cadeias se aplicam as seguintes regras: Aspas delimitam os identificadores especiais, referidos no SQL-92 como identificadores delimitados. Apóstrofos delimitam cadeias de caracteres. Na cadeia de caracteres, para representar um apóstrofo (também chamado de aspas simples) são usados dois apóstrofos (Em outras palavras, o apóstrofo é o caractere de escape do apóstrofo). As aspas não 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: Identificadores SQL -- o apóstrofo é o caractere de escape do apóstrofo VALUES 'Maria D''Almeida' -- no ij não 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 não são sensíveis a letras maiúsculas e minúsculas. Por exemplo, a palavra chave SELECT pode ser escrita como SELECT, Select, select, ou select. Os identificadores no estilo SQL-92 não são sensíveis a letras maiúsculas e minúsculas (consulte IdentificadorSQL92), a menos que estejam delimitados. Os identificadores no estilo Java são sensíveis a letras maiúsculas e minúsculas. O * é um caractere curinga na ExpressãoSeleção. Consulte O curinga *. Também pode ser o operador de multiplicação. Em todos os outros casos é um meta-símbolo da sintaxe, sinalizando itens que podem ser repetidos zero ou mais vezes. % e _ são caracteres curinga quando utilizados nas cadeias de caracteres após o operador LIKE (exceto quando precedidos pelo caractere de escape). Consulte Expressão booleana. De acordo com o padrão SQL-92, dois hífens (--) e o caractere de nova-linha delimitam um comentário. Os dois hífens iniciam o comentário, e o caractere de nova-linha termina o comentário. O identificador é a representação dentro da linguagem de itens criados pelos usuários, em oposição às palavras chave e comandos da linguagem. Alguns identificadores 10
13 representam objetos do dicionário, que são objetos criados pelo usuário (como tabelas, visões, índices, colunas e restrições), que são armazenados no banco de dados. São chamados de objetos do dicionário porque o Derby armazena as informações sobre estes objetos nas tabelas do sistema, algumas vezes chamado de dicionário de dados. O padrão SQL também define maneiras de criar aliases para estes objetos em certas instruções. Cada tipo de identificador deve estar em conformidade com um conjunto diferente de regras. Os identificadores que representam objetos do dicionário devem estar em conformidade com as regras de identificador do SQL-92, sendo portanto chamados de IdentificadorSQL92. Regras para identificadores SQL92 Identificadores comuns são identificadores não envoltos por aspas. Os identificadores delimitados são identificadores envoltos por aspas. Um identificador comum deve começar por uma letra, e conter apenas letras, caracteres de sublinhado (_) e dígitos. As letras e dígitos permitidos incluem todas as letras e dígitos do Unicode, mas o Derby não tenta garantir que os caracteres do identificador sejam válidos no idioma do banco de dados. Um identificador delimitado pode conter qualquer caractere entre as aspas. As aspas envoltórias não fazem parte do identificador; servem apenas para marcar seu começo e seu fim. Os espaços no final do identificador delimitado não são significativos (são 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 não são separadores, são parte do identificador (o nome do objeto do dicionário sendo representado). Portanto, no exemplo a seguir: "A.B" é um objeto do dicionário, enquanto "A"."B" é um objeto do dicionário qualificado por outro objeto do dicionário (como uma coluna chamada "B" pertencente à tabela "A"). IdentificadorSQL92 Um IdentificadorSQL92 é um identificador de objeto do dicionário em conformidade com as regras do SQL-92. O padrão SQL-92 declara que os identificadores dos objetos do dicionário estão limitados a 128 caracteres, e não são sensíveis a letras maiúsculas e minúsculas (a menos que estejam delimitados por aspas), porque são traduzidos automaticamente para letras maiúsculas pelo sistema. Não é permitido utilizar palavras reservadas como identificadores para os objetos do dicionário, a menos que estejam delimitadas. Se for tentado utilizar um nome com mais de 128 caracteres, será lançada a SQLException X0X11. O Derby define palavras chave além das especificadas pelo padrão SQL-92 (consulte Palavras reservadas do SQL). Exemplo 11
14 -- o nome da visão é armazenado nos -- catálogos do sistema como UMIDENTIFICADOR CREATE VIEW UmIdentificador (RECEBIDO) AS VALUES 1 -- o nome da visão é armazenado nos -- catálogos do sistema intacto CREATE VIEW "UmIdentificadorComMaiúsculasEMinúsculas" (RECEBIDO) AS VALUES 1 nome-da-coluna Esta seção descreve as regras para utilizar IdentificadorSQL92 para representar os objetos do dicionário que se seguem. Qualificação dos objetos do dicionário Uma vez que alguns objetos do dicionário podem estar contidos em outros objetos, os nomes destes objetos do dicionário podem ser qualificados. Cada componente é separado do componente seguinte por um ponto. O IdentificadorSQL92 é "separado-por-ponto". O nome do objeto do dicionário é qualificado para evitar ambiguidade. Na sintaxe do SQL, em muitos lugares o nome da coluna pode ser representado qualificado pelo nome-da-tabela ou pelo nome-da-correlação. Em algumas situações, não se pode qualificar o nome-da-coluna com o nome-da-tabela ou com o nome-da-correlação. Em vez disso, é utilizado um nome-de-coluna-simples. Estas situações são: criação da tabela (Instrução CREATE TABLE) especificação das colunas atualizáveis no cursor no nome de correlação da coluna em uma expressão SELECT (consulte ExpressãoSeleção) no nome de correlação da coluna em uma ExpressãoTabela (consulte ExpressãoTabela) Não pode ser utilizado o nome-da-correlação em colunas atualizáveis; a utilização do nome-da-correlação desta maneira causa exceção SQL. Por exemplo: SELECT C11 AS COL1, C12 AS COL2, C13 FROM T1 FOR UPDATE OF C11, C13 Neste exemplo, o nome-da-correlação COL1 para C11 não é permitido, porque C11 aparece na lista de colunas FOR UPDATE. Pode ser utilizado o nome-da-correlação COL2 para C12, porque C12 não aparece na lista de colunas de FOR UPDATE. [ { nome-da-tabela nome-da-correlação }. ] IdentificadorSQL92 Exemplo -- P.PAÍS é o nome da coluna qualificado pelo nome-da-correlação. SELECT P.PAÍS FROM APP.PAÍSES P nome-da-correlação O nome-da-correlação é atribuído à expressão de tabela na cláusula FROM como sendo 12
15 o novo nome, ou aliás, para a tabela. O nome-da-correlação não é qualificado pelo nome-do-esquema. Não é permitido utilizar o nome-da-correlação em colunas atualizáveis; a utilização do nome-da-correlação desta maneira causa uma exceção SQL. Por exemplo: SELECT C11 AS COL1, C12 AS COL2, C13 FROM T1 FOR UPDATE OF C11, C13 Neste exemplo, o nome-da-correlação COL1 para C11 não é permitido, porque C11 aparece na lista de colunas de FOR UPDATE. Pode ser utilizado o nome-da-correlação COL2 para C12, porque C12 não aparece na lista de colunas de FOR UPDATE. IdentificadorSQL92 Exemplo -- F é o nome-da-correlação SELECT F.NOME FROM SAMP.FUNCIONÁRIOS F novo-nome-da-tabela O novo-nome-da-tabela representa uma tabela renomeada. Não é permitido qualificar o novo-nome-da-tabela com o nome-do-esquema. IdentificadorSQL92 Exemplo -- VÔOS_DISPONÍVEIS é o novo-nome-da-tabela que não inclui o nome-do-esquema RENAME TABLE VÔOS_DISPONIBILIDADE TO VÔOS_DISPONÍVEIS nome-do-esquema O nome-do-esquema representa o esquema. Os esquemas contêm outros objetos do dicionário, como tabelas e índices. Os esquemas fornecem uma maneira de dar nomes a um subconjunto de tabelas e outros objetos do dicionário no banco de dados. Os esquemas podem ser criados e removidos explicitamente. O esquema de usuário padrão é o esquema APP (se não for especificado nenhum nome de usuário no momento da conexão). Não é permitido criar objetos nos esquemas que começam por SYS. Portanto, as referências a tabelas podem ser qualificadas pelo nome do esquema. Quando o nome-do-esquema não é especificado, o nome de esquema padrão é inserido implicitamente. As tabelas do sistema são colocadas no esquema SYS. Todas as referências a tabelas do sistema devem ser qualificadas pelo identificador de esquema SYS. Para obter mais informações sobre as tabelas do sistema deve ser consultado Tabelas do sistema Derby. O esquema é o objeto de dicionário no nível mais alto da hierarquia, portanto o 13
16 nome-do-esquema não pode ser qualificado. IdentificadorSQL92 Exemplo -- RH.FUNCIONÁRIOS é o nome-da-tabela qualificado pelo nome-do-esquema SELECT COUNT(*) FROM RH.FUNCIONÁRIOS -- Os nomes dos catálogos 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 não pode ser qualificado pelo nome-da-tabela ou pelo nome-da-correlação. Este é o caso quando a qualificação é fixa, como na definição da coluna na instrução CREATE TABLE. IdentificadorSQL92 Exemplo -- NOME_PAÍS é um nome-de-coluna-simples CREATE TABLE CONTINENTE ( NOME_PAÍS VARCHAR(26) NOT NULL PRIMARY KEY, COD_ISO_PAÍS CHAR(2), REGIÃO_PAÍS VARCHAR(26)) nome-do-sinônimo O nome-do-sinônimo representa um sinônimo para a tabela ou a visão. O nome-do-sinônimo pode ser qualificado pelo nome-do-esquema. [ 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. [ nome-do-esquema. ] IdentificadorSQL92 Exemplo -- ENG.PROJETO é um nome de tabela que inclui o nome-do-esquema SELECT COUNT(*) FROM ENG.PROJETO nome-da-visão 14
17 O nome-da-visão representa uma tabela ou uma visão. O nome-da-visão pode ser qualificado pelo nome-do-esquema. [ nome-do-esquema. ] IdentificadorSQL92 Exemplo -- Esta é uma visão 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. [ 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 VÔOS (AEROPORTO_ORIGEM) nome-da-restrição Os nomes das restrições não podem ser qualificados. IdentificadorSQL92 Exemplo -- FK2_PAÍS é o nome da restrição CREATE TABLE MAPAS_DETALHADOS ( COD_ISO_PAÍS CHAR(2) CONSTRAINT FK2_PAÍS REFERENCES PAÍSES ) nome-do-cursor O nome-do-cursor faz referência a um cursor. Não 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 informações deve ser consultado o Guia do Desenvolvedor do Derby. Se for atribuído nome a um cursor, poderá ser feita referência a este nome nas instruções SQL. O nome-do-cursor não pode ser qualificado. 15
18 IdentificadorSQL92 Exemplo stmt.executeupdate("update SAMP.EQUIPES SET COMISS = " + "COMISS + 20 " + "WHERE CURRENT OF " + ResultSet.getCursorName()); nome-do-gatilho O nome-do-gatilho faz referência a um gatilho criado pelo usuário. [ nome-do-esquema. ] IdentificadorSQL92 Exemplo DROP TRIGGER GATILHO1 identificador-de-autorização Os nomes de usuário no sistema Derby são conhecidos por identificadores de autorização. O identificador de autorização representa o nome do usuário, caso tenha sido fornecido o nome do usuário na requisição de conexão. O esquema padrão para o usuário é idêntico ao identificador de autorização. No sistema de autenticação pode haver diferença entre letras maiúsculas e minúsculas nos nomes dos usuários, mas não há diferença entre letras maiúsculas e minúsculas no sistema de autorização do Derby, a não ser que o nome esteja delimitado. Para obter mais informações deve ser consultado o Guia do Desenvolvedor do Derby. IdentificadorSQL92 Exemplo CALL SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY( 'derby.database.fullaccessusers', 'Amber,FRED') Instruções Esta seção fornece páginas de manual tanto para as construções de alto nível da linguagem, como para partes desta. Por exemplo, a instrução CREATE INDEX é uma instrução de alto nível que pode ser executada diretamente através da interface de JDBC. Esta seção também inclui as cláusulas, que não são instruções de alto nível, e não podem ser executadas diretamente, mas apenas como parte das instruções de alto nível. As cláusulas ORDER BY e WHERE são exemplos deste tipo de cláusula. Por fim, esta seção também inclui algumas partes de instruções sintaticamente complexas chamada de expressões como, por exemplo, ExpressãoSeleção e SubconsultaTabela. As cláusulas e expressões possuem suas próprias páginas de manual para facilitar a referência. A menos que esteja explicitamente declarado o contrário, as instruções de alto nível, todas assinaladas com a palavra instrução, podem ser executadas, ou preparadas e executadas, através das interfaces fornecidas pelo JDBC. Este manual indica se a expressão pode ser executada como uma instrução de alto nível. As seções fornecem informações gerais sobre a utilização de instruções, e descrições 16
19 de instruções específicas. Interação com o sistema de dependências O Derby acompanha internamente as dependências das instruções preparadas, que são instruções SQL pré-compiladas antes de serem executadas. São tipicamente preparadas (pré-compiladas) uma vez, e executadas várias vezes. As instruções preparadas dependem de objetos do dicionário, e de instruções referenciadas pelas mesmas (Os objetos do dicionário incluem tabelas, colunas, restrições, índices, visões e gatilhos). A remoção ou modificação de objetos do dicionário ou de instruções que a instrução preparada depende a invalida internamente, significando que o Derby vai tentar recompilar automaticamente a instrução quando esta for executada. Se a recompilação da instrução não for bem-sucedida, o pedido de execução falhará. Entretanto, se for tomada alguma ação para restaurar a dependência quebrada (como a restauração da tabela que falta), a instrução preparada poderá ser executada, porque o Derby irá recompilá-la automaticamente no próximo pedido de execução. As instruções dependem umas das outras; uma instrução UPDATE WHERE CURRENT depende da instrução referenciada. Remover a instrução da qual esta depende, invalida a instrução UPDATE WHERE CURRENT. Além disso, as instruções preparadas não permitem a execução de certas instruções de DDL quando existem conjuntos de resultados abertos para as mesmas. As páginas do manual de cada instrução detalham quais ações invalidam a instrução, 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 instrução 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 inválido 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 instrução p1 está temporariamente inválida 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á inválida, o Derby tenta recompilar -- antes de executar. -- É bem-sucedido e executa. ij> DROP TABLE MINHA_TABELA; 0 rows inserted/updated/deleted -- a instrução p1 agora está inválida, -- e desta vez a tentativa de recompilar -- na hora de executar vai falhar ij> execute p1; ERROR 42X05: Table/View 'MINHA_TABELA' does not exist. 17
20 Instrução ALTER TABLE A instrução ALTER TABLE permite: adicionar coluna à tabela adicionar restrição à tabela remover da tabela uma restrição existente aumentar o comprimento de coluna VARCHAR, CHAR VARYING e CHARACTER VARYING sobrepor o bloqueio no nível de linha para a tabela (ou remover a sobreposição) ALTER TABLE nome-da-tabela { ADD COLUMN definição-da-coluna ADD CONSTRAINT cláusula DROP { PRIMARY KEY FOREIGN KEY nome-da-restrição UNIQUE nome-da-restrição CHECK nome-da-restrição CONSTRAINT nome-da-restrição } ALTER alteração-da-coluna LOCKSIZE { ROW TABLE } } definição-da-coluna nome-de-coluna-simplestipo-de-dado [ restrição no nível-de-coluna ]* [ [ WITH ] DEFAULT {ExpressãoConstante NULL } ] alteração-da-coluna nome-da-coluna SET DATA TYPE VARCHAR(inteiro) nome-da-coluna SET INCREMENT BY constante-inteira Na alteração-da-coluna, SET INCREMENT BY constante-inteira especifica o intervalo entre valores consecutivos da coluna de identidade. O próximo valor a ser gerado para a coluna de identidade será determinado a partir do último valor atribuído e o incremento a ser aplicado. A coluna deve ter sido definida com o atributo IDENTITY. ALTER TABLE não afeta nenhuma visão que faz referência à tabela sendo alterada. Isto inclui as visões que possuem "*" na lista do SELECT. Estas visões devem ser removidas e recriadas para que retornem a nova coluna. Adição de colunas A sintaxe para a definição-da-coluna de uma nova coluna é a mesma que para a coluna na instrução CREATE TABLE. Isto significa que pode ser colocada uma restrição de coluna para a nova coluna na instrução ALTER TABLE ADD COLUMN. Entretanto, somente pode ser adicionada uma coluna com a restrição NOT NULL a uma tabela existente se for fornecido um valor padrão; caso contrário, é lançada uma exceção ao ser executada a instrução ALTER TABLE. Assim como em CREATE TABLE, se a definição da coluna incluir uma restrição de unicidade ou de chave primária, a coluna não poderá conter valores nulos e, portanto, também deve ser especificado o atributo NOT NULL (SQLState 42831). Note: Se a tabela possuir um gatilho de UPDATE sem uma lista de colunas explícita, adicionar uma coluna à tabela adicionará esta coluna à lista de colunas de atualização implícita sobre a qual o gatilho está definido, e todas as referências a variáveis de transição serão invalidadas para que incluam a nova coluna. Adição de restrições ALTER TABLE ADD CONSTRAINT adiciona restrição no nível-de-tabela a uma tabela 18