Você está na página 1de 52

1

Apresentao

O acesso a uma base OpenBase por comandos SQL realizado pelo sistema TSQL. Para a sua utilizao no necessrio efetuar previamente qualquer alterao ou adaptao nos dados da base. O TSQL pode operar tanto em modo local como no modo cliente/servidor em que uma aplicao acessa atravs de comandos SQL uma base que no reside na mesma mquina. Por ser uma linguagem especializada, a SQL no possui determinadas caractersticas das linguagens de programao genrica. Por isso ela deve ser executada no modo interativo ou no modo programvel em que comandos SQL so inseridos em programas desenvolvidos em outras linguagens. No modo interativo, o TSQL oferece os utilitrios tsqlwi no WINDOWS ou tsqlI no UNIX. No modo programvel, o TSQL oferece : No WINDOWS, um driver ODBC que efetua a conexo entre uma base OpenBase e programas desenvolvidos em ambientes como Visual Basic, Delphi, Java, Crystal Report, etc. No UNIX e no WINDOWS, uma interface nativa TSQL do tipo CLI (Call Level Interface) para desenvolvimento de aplicaes em "C". Estas aplicaes tambm podem ser desenvolvidas com a interface ODBC. Este manual dirigido a programadores que possuam alguma familiaridade com a linguagem SQL e est estruturado nos seguintes captulos e apndices: Captulo 1 - Conceitos, que apresenta e descreve alguns conceitos bsicos em que a SQL est baseada: esquema (base de dados), transao, concorrncia, etc. So apresentados tambm os diversos nveis do mecanismo de acesso concorrente. Captulo 2 - Elementos da linguagem, que contm a descrio dos elementos comuns aos comandos SQL: tipos de dados, expresso, condio de seleo, etc. Captulo 3 - Predicados, onde feita a descrio dos predicados de uma condio de seleo de um comando SQL. Captulo 4 - Clusulas, descreve as clusulas de um comando SQL. Captulo 5 - Comandos, apresenta os comandos da SQL distribudos em dois grupos. Os comandos de manipulao de dados e de manipulao de esquema. Captulo 6 Interface nativa de programao. Captulo 7 Catlogo SQL, onde so descritas as tabelas do catlogo de uma base de dados que contm informaes relevantes para o usurio. Estas tabelas descrevem a estrutura de uma base. Captulo 8 - Utilitrios, onde so apresentados os diversos utilitrios disponveis no TSQL. Apndice 1 - Instalao. Apndice 2 - Ativao do servidor TSQL. Apndice 3 - Referncia a uma base OpenBase, onde so descritos os parmetros a serem especificados por uma aplicao com comandos SQL para a abertura de uma base. Apndice 4 - ODBC, onde descrito como efetuar uma conexo ODBC com o TSQL. Apndice 5 - Configurao, onde so descritos os possveis parmetros de configurao como o tamanho da rea de ordenao, nmero do servio TSQL, etc. Apndice 6 - Descrio dos ambientes interativos tsqlI e tsqlwi para execuo de comandos SQL .

Apndice 7 Mensagens de erro

2
2.1

Conceitos bsicos
Notao TSQL

Este captulo tem como objetivo apresentar a notao usada no manual de referncia. Em todos os tpicos do manual h duas reas, uma para a descrio da sintaxe e outra para as regras gerais de uso do elemento da linguagem. Em todos os tpicos, h, ainda, uma sentena Veja tambm que remete o leitor a outros pontos do manual, fortemente relacionados com alguma explicao ali apresentada. Descreve-se aqui a notao usada para a definio da sintaxe da linguagem. Todos os elementos possuem um nome seguido de dois pontos (:) e de sua definio. nome_do_elemento : definio Na definio podem existir nomes definidos a seguir, nomes de outras entradas do manual, palavras reservadas da linguagem em letras maisculas, smbolos da linguagem e smbolos da notao. Os smbolos da notao tm os seguintes significados: 1. Barra vertical | significa OU. Deve ser usado o elemento da descrio anterior a barra ou o elemento que segue a barra. 2. Colchetes [] significam clusula opcional. Elementos entre colchetes podem ou no ser colocados na sentena, conforme o caso. 3. Chaves {} significam grupamento de elementos. Os elementos entre chaves devem ser lidos, para efeito da notao, como um s elemento. 4. Trs pontos significam repetio. Um elemento ou um conjunto deles seguido de trs pontos devem ser repetidos uma ou mais vezes. A partir desta, observa-se que uma lista de um ou mais elementos separada por espao representada na forma: nome_do_elemento Uma lista de um ou mais elementos separados por vrgula representada na forma: nome_do_elemento [{,nome_de_elemento}] Nomes de elementos do tipo identificador_de_ so nomes que identificam aquele tipo de elemento e seguem a definio de identificador. Quando um dos smbolos da notao tambm um smbolo da linguagem, o smbolo da linguagem aparece entre aspas (). Por exemplo: [ campo ]. Neste caso o campo no opcional, deve-se especificar um colchete seguido do valor do campo e seguido de outro colchete.

2.2

Base de dados

Uma base de dados SQL uma coleo de informaes organizadas em subconjuntos chamados de esquema. Um esquema, por sua vez, formado por um identificador de autorizao (nome do esquema) , um conjunto de tabelas e um conjunto de ndices sobre cada tabela. Toda base SQL contm um catlogo, que um esquema composto de tabelas que armazenam as descries de todos os objetos (tabelas e ndices) da base e os relacionamentos entre eles. O identificador de autorizao do catlogo o identificador SYSSQL. Atravs de consultas SQL ao catlogo, o usurio descobre as informaes sobre a estrutura de uma base de dados. Em uma base de dados OpenBASE, todas as tabelas e ndices constituem um nico esquema cujo identificador tsql o identificador de autorizao. Como a base no possui fisicamente tabelas de um catlogo SQL, o TSQL simula a execuo de consultas a estas tabelas. Por exemplo, a consulta select * from SYSSQL.SYSTABLES recupera as informaes sobre todas as tabelas de uma base OpenBase. A consulta select * from SYSSQL.SYSCOLUMNS where TNAME = "t1" recupera as informaes sobre as colunas da tabela t1. Veja tambm Catlogo.

2.3

Controle de concorrncia

Concorrncia a capacidade que o sistema possui, em um ambiente multi-usurio, de permitir que vrias transaes acessem simultaneamente informaes de uma base de dados. O grau de concorrncia o volume de transaes executadas pelo sistema durante um determinado intervalo de tempo. Por outro lado, a

consistncia integral dos dados em um ambiente multi-usurio implica em que alteraes efetuadas por uma transao no devem afetar as outras transaes em curso. Para assegurar as caractersticas da concorrncia e da consistncia dos dados, o TSQL usa os mtodos de bloqueio automtico de linhas e de bloqueio programado de tabelas (comando LOCK TABLE). Para se obter o melhor grau de concorrncia, assegurando a consistncia dos dados, necessrio que o esquema de bloqueio permita um balanceamento entre estas caractersticas em funo da aplicao. Este balanceamento obtido atravs do nvel de isolamento da aplicao e o uso do comando LOCK TABLE. No TSQL, os bloqueios podem ser do tipo compartilhado ou exclusivo. Em geral, o sistema coloca um bloqueio compartilhado sobre a linha a ser lida. Este tipo de bloqueio impede que uma outra transao altere a linha durante o tempo de durao do bloqueio. Outras transaes podem ler a linha normalmente. O instante em que um bloqueio compartilhado relaxado depende do nvel de isolamento. Bloqueios exclusivos so colocados sobre as linhas que so alteradas. Quando uma linha possui um bloqueio exclusivo, nenhuma outra transao pode referenci-la. Bloqueios exclusivos so mantidos at o fim da transao que os gerou. Os bloqueios acima descritos so automaticamente adquiridos pelo sistema. O nvel de isolamento uma caracterstica de cada aplicao. Se o nvel no especificado, o sistema assume o nvel de estabilidade de cursor (nvel 1). Em qualquer nvel de isolamento tambm possvel requerer explicitamente bloqueios de tabelas utilizando o comando LOCK TABLE. Bloqueios de tabelas so automaticamente relaxados no fim de uma transao. Estes bloqueios podem ser automaticamente adquiridos pelo sistema quando executado um comando que afeta a definio de uma tabela (CREATE INDEX, por exemplo). O bloqueio de uma tabela deve ser utilizado, no caso de uma transao efetuar operaes de leitura ou atualizao em um grande nmero de linhas. Desta forma o sistema no onerado com a obteno do bloqueio de cada linha. Veja tambm o comando LOCK TABLE. O nvel de isolamento que determina quando os bloqueios de linha so adquiridos e relaxados pelo sistema. O TSQL oferece os seguintes nveis:

2.3.1

Nvel 0. Sem bloqueio

O sistema no mantm bloqueios sobre as linhas referenciadas. A transao s opera com leitura de linhas e no pode efetuar alteraes na base de dados. Este nvel de bloqueio pode ser utilizado para gerar relatrios sem onerar o sistema na tentativa de obteno dos bloqueios. Observa-se que as linhas lidas neste nvel podem refletir alteraes que no foram ainda confirmadas por um comando COMMIT e que podero ser ser eventualmente canceladas (comando ROLLBACK).

2.3.2 Nvel 1. Estabilidade de cursor


Bloqueios compartilhados so relaxados na leitura de uma prxima linha da tabela e bloqueios exclusivos so mantidos at o fim da transao. A estabilidade de cursor utilizada com frequncia nas aplicaes interativas nas quais os usurios podem percorrer linhas, uma de cada vez. Neste ambiente, s necessrio manter um bloqueio sobre uma linha se esta modificada. Aps a passagem do usurio para a prxima linha, bloqueios sobre linhas no modificadas so relaxados.

2.3.3 Nvel 2. Leitura repetida


Bloqueios compartilhados e exclusivos so mantidos at o fim da transao. Desta forma, linhas lidas no so alteradas por outra transao at o fim da transao na qual elas foram lidas. Este nvel prov um alto grau de consistncia e uma relativo baixo grau de concorrncia. Este nvel de isolamento no garante que toda operao de leitura sobre uma determinada tabela reproduzvel dentro de uma mesma transao, porque possvel a insero de linhas por parte de uma transao concorrente. Atravs do comando LOCK TABLE possvel impedir a insero de linhas na tabela por uma transao.

2.3.4 Nvel 3. Uso exclusivo sem transao


Toda a base de dados bloqueada para o usurio. Essencialmente, o sistema passa a operar em modo monousurio. Este nvel deve ser usado para a execuo de operaes tais como salvar uma base de dados, recuperar uma base de dados, etc. O gerenciamento de transaes no efetuado, e consequentemente as atualizaes na base no podem ser desfeitas atravs do comando ROLLBACK.

2.3.5 Nvel 4. Uso exclusivo com transao


Este nvel opera da mesma forma que o nvel anterior com a diferena que o gerenciamento de transaes efetuado.

2.4

Transao

Uma transao consiste em uma seqncia de operaes na base de dados que possui a caracterstica de ser atmica em relao ao controle da concorrncia e da recuperao. Desta forma, existem apenas duas alternativas: todas as operaes presentes numa transao so realizadas como se fossem uma ou nenhuma delas realizada. Se um programa efetua uma operao SQL e no existe uma transao em curso para o programa, ento automaticamente iniciada uma transao para ele. Cada operao SQL subsequente efetuada pelo mesmo programa faz parte da mesma transao at que ela seja terminada. Consequentemente, transaes no podem ser aninhadas. Uma transao encerrada com a execuo de um comando COMMIT ou um comando ROLLBACK. No caso do comando ROLLBACK, todas as alteraes efetuadas na base pela transao so canceladas. O comando COMMIT confirma as alteraes.

2.5

Cursor

No caso da execuo de um comando do tipo SELECT que produz um conjunto resultado de linhas, necessria a existncia de um mecanismo para que uma aplicao possa recuperar o conjunto linha a linha. Isto realizado atravs do conceito de cursor, que assim foi nomeado por apontar para a linha corrente no conjunto resultado da mesma forma que o cursor na tela de um monitor indica a posio corrente. A execuo de um comando SELECT por uma aplicao provoca ento a associao de um determinado cursor ao conjunto resultado. Desta forma, quando uma aplicao executa um comando de leitura do tipo FETCH em relao ao conjunto resultado, o cursor associado movido para a prxima linha e esta ltima retornada para a aplicao. A forma para associar um identificador de cursor a um comando SELECT varia segundo a linguagem de desenvolvimento e pode ser explcita ou implcita. Frequentemente as aplicaes tambm utilizam cursores para alterar dados. Por exemplo, um usurio pode querer visualizar todos os pedidos de um determinado cliente. O programa associa ento um cursor a uma consulta sobre a tabela pedidos e exibe cada pedido na tela esperando por um sinal do usurio para avanar para a prxima linha. O procedimento segue desta forma at que o fim do conjunto resultado seja atingido. Neste exemplo em que a consulta recupera dados de uma nica tabela e no efetua somatrios, o cursor implicitamente aponta para uma linha da tabela pedidos, considerando que cada linha do conjunto resultado provm de uma nica linha da tabela. Desta forma enquanto os dados so percorridos o usurio pode identificar dados a serem alterados na tabela. Por exemplo, a quantidade de um determinado pedido pode estar incorreta ou o usurio pode querer eliminar o pedido. Neste caso, a linha no identificada por um predicado SQL e o programa utiliza o cursor para indicar qual linha deve ser alterada. A SQL oferece os comandos UPDATE POSICIONADO e DELETE POSICIONADO para este fim. No exemplo seguinte onde os pedidos de um determinado cliente formam o conjunto resultado, seja C1 o identificador de cursor associado pela aplicao ao comando: SELECT pedido, data, produto, quantidade FROM pedidos WHERE cod_cliente = 10 Para aumentar em 20% o campo quantidade da linha corrente, o seguinte comando seria executado pela aplicao: UPDATE pedidos SET quantidade = quantidade * 1.2 WHERE CURRENT OF C1 Para eliminar o pedido representado pela linha corrente, o seguinte comando seria executado pela aplicao: DELETE FROM pedidos WHERE CURRENT OF C1 No TSQL um cursor pode ser movimentado incrementalmente para frente ou para trs, ou ser movido para uma posio absoluta ou relativa. Veja tambm Especificao de consulta atualizvel e Comandos.

2.6

Parmetro SQLCODE

Neste manual, o parmetro SQLCODE se refere ao cdigo de erro retornado pelo TSQL aps a execuo de algum comando SQL. No caso da interface nativa, por exemplo, ele corresponde ao parmetro sqlcode das diversas chamadas. A lista dos possveis cdigos de erro apresentada no Apndice 7.

3
3.1

Elementos da linguagem
Palavras reservadas
ABSOLUTE ALTER AS AVG BETWEEN BLOB CAST CHECK COMMIT CREATE DAY DECLARE DESCRIBE DISTINCT ESCAPE EXECUTE FIRST FOREIGN FREE GOTO HOUR IN INSENSITIVE INTEGER IS LARGE LENGTH LOCATOR MIN MODE NONE NUMERIC OF OPEN ORDER POSITION PRIMARY PROCEDURE REAL REVOKE SCROLL SELECT SMALLINT ADD AND ASC BINARY BOTH CHAR CLOB CONTINUE CURRENT DEC DELETE DESCRIPTOR DOUBLE EXCLUSIVE EXISTS FLOAT FOUND FROM GRANT

3.1.1 Sintaxe
ABS ALL ANY AUTHORIZATION BEGIN BIT BY CASCADE CHARACTER CLOSE COUNT CURSOR DATETIME DECIMAL DESC DISPLACEMENT DROP END EXEC EXTEND FETCH FOR FRACTION GO GROUP HAVING IMMEDIATE INDICATOR INT INTO KEY LANGUAGE LEADING LOCAL LOWER MAX MOD MONTH NEXT NULL OBJECT ONLY OR PLACING PREPARE PRIVILEGES READ RELATIVE SCHEMA SECTION SHARE

INDEX INSERT INTERVAL

LAST LIKE LOCK MINUTE MODULE NOT ON OPTION OVERLAY PRECISION PRIOR PUBLIC REFERENCES ROLLBACK SECOND SET SOME

SQL SUBSTRING TABLE TRAILING UNION UPPER VALUES VIEW WHENEVER WORK YEAR

SQLCODE SUM TIME TRIM UNIQUE USER VARCHAR WHERE

SQLERROR SYSTEM TO UPDATE USING VARYING WITH

3.1.2 Regras
As palavras reservadas podem ser escritas em letras maisculas ou minsculas.

3.2

Identificador

3.2.1 Sintaxe
identificador : { letra | _ { letra | dgito | # } } [ [_] { letra | dgito | # } ]

3.2.2 Regras
Um identificador deve ter no mximo 18 caracteres.

3.3

Constante

3.3.1 Sintaxe
constante : cadeia_de_caracteres | constante_numrica | constante_data_hora cadeia_de_caracteres : cadeia_padro | cadeia_C constante_numrica : constante_numrica_exata | constante_numrica_aproximada constante_data_hora : DATETIME < {data [hora] | hora [data]} > [qualificador_data_hora] hora : valor_hora [ : valor_minuto [ : valor_segundo ]] | valor_minuto [: valor_segundo ] | valor_segundo data : [ [ [BC | AD] valor_ano - ] valor_mes - ] valor_dia | valor_dia [ / valor_mes [ / valor_ano [AC | DC] ] ] qualificador_data_hora : campo_data_hora TO campo_data_hora campo_data_hora : YEAR | MONTH | DAY | HOUR | MINUTE | SECOND

3.3.2 Regras
Uma cadeia de caracteres padro delimitada por caracteres apstrofe () e pode conter qualquer caracter vlido. O apstrofe () dentro de uma cadeia deve ser representado por um par de caracteres apstrofe (). Uma cadeia de caracteres C delimitada por aspas () e segue as mesmas regras de formao de cadeia da linguagem C, podendo conter caracteres de controle como \n, \r, etc. Uma constante numrica exata uma seqncia de dgitos precedida ou no por sinal (+ ou -). Ela pode conter uma parte inteira e uma parte decimal separados por um ponto (.). Se a constante no tiver parte decimal, o ponto no fim opcional. Porm, se o nmero s tiver parte decimal o ponto no inicio obrigatrio (no necessrio colocar um 0 inteiro antes do ponto). Uma constante numrica aproximada uma mantissa seguida pelo caracter E (ou e) seguido de um expoente. A mantissa uma constante numrica exata e o expoente deve ser um inteiro precedido

opcionalmente por um sinal. O valor da constante numrica aproximada o valor da mantissa multiplicado pela potncia de 10 correspondente ao expoente especificado. Os valores de ano, ms, dia, hora, minuto e segundo so inteiros sem sinal e devem respeitar a correo do valor de uma data. Os identificadores BC (ou AC) e AD (ou DC) indicam, respectivamente, datas antes e depois da era crist. Em geral, uma constante_data_hora auto-explicativa no que diz respeito ao significado de seus valores (2/4/1992 e 1992-4-2 significam 2 de abril de 1992 e 17:22:30 indica 17 horas, 22 minutos e 30 segundos). Existem apenas trs casos que podem gerar ambigidade para os quais existem uma interpretao padro. Para alter-los necessria a utilizao do qualificador_data_hora. DATETIME <valor> indica um dia. DATETIME <valor / valor> indica dia e ms. DATETIME <valor - valor> indica ms e dia. DATETIME <valor : valor> indica hora e minuto. Em todos os outros casos, o possvel qualificador_data_hora deve corresponder definio da constante. Dentro de uma constante numrica, no pode haver nenhum caracter branco, seja entre o sinal e o nmero, seja entre dgitos (Veja Tipos de Dados).

3.4

Comentrio

3.4.1 Sintaxe
comentrio : caracter fim_de_linha

3.4.2 Regras
Pode-se inserir comentrios (delimitados por e o fim da linha), aps identificadores, palavras reservadas e constantes.

3.5

Tipos de dados

3.5.1 Sintaxe
tipo_de_dado : tipo_cadeia_de_caracteres | tipo_numrico_exato | tipo_numrico_aproximado | tipo_data_hora tipo_cadeia_de_caracteres : { CHARACTER | CHAR } [ VARYING ] [ (tamanho) ] | VARCHAR [ (tamanho) ] | { CHARACTER | CHAR } LARGE OBJECT [ (tamanho_longo) ] | CLOB [ (tamanho_longo) ] tipo_cadeia_binria_longa : BINARY LARGE OBJECT [ (tamanho_longo) ] | BLOB [ (tamanho_longo) ] tamanho_longo : tamanho | tamanho K | tamanho M | tamanho G tipo_numrico_exato : INTEGER | INT | SMALLINT | { NUMERIC | DECIMAL | DEC } [ (preciso [ ,escala ] ) ] tipo_numrico_aproximado : DOUBLE [ PRECISION ] | REAL | FLOAT [ (preciso) ] tipo_data_hora : DATETIME [qualificador_data_hora] qualificador_data_hora : campo_data_hora TO campo_data_hora campo_data_hora : YEAR | MONTH | DAY | HOUR | MINUTE | SECOND

3.5.2 Regras
Tamanho, preciso e escala so nmeros inteiros. CHAR equivalente a CHARACTER. VARCHAR equivalente a CHARACTER VARYING. CLOB equivalente a CHARACTER LARGE OBJECT. BLOB equivalente a BINARY LARGE OBJECT. INT equivalente a INTEGER. DEC e NUMERIC so equivalentes a DECIMAL. DOUBLE equivalente a DOUBLE PRECISION. O tipo CHARACTER especifica o tipo de dados cadeia de caracteres de tamanho fixo. O campo tamanho especifica o tamanho da cadeia e deve estar entre 1 e 32760. Se for omitido, igual a 1. O tipo VARCHAR especifica o tipo de dados cadeia de caracteres de tamanho varivel. O campo tamanho especifica o tamanho mximo da cadeia e deve estar entre 1 e 32760. Se for omitido, igual a 1. O tipo CLOB especifica o tipo de dados cadeia de caracteres de tamanho varivel. O campo tamanho_longo especifica o tamanho da cadeia e deve estar entre 1 e 1023 (bytes, Kbytes, Mbytes ou Gbytes). Se for omitido, igual a 1 byte. O tipo BLOB especifica o tipo de dados cadeia binria de tamanho varivel. O campo tamanho_longo especifica o tamanho da cadeia e deve estar entre 1 e 1023 (bytes, Kbytes, Mbytes ou Gbytes). Se for omitido, igual a 1 byte. O tipo INTEGER especifica os nmeros inteiros entre -2147483648 e 2147483647. O tipo SMALLINT especifica os nmeros inteiros entre -32768 e 32767. O tipo DECIMAL especifica valores decimais de representao exata e ponto fixo. O nmero total de dgitos especificado pela preciso que pode variar entre 0 e 18 (se for omitida, igual a 18). O nmero de dgitos fracionrios especificado pela escala e varia entre 0 e o valor da preciso. Se a escala for omitida, o nmero de dgitos fracionrios igual a zero. Os tipos DOUBLE, REAL e FLOAT especificam valores decimais numricos no exatos com ponto flutuante e nmero de dgitos binrios igual a 56 para a DOUBLE PRECIOSION, 24 para o tipo real ou especificada pela preciso para o tipo FLOAT. O tipo FLOAT equivalente ao tipo REAL se a preciso for omitida ou for menor ou igual a 24 e equivalente ao tipo DOUBLE se a preciso for maior que 24. O tipo DATETIME especifica datas com uma preciso indicada pelo qualificador. O campo inicial do qualificador deve ser sempre maior que o final e indica uma preciso que inclui todos os campos entre eles. Se o qualificador_data_hora for omitido, igual a YEAR TO SECOND. Um campo_data_hora restrito a uma determinada faixa de valores. O campo ano (YEAR) pode variar entre 9999 AC e 9999 DC. O campo ms (MONTH) varia entre 1 e 12. O valor de dia (DAY) est entre 1 e 31 e est sujeito aos valores do ms e ano para formar uma data correta. O campo hora (HOUR) varia entre 0 e 23 e os valores de minuto (MINUTE) e segundo (SECOND) variam entre 0 e 59. A correspondencia entre os tipos do OpenBase e os tipos da SQL apresentada na forma de uma tabela que se encontra na descrio do utilitrio tsqlbd no captulo Utilitrios.

3.6

Tabela

3.6.1 Sintaxe
tabela : [ identificador_de_autorizao . ] identificador_de_tabela

3.6.2 Regras
A referncia a uma tabela deve especificar uma tabela definida na base de dados.

3.7

Coluna

3.7.1 Sintaxe
coluna : [ { tabela | identificador_de_correlao } . ] identificador_de_coluna

3.7.2 Regras
A referncia a uma coluna deve especificar uma coluna de uma tabela definida na base de dados. Se a coluna estiver qualificada por uma tabela ou identificador de correlao, o nome da coluna deve estar definido na tabela (uma ou mais) associada ao qualificador e ser considerada a tabela de escopo mais interno. O escopo de uma tabela ou identificador de correlao definido pela clusula FROM contida na subconsulta ou especificao de consulta mais prxima. Caso a coluna no esteja qualificada, est implicitamente especificada (se for a nica possvel) uma tabela ou correlao dentro do escopo mais interno que contenha a coluna em sua definio.

Veja tambm Tabela e Clusula FROM.

3.8

Funo de conjunto

3.8.1 Sintaxe
Funo_de_conjunto : COUNT(*) | funao_DISTINCT | funo_ALL funo_DISTINCT : {AVG | MAX | MIN | SUM | COUNT} (DISTINCT expresso) funo_ALL : { AVG | MAX | MIN | SUM | COUNT} ( [ALL] expresso)

3.8.2

Regras

O argumento de uma funo DISTINCT um conjunto de valores derivado da aplicao da expresso a cada linha da tabela ou grupo, eliminados todos os valores nulos ou duplicados. J o argumento de uma funo ALL o conjunto de valores derivado da aplicao da expresso, eliminados apenas os valores nulos. O resultado da funo COUNT(*) a cardinalidade (nmero de linhas) da tabela ou grupo. O tipo INTEGER. O resultado da funo DISTINCT COUNT a cardinalidade de seu argumento. O tipo INTEGER. O resultado da funo AVG a mdia aritmtica dos valores de seu argumento e o da funo SUM o somatrio dos valores de seu argumento. Ambas s podem ser aplicadas a valores de tipo numrico. O tipo do resultado da funo AVG ou SUM : DOUBLE se o tipo do argumento DOUBLE ou REAL, ou INTEGER se o tipo do argumento INTEGER ou SMALLINT, ou DECIMAL se o tipo do argumento DECIMAL. Se o tipo do resultado da funo AVG ou SUM DECIMAL: a preciso do resultado da funo AVG ou SUM 18, a escala do resultado da funo SUM igual escala do argumento, e a escala do resultado da funo AVG igual escala do argumento somada a 18 e subtrada da preciso do argumento. As funes MAX e MIN tem como resultado respectivamente o maior e o menor valor de seu argumento e do mesmo tipo da coluna ou da avaliao da expresso. As funes DISTINCT MAX e DISTINCT MIN so equivalentes a MAX e MIN, respectivamente. Em uma especificao de consulta no pode ocorrer mais de uma funo DISTINCT. Se vazio o conjunto dos valores do argumento das funes AVG, MAX, MIN ou SUM, ento o resultado nulo. Veja tambm Expresso e Tipos de dados.

3.9

Funo escalar

3.9.1 Sintaxe
funo_escalar : funo EXTEND | funo_CAST | funo_SUBSTRING | funo_LENGTH | funo_POSITION | funo_OVERLAY | funo_UPPER | funo_LOWER | funo_TRIM | funo_ABS | funo_MOD funo_EXTEND : EXTEND ( expresso [ ,qualificador_data_hora]) qualificador_data_hora : campo_data_hora TO campo_data_hora campo_data_hora : YEAR | MONTH | DAY | HOUR | MINUTE | SECOND funo_CAST : CAST( operando_cast AS tipo_de_dado_alvo ) operando_cast : expresso | NULL tipo_de_dado_alvo : tipo_de_dado

funo_LENGTH : LENTGH (expresso) funo_SUBSTRING : SUBSTRING(expresso, expresso [,expresso]) | SUBSTRING(expresso FROM expresso [FOR expresso]) funo_POSITION : POSITION(expresso IN expresso) funo_OVERLAY: OVERLAY(expresso PLACING expresso FROM expresso [ FOR expresso ] ) funo_UPPER: UPPER(expresso) funo_LOWER: LOWER(expresso) funo_TRIM: TRIM( [ [ especificao_trim ] [caracter_trim] FROM ] expresso) especificao_trim : LEADING | TRAILING | BOTH funo_ABS : ABS(expresso) funo_MOD : MOD(expresso, expresso)

3.9.2

Regras

A funo EXTEND ajusta a preciso do argumento para a preciso indicada pelo qualificador. Esta funo s pode ser aplicada a valores de tipo DATETIME e retorna um valor do mesmo tipo e com preciso especificada pelo qualificador. Se este for omitido, retornado um valor de preciso YEAR TO SECOND. Se a preciso do argumento da funo EXTEND contm campos no includos na preciso especificada pelo qualificador_data_hora, ento os campos excedentes so truncados. Se a preciso especificada pelo qualificador contm campos esquerda dos campos do argumento, ento campos adicionais so iniciados com valores extrados da data e hora correntes. O resultado deve constituir uma data correta. Se a preciso especificada pelo qualificador contm campos direita dos campos do argumento, ento estes campos adicionais so iniciados com o valor 1 para os campos ms e dia e com o valor 0 para os campos hora, minuto e segundo. A funo CAST transforma o tipo do valor de uma expresso. Se a expresso for igual a NULL ou o valor resultante da expresso for nulo ento o resultado da funo cast um valor nulo cujo tipo o tipo especificado pelo tipo_de_dado_alvo. Se o tipo da expresso for numrico exato ou numrico aproximado, o tipo do parmetro tipo_de_dado_alvo no poder ser DATETIME e vice-versa. Se a expresso e o tipo_de_dado_alvo forem ambos do tipo CHAR ou VARCHAR e o tamanho de tipo_de_dado_alvo no for igual ao tamanho da cadeia resultante da expresso, o resultado ser truncado ou completado com brancos a direita. Na converso de uma cadeia de caracteres para um tipo numrico ou para um tipo DATETIME, a cadeia dever representar um nmero vlido ou uma data vlida seno ser retornado um erro. A converso de uma data para um tipo DATETIME segue as mesmas regras que a funo EXTEND. A funo LENGTH retorna um SMALLINT indicando o tamanho do operando que deve ser uma cadeia. Os caracteres brancos no significativos, ou seja, direita do ltimo caracter no branco so excludos no clculo do tamanho. Se o operando for nulo, o resultado da funo tambm ser nulo. A funo SUBSTRING retorna a subcadeia do primeiro argumento que comea no caracter de ordem definida pelo segundo argumento e cujo tamanho dado pelo terceiro argumento. O primeiro argumento deve ser do tipo cadeia de caracteres e os demais do tipo numrico exato com preciso igual a zero. Se a cadeia do tipo VARCHAR, o resultado ser do mesmo tipo, seno seu tamanho ser o especificado pelo terceiro argumento. No caso de um dos argumentos ser nulo, o resultado retornado ser nulo. O argumento da funo que especifica a posio inicial deve ser maior que zero e menor ou igual ao tamanho da cadeia original. O terceiro argumento, se especificado, deve ser maior ou igual a zero e menor ou igual ao tamanho da cadeia original menos a posio inicial especificada acrescido de um (tamanho da cadeia original a partir da posio inicial). Quando este argumento no especificado, considerado um tamanho igual ao tamanho da cadeia a partir da posio inicial. A funo POSITION retorna um SMALLINT indicando a posio da primeira ocorrncia da subcadeia correspondente ao primeiro operando na cadeia correspondente ao segundo operando. Zero retornado se o primeiro operando no for subcadeia. Se o primeiro operando for de tamanho 0, 1 retornado. Se algum dos operandos for nulo , o resutado ser nulo. A funo OVERLAY modifica a cadeia especificada pelo operando 1 substituindo uma determinada subcadeia por uma cadeia chamada cadeia de substituio e definida pelo operando 2. A posio inicial da subcadeia definida pelo operando 3 e o seu tamanho pelo operando 4. Quando o tamanho da subcadeia no for definido ou igual a zero nada substituido e a cadeia retornada pela funo a cadeia original na qual foi inserida a cadeia de sustituio na posio determinada. A funo UPPER transforma cada letra minscula do operando, na letra maiscula que lhe corresponde.

A funo LOWER transforma cada letra maiscula do operando na letra minscula que lhe corresponde. A funo TRIM dependendo da especificao_trim elimina caracteres iguais ao caracter_trim a direita ou a esquerda ou dos dois lados do operando expresso que deve ser do tipo cadeia de caracteres. O valor default da especificao_trim TRAILING e o valor default do caracter_trim branco. A funo ABS retorna o valor absoluto da expresso que deve ser do tipo numrica. A funo MOD retorna o resto da diviso do primeiro operando pelo segundo operando que devem ser do tipo nmericos exatos. Veja tambm Expresso e Tipos de dados.

3.10 Valor
3.10.1 Sintaxe
valor : constante | USER | CURRENT | parmetro_dinmico parmetro_dinmico : ?

3.10.2 Regras
O valor especificado por USER igual ao identificador de autorizao do usurio. O tipo uma cadeia de caracteres de tamanho 18. O valor especificado por CURRENT igual data e hora correntes. O tipo DATETIME YEAR TO SECOND. Parmetros dinmicos podem ser especificados para entrada ou sada. Ou seja, os valores podem ser passados para o comando SQL a partir de variveis do programa de aplicao (entrada) ou podem ser variveis do programa de aplicao onde valores devem ser armazenados (sada). Veja tambm Constante.

3.11 Expresso
3.11.1 Sintaxe
expresso : [ + | - ] primrio [ { + | - | * | / | || } expresso ] primrio : valor | coluna | funo_de_conjunto | funo_escalar | (expresso)

3.11.2 Regras
A avaliao de uma expresso respeita a seguinte precedncia: 1. expresses entre parnteses 2. operaes unrias 3. operaes de multiplicao e diviso 4. operaes de adio e subtrao 5. operaes de mesma precedncia da esquerda para a direita. Se o valor de qualquer primrio for nulo, ento o valor da expresso nulo. Em uma diviso, o divisor deve ser diferente de 0. Uma expresso contendo uma cadeia de caracteres ou um primrio do tipo data-hora no deve conter operadores matemticos. Um operador unrio no pode ser seguido de uma constante numrica iniciada por um sinal. O tipo do resultado de uma operao matemtica : DOUBLE se o tipo de algum operando DOUBLE ou REAL, ou DECIMAL se o tipo de algum operando DECIMAL, ou INTEGER se o tipos dos operandos so INTEGER e/ou SMALLINT. Se o tipo do resultado de uma operao matemtica DECIMAL: a preciso do resultado da operao de soma ou subtrao a maior das precises dos operandos mais 1 (menor ou igual a 18), a escala do resultado da operao de soma ou subtrao a maior das escalas dos operandos, a preciso do resultado da operao de multiplicao ou diviso a soma das precises dos operandos, a escala do resultado da operao de multiplicao ou diviso a soma das escalas dos operandos.

O resultado da operao || a concatenao de duas cadeias de caracteres, excludos os caracteres brancos no significativos. No caso de um dos operandos ser do tipo VARCHAR, o resultado do tipo VARCHAR, seno o tamanho do resultado da concatenao a soma do tamanho de seus operandos. Veja tambm Valor, Coluna e Funo.

3.12 Condio
3.12.1 Sintaxe
condio : item_de_seleo | item_de_seleo {AND|OR} item_de_seleo item_de_seleo : [NOT] { predicado | (condio) } predicado : predicado_de_comparao | predicado_BETWEEN | predicado_LIKE | predicado_NULL | predicado_IN | predicado_quantificado | predicado_EXISTS

3.12.2 Regras
Retorna o valor verdadeiro, falso ou no conhecido, dependendo do resultado da aplicao de operadores lgicos a outras condies. O valor no conhecido como resultado final de uma condio tratado como falso pelas clusulas SQL (WHERE e HAVING), pois ambas as respostas no retornam nenhum valor vlido. A diferena entre esses valores se d na avaliao da condio segundo a tabela-verdade abaixo. A avaliao de uma condio feita na seguinte ordem: 1. Expresses entre parnteses. 2. Operaes NOT. 3. Operaes AND. 4. Operaes OR. 5. Operaes de mesma precedncia da esquerda para a direita. Os operadores lgicos, NOT, AND e OR so definidos, segundo as seguinte tabela: NOT V F ? F V ? AND V F ? V V F ? F F F F ? ? F ? OR V F ? V V V V F V F ? ? V ? ?

V denota o valor verdadeiro F denota o valor falso ? denota o valor no conhecido O resultado de uma condio onde no apaream operadores lgicos o valor do predicado especificado. Veja tambm Predicado.

3.13 Especificao de consulta


3.13.1 Sintaxe
especificao_de_consulta : clusula_SELECT clusula_FROM [ clusula_WHERE ] [ clusula_GROUP_BY ] [ clusula_HAVING ]

3.13.2 Regras
Retorna uma tabela definida pelas clusulas SELECT, FROM e opcionalmente pelas clusulas WHERE, GROUP BY e HAVING. O resultado de uma especificao de consulta a tabela formada pelas colunas definidas na clusula SELECT a partir das tabelas especificadas na clusula FROM e segundo as restries das demais clusulas. Cada coluna da tabela resultante tem o mesmo tipo, tamanho, preciso e escala da expresso da qual derivada. Se o resultado das clusulas for uma tabela agrupada de zero grupos, o resultado da especificao de consulta uma tabela vazia. Apenas uma funo DISTINCT AVG, COUNT ou SUM deve aparecer em uma especificao de consulta, a no ser que esteja presente em uma subconsulta. Uma especificao de consulta dita atualizvel se: a opo DISTINCT no for especificada na clusula SELECT; toda expresso especificada na clusula SELECT for uma referncia a uma coluna; a clusula FROM especificar exatamente uma nica tabela que seja atualizvel; a clusula WHERE no incluir uma subconsulta; no forem especificadas as clusulas GROUP BY ou HAVING. Cada uma das clusulas de uma especificao de consulta realiza determinada operao sobre uma tabela, retornando uma outra tabela modificada de algum modo. A primeira clusula a ser executada a clusula FROM que faz o produto cartesiano entre as tabelas especificadas. A seguir, a clusula WHERE, se houver, seleciona linhas da tabela gerada pela clusula anterior de acordo com uma condio. A clusula GROUP BY agrupa uma tabela e a clusula HAVING seleciona grupos da tabela segundo uma condio. Finalmente, a clusula SELECT executada sobre a tabela resultante da aplicao das demais clusulas e indica as colunas que pertencero a tabela retornada pela consulta. Veja tambm Clusulas.

3.14 Expresso de consulta


3.14.1 Sintaxe
expresso_de_consulta : { especificao_de_consulta | ( expresso_de_consulta ) } [ UNION [ ALL ] { especificao_de_consulta | ( expresso_de_consulta ) } ]

3.14.2 Regras
Uma expresso de consulta especifica uma tabela a ser retornada numa consulta. Se o operador UNION no for especificado: a expresso de consulta atualizvel, no caso da especificao de consulta ser atualizvel; a descrio da expresso de consulta igual descrio da especificao de consulta. Se o operador UNION for especificado: a expresso de consulta no atualizvel; grau de todas as especificaes de consulta deve ser o mesmo; os nomes das colunas da tabela especificada pela expresso de consulta so iguais aos nomes das colunas da primeira especificao de consulta; os tipos das colunas correspondentes das especificaes de consulta devem ser comparveis; se o tipo de duas colunas correspondentes CHARACTER, o tipo da coluna resultante CHARACTER de tamanho igual ao maior dos dois tamanhos; se o tipo de uma das duas colunas correspondentes NUMERIC e o outro numrico exato, o tipo da coluna resultante NUMERIC; se o tipo de uma das duas colunas correspondentes numrico aproximado, o tipo da coluna resultante DOUBLE; se o tipo de duas colunas correspondentes DATETIME, o tipo da coluna resultante DATETIME, as precises das duas colunas devem ter o mesmo campo inicial que ser o campo inicial da preciso da coluna resultante e o campo final da preciso resultante o maior dos campos finais;

se uma das duas colunas correspondentes pode ter valores nulos, ento a coluna resultante pode ter valores nulos. Na avaliao de uma expresso de consulta, as expresses entre parnteses so primeiro avaliadas. As operaes de mesma precedncia so avaliadas da esquerda para a direita. O operador UNION elimina as linhas duplicadas na operao de unio entre os operandos. Para que linhas duplicadas no sejam eliminadas, necessrio especificar a opo UNION ALL. Veja tambm Especificao de consulta, Clusulas e Comando SELECT dinmico.

3.15 Subconsulta
3.15.1 Sintaxe
subconsulta : ( especificao_de_consulta )

3.15.2 Regras
Uma subconsulta especifica uma coleo de valores obtidos do resultado de uma especificao de consulta. Ou seja, retorna a tabela formada pelas colunas especificadas na clusula SELECT a partir da tabelas referidas na clusula FROM e segundo as restries das demais clusulas. O grau da tabela (nmero de colunas) derivada na subconsulta o nmero de elementos da clusula SELECT e deve ser igual a um, a no ser quando a subconsulta est especificada em um predicado EXISTS. Podem ser feitas, nas clusulas SELECT, WHERE ou HAVING da subconsulta, referncias a colunas das tabelas referidas nas clusulas FROM mais externas. a chamada referncia externa. Quando um nome de coluna aparece na subconsulta e esta no pertence s tabelas especificadas na clusula FROM, ela pode referenciar colunas das tabelas tratadas pelos nveis externos da consulta. Deste modo, podem existir situaes ambguas na definio das clusulas. A SQL considera que uma referncia a uma coluna numa subconsulta indica uma coluna de uma tabela referenciada no mesmo nvel ou em algum dos nveis externos, priorizando o mais prximo. Possveis ambigidades devem ser resolvidas com o uso de qualificadores ou identificadores de correlao. Veja tambm Clusula e Especificao de consulta.

4
4.1

Predicados
Predicado de comparao

4.1.1 Sintaxe
predicado_de_comparao : expresso comparador {expresso | subconsulta} comparador : = | <> | < | <= | > | >= | != | !> | !<

4.1.2 Regras
Compara dois valores que devem ser de tipos comparveis. O valor de uma comparao verdadeiro, falso ou no conhecido. A comparao tem resultado no conhecido se o valor de uma das expresses for nulo ou se o resultado da subconsulta nulo ou vazio. O resultado da subconsulta deve ter no mximo um nico valor. O comparador != equivalente a <> e retorna verdadeiro se as expresses so diferentes. Os comparadores !> e !< eqivalem, respectivamente aos operadores <= e >=. A comparao de duas cadeias de caracteres feita caracter a caracter da esquerda para a direita e respeitando a ordenao da tabela ASCII. Se duas cadeias de tamanhos diferentes so comparadas, a menor delas completada com caracteres brancos para que tenham o mesmo comprimento e a seguir comparadas. A comparao de dois valores do tipo data-hora efetuada aps o ajuste de ambos os valores preciso especificada pelo maior dos campos iniciais das precises dos valores at o maior dos campos finais. Veja tambm Condio, Expresso e Subconsulta.

4.2

Predicado BETWEEN

4.2.1 Sintaxe
predicado_between : expresso [NOT] BETWEEN expresso AND expresso

4.2.2 Regras
O predicado BETWEEN especifica a comparao de um valor dentro de uma faixa de valores. Para isso, os tipos resultantes das trs expresses devem ser comparveis.

A sentena x BETWEEN y AND z equivalente sentena x >= y AND x <= z, assim como o predicado x NOT BETWEEN y AND z equivalente condio NOT ( x BETWEEN y AND z). Veja tambm Expresso e Condio.

4.3

Predicado LIKE

4.3.1 Sintaxe
predicado_like : expresso [NOT] LIKE padro [ ESCAPE valor_escape ] padro : expresso valor_escape : expresso

4.3.2 Regras
O predicado LIKE compara um valor com um padro de caracteres. O valor da expresso, o padro e o valor ESCAPE devem ser do tipo cadeia de caracteres. O valor do predicado no conhecido quando a expresso ou o padro tem valor nulo. Quando o valor ESCAPE no especificado ou nulo, o caracter sublinhado (_) no padro representa a ocorrncia de um caracter qualquer e o caracter porcentagem (%) representa a seqncia de 0 ou mais caracteres. Os demais caracteres representam a si mesmos. Se o valor ESCAPE for especificado, a interpretao acima dos caracteres sublinhado e porcentagem ignorada quando precedidos pelo primeiro caracter do valor ESCAPE. Neste caso, o par de caracteres representar o prprio caracter sublinhado ou porcentagem. O predicado x NOT LIKE y equivalente NOT (x LIKE y). Veja tambm Expresso e Condio.

4.3.3 Exemplo
O exemplo 1 retorna verdadeiro se o nome contiver a palavra Silva em qualquer parte da cadeia:
nome LIKE %Silva%

O exemplo 2 retorna verdadeiro se a referncia do produto contm exatamente 3 caracteres, sendo o primeiro deles um S:
produto LIKE S__

O exemplo 3 retorna verdadeiro se a referncia do produto comea com o caracter sublinhado:


produto LIKE \_% ESCAPE \

4.4

Predicado NULL

4.4.1 Sintaxe
predicado_NULL : expresso IS [NOT] NULL

4.4.2 Regras
O predicado compara o valor da expresso com o valor nulo, retornando verdadeiro se a expresso for nula. A condio NOT (x IS NULL) equivale a x IS NOT NULL. Veja tambm Expresso e Condio.

4.5

Predicado IN

4.5.1 Sintaxe
predicado_IN : expresso [NOT] IN { ( expresso [ ,expresso ] ) | subconsulta }

4.5.2 Regras
O predicado IN compara o valor da expresso com uma coleo de valores especificado na lista ou na subconsulta, assim os tipos de todos os valores envolvidos devem ser comparveis. Uma lista de valores no deve conter funes de grupamento ou especificaes de coluna. Os predicados x IN subconsulta e x =ANY subconsulta so equivalentes, assim como x NOT IN S e NOT (x IN S). Veja tambm Expresso, Valor, Subconsulta e Condio.

4.5.3 Exemplos
O exemplo 1 lista os pedidos feitos nos trs primeiros dias de maro de 1992:
SELECT cd_pedido, data, cliente FROM pedidos

WHERE data IN (DATETIME<01/03/1992>, DATETIME<02/03/1992>, DATETIME<03/03/1992>)

O exemplo 2 lista os vendedores que trabalham em escritrios que venderam acima da meta:
SELECT nome FROM vendedores WHERE escritrio IN (SELECT escritrio FROM escritrios WHERE vendas > meta)

4.6

Predicado quantificado

4.6.1 Sintaxe
predicado_quantificado : expresso comparador [ALL|ANY|SOME] subconsulta comparador : = | <> | < | <= | > | >= | != | !> | !<

4.6.2 Regras
O predicado quantificado compara um valor com uma coleo de valores retornado pela subconsulta. Os tipos da expresso e do resultado da subconsulta devem ser comparveis. O predicado ALL verdadeiro se o resultado da subconsulta for vazio ou se a comparao entre a expresso e cada valor resultante da subconsulta for verdadeiro. O predicado falso se a comparao entre a expresso e algum valor resultante da subconsulta for falso. O predicado ANY (ou SOME) retorna verdadeiro se o resultado da comparao entre a expresso e algum dos valores retornados na subconsulta for verdadeiro. O predicado falso se o resultado da subconsulta for vazio ou se as comparaes entre a expresso e todos os valores da subconsulta forem falsos. O valor do predicado no conhecido se no for verdadeiro nem falso. Veja tambm Expresso, Subconsulta e Predicado de comparao.

4.6.3 Exemplo
O exemplo 1 lista os vendedores que tem pelo menos um pedido que representa mais de 20 por cento de sua cota:
SELECT nome FROM vendedores WHERE (0.2 * cota) < ANY (SELECT preco FROM pedidos WHERE pedidos.vendedor = vendedores.cod_vendedor)

O exemplo 2 lista os escritrios onde todos os vendedores venderam mais que metade da meta do escritrio.
SELECT escritrio, cidade FROM escritorios WHERE (0.5 * meta) < ALL (SELECT vendas FROM vendedores WHERE escritorios.escritorio = vendedores.escritorio)

4.7

Predicado EXISTS

4.7.1 Sintaxe
predicado_exists : EXISTS subconsulta

4.7.2 Regras
O predicado EXISTS verdadeiro se o conjunto de valores retornado pela subconsulta no vazio. Veja tambm Subconsulta e Condio.

4.7.3 Exemplo
A consulta a seguir lista os nomes dos clientes que fizeram um pedido de mais de 200 unidades:
SELECT clientes.nome FROM clientes WHERE EXISTS (SELECT * FROM pedidos WHERE clientes.cod_cliente = pedidos.cliente AND pedidos.quantidade >= 200)

5
5.1

Clusulas
Clusula FROM

5.1.1 Sintaxe
clusula_FROM : FROM tabela [identificador_de_correlao] [ , tabela [identificador_de_correlao] ]...

5.1.2 Regras
A clusula FROM especifica uma tabela derivada de uma ou mais tabelas e a descrio de seu resultado a concatenao das descries das tabelas nela especificadas, na ordem em que seus nomes aparecem. Um identificador de correlao usado para identificar a tabela a ele associada. Caso a tabela no possua um, ela dita exposta. Nomes de tabela expostos e/ou identificadores de correlaes em uma clusula FROM no podem ser iguais. Quando se deseja fazer referncia a mais de uma instncia uma mesma tabela ao mesmo tempo, o uso de identificadores de correlao se torna necessrio para eliminar possveis ambigidades. O identificador de correlao pode ser usado mesmo sem que haja necessidade explcita, apenas para tornar a identificao da tabela mais legvel no contexto. O escopo dos nomes de correlao e dos nomes de tabelas expostos de uma clusula FROM a subconsulta mais interna ou a especificao de consulta que contm a clusula FROM. Uma clusula FROM define um escopo para um nome de tabela nela especificado somente se o nome de tabela estiver exposto. Veja tambm Especificao de consulta, Tabela e Subconsulta.

5.1.3 Exemplo
Quando a clusula FROM contm mais de uma tabela, ela especifica uma juno. O exemplo abaixo mostra o nome dos vendedores e a cidade onde trabalham a partir de uma juno.
SELECT nome,cidade FROM vendedores, escritorios WHERE vendedores.escritorio = escritorios.escritorio

O uso de identificadores de correlao , por exemplo, necessrio no caso de uma juno de uma tabela com ela mesma. O exemplo a seguir lista todos os pares de pedidos feitos no mesmo dia.
SELECT primeiro.pedido#, segundo.pedido# FROM pedidos primeiro, pedidos segundo WHERE primeiro.data = segundo.data

5.2

Clusula WHERE

5.2.1 Sintaxe
clusula_WHERE : WHERE condio

5.2.2 Regras
O resultado da clusula WHERE uma tabela contendo linhas sobre a qual o resultado da condio verdadeiro. Quando a clusula est inserida numa especificao de consulta, as linhas so oriundas das tabelas especificadas na clusula FROM precedente. Se a clusula est inserida num comando DELETE ou UPDATE, ela se refere tabela indicada no comando. Cada especificao de coluna diretamente contida na condio deve ser uma referncia no ambgua a uma coluna da tabela original ou deve ser uma referncia externa. Se uma expresso diretamente contida na condio de seleo for uma funo, ento a clusula WHERE deve estar contida em uma clusula HAVING e a referncia coluna na funo deve ser uma referncia externa. Veja tambm Condio, Funo, Especificao de consulta, Clusula FROM e Clusula HAVING.

5.3

Clusula GROUP BY

5.3.1 Sintaxe
clusula_GROUP_BY : GROUP BY coluna [ , coluna ]

5.3.2 Regras
A clusula GROUP BY retorna uma tabela agrupada pelos valores das colunas listadas na clusula, chamadas de colunas de grupamento. Em cada grupo, todos os valores de cada coluna de grupamento so iguais.

Quando uma condio ou uma expresso aplicada a um grupo de linhas, uma referncia a uma coluna de grupamento uma referncia ao valor desta coluna no grupo. Para o GROUP BY, dois valores nulos de uma coluna so considerados iguais entre si e diferentes de todos os valores no nulos desta coluna. Veja tambm Especificao de consulta.

5.3.3 Exemplo
O exemplo abaixo apresenta a mdia das vendas de cada vendedor. A coluna vendedor a coluna de grupamento e a tabela retornada pela clusula GROUP BY tem tantas linhas quanto o nmero de vendedores.
SELECT vendedor, AVG(preo_total) AS Media_de_Vendas FROM pedidos GROUP BY vendedor

5.4

Clusula HAVING

5.4.1 Sintaxe
clusula_HAVING : HAVING condio

5.4.2 Regras
O resultado da clusula HAVING a tabela agrupada contendo os grupos resultantes da clusula precedente que aplicando-se a condio, o resultado verdadeiro. Se a clusula precedente no for GROUP BY, a clusula HAVING considera o resultado desta como um nico grupo contendo toda a tabela resultante da clusula. Neste caso no h coluna de grupamento. Veja tambm Especificao de consulta.

5.4.3 Exemplo
O exemplo a seguir mostra o nmero dos vendedores que venderam mais de $200000.00 e o valor mdio de suas vendas.
SELECT vendedor, AVG(preo_total) FROM pedidos GROUP BY vendedor HAVING SUM (preo_total) > 200000.00

5.5

Clusula SELECT

5.5.1 Sintaxe
clusula_SELECT : SELECT [ALL | DISTINCT] lista_SELECT lista_SELECT : * | item_lista [ , item_lista ] item_lista : expresso [AS identificador_de_coluna] | tabela.*

5.5.2 Regras
A clusula SELECT especifica as colunas da tabela a ser retornada numa especificao de consulta. Um novo identificador de coluna pode ser atribudo s colunas da tabela resultante com o uso da clusula AS. O novo identificador pode ser usado para referenciar colunas da tabela resultante na clusula ORDER BY. A clusula SELECT aplicada sobre a tabela resultante das clusulas FROM e opcionalmente das clusulas WHERE, GROUP BY e HAVING. Se a clusula GROUP BY tiver sido aplicada, a tabela dita agrupada. A clusula SELECT * equivalente a uma lista SELECT que contenha todas as colunas que constituem a tabela retornada pela clusula FROM na ordem em que a tabela foi definida. O item tabela.*, da mesma forma, especifica todas as colunas na tabela indicada. Se a clusula SELECT for aplicada a uma tabela no agrupada e a lista SELECT incluir uma funo, ento o resultado da especificao de consulta uma tabela de uma nica linha contendo em suas colunas os valores resultantes da avaliao das funes correspondentes aplicadas tabela original. Se a lista SELECT no incluir funes, cada expresso avaliada para cada linha da tabela original. A tabela resultante tem a mesma cardinalidade (nmero de linhas) da primeira e suas colunas contm os valores derivados das expresses correspondentes. Se a clusula SELECT aplicada a uma tabela agrupada em um ou mais grupos, a tabela resultante tem cardinalidade igual ao nmero de grupos e cada linha corresponde aplicao das expresses cada grupo.

Se a opo DISTINCT especificada, o resultado da especificao de consulta retornar a tabela definida pela clusula SELECT com todas as linhas duplicadas eliminadas. Duas linhas so consideradas duplicadas se os valores em todas as colunas correspondentes forem iguais. Dois valores nulos so considerados iguais e so diferentes de quaisquer outros valores. Se o resultado das clusulas subsequentes for uma tabela agrupada, as referncias s colunas presentes em cada expresso devem ser referncias a colunas de grupamento (especificadas em uma clusula GROUP BY) ou estar dentro de uma funo. Se o resultado das clusulas subsequentes no for uma tabela agrupada e alguma expresso incluir uma funo, ento todas as referncias a uma coluna devem estar numa funo e o resultado da especificao de consulta uma tabela de uma nica linha. Veja tambm Especificao de consulta e Comando SELECT dinmico.

5.6

Clusula ORDER BY

5.6.1 Sintaxe
clusula_ORDER_BY : ORDER BY especificao_de_ordem [ ,especificao_de_ordem ] especificao_de_ordem : {coluna | inteiro} [ASC|DESC]

5.6.2 Regras
A clusula ORDER BY ordena as linhas de uma tabela. As especificaes de ordem so referncias a colunas da tabela resultante ou nmeros inteiros que indicam a posio da coluna na definio da tabela. Os nmeros inteiros devem ser maior que zero e menor ou igual ao grau da tabela. As linhas so ordenadas pela primeira especificao de ordem. A seguir, as linhas so reordenadas por cada uma das demais especificaes de ordem dentro do conjunto de linhas cuja especificao de ordem anterior tm valores iguais para as colunas especificadas. Se a opo DESC especificada, a tabela ordenada em ordem decrescente. Caso contrrio, a clusula indica uma ordem ascendente. Valores nulos so menores que todos os valores no nulos de uma coluna. Veja tambm Cursor.

6
6.1

Comandos SQL
Comando SELECT dinmico

6.1.1 Sintaxe
comando_SELECT_dinmico : expresso_de_consulta [ clusula_ORDER_BY | clusula_FOR_UPDATE ] clusula_FOR_UPDATE : FOR UPDATE OF { * | coluna [ , coluna] } expresso_de_consulta : { especificao_de_consulta | ( expresso_de_consulta ) } [ UNION [ ALL ] { especificao_de_consulta | ( expresso_de_consulta ) } ] especificao_de_consulta : clusula_SELECT clusula_FROM [ clusula_WHERE ] [ clusula_GROUP_BY ] [ clusula_HAVING ]

6.1.2 Regras
O comando SELECT dinmico retorna a tabela definida pela expresso de consulta, opcionalmente ordenada pela clusula ORDER BY. A tabela ser dita atualizvel, se a especificao de cursor for atualizvel e no for declarada a clusula ORDER BY.

Se a clusula ORDER BY no for especificada, as linhas da tabela podero ser recuperadas em qualquer ordem, com resultado no previsvel. Se a opo ALL no for especificada com o operador UNION, sero eliminadas do resultado as linhas duplicadas. A clusula FOR UPDATE tem efeito apenas quando se trata de um SELECT a ser usado numa declarao dinmica de cursor. Seu uso obrigatrio quando o cursor for ser usado para atualizaes posicionadas na tabela. Neste caso somente as colunas especificadas na clusula podero ser atualizadas com o comando UPDATE. Veja tambm Cursor, Clusulas, Expresso de Consulta e Especificao de consulta.

6.2

Comando INSERT

6.2.1 Sintaxe
comando_INSERT : INSERT INTO tabela [ ( identificador_de_coluna [, identificador_de_coluna ] ) ] { lista_de_valores | expresso_de_consulta } lista_de_valores : VALUES ( {expresso | NULL} [, {expresso | NULL} ] ) expresso_de_consulta : { especificao_de_consulta | ( expresso_de_consulta ) } [ UNION [ ALL ] { especificao_de_consulta | ( expresso_de_consulta ) } ] especificao_de_consulta : clusula_SELECT clusula_FROM [ clusula_WHERE ] [ clusula_GROUP_BY ] [ clusula_HAVING ]

6.2.2 Regras
Este comando insere uma ou mais linhas em uma tabela atualizvel. A tabela no pode aparecer em nenhuma clusula FROM na expresso de consulta. Nenhuma coluna da tabela pode aparecer mais de uma vez na lista de colunas. Se a lista de identificadores de coluna for omitida, ficam implicitamente especificadas todas as colunas da tabela na ordem em que aparecem na definio da tabela. O nmero de valores relacionados na clusula VALUES ou o grau da tabela (nmero de colunas) resultante da expresso de consulta deve ser igual ao tamanho da lista de colunas implcita ou explicitamente especificados. A lista de valores na clusula VALUES no deve conter funes de grupamento ou especificaes de coluna. Cada nova linha da tabela contm os valores explicitamente especificados no comando e valores nulos para as colunas no identificadas na lista. Se o tipo de um valor a ser inserido for cadeia de caracteres de tamanho menor que a cadeia da coluna na tabela, o valor ser completado com caracteres brancos. Se for de tamanho maior, nenhuma linha ser inserida e o parmetro SQLCODE indicar o erro. O mesmo acontece se o tipo da coluna for numrico exato e no houver uma representao do valor a ser inserido sem que haja perda de dgitos significativos de sua parte inteira. Se uma coluna do tipo DATETIME, o valor a ela correspondente deve ser do mesmo tipo com preciso de mesmo campo inicial. Se sua preciso for diferente da preciso do valor correspondente coluna, os campos excedentes so truncados ou os campos adicionais so iniciados com o valor 1 para os campos ms e dia e com o valor 0 para os campos hora, minuto e segundo. A cardinalidade da tabela resultante da expresso de consulta o nmero de linhas a serem inseridas. Se esta tabela estiver vazia, o parmetro SQLCODE receber o valor 100 e no ser feita nenhuma insero. Se o valor a ser inserido numa coluna em cuja definio no seja permitido valores nulos for nulo, nenhuma linha ser inserida e o parmetro SQLCODE indicar o erro. Veja tambm Tabela, Valor , Especificao de consulta e SQLCODE.

6.2.3 Exemplos
O comando abaixo insere na tabela de clientes a empresa Arruda Associados com o nmero 1111 e com o vendedor de contato especificado por 101. O crdito deste cliente ainda no foi definido e recebe o valor nulo.
INSERT INTO clientes (cd_cliente, nome, contato) VALUES (1111, Arruda Associados, 101)

O comando abaixo insere uma linha na tabela produtos. Valores para todas as colunas so especificados na ordem em que as colunas foram definidas.
INSERT INTO produtos VALUES (CAT, _w234, Parafuso tipo B2, 10.50, 500)

6.3

Comando DELETE selecionado

6.3.1 Sintaxe
comando_DELETE_selecionado : DELETE FROM tabela [ clusula_WHERE ]

6.3.2 Regras
O comando DELETE selecionado usado para eliminar uma ou mais linhas de uma tabela atualizvel. A clusula WHERE identifica as linhas da tabela a serem eliminadas (todas sobre as quais a condio verdadeira). Se no for especificada uma clusula WHERE, todas as linhas da tabela so eliminadas. A clusula WHERE no pode conter uma subconsulta que faa referncia tabela a ser atualizada. Se nenhuma linha for eliminada, o parmetro SQLCODE retornar o valor 100. Veja tambm Clusula WHERE, Tabela , DELETE POSICIONADO e SQLCODE.

6.3.3 Exemplo
O exemplo abaixo apaga todos os pedidos feitos no dia 28 de fevereiro de1992.
DELETE pedidos WHERE data = DATETIME <28/02/1992>

6.4

Comando UPDATE selecionado

6.4.1 Sintaxe
comando_UPDATE_selecionado : UPDATE tabela SET atribuio [ , atribuio ] [ clusula_WHERE ] atribuio : identificador_de_coluna = { expresso | NULL }

6.4.2 Regras
O comando UPDATE selecionado atualiza uma ou mais linhas de uma tabela selecionadas pela condio da clusula WHERE. Se esta condio no for especificada, todas as linhas da tabelas sero modificadas. A tabela deve ser atualizvel e no pode aparecer em nenhuma clusula FROM de qualquer subconsulta presente na clusula WHERE. A avaliao das expresses feita antes da alterao do valor de qualquer coluna da linha. As expresses de atribuio no devem conter funes. Cada coluna s deve aparecer uma nica vez na clusula SET. Um valor nulo s ser atribudo a uma coluna se sua definio assim o permitir. Caso contrrio, nenhuma linha ser atualizada e o parmetro SQLCODE indicar o erro. Se o tipo de um valor a ser atualizado for cadeia de caracteres de tamanho menor que a coluna da tabela, o valor ser completado com caracteres brancos. Se for de tamanho maior, nenhuma linha ser atualizada e o parmetro SQLCODE indicar o erro. O mesmo acontece se o tipo da coluna for numrico exato e no houver uma representao do valor a ser atualizado sem que haja perda de dgitos significativos de sua parte inteira. Se o tipo de uma coluna DATETIME de preciso diferente da preciso do valor correspondente, ento os campos excedentes so truncados ou os campos adicionais so iniciados com o valor 1 para os campos ms e dia e com o valor 0 para os campos hora, minuto e segundo. Veja tambm Tabela, Clusula WHERE , Expresso e SQLCODE.

6.4.3 Exemplos
A atualizao a seguir aumenta em 20 por cento o crdito de todos os clientes da tabela.
UPDATE clientes

SET crdito = crdito * 1.2

A prxima atualizao remaneja os vendedores do escritrio 023 para o escritrio 123, atualizando, tambm, o nome do gerente.
UPDATE vendedores SET gerente = Joo Marinho, escritrio = 123 WHERE escritrio = 023

6.5

Comando DELETE posicionado

6.5.1 Sintaxe
comando_DELETE_posicionado : DELETE FROM tabela WHERE CURRENT OF identificador_de_cursor

6.5.2 Regras
Este comando elimina da tabela a linha onde o cursor est posicionado. O cursor deve estar aberto. A tabela deve ser atualizvel e deve ser a mesma referida na especificao de consulta que define o cursor. O cursor passa a se posicionar imediatamente antes da linha seguinte eliminada ou no fim da tabela se no houver linha aps a eliminada. Veja tambm Tabela, Cursor, Especificao de consulta e Comando DELETE selecionado.

6.6

Comando UPDATE posicionado

6.6.1 Sintaxe
comando_UPDATE_ posicionado : UPDATE tabela SET atribuio [ , atribuio ] WHERE CURRENT OF identificador_de_cursor atribuio : identificador_de_coluna = { expresso | NULL }

6.6.2 Regras
Este comando altera na tabela os valores das colunas na linha onde o cursor est posicionado. O cursor deve estar aberto. A tabela deve ser atualizvel e deve ser a mesma referida na especificao de consulta que define o cursor. A avaliao das expresses feita antes da alterao do valor de qualquer coluna da linha. As expresses de atribuio no devem conter funes. Cada coluna s deve aparecer uma nica vez na clusula SET. Um valor nulo s ser atribudo a uma coluna se sua definio assim o permitir. Caso contrrio, a linha no ser atualizada e o parmetro SQLCODE indicar o erro. Se o tipo de um valor a ser atualizado for cadeia de caracteres de tamanho menor que a coluna da tabela, o valor ser completado com caracteres brancos. Se for de tamanho maior, a linha no ser atualizada e o parmetro SQLCODE indicar o erro. O mesmo acontece se o tipo da coluna for numrico exato e no houver uma representao do valor a ser atualizado sem que haja perda de dgitos significativos de sua parte inteira. Se o tipo de uma coluna DATETIME de preciso diferente da preciso do valor correspondente, ento os campos excedentes so truncados ou os campos adicionais so iniciados com o valor 1 para os campos ms e dia e com o valor 0 para os campos hora, minuto e segundo. Veja tambm Tabela, Cursor, Expresso , Comando UPDATE selecionado e SQLCODE.

6.7

Comando COMMIT

6.7.1 Sintaxe
comando_COMMIT : COMMIT WORK

6.7.2 Regras
Este comando termina normalmente uma transao, efetuando todas as alteraes feitas no banco de dados e fechando todos os cursores abertos. Veja tambm Transao e Cursor.

6.8

Comando ROLLBACK

6.8.1 Sintaxe
comando_ROLLBACK : ROLLBACK WORK

6.8.2 Regras
O comando ROLLBACK termina a transao corrente. Todas as alteraes feitas na base de dados durante a transao so canceladas. Todos os cursores abertos so automaticamente fechados. Veja tambm Transao e Cursor.

6.9

Comando LOCK TABLE


LOCK TABLE tabela IN { SHARE | EXCLUSIVE } MODE

6.9.1 Sintaxe
comando_LOCK_TABLE :

6.9.2 Regras
O comando LOCK TABLE faz uma reserva de tabela at o final da transao. Quando uma transao faz uma reserva com a opo SHARE, feita uma reserva compartilhada e outras transaes podem ler dados da tabela, porm somente a transao que fez a reserva pode atualizar a tabela. J quando a reserva feita com a opo EXCLUSIVE, nenhuma transao diferente da que fez a reserva pode fazer qualquer reserva de linhas da tabela, seja para atualizao ou para leitura. No momento em que a reserva feita, a tabela no pode estar aberta. Veja tambm Tabela e Transao.

6.10 Comando CREATE TABLE


6.10.1 Sintaxe
comando_CREATE_TABLE : CREATE TABLE tabela ( item_def_tabela [ , item_def_tabela ] ) item_def_tabela : identificador_de_coluna tipo_de_dado [restrio_de_coluna] | restrio_de_unicidade | restrio_referencial | especificao_de_ndice restrio_de_unicidade : especificao_de_unicidade ( identificador_de_coluna [ , identificador_de_coluna ] ) especificao_de_unicidade : PRIMARY KEY | UNIQUE restrio_referencial : FOREIGN KEY ( identificador_de_coluna [ , identificador_de_coluna ] ) especificao_de_referncia restrio_de_coluna : NOT NULL | UNIQUE | PRIMARY KEY | INDEX | especificao_de_referncia especificao_de_referncia : REFERENCES tabela [ ao_gatilho ] ao_gatilho : regra_UPDATE [regra_DELETE] | regra_DELETE [regra_UPDATE] regra_UPDATE : ON UPDATE { CASCADE | SET NULL } regra_DELETE : ON DELETE { CASCADE | SET NULL } especificao_de_ ndice: INDEX ( identificador_de_coluna [ , identificador_de_coluna ] )

6.10.2 Regras
O comando CREATE TABLE define uma nova tabela cujo nome deve ser diferente de qualquer outro definido no mesmo esquema. Deve-se especificar o nome e o tipo de dados de todas as colunas da tabela, sendo que duas colunas de uma tabela no podem ter o mesmo nome.

No podem ser definidas colunas do tipo VARCHAR. A restrio NOT NULL na definio de uma coluna impede a existncia de valores nulos em qualquer de suas linhas. Esta restrio considerada por todos os comandos SQL. A definio de uma tabela pode conter uma restrio de unicidade UNIQUE ou PRIMARY KEY, obrigando cada linha a ser criada a ter, nas colunas especificadas , uma combinao de valores nica, diferente de todas as outras combinaes presentes na tabela. Duas combinaes so consideradas iguais se o valor de cada coluna na primeira linha no nulo e igual ao valor da coluna correspondente na segunda linha. Apenas uma especificao de unicidade PRIMARY KEY pode ser definida na tabela. A restrio NOT NULL ser automaticamente considerada para todas as colunas desta chave. Se existe uma especificao de unicidade UNIQUE ou PRIMARY KEY em uma definio de coluna, ento implcita uma restrio de unicidade formada pela especificao de unicidade e o nome da coluna. A especificao de uma restrio referencial est subordinada s seguintes regras: a definio da tabela de referncia deve conter uma especificao de unicidade PRIMARY KEY; cada nome de coluna da restrio referencial deve identificar uma coluna da tabela e deve ser diferente de qualquer outro na mesma definio; a lista de colunas deve ser de tamanho igual lista de colunas da PRIMARY KEY da tabela de referncia; as colunas correspondentes nas duas listas devem ser do mesmo tipo. Se especificada uma regra DELETE (ou UPDATE) SET NULL, ento nenhuma coluna da lista de colunas que define a restrio referencial deve ser restrita valores no nulos. Se, na definio de uma tabela, duas restries referenciais fazem referncia mesma tabela e as listas de colunas que definem as restries no so disjuntas, ento em nenhuma delas pode ser especificada uma regra UPDATE e somente a regra DELETE CASCADE pode ser especificada. A restrio referencial verificada automaticamente para cada comando SQL. Ela satisfeita se, alguma coluna da restrio tem valor nulo, ou todas as colunas da restrio contem valores no nulos e estes so iguais aos valores das colunas de referncia correspondentes, em alguma linha da tabela de referncia (linha casada). Se uma regra DELETE especificada em uma restrio referncial, ento quando uma linha da tabela de referncia eliminada: se especificada a regra DELETE CASCADE, todas as linhas casadas so eliminadas; se especificada a regra DELETE SET NULL, em todas as linhas casadas as colunas que definem a restrio recebem o valor nulo. Se uma regra UPDATE especificada em uma restrio referncial, ento quando, em uma linha da tabela de referncia, alterado o valor de alguma coluna da chave primria: se especificada a regra UPDATE CASCADE, ento, em todas as linhas casadas, a coluna correspondente na definio da restrio recebe o mesmo valor; se especificada a regra UPDATE SET NULL, ento, em todas as linhas casadas, a coluna correspondente na definio da restrio recebe o valor nulo. Se existe uma especificao de referncia em uma definio de coluna, ento implcita uma restrio referencial formada pela mesma coluna e a especificao de referncia. Uma especificao de ndice define sobre a tabela um ndice. Se existe uma restrio de coluna INDEX em uma definio de coluna, ento implcita uma especificao de ndice cuja chave formada pela coluna. Veja tambm Tabela e Tipo de Dado.

6.10.3 Exemplo
A seguir apresenta-se a definio da tabela clientes. A coluna cod_cliente a chave primria da tabela.
CREATE TABLE clientes (cod_cliente INTEGER NOT NULL, nome CHARACTER (30) NOT NULL, vendedor INT, credito NUMERIC (10,2), PRIMARY KEY (cod_cliente))

6.11 Comando CREATE INDEX


6.11.1 Sintaxe
comando_CREATE_INDEX : CREATE [ UNIQUE ] INDEX identificador_de_ndice ON tabela ( identificador_de_coluna[ ,identificador_de_coluna ] )

6.11.2 Regras
O comando CREATE INDEX define um ndice sobre colunas de uma tabela anteriormente definida. O identificador do ndice deve ser nico em um esquema. Cada coluna s pode aparecer uma vez na definio do ndice e deve identificar uma das colunas da tabela. A opo UNIQUE impede a existncia de linhas duplicadas para os valores das colunas componentes do ndice. Se esta opo especificada, nenhuma coluna deve permitir valores nulos. Veja tambm Tabela.

6.12 Comando DROP TABLE


6.12.1 Sintaxe
comando_DROP_TABLE : DROP TABLE tabela

6.12.2 Regras:
O comando DROP TABLE elimina uma tabela anteriormente definida. Veja tambm Tabela .

6.13 Comando DROP INDEX


6.13.1 Sintaxe
comando_DROP_INDEX : DROP INDEX identificador_de_ndice

6.13.2 Regras
O comando DROP INDEX elimina um ndice anteriormente definido no esquema. Veja tambm CREATE INDEX.

7
7.1

Interface nativa de programao


Introduo

A interface nativa de programao uma biblioteca de funes atravs das quais uma aplicao se conecta a uma base de dados, efetua pedidos para a execuo de comandos SQL e recupera dados. Por exemplo o utilitrio tsqlwi utiliza a interface nativa para executar comandos SQL. Por sua vez o driver ODBC do TSQL traduz a interface ODBC para a interface nativa e desta forma programas ODBC se conectam com uma base OpenBase. Como esta interface possui alguma complexidade e que a maioria dos usurios do TSQL desenvolvem aplicaes em linguagens de maior nvel que a linguagem C como Visual Basic, Delphi e outras, a documentao da interface nativa no apresentada neste manual. Para obte-la deve-se entrar em contato com a Tecnocoop. No entanto, apresentamos a seguir uma interface simplificada implementada sobre a interface nativa. Ela est sujeita a algumas restries: somente um cursor pode ser aberto de cada vez; o cursor s pode se movimentar uma linha para frente a cada leitura; valores de tipo BLOB no podem ser manipulados.

7.2

Inferface simplificada
int tsqlDBEXTNAME(char datasource, char *hostname, int instancia)

7.2.1 tsqlDBEXTNAME

Cria uma conexo com uma base. No caso da conexo j existir com o nmero da instncia especificado, ela se torna a corrente. O valor retornado pela funo igual a menos um (1), em caso de erro, ou maior ou igual a zero (>=0) identificando o nmero da conexo. Parmetros de entrada: datasource: Cadeia que especifica uma base como descrito no Apndice 3. hostname: Nome da mquina onde reside a base. Pode ser tambm especificado no parmetro datasource. O parmetro hostname tem prioridade. instancia: Permite diferenciar duas ou mais conexes com a mesma base.

7.2.2 tsqlPREPARE
int tsqlPREPARE(char *statement, int *sqlcode)

Prepara (compila) um comando SQL. O valor retornado pela funo igual a menos um (1), em caso de erro, ou igual a zero (0). Parmetro de entrada: statement: Cadeia que contm o comando SQL. O parmetro deve conter um dos comandos SQL listados abaixo:
comando_COMMIT | comando_DELETE_selecionado | comando_DELETE_posicionado | comando_INSERT | comando_ROLLBACK | comando_SELECT_dinmico | comando_UPDATE_selecionado | comando_UPDATE_posicionado | comando_CREATE_TABLE | comando_DROP_TABLE | comando_CREATE_INDEX | comando_DROP_INDEX

Parmetro de sada: sqlcode: Cdigo de erro. Zero se sucesso.

7.2.3 tsqlDESCRIBE
int tsqlDESCRIBE(struct SQLDA *sqlda, int *sqlcode)

Retorna informaes sobre o comando SQL preparado. O valor retornado pela funo igual a menos um (1), em caso de erro, ou igual a zero (0). Parmetro de entrada: sqlda: Estrutura que contem informaes sobre o comando preparado. Se o nmero de valores associados ao comando (SQLD) for zero o comando no um comando SELECT. A utilizao da estrutura pela rotina tsqlDESCRIBE descrita a seguir:
struct SQLDA { short SQLN; short SQLD; struct SQLVAR *SQLVAR; } struct SQLVAR { char *SQLDATA; long *SQLIND; short SQLTYPE; short SQLNULL; short SQLLEN; short SQLSCALE; struct {

short SQLNAMEL; char SQLNAMEC[18]; } SQLNAME; }

O campo SQLN deve especificar o nmero de estruturas SQLVAR. O campo SQLD retorna zero se o comando preparado no for um comando SELECT . Se o comando for um SELECT, SQLD indica o nmero de colunas da tabela por ele especificada. Se SQLD for maior que SQLN, no sero retornadas as informaes sobre as colunas da tabela. Caso contrrio sero retornadas nas primeiras estruturas SQLVAR a descrio das colunas correspondentes na tabela. No campo SQLTYPE retornado um valor numrico indicando o tipo da coluna segundo a tabela abaixo. Tipo da Coluna Valor Numrico CHARACTER 1 NUMERIC 3 DECIMAL 3 INTEGER 4 SMALLINT 5 FLOAT 7 OU 8 REAL 7 DOUBLE 8 DATETIME 9 VARCHAR 12 No campo SQLNULL retornado o valor 1 se a coluna puder ter valores nulos. No campo SQLLEN retornado o tamanho, em bytes, da coluna, em funo de seu tipo: se o tipo CHARACTER, retornado o tamanho da coluna; se o tipo NUMERIC ou DECIMAL, retornada a preciso da coluna mais 1. se o tipo INTEGER ou REAL, retornado 4. se o tipo SMALLINT, retornado 2. se o tipo FLOAT, retornado 4 ou 8, segundo a sua preciso. se o tipo DOUBLE, retornado 8. se o tipo DATETIME, funo da preciso da coluna da seguinte forma: 2 bytes para o campo dia (de 01 a 31). 1 byte para o separador / entre os campos dia e ms. 2 bytes para o campo ms (de 01 a 12). 1 byte para o separador / entre os campos ms e ano. 5 bytes para o campo ano (de 9999- a 9999, ajustado a esquerda e completado com caractes espao). 1 byte para o separador entre o campo dia, ms ou ano e o campo hora. 2 bytes para o campo hora (de 00 a 23). 1 byte para o separador : entre os campos hora e minuto. 2 bytes para o campo minuto (de 00 a 59). 1 byte para o separador : entre os campos minuto e segundo. 2 bytes para o campo segundo (de 00 a 59). . se o tipo VARCHAR, em SQLLEN retornado o valor 0. Em SQLSCALE retornada a escala do tipo NUMERIC ou DECIMAL ou a preciso do tipo DATETIME. Esta representada numericamente pelo valor numrico do campo inicial somado com o do final, se so diferentes. Os valores de cada campo so: Ano 64 Ms 32 Dia 16 Hora 8 Minuto 4

Segundo 2 Em SQLNAMEC retornado o nome da coluna. Se este tem menos de 18 caracteres, o nome completado com caracteres brancos. Em SQLNAMEL retornado o tamanho do nome da coluna que ser igual a 18, se a coluna tiver nome ou igual a 0, se a coluna no tiver nome. A estrutura SQLDA encontra-se declarada no arquivo \usr\include\sqlda.h que pode ser includo no programa de aplicao. Parmetro de sada: sqlcode: Cdigo de erro. Zero se sucesso.

7.2.4 tsqlEXECUTE
int tsqlEXECUTE(int *sqlcode)

Descrio Executa o comando SQL preparado se o comando no do tipo SELECT. Parmetro de sada: sqlcode: Cdigo de erro. Zero se sucesso. Retorno: 0 : sucesso. -1 : erro

7.2.5 tsqlIMMEDIATE
int tsqlIMMEDIATE(char *statement, int *sqlcode)

Descrio: Prepara e executa um comando SQL. O comando no pode ser do tipo SELECT. Parmetro de entrada: statement : cadeia que contm o comando SQL. Ver a descrio da chamada tsqlPREPARE para os comandos permitidos. Parmetro de sada: sqlcode: Cdigo de erro. Zero se sucesso. Retorno: 0 : sucesso. -1 : erro

7.2.6 tsqlOPEN
int tsqlOPEN(int *sqlcode)

Descrio: Executa o comando SELECT preparado e associa implicitamente o cursor ao conjunto resultado. O cursor posicionado imediatamente antes do inicio da primeira linha. Diz-se que o cursor est no estado aberto. O nome do cursor no relevante nesta interface considerando que le nico. Parmetro de sada: sqlcode: Cdigo de erro. Zero se sucesso. Retorno: 0 : sucesso. O cursor foi aberto. -1 : erro

7.2.7 tsqlFETCH
int tsqlFETCH(struct SQLDA *sqlda, int *sqlcode)

Descrio: Move o cursor para a prxima linha do conjunto resultado e recupera a linha colocando os valores das colunas na estrutura apontada por sqlda. A rotina tsqlFETCH s pode ser chamada se o cursor estiver aberto. Parmetros de sada: sqlcode: Cdigo de erro. Zero se sucesso. sqlda: Estrutura que contem os valores retornados.
struct SQLDA { short SQLN; short SQLD; struct SQLVAR *SQLVAR; } struct SQLVAR { char *SQLDATA; long *SQLIND; short SQLTYPE; short SQLNULL; short SQLLEN; short SQLSCALE; struct { short SQLNAMEL; char SQLNAMEC[18]; } SQLNAME; }

O parmetro corresponde ao campo SQLN e especifica o nmero de estruturas SQLVAR retornadas. SQLD corresponde ao grau da tabela e deve ser menor ou igual a SQLN. As sucessivas estruturas SQLVAR contero as descries das variveis no programa para as quais retornaro os valores das colunas. O campo SQLTYPE deve conter um valor numrico indicando o tipo da coluna segundo a tabela abaixo. Tipo da Coluna Valor Numrico CHARACTER 1 NUMERIC 2 DECIMAL 3 INTEGER 4 SMALLINT 5 FLOAT 6 REAL 7 DOUBLE 8 DATETIME 9 VARCHAR 12 O campo SQLNULL igual a 1 se o valor retornado pode ser nulo. O campo SQLLEN equivalente ao tamanho da varivel. O campo SQLSCALE contm a escala do tipo numrico caso a varivel seja desse tipo. O campo SQLNAME no usado. SQLDATA aponta para a rea da memria para onde retornado o valor da varivel. SQLIND aponta para a rea da memria onde retornada o valor 1 se SQLNULL for igual a 1 e se a coluna correspondente tiver valor nulo; o tamanho do valor da coluna se este for uma cadeia de caracteres de tamanho maior que o tipo da varivel ou nos demais casos, retorna 0. SQLDATA aponta para a rea da memria para onde retornado o valor da varivel. SQLIND aponta para a rea da memria onde retornada a varivel INDICATOR, se SQLNULL igual a 1.

Os tipos das variveis devem corresponder aos tipos das colunas correspondentes na tabela. Se ocorrer um erro durante a atribuio de valores s variveis, o parmetro sqlcode retornar um valor negativo. Se o tipo de uma varivel DATETIME de preciso diferente da preciso da coluna correspondente, os campos excedentes so truncados ou os campos adicionais so iniciados com o valor 1 para os campos ms e dia e com o valor 0 para os campos hora, minuto e segundo. Caso a tabela associada ao cursor esteja vazia ou o cursor estiver na ltima linha, o cursor ser posicionado aps a ltima linha, o valor 100 ser retornado no parmetro sqlcode e no sero atribudos valores s variveis do programa de aplicao. sqlcode : < 0 se erro = 100 se no h mais linhas a retornar = 0 caso contrrio Retorno: 0 : se sqlcode >= 0 -1 : se sqlcode < 0

7.2.8 tsqlCLOSE
int tsqlCLOSE(int *sqlcode)

Descrio: Fecha o cursor . A chamada tsqlFETCH no pode mais ser executada at que um outro cursor seja aberto. Parmetro de sada: sqlcode: Cdigo de erro. Zero se sucesso. Retorno: 0 : sucesso. O cursor foi fechado. -1 : erro

7.2.9 tsqlKILL
int tsqlKILL(int num)

Descrio: Termina uma conexo. Parmetro de entrada: num : nmero da conexo. Retorno: 0 : sucesso -1 : erro ao fechar a conexo

7.2.10 tsqlERROR
char *tsqlERROR(char *endereco)

Descrio: A rotina tsqlERROR gera a mensagem de erro relativa ltima chamada efetuada. A mensagem terminada com o caracter \0 e possui um tamanho mximo de 120 bytes.

Parmetro de entrada : endereco : endereo da mensagem. Se for passado com o valor (CHAR *) 0L, a mensagem construda em uma rea interna da rotina, que alterada a cada nova chamada. Retorno: Endereo da mensagem Veja tambm SQLCODE.

O Catlogo SQL

Um sistema de gerenciamento de banco de dados deve ter acesso a um conjunto de informaes sobre a estrutura de uma base para poder gerencia-la. Em uma base relacional estas informaes so armazenadas no catlogo. O catlogo geralmente um esquema composto de um conjunto de tabelas que o gerenciador do banco mantm para o seu prprio uso, e descreve as tabelas, colunas, ndices, etc. Como uma base OpenBase no possui fisicamente tabelas de um catlogo SQL, o TSQL simula internamente a execuo de consultas a estas tabelas sendo que o identificador de autorizao do esquema catlogo para o OpenBase o identificador SYSSQL. Por exemplo a consulta select * from SYSSQL.SYSTABLES devolve as informaes sobre todas as tabelas de uma base. Todas as colunas de todas as tabelas do catlogo so restritas a conter somente valores no nulos.

8.1

SYSCOLUMNS

Armazena informaes sobre colunas de tabelas. Cada linha de SYSCOLUMNS corresponde a uma coluna de uma tabela. As colunas de SYSCOLUMNS so: SCHNAME - CHAR (18) = identificador de autorizao do esquema TNAME - CHAR (18) = identificador da tabela COLNO - SMALLINT = identificador numrico da coluna na tabela COLNAME - CHAR (18) = nome da coluna COLTYPE - CHAR (18) tipo da coluna: = CHARACTER, = DECIMAL, = INTEGER, = SMALLINT, = REAL, = DOUBLE PRECISION, = DATETIME, = CHAR VARYING = BLOB ou = CLOB SYSTYPE - SMALLINT = 1 (cadeia de caracteres de tamanho fixo), = 3 (numrico decimal de representao exata e ponto decimal fixo), = 4 (numrico binrio inteiro longo), = 5 (numrico binrio inteiro curto), = 7 (numrico binrio curto de representao no exata e ponto flutuante), = 8 (numrico binrio longo de representao no exata e ponto flutuante), = 9 (data-hora)

= 12 (cadeia de caracteres de tamanho varivel terminada pelo caracter \0) = 30 (cadeia binria de tamanho longo) ou = 40 (cadeia de caracteres de tamanho longo) CLENGTH - SMALLINT = tamanho mximo para colunas do tipo cadeia de caracteres de tamanho limitado ou = preciso para colunas do tipo numrico no binrio ou = preciso para colunas do tipo data-hora que representada pela soma entre o start-field e o end-field: 64 (YEAR) 32 (MONTH) 16 (DAY) 8 (HOUR) 4 (MINUTE) 2 (SECOND) 1 (FRACTION) SCALE - SMALLINT = escala para colunas do tipo numrico no binrio NULLS - CHAR (1) = Y (pode ter valor nulo) ou = N FIRSTKEY - CHAR (1) = Y (indica se primeira coluna da chave de algum ndice) ou = N COLCARD - INTEGER = nmero de valores distintos da coluna ou = -1, se no vlido HIGH2KEY - CHAR (8) = contm o segundo maior valor da coluna ou = , se no vlido LOW2KEY - CHAR (8) = contm o segundo menor valor da coluna ou = , se no vlido A chave primria de SYSCOLUMNS composta pelas colunas TNAME, SCHNAME e COLNO. O valor da coluna COLCARD s valido quando ela a nica coluna de um ndice. Os valores HIGH2KEY e LOW2KEY no so vlidos na presente verso.

8.2

SYSINDEXES

Armazena informaes de cada ndice, restrio de unicidade e restrio referencial definida sobre uma tabela. As colunas de SYSINDEXES so: SCHNAME - CHAR (18) = identificador de autorizao do esquema TNAME - CHAR (18) = identificador da tabela OBID - INTEGER = identificador numrico do ndice NAME - CHAR (18) = identificador do ndice ou restrio TYPE - CHAR (1) =P (chave primria) = I (ndice criado por CREATE TABLE), =N (ndice criado por CREATE INDEX) = U (restrio de unicidade) ou = E (restrio referencial) UNIQUERULE - CHAR (1) = Y (valores duplicados de chave no so permitidos),

= N (valores duplicados de chave so permitidos) COLCOUNT - SMALLINT = nmero de colunas que compem a chave do ndice RSCHEMA CHAR(18) = identificador de esquema da tabela referida em restrio referencial RNAME CHAR(18) = identificador de tabela da tabela referida em restrio referencial ROBID INTEGER = identificador numrico do ndice da tabela referida em restrio referencial UPDATERULE CHAR(1) = indica a ao decorrente do comando update em restrio referencial: R (RESTRICT), C (CASCADE) ou S (SET NULLS) DELETERULE CHAR(1) = indica a ao decorrente do comando delete em restrio referencial: R (RESTRICT), C (CASCADE) ou S (SET NULLS) FIRSTKEYCARD INTEGER = nmero de valores distintos da primeira coluna da chave = -1, se no vlido FULLKEYCARD - INTEGER = nmero de valores distintos da chave do ndice ou = -1, se no vlido NLEAF - INTEGER = nmero de folhas ou = -1, se no vlido NLEVELS - SMALLINT = nmero de nveis ou = -1, se no vlido CLUSTERED - CHAR (1) = Y (tabela est fisicamente ordenada pela chave), = N (tabela no est fisicamente ordenada pela chave) ou = , se no vlido A chave primria de SYSINDEXES composta pelas colunas NAME ,SCHNAME e OBID.

8.3

SYSKEYS

Armazena informaes sobre colunas que compem chaves de ndices e restries de unicidade. Cada linha de SYSKEYS corresponde a uma coluna que compe uma chave. As colunas de SYSKEYS so: SCHNAME - CHAR (18) = identificador de autorizao do esquema TNAME - CHAR (18) = identificador da tabela OBID - INTEGER = identificador numrico do ndice COLSEQ - SMALLINT = nmero de ordem da coluna na definio do ndice (maior ou igual a 1) COLNO - SMALLINT = identificador numrico da coluna na tabela ORDERING - CHAR (1) = A (ordem da coluna na chave ascendente) = D (ordem da coluna na chave descendente) ou =U (indefinido)

A chave primria de SYSKEYS composta pelas colunas TNAME, SCHNAME, OBID e COLSEQ.

8.4

SYSTABLES

Armazena informaes sobre tabelas . Cada linha de SYSTABLES corresponde a uma tabela . As colunas de SYSTABLES so: SCHNAME - CHAR (18) = identificador de autorizao do esquema TNAME - CHAR (18) = identificador da tabela TYPE - CHAR (1) = T (tabela definida pelo comando CREATE TABLE) VIEWTYPE - CHAR (1) uso futuro COLCOUNT - SMALLINT = nmero de colunas SIZE - INTEGER uso futuro VTREE - BLOB uso futuro CARD - INTEGER = nmero total de linhas da tabela ou = -1, se no vlido NPAGES - INTEGER = nmero de pginas que armazenam linhas da tabela ou = -1, se no vlido A chave primria de SYSTABLES composta pelas colunas TNAME e SCHNAME.

9
9.1

Utilitrios
TSQLI

9.1.1 Sintaxe
tsqlI [nomeDB] [-X arquivo | -E arquivo] [-F arquivo]

9.1.2

Regras

Programa que oferece ao usurio uma interface interativa e amigvel para a execuo de comandos SQL. O utilitrio possui: .Um ambiente para desenvolvimento de comandos SQL .Um ambiente para desenvolvimento de formulrios. .Um gerador de relatrios com vrios nveis de quebras, com totalizaes, mdias e freqncias. .Um gerador de telas para consultas e inseres de dados. .Um gerador de telas de menu, cada opo deste pode ser associada a execuo de um programa qualquer, um comando SQL, um submenu ou uma tela para consulta e atualizao de dados. .HELP on line. A descrio do utilitrio se encontra no manual do usurio. Opes nomeDB O parmetro nomeDB especifica o diretrio da Base de dados (Veja Base de dados e esquemas). O diretrio pode ser especificado na forma de um caminho completo ou um caminho em relao ao diretrio corrente. Se a opo no fornecida, considerada a Base default(subdiretrio db do diretrio corrente). -X arquivo Com esta opo o utilitrio entra diretamente no modo comando, executando o comando SQL contido em arquivo. O usurio que entra diretamente neste modo no tem acesso aos demais recursos do sistema. -E arquivo O utilitrio entra diretamente em modo tela, com a definio da tela contida em arquivo. O usurio que entra diretamente neste modo no tem acesso aos demais recursos do sistema.

-F arquivo Com esta opo o usurio especifica como formulrio corrente o formulrio cuja definio est contida em arquivo. Se a opo no for especificada em conjunto com a opo -X, o resultado da execuo do comando SQL ser exibido segundo o formulrio especificado. Veja apndice 4 para maiores informaes sobre o TSQL.

9.2
9.2.1

TSQLMAN
Sintaxe

tsqlman [seo] [item] seo : I | CO | E | P | CL | C | D | L | U

9.2.2 Regras
O utilitrio tsqlman um manual de referncia do TSQL on-line. possvel acessar atravs dele o ndice geral, sub-ndices de cada captulo e as entradas do manual propriamente ditas. As opes so: seo Indica seo do manual a ser consultada. Se estiver seguida por item, indica seo ao qual o item pertence, seno mostra o sub-ndice relativo quela seo. As sees correspondem aos seguintes submenus: I : ndice C : Comandos CO : Conceitos D : Declaraes E : Elementos L : Linguagens P : Predicados U : Utilitrios CL : Clusulas item Indica item do manual a ser mostrado. Os possveis itens esto especificados no ndice e nos submenus. Na execuo do manual, so vlidos todos os comandos usados no pg do sistema. Tecle h na linha de comando (sinalizada por :) para ver os comandos possveis.

9.3

TSQLBD

9.3.1 Sintaxe
tsqlbd b <caminho do banco> [ -g<arquivo do esquema>] [-n<nvel de acesso>] [-s<cdigo de segurana>]

9.3.2 Regras
O utilitrio tsqlbd tem por objetivo gerar a partir de uma base OpenBase o fonte do esquema SQL correspondente de acordo com a sintaxe seguinte :
esquema : CREATE SCHEMA [ AUTHORIZATION identificador_de_autorizao ] [ definio ] comando_CREATE_TABLE

definio :

A construo do fonte obedece s seguintes regras: As entidades e relaes da Base OpenBASE so vistas como tabelas SQL, nas quais os nomes das colunas so os nomes dos itens. O caracter. em um nome de item convertido para o caracter _ no nome da coluna correspondente. Se a base Openbase possuir sub-itens de um campo composto no explicitamente declarado o utilitrio cria um nome para o sub-item como o texto do exemplo: nome: clientes e registro: cod_cliente (0) nome data ano

I2 U30 U8 U4 POS data

mes

U2 POS data + 4

que gera no fonte do esquema SQL correspondente o seguinte texto : CREATE TABLE clientes ( cod_cliente INTEGER NOT NULL , nome CHAR(30) NOT NULL , ano CHAR(4) NOT NULL , mes CHAR(2) NOT NULL , coluna0 CHAR(2) NOT NULL PRIMARY KEY (cod_cliente) ) Os tipos de dados do esquema so definidos a partir dos tipos da Base OpenBASE, segundo a seguinte correspondncia: Tipo OpenBase I2 I4 N S P C U,V D2 , D4 D7 , T8 L F4 F8 B1 B2 B3 B4 B4 (> 4) M,O,Q tipo sql INTEGER DEC(10) DEC(-) DEC(-) DEC(-) DEC(-) CHAR(-) DATETIME YEAR TO DAY DATETIME YEAR TO SECOND CHAR REAL DOUBLE SMALLINT SMALLINT INTEGER INTEGER DEC(-) BLOB

Uma chave unvoca na Base OpenBASE definido no esquema SQL por intermdio de uma <definio de restrio de unicidade>. Se a chave for o atributo determinante de uma entidade (chave primria), a <especificao de unicidade> ser PRIMARY KEY. De outra forma, ser UNIQUE. No fonte, a declarao de um ndice correspondente a uma chave de acesso na Base OpenBASE, aparece logo aps definio da tabela a qual ele pertence. , sendo que o nome do ndice o nome do item que representa a chave de acesso. A proteo especificada na base OpenBASE atravs das palavras de nvel, no traduzida no fonte do esquema. As opes do utilitrio so: -b caminho do banco Especifica o banco OpenBase. -g arquivo do esquema Opo que especifica o arquivo no qual gravado o fonte do esquema com comandos SQL. -n nvel de acesso Opo que especifica o nvel de acesso do banco -s cdigo de segurana Opo que especifica o cdigo de segurana do banco

9.4

BDCNFG

9.4.1 Sintaxe
bdcnfg

9.4.2 Regras
O bdcnfg um programa conversacional que configura o tamanho da memria compartilhada entre as diversas aplicaes. Esta memria contm a tabela de bloqueios e em determinados ambientes de execuo pode ser necessrio aumenta-la. Este utilitrio tambm utilizado para configurar determinados parmetros do sistema OpenBASE que no so relevantes para o TSQL.

9.5

BDLICE
bdlice [-t]

9.5.1 Sintaxe 9.5.2 Regras


O utilitrio bdlice lista a tabela de bloqueios dos usurios TSQL e OpenBASE. Cada entrada na tabela contm o nome da base, a identificao do processo, a identificao do arquivo, a identificao da pgina bloqueada no arquivo e o tipo do bloqueio (compartilhado ou exclusivo). Este utilitrio informa as pginas bloqueadas das diversas bases de dados em um determinado instante. As opes so: -t Mostra tambm o nmero da ltima transao.

9.6

BDSGBD
bdsgbd [-d] [-e] [-a arquivo]

9.6.1 Sintaxe 9.6.2 Regras

O bdsgbd um programa que deve ser executado em background antes de ser efetuado qualquer acesso a uma base TSQL ou OpenBASE (nohup bdsgbd <opes> & ). Ele fundamental para o gerenciamento destas bases. As opes so: -d Indica gravao em dirio. -e Indica que o arquivo dirio deve ser esvaziado. -a Indica a designao do arquivo dirio para outro arquivo que no o arquivo /usr/tsgbd/tsdic/diario. O arquivo dirio deve ser um arquivo em disco.

10

Apndice 1: Instalao

a) Introduo. Para poder executar comandos SQL sobre uma base OpenBASE necessrio instalar o servidor TSQL na mquina que contm a base e instalar na mquina cliente os ambientes clientes. No WINDOWS os ambientes clientes so: programa tsqlwi : ambiente interativo para execuo de comandos SQL driver ODBC interface nativa TSQL para desenvolvimento de aplicaes em C. No UNIX so : programa tsqlI : ambiente interativo no grfico para execuo de comandos SQL. interface nativa TSQL para desenvolvimento de aplicaes em C. b) Instalao propriamente dita dos diversos mdulos:

Servidor TSQL no ambiente WINDOWS : Executar o programa setup.exe. Se o diretrio de instalao no for especificado durante a instalao ser considerado o diretrio c:\tsql. Esta operao tambm instala os utilitrios e os recursos para o desenvolvimento de aplicaes em C. Servidor TSQL no ambiente UNIX : Os arquivos contidos na mdia devem ser copiados para um diretrio(/usr/tmp por exemplo). Um dos arquivos o arquivo insTSQL que ativado em modo super-usurio efetua a instalao propriamente dita. No caso de uma reinstalao, a ativao de insTSQL com o parmetro -R abrevia o tempo de instalao. O servidor instalado no diretrio /usr/lib/tsql. Esta operao tambm instala os utilitrios do sistema incluindo o programa tsqlI e os recursos para o desenvolvimento de aplicaes em C. Cliente TSQL no ambiente WINDOWS A execuo do programa setup.exe instala o programa tsqlwi e o ambiente C para o desenvolvimento de aplicaes. O diretrio pode ser especificado durante a instalao. ODBC no ambiente WINDOWS Executar o programa setup.exe contido no primeiro disco de instalao. O driver ODBC para o sistema TSQL representado pela DLL tsql32.dll. O uso do servidor TSQL pressupe que o OpenBase , na sua verso bsica, esteja instalado na mquina servidora.

11

Apndice 2: Ativao do servidor Tsql

A comunicao com o servidor TSQL baseada no protocolo TCP/IP. Para que uma ligao cliente/servidor possa ser efetuada preciso que o programa xsqlserv que se encontra no diretrio de instalao do servidor TSQL esteja ativado. No caso do WINDOWS a ativao realizada com a simples execuo do programa. No caso do UNIX a ativao deve ser efetuada em modo super-usurio executando o seguinte comando nohup /usr/lib/tsql/xsqlserv & onde /usr/lib/tsql o diretrio default de instalao. Este comando pode ser inserido em algum arquivo da mquina(por exemplo no LINUX o arquivo /etc/rc.d/rc.local) para ser sempre executado na partida. Aps a ativao recomendado verificar se o processo xsqlserv est ativo. Se no estiver, o arquivo xsqlserv.log que se encontra no diretrio de instalao poder conter alguma informao sobre o ocorrido. O nmero default do servio oferecido pelo programa xsqlserv 6010. Se este nmero estiver sendo utilizado por algum outro servio, a ativao do xsqlserv no ter sucesso. Neste caso necessrio atribuir um outro nmero ao servio de nome tsqlserv. No ambiente UNIX isto realizado inserindo-se a seguinte linha no arquivo /etc/services: tsqlserv <numserv>/tcp <comentrio> onde numserv um nmero no utilizado por outro servio. No ambiente WINDOWS isto pode ser feito de diversas formas. A soluo utilizada para o UNIX tambm se aplica mas nem sempre funciona para toda e qualquer configurao do NT. Neste caso deve-se verificar a documentao relativa aos servios TCP/IP. Uma outra forma de especificar o nmero do servio quando necessrio atravs do arquivo de configurao do TSQL cuja descrio se encontra no apndice 5. O nmero do servio deve ser o mesmo para todas as mquinas que utilizam e/ou oferecem o servio na rede. Desta forma se o nmero do servio do servidor TSQL no puder ser 6010, necessrio definir tambm o novo nmero em todas as mquinas clientes. No caso em que a aplicao e a base OpenBase estejam na mesma mquina no necessrio ativar o programa xsqlserv.

12

Apndice 3: Referncia a uma base

Em geral a referncia uma base efetuada atravs da especificao de uma cadeia que define a base propriamente dita e alguns parmetros. A cadeia possui a seguinte sintaxe: <parmetro> = <valor>; <parmetro>=<valor>;

<parmetro> um dos seguintes identificadores de trs letras: DSN SEC LEV HST CWD COL ISL arquivo do dicionrio OpenBase cdigo de segurana nvel de acesso mquina onde se encontra a base diretrio absoluto em relao ao qual so definidos os arquivos da base COL=atomic ou COL=all nvel de isolamento obrigatrio default : 1 opcional opcional default : diretrio do dicionrio default : atomic default : 1

Exemplo: DSN=c:/temp/dic;SEC=10;LEV=senha; imperativo especificar o parmetro CWD quando um item nome de um esquema OpenBase for especificado na forma de um caminho relativo. Caso contrrio o TSQL poder no visualizar certas tabelas da base. Desta forma quando CWD no especificado, os itens nome de tabela devem ser especificados na forma do caminho completo de um arquivo a partir da raiz ou na forma do nome do arquivo quando o arquivo reside no diretrio da base. O parmetro COL especifica a visibilidade dos campos do tipo POS para a SQL. No modo atomic somente os subcampos do ltimo nvel so visveis sendo que todos os subcampos de um campo devem ser nomeados. No modo all todos os campos so visveis. Exemplo: data U8 ano U4 POS data mes U2 POS data + 4 dia U2 POS data + 6 No exemplo, para COL=atomic, somente os campos ano, mes e dia so visveis para a SQL. Se o campo ano no tivesse sido especificado, somente o campo data seria visvel tendo em vista que todos os subcampos de um campo devem ser nomeados para serem visveis. Se COL=all, todos os campos data, ano, mes e dia so visveis. Esta modalidade no recomendada para a execuo de comandos SQL do tipo INSERT considerando que os valores de data e mes por exemplo so superpostos .Em geral ela s deve ser utilizada para comandos de leitura (SELECT). O modo atomic fortemente recomendado no caso do acesso ODBC. O modo all pode ser utilizado para recuperar dados em casos muito especficos. O parmetro ISL permite definir o nvel de isolamento que tem efeito somente quando o bloqueio no de banco (Veja captulo 1). O parmetro HST especifica a mquina na qual reside a base. Se ele no for especificado a base considerada residente na mquina local e a conexo entre a aplicao e o sistema TSQL no ser do tipo cliente/servidor. No tsqlwi e no ODBC no necessrio especificar o parmetro HST tendo em vista que eles possuem formas especficas para definir a mquina. No caso mais especfico do programa tsqlwi apresentado no apndice 6, a cadeia aqui descrita no deve ser especificada para a conexo com o servidor considerando que os parmetros da cadeia so fornecidos atravs os campos de uma interface teoricamente auto explicativa.

13

Apndice 4: ODBC

Para efetuar uma ou mais conexes ODBC entre uma base OpenBase e uma aplicao necessrio que o servidor TSQL esteja instalado na mquina que contm a base e que o driver ODBC do TSQL(OpenBase Tsql Driver) esteja instalado na mquina da aplicao(Veja o apndice 1). Por outro lado, a base deve ser registrada na mquina cliente atravs a execuo do programa administrador de bases ODBC que se encontra no painel de controle do Windows . Neste programa, aps a escolha da opo "adicionar" e de selecionar o driver "OpenBase Tsql Driver", uma caixa de dilogo exibida para o preenchimento dos seguintes campos : Nome da base de dados(Data Source Name) : o nome com o qual a base cadastrada para o ODBC. Caminho da base de dados(Database Path) : Como descrito no apndice 3, a cadeia que define a base propriamente dita assim como certos parmetros de abertura. Exemplo : DSN=c:/temp/dic;SEC=10;LEV=senha; Por motivos de segurana os parmetros SEC e LEV podem ser omitidos na cadeia. Neste caso, se seus valores no forem do tipo "default" eles devero ser fornecidos durante a execuo da aplicao atravs a caixa de dilogo que requer a identificao do usurio(nvel de acesso) e a passwd(cdigo de segurana) . Outros parmetros podem ser especificados e esto documentados no apndice 3. Nome da mquina servidora (Host Name): o nome da mquina onde reside a base (Veja arquivo hosts). Se a mquina no for especificada a conexo ser local. No caso de haver algum problema na conexo deve-se verificar se as condies de funcionamento do servidor TSQL descritas no apndice 2 esto respeitadas.

14

Apndice 5: Configurao

Determinadas caractersticas de funcionamento do ambiente TSQL podem ser configuradas atravs a especificao de parmetros. O TSQL procura a definio dos parmetros segundo a ordem de prioridades definidas a seguir: Ambiente UNIX: 1. No arquivo cujo nome est definido na varivel de ambiente TSQLCFG 2. No arquivo /etc/xsqlserv.cfg 3. No arquivo xsqlserv.cfg do diretrio default de instalao(/usr/lib/tsql). Ambiente Windows: 1. No arquivo cujo nome est definido na varivel de ambiente TSQLCFG 2. Nos valores da chave do registry: HKEY_LOCAL_MACHINE\Software\Tecnocoop Sistemas\TSQL server\V8.1 3. No arquivo xsqlserv.cfg do diretrio default de instalao(c:\tsql). Em um arquivo cada definio de parmetro deve ocupar uma linha. Parmetros que podem ser definidos : TSQLPATH=<diretrio de instalao> No implementado. TSQLPORT=<nmero do servio TSQL> Se for atribudo algum nome TSQLPORT , este nmero se sobrepor ao nmero default(6010) e qualquer nmero que tiver sido atribudo ao servio tsqlserv no arquivo /etc/services. O mesmo nmero deve ser utilizado no servidor e nos clientes. TSQLMEMSM=<tamanho da rea de sort em kbytes> O tamanho da rea de sort pode ser aumentado no caso em que uma consulta com a clusula GROUP BY ou ORDER BY no tiver um desempenho satisfatrio.

TSQLTIMEOUT=<nmero de segundos> Define o intervalo mximo em segundos que uma conexo pode permanecer aberta sem que haja qualquer troca de informaes entre a aplicao e o servidor. Aps o intervalo a comunicao fechada pelo servidor. O intervalo default de 3600 segundos. XSQLTRACE= S | N IMPNODOS = S Quando atribudo o caracter S ao parmetro XSQLTRACE e o caracter C ao parmetro IMPNODOS, o TSQL grava no arquivo xsqlserv.trace do diretrio de instalao as informaes sobre a estratgia adotada por ele para a execuo dos comandos SQL. Estas informaes so utilizadas pelo suporte para avaliao da qualidade da otimizao dos comandos SQL.

15

Apndice 6: tsqlwi e tsqlI

O tsqlwi um ambiente grfico, interativo e amigvel para a execuo direta de comandos SQL no Windows. Cada resultado exibido em uma janela correspondente. le mantm um cadastro de bases que permite identificar uma base com simplicidade. Como o ambiente auto explicativo, a sua descrio neste manual seria redundante. Por sua vez, o tsqlI um programa que oferece ao usurio uma interface interativa e amigvel no grfica no UNIX para a execuo de comandos SQL.O utilitrio possui: Um ambiente para desenvolvimento de comandos SQL Um ambiente para desenvolvimento de formulrios. Um gerador de relatrios com vrios nveis de quebras, com totalizaes, mdias e freqncias. Um gerador de telas para consultas e inseres de dados. Um gerador de telas de menu, cada opo deste pode ser associada a execuo de um programa qualquer, um comando SQL, um submenu ou uma tela para consulta e atualizao de dados.

15.1 1. Para entrar no sistema:


Para acessar o TSQL de forma interativa digite: tsqlI DSN=.....;.......;...... [opes] Veja o apndice 3 (Referncia a uma base) para a especificao da cadeia inicial. A cadeia deve ser digitada entre aspas. opes indicam o modo de acesso a interface; Se a base no for remota a seguinte forma tambm pode ser utilizada para ativar o tsqlI. tsqlI nome [ s cdigo de segurana ] [ n nvel de acesso ] [opes] onde nome especifica o nome do arquivo do dicionrio. Pode ser o caminho completo ou o caminho em relao ao diretrio corrente. opes indicam o modo de acesso a interface; As opes podem ser: -E arquivo Com esta opo, o tsqlI entra direto em modo de tEla com a tela contida em arquivo. Como podem ser definidas telas de menu e de manipulao de dados, esta opo permite o uso da interface simulando uma aplicao. O usurio que entra diretamente neste modo no tem acesso aos outros recursos do sistema. -X arquivo Com esta opo, o tsqlI entra direto no modo comando executando o comando contido em arquivo. Novamente, o usurio que entra no sistema diretamente neste modo, no tem acesso aos demais recursos do sistema. -N nvel Com esta opo o usurio especifica os nveis de isolamento 0,1 ou 2 (Veja manual de referncia), sendo que o nvel default 1. O nvel com o qual foi ativado o tsqlI indicado no menu OPES. No nvel 0 nenhum bloqueio de registros efetuado e desta forma o tsqlI no permite operaes de escrita, s permitindo portanto a execuo de comandos SQL do tipo SELECT.

No caso de uma base OpenBASE com bloqueio de banco, se um usurio ativar o tsqlI com nvel diferente de zero, o banco ficar bloqueado por esse usurio durante todo tempo da exibio do relatrio correspondente a execuo de uma consulta.

15.1.1 1.1 Menu Principal


O tsqlI possui uma interface amigvel ao usurio, composta de menus e submenus que guiam o usurio pelos diversos recursos do ambiente. Em cada uma das telas, h um menu de opes na linha superior do vdeo. Para retornar ao ambiente anterior, usa-se sempre a tecla ESC ou opo especfica no menu. O menu principal, no qual se chega ao chamar o tsqlI sem opes oferece trs alternativas: modo de Comando, modo de tEla, e modo de Opes. Cada um desses modos ser explicado em itens prprios a seguir.

15.2 2. Modo de Comando


O modo de Comando permite a edio e execuo de procedimentos SQL. Oferece, tambm, a possibilidade de salvar e restaurar a rea em edio. O editor possui uma rea de edio de 80 colunas e permite rolamento vertical. Os comandos de edio seguem o padro do Noffice e podem ser encontrados no item 5 deste captulo. As teclas PgUp e PgDn, no editor, recuperam os vinte ltimos comandos executados com sucesso. Durante a execuo de um comando SQL, aparece um asterisco (EM EXECUO) piscando na linha superior da tela. Nesta linha so colocadas, tambm, as mensagens de erro da SQL, quando for o caso.

15.2.1 2.1 Formulrios


Ao ser executada um consulta SQL, a resposta aparece em um relatrio. Se nada for especificado em contrrio, usado um formulrio padro, onde aparecem as colunas dispostas lado a lado entituladas pelo nome da coluna, se houver, ou pelo contedo da clusula AS do comando SELECT. A opo Formulrios permite que seja criado, ativado e desativado outros tipos de relatrio. Ao entrar no modo formulrio, para editar um formulrio, necessrio indicar seu nome (pode j existir ou no). A seguir so especificadas as caractersticas gerais do formulrio: nmero de linhas por pgina. nmero de colunas por linha. margens esquerda e direita. nmero de linhas do cabealho. mero de linhas do cabealho de cada coluna. A tecla PgDn permite desviar para o prximo menu sem necessidade de deslocar o cursor at o ltimo item das caractersticas gerais. Estando as caractersticas definidas, aparece um novo menu, atravs do qual pode-se definir, sempre de forma interativa: o cabealho do relatrio (Relatrio); o ttulo e contedo de cada coluna do relatrio (Detalhe). Na operao de insero de uma coluna, a coluna inserida antes da corrente; a definio de quebras do relatrio (Quebra).Para se remover uma quebra deve-se digitar no campo de quebra um *.A informao da existncia de uma quebra exibida no Detalhe da coluna correspondente. a definio de totais finais (tOtais). Aps a edio do formulrio este deve ser ativado (Ativa). A partir da as selees feitas geram relatrios no formato especificado pelo relatrio. Se existe um formulrio ativado, a funo Ativa mostra o seu nome. Para desativar o formulrio escolha a opo Desativa. A opo Gera permite gerar em um arquivo o formulrio padro correspondente a um determinado comando SQL de seleo. Para isto deve-se ligar a opo GERA antes da execuo do comando. A gerao de um formulrio padro pode ser o ponto de partida para a criao de um formulrio no padro.

15.3 3. Modo de tela


O tsqlI oferece um gerador de telas para consulta e insero de dados e de telas de menu. Uma tela deve ser previamente editada em um editor de textos externo e chamada a partir da opo tEla do menu principal.

Existem trs tipos distintos de telas. Em todas elas, as linhas 1 a 20 do arquivo devem conter o desenho da tela que pode ser livremente definida pelo usurio. As cadeias XX/XX/XX e XX:XX:XX especificam a posio da tela onde ser colocada, respectivamente, a data e a hora corrente. O primeiro caracter underline (_) de uma seqncia de caracteres underline indica a posio do primeiro caracter da informao a ser colocada na tela. O contedo desta informao varia conforme o tipo de tela em que se est trabalhando. O primeiro caracter percente (%) de uma seqncia de caracteres percente indica a primeira posio de uma mensagem a ser colocada na tela. Esta opo s existe nas telas de definio de menu.

15.3.1 3.1 Tela tipo menu - 1 forma


Esta forma de tela permite a criao de menus. So definidas opes que podem chamar outras telas, comandos SQL e programas executveis do sistema. As linhas de 1 a 20 definem o desenho da tela. Na linha 21 deve ser colocado um caracter arroba (@) seguido de uma lista de opes do menu. Cada item da lista define uma opo do menu a ser posicionada nos grupos de underline seguindo uma precedncia da esquerda para a direita, de cima para baixo. A sintaxe de um item de opo : nome_arquivo ([cdigo,] opo, mensagem) nome_arquivo Especifica o nome do arquivo a ser executado a partir desta opo. Como j foi dito, uma opo pode executar um arquivo executvel, um comando SQL (previamente editado num editor de textos ou no prprio modo de edio de comandos do tsqlI), ou uma outra tela (submenu ou tela de dados). cdigo Indica o contedo do arquivo. O cdigo X indica programa executvel, o cdigo P indica um procedimento SQL e a ausncia de cdigo indica tela. opo Define o contedo da opo que aparecer no menu da tela. Uma opo poder ser selecionada com o uso das setas ou teclando a primeira letra maiscula da opo. Esta aparecer destacada no vdeo. mensagem Indica a mensagem que ser mostrada a partir do 1 caracter percente (%), quando o cursor indicar esta opo. S permitida a definio de uma seqncia de caracteres % na tela.

15.3.1.1 Exemplo:
XX/XX/XXXX:XX:XX Menu Principal
. . . . .

%%%%%%%%%%%%%%%%%%%%%%

tela02.t (Clientes, Cadastro de Clientes) com01.s (P, produtos, Consulta Produtos) tela04.t (Pedidos, Cadastro de Pedidos) nx(X, Editor, NOffice) sh(X,Shell, Sistema)

15.3.2 3.2 Tela tipo menu - 2 forma


O tsqlI oferece, ainda, uma outra forma de definio de menu. Neste modo o desenho da tela (nas linhas de 1 a 20) deve incluir o texto referente as opes do menu. Uma opo neste tipo de menu s pode ser selecionada por cursor que aparecer nas posies indicadas pelo caracter underline (_). Na linha 21 do arquivo de tela deve aparecer o caracter # seguido de uma lista de opes. Cada uma delas contm o nome do arquivo, cdigo e mensagem semelhante ao primeiro modo de tela: nome_arquivo [ ([cdigo,] [ mensagem ] ) ] Estas opes so anlogas as do item 3.1. Nome_arquivo especifica o arquivo a ser executado que pode ser um programa executvel (cdigo X), um procedimento SQL (cdigo P) ou uma tela (cdigo nulo).

15.3.3 Exemplo:
XX/XX/XXXX:XX:XX [_]Consulta tabela [_]Insere e Seleciona Pedidos %%% # com04.s (P, Mostra todos os pedidos) tela03.t (Tela de insero e seleo de pedidos)

15.3.4 3.3 Tela de dados


Uma tela de dados pode ser definida para inserir e consultar tabelas da base. O tsqlI traduz internamente as aes do usurio em comandos SQL para o TSQL. Neste caso o desenho da tela nas linhas 1 a 20 devem ser em nmero proporcional ao nmero de opes de forma a tela possuir um ou mais registros da tabela ao mesmo tempo. A partir da linha 21 do arquivo de definio da tela deve ser colocado o nome da tabela seguido de uma lista de itens. Cada item define o nome de uma coluna da tabela e opcionalmente uma mscara, um nmero de ordem para a seleo:
nome_coluna ([mscara,][ordenao])

Ver mscara no captulo mscaras de edio. A sintaxe de ordenao On onde n o nmero de ordem pela qual a seleo ser ordenada. Quando este tipo de tela executada ficam disponveis (se o usurio corrente tiver estes privilgios) as opes de insero e seleo. A seleo pode ser feita por um ou mais campos digitando as condies necessrias no campo referente a coluna. Esta condio deve seguir a mesma sintaxe das condies de seleo de uma clusula WHERE da consulta SQL. O nome da coluna no digitado. Para que a seleo seja feita por mais de um campo as teclas PgDn e PgUp vo para o campo seguinte onde pode ser a colocada nova condio. Para concatenar condies um AND, um ponto e vrgula ; ou se nada colocado indicam um conector AND SQL. Um OR ou uma vrgula , indicam um conector OR SQL.

15.3.5 Exemplo:
XX/XX/XXXX:XX:XX Cadastro de Clientes Cdigo Clientes Crdito

clientes cod cliente (9999) nome (@s20,01) credito ($ZZ.ZZZ.ZZ9,99)

15.3.6 Exemplo:
XX/XX/XXXX:XX:XX CADASTRO DE PEDIDOS Cdigo: _ _ _ _ _ _ _ _ Data: _ _ _ _ _ _ _ _ Fabricante: _ _ _ _ _ _ Produto:_ _ _ _ _ _ _ _ Quantidade: _ _ _ _ _ Cdigo do Cliente:_ _ _

Preo:_ _ _ _ _ _ _ _ Cdigo do Vendedor:_ _ _

pedidos

pedido# (999999) data(@Dyd) fabricante (XXXX) produto (XXXXX) quantidade (z9) cliente (9999) preco total (zzz zzz,99) vendedor (999)

15.4 4. Opes do Ambiente


Nesta opo, possvel definir algumas opes do ambiente. As opes so: Definio do esquema a ser acessado. Seu valor inicial definido pela varivel de sistema SCHEMA ou, na sua ausncia, pelo nome do usurio corrente (login). Definio do nmero de linhas por pgina do relatrio. O valor inicial 20 (tamanho ideal para o vdeo), mas deve ser modificado para se adequar ao tamanho do papel na impressora ou outro dispositivo de sada. Definio do tipo de sada. Pode ser em vdeo, em arquivo, num dispositivo qualquer do sistema (/dev/) ou num pipe. Definio da sada. Conforme a opo anterior pode ser nulo, nome de um arquivo, de um dispositivo, etc. Definio de transao. O valor (F) faz com que o tsqlI feche a transao aps cada comando executado. O valor (I) faz com que a transao seja fechada quando um prximo comando submetido para execuo. Com a opo N, deixado a cargo do usurio, atravs da execuo do comando COMMIT da SQL, o fechamento da transao no momento em que lhe convier. Confirmao ao atualizar dados via tela formatada. Esta opo indica se deve ou no ser pedida confirmao na entrada de dados via tela de dados. Inicializa confirmao. Esta opo seta o valor default, se houver, para os pedidos de confirmao de atualizao de dados. O valor inicial pode ser Sim, No ou nulo (no h valor default).

15.5 5. Comandos de Edio


Podem ser usados os mesmos comandos do Noffice (a lista no deve estar completa): Setas: locomovem cursor ^E: sobe cursor ^X : desce cursor ^D : cursor para direita Bsp : cursor para esquerda ^H : volta cursor apagando o caracter anterior ^G : apaga caracter corrente ^Y : apaga linha ^T : apaga palavra ^F : vai para palavra seguinte ^A : vai para a palavra anterior ^QF : procura palavra ^L : procura prxima ocorrncia da palavra ^QLn : vai para n-sima linha ^N: insere nova linha ^V : entra em modo de insero ^C e ^R Recuperam os ltimos 20 comandos : executados com sucesso. ^C percorre a lista

dos comandos para a frente e ^R para traz. Observao: ^P pode ser utilizado no lugar de ^Q.

15.6 6. Formatos de mscara:


Para cadeia de caracteres: 9 indica a posio de um algarismo (0 a 9). # indica a posio de um algarismo ou branco. A indica a posio de uma caracter alfabtico ou branco. N indica a posio de um caracter alfanumrico ou branco. X indica a posio de um caracter qualquer. ! converte para maisculas. @Dij data, i e j especificam as precises inicial e final. Podem ser: A para ano m para ms D para dia H para hora N para minuto S para segundo @Sn define o tamanho da janela de edio (se o campo for maior, faz scroll horizontal. Para tipo numrico: Z indica posio de um algarismo, suprimindo zeros a esquerda. # indica posio de um algarismo ou branco. 9 indica a posio de um algarismo. * indica a posio de algarismo e substitui zeros a esquerda por * $ indica posio de algarismo, substituindo zeros a esquerda por brancos, exceto o ltimo zero a esquerda. idem acima, porm substitu ltimo zero a esquerda por -, caso o nmero seja negativo. @f indica posio da vrgula no fixa. @in coloca n vezes o caracter i. 7. A tecla F3 (ou seqncia ^B) Atravs da tecla F3, ou a seqncia ^B, o usurio pode em qualquer ponto do tsqlI executar comandos via a shell do sistema, como por exemplo listar os arquivos do diretrio corrente. Este recurso extremamente til levando-se em conta que o usurio pode possuir formulrios, consultas e relatrios armazenados em arquivos comuns.

16

Apndice 7: Mensagens de erro

Os cdigos de erro so retornados no parmetro SQLCODE aps a execuo de cada comando SQL. Na lista abaixo, a coluna mais esquerda fornece o cdigo numrico do erro, a coluna mais direita a descrio do erro e a coluna do centro a constante simblica para aplicaes em C. As constantes simblicas esto definidas no arquivo /usr/include/sqlcode.h.

16.1 Erros graves de processamento:


-512 xFTCANCSIG -513 xFTALLOC -514 xFTOVERPSPR -515 xFTGCMEMNS -516 xFTOVERPS -517 xFTNPRECUAR -518 xFTSAIARQ -519 xFTBADF Processador TSQL cancelado Erro em alocao dinmica de memria Estouro da pilha sinttica em um percurso Memria alocada pela gerao de cdigo Estouro da pilha sinttica O analisador sinttico no pode recuar Erro na gerao de arquivo Handle de propriedades invalido

16.2 Erros de uso (parmetros de ativao):


-520 xKKFONTE -521 xKKNOMEDB -522 xKKINVALDSN -523 xKKPERM -524 xKKPASSREM -710 xKKINVALARG -711 xKKNOSPC -712 xKKDEMONS No conseguiu abrir arquivo fonte No se posicionou na base de dados Nao uma base de dados valida Parametro de segurana invlido Usurio no cadastrado ou passwd invalido Argumento de chamada de funcao invalido Area em memoria insuficiente para o valor Data de demontrao vencida

16.3 Erros lxicos em comando SQL:


-525 xLXIDTERMU -526 xLXIDDOISU -527 xLXIDGRANDE -528 xLXCARINV -529 xLXEOFEMCAD -700 xLXCADNBIT -701 xLXCADNHEXA -702 xLXBINNHEXA -703 xLXBINNPAR Caracter _ termina identificador Caracter _ duplicado no identificador Identificador muito grande Caracter invlido Fim de arquivo em cadeia de caracteres Caracter invalido em cadeia de bits Caracter invalido em cadeia hexa de bits Caracter invalido em cadeia binaria Par incompleto em cadeia binaria

16.4 Erros sintticos em comandos SQL:


-530 xSTERRO Erro Sinttico.

16.5 Erros semnticos em comandos SQL:


-531 xSMCURSORDUP -532 xSMFARITCHAR -533 xSMFFUNCAO -534 xSMNDIGBINV -535 xSMLINGNAO -536 xSMPROCDUP -537 xSMCURSORND -538 xSM2OPENCUR -539 xSMARITCHAR -540 xSMNTABINV -541 xSMNPARMDUP Cursor j declarado Tipo CHAR em funo SUM ou AVG Funo como argumento de funo Preciso de tipo FLOAT invlida Linguagem no disponvel Procedimento j declarado Cursor no declarado J existe procedimento OPEN para o cursor Tipo invalido em operacao aritmetica Especificao de nome de tabela invlido Nome de parmetro duplicado

-542 xSMSEMCODE -543 xSMTCHARINV -544 xSMTDECINV -545 xSMESCINV -546 xSMTPINVLNG -547 xSMCODEDUP -548 xSMTABNCUR -549 xSMCOLQNRES -550 xSMCOLNQNRES -551 xSMCOLNQAMBG -552 xSMCOLOBAMBG -553 xSMCOLOBNSEL -554 xSMPARNRES -555 xSMCOLGEMF -556 xSM2ESCOPF -557 xSMCOLSNG -558 xSMCOL2SET -559 xSMFWOUSET -560 xSMPARSGOB -561 xSMPAR2INTO -562 xSMXTABINS -563 xSMIDAUTINV -564 xSMPKEY2 -565 xSMCOLNDECL -566 xSMVARCINV -567 xSMID2LISTA -568 xSMNCOL2TAB -569 xSMNULONPERM -570 xSMTPATCOLNC -571 xSMOVERFLOW -572 xSMXTABUPDD -573 xSMCURSOPEN -574 xSMTCURNATUA -575 xSMNORDERINV -576 xSMNMAXTAB -577 xSMGS2SNEX -578 xSMPARINDIN -579 xSMFECSSEMG -580 xSMFDIST2 -581 xSMAUTHINV -582 xSMGDIFUNION -583 xSMTPNCHAR -584 xSMPATNCHAR

Parmetro SQLCODE no declarado Tamanho invlido para o tipo CHARACTER Tamanho invlido para o tipo NUMERIC Escala invlida Tipo de dado invlido para a linguagem Parmetro SQLCODE duplicado Tabela no identificada na declarao do cursor Coluna qualificada no resolvida Coluna no qualificada no resolvida Coluna no qualificada ambgua Coluna na clusula ORDER BYambgua Coluna na clusula ORDER BY no na SELECT Parmetro no declarado Coluna de grupamento argumento de funo Colunas de escopo diferente referidas na mesma funo Coluna nas clusulas SELECT ou HAVING e no na clusula GROUP BY Coluna repetida na clusula SET Funo na clusula WHERE ou SET Parmetro em clusula GROUP BY, ORDER BY ou SET Parmetro duplicado na clusula INTO Referncia invlida tabela em INSERT No o identificador de autorizao do esquema ou mdulo PRIMARY KEY repetida Coluna no definida em CREATE TABLE Coluna de tipo VARCHAR em restrio Identificador repetido em uma lista Coluna duplicada em CREATE TABLE Coluna restrita a valores no nulos Atribuio a coluna, tipo compatvel Transbordo na converso de constante Referncia invlida tabela em comando DELETE ou UPDATE Cursor sem comando OPEN Tabela do cursor no atualizvel Nmero de ordem na clusula ORDERBY invlido Excedido o nmero mximo de tabelas Grau da lista SELECT diferente de 1 em subconsulta que no EXISTS Tipo ou escala de parmetro INDICATOR Coluna simples e funo sem clusula GROUP BY Mais de uma funo DISTINCT no escopo Identificador de autorizao invlido Tabelas de graus diferentes em UNION Valor no do tipo cadeia de caracteres em predicado LIKE Padro no de tipo cadeia de caracteres

-585 xSMESCNCHAR -586 xSMTPPRNCOMP -587 xSMFUNCWHERE -588 xSMFSEMCOL -589 xSMASTSGBYH -590 xSMGINTOINV -591 xSMGINSNCOMP -592 xSMGCVWNCOMP -593 xSMXPARSPEC -594 xSMGEEINV -595 xSMDDINCUR -596 xSMDNDINCUR -597 xSMDALGINV -598 xSMDANSMALL -599 xSMSTATNCHAR -600 xSMLCOLCRV -601 xSMCOL2INS -602 xSMXREVOKE -603 xSMTPUNNCOMP -604 xSMLOCKVIEW -605 xSMLOCKMODE -606 xSMDTQUAINV -607 xSMXCOLSPEC -608 xSMXFUNSPEC -609 xSMFREENLOC -610 xSMNAODATA -611 xSMIDERANV -612 xSMDTVNV -613 xSMPARDININV -614 xSMPINCHAR -615 xSMULNCHAR -616 xSMTRNCHAR -617 xSMTMTPNV -618 xSMQCDTNV -619 xSMFEXTEND -620 xSMTPATPARNC -621 xSMCCNCHAR -622 xSMLENCHAR -623 xSMSBNCHAR -624 xSMSBPINNUM -625 xSMSBTRNNUM

ESCAPE no do tipo cadeia de caracteres Tipos incompatveis em predicado Funo sobre coluna na clusula WHERE Funcao(no COUNT(*)) sem coluna SELECT *sem clusula GROUP BY e com clusula HAVING Grau da clusula INTO invlido Graus diferentes no comando INSERT Graus diferentes no comando CREATE VIEW Especificao de parmetro no permitida Grantee igual a Grantor Cursor dinmico referido em comando posicionado Cursor referido em FETCH dinmico Varivel SQLDA com linguagem do mdulo incompatvel Varivel SQLDA de tipo no SMALLINT Varivel comando de tipo no caracter Lista de colunas obrigatria em comando CREATE VIEW Coluna referida mais de uma vez em clusula INSERT No pode especificar colunas em REVOKE Tipos incompatveis em operao UNION Comando LOCK TABLE sobre viso Usurio no tem privilgio necessrio ao modo de bloqueio sobre a tabela Qualificador ao tipo DATETIME invlido Especificao de coluna no permitida Especificao de funo no permitida Parametro no LOCATOR em comando FREE Data (DD/MM/AAAA) invlida Identificador de era invlido Valor em constante data-hora invalido Uso invalido de parametro dinamico Tipo de argumento de funcao POSITION Tipo de argumento de funcao UPPER ou LOWER Tipo de argumento de funcao TRIM Tamanho invalido para tipo Qualificador invlido para constante DATETIME Tipo do argumento da funo EXTEND no DATETIME Tipos incompatveis em atribuio varivel Tipo do operando de concatenao invlido Tipo do argumento da funo LENGTH invlido Tipo do argumento da funo SUBSTRING no cadeia de caracteres Posio inicial em funo SUBSTRING de tipo no numrico ou escala no zero Tamanho em funo SUBSTRING de tipo no numrico ou escala no zero

-626 xSMNOMECOM -627 xSMMODNINT -628 xSMCNFUCDIN -629 xSMSETNULL -630 xSMFORKT2REF -695 xSMPARFOTINV -696 xSMFONOTNEXT -697 xSMLOCNOTLOB -698 xSMCCTPNCP -699 xSMTPINVPRED -700 xSMTPINVGRBY -701 xSMTPINVGRBY -702 xSMTPINVUD -703 xSMTPINVSD

No existe o comando associado ao cursor Tipo ou escala de argumento de funcao MOD Coluna no est na clusula FORUPDATE SET NULL em chave restrita a no nulos Erro na dupla referncia tabela em comando CREATE TABLE Tipo de parametro em FETCH ORIENTATION FETCH diferente NEXT mas cursor sem SCROLL AS LOCATOR para parametro no LARGE OBJECT Tipos incompativeis em concatenacao Tipo invalido em predicado Coluna de grupamento de tipo invalido Tipo invalido em clausula ORDER BY Tipo invalido em UNION DISTINCT Tipo invalido em SELECT DISTINCT

16.6 Erros na execuo de comandos SQL:


-631 xINCHINVCAST -632 xINOBJINVAL -633 xINMODINVAL -634 xINCODINT -635 xINTUPLASS -636 xINCURFEC1 -637 xINCURFEC2 -638 xINNAOPOS -639 xINOPEN -640 xINVNULLINV -641 xINUNDO -642 xINOVERFLOW -643 xINDIVZERO -644 xINCHAVDUP -645 xINESCFIMPAD -646 xINCPRENSEL -647 xINCPRESEL -648 xINDAFETCHNV -649 xINNTEMCPRE -650 xINCOLNDECL -651 xINVARCINV -652 xINNMAXMOD -653 xINNPODEEXM -654 xINMODEMEX -655 xINLEITINT -656 xINMAXOPEN Cadeia de caracteres invalida em CAST Objeto do mdulo no compatvel Mdulo no est vlido para execuo Cdigo interpretvel no compatvel Cardinalidade de comando SELECT INTO ou subconsulta maior que 1 Cursor fechado em DELETE ou UPDATE Cursor fechado em CLOSE ou FETCH Cursor no posicionado em comando DELETE ou UPDATE Cursor j aberto em comando OPEN Atribuio de valor nulo invlida Erro no cancelamento das alteraes Transbordo em operao ou atribuio Diviso por zero Chave duplicada ESCAPE ltimo caracter do padro Comando preparado no SELECT Comando preparado SELECT SQLDA de FETCH dinmico invlido Comando no existe ou no preparado Coluna de tabela no identificada em CREATE INDEX ou GRANT VARCHAR em CREATE INDEX Ultrapassado o limite de mdulos em execuo Usurio no pode executar o mdulo No pode invalidar mdulo em execuo Erro na leitura do cdigo do mdulo Limite mximo de arquivos abertos

-657 xINERRSORT -658 xINMAXSORT -659 xINTPDANCOMP -660 xINCVINPARAM -661 xINMEMNOK -662 xINOBJNOK -663 xINSBPINVAL -664 xINSBTRNVAL -665 xINCOMOPEN -666 xINFORKDEF -667 xINDEADLOCK -668 xINFORKREF -669 xINNOLOGIN -670 xINPKG -671 xINTIMEOUT -672 xINPERM -673 xINEOF -688 xINCOMTSQL -691 xINTAMCHAVE -692 xINWCONOK -693 xINGRANT -694 xINREVOKE -708 xINNOUSEFUL -709 xINOVTABLOCK

Erro no esperado no mdulo SORT-MERGE Limite mximo de ordenaes ativas Tipos incompatveis em FETCH dinmico Erro na converso de entrada de parmetro Endereo de parmetro invlido Objeto do mdulo foi corrompido Posio inicial de SUBSTRING invlida Tamanho do resultado da funo SUBSTRING invlido Comando preparado est associado a cursor aberto Chave estrangeira incompatvel com a chave primria da tabela referida Esgotado o tempo de espera por objeto reservado a outro usurio Violao de restrio referencial Banco OpenBASE no est disponvel para (ou por) uso exclusivo Pacote de software no instalado Tempo de espera esgotado Violacao de permissao de acesso Fim de arquivo Erro de comunicao com servidor TSQL Limite do tamanho de chave de ndice Violao de clusula WITH CHECK OPTION Usuario no pode atribuir privilgio Usuario no pode retirar privilgio Base de dados no esta consistente Estourou a tabela de bloqueios

16.7 Erros nas consultas ao Dicionrio de Dados:


-674 xDDNAOTEMTAB -675 xDDJATEMTAB -676 xDDVISDEPTAB -677 xDDJATEMMOD -678 xDDJATEMIND -679 xDDNAOTEMMOD -680 xDDNAOPRCMOD -681 xDDMODNAOPRC -682 xDDNAOTEMIND -683 xDDJATEMVIS -684 xDDNAOTEMPRV -685 xDDNEXPRVUPC -686 xDDNEXPRVREF -687 xDDTABDEPTAB No existe a tabela ou viso Nome de tabela j existe Viso depende de tabela em DROP TABLE J existe o mdulo Nome de ndice j existe Mdulo no existe Usurio no tem permisso para recompilar mdulo O mdulo no pode ser recompilado ndice no existe Nome de viso j existe Usurio no tem o privilgio sobre a tabela referida Usurio no tem o privilgio UPDATE sobre a coluna referida Usurio no tem o privilgio REFERENCES sobre a tabela referida Tabela depende de tabela em DROP TABLE

Você também pode gostar