Oracle SQL

download Oracle SQL

of 67

Transcript of Oracle SQL

Por Edson Almeida Junior

Consulting Tecnologia & Sistemas Ltda www.consulting.com.br

Maro - 2006

Ultima Atualizao 11/04/2006

Consulting Tecnologia & Sistemas Ltda www.consulting.com.br

2

Objetivo Este treinamento destina-se a treinando que querem conhecer a filosofia de banco de dados relacionais, e tambm a linguagem padro do Oracle que a SQL, seus comando principais. O Objetivo, ao trmino do curso, de que os treinandos estejam aptos a comear o trabalho com o Oracle e suas ferramentas, quer no desenvolvimento de aplicaes ou na administrao do Oracle.

Modelo Conceitual Conceitos Conjuntos Conjuntos existem para permitir armazenar informaes uma nica vez. Os fatos sero dissociados e relacionados preservando o seu contedo. Ex.: Conjunto de alunos de uma turma, conjunto de pessoas de uma cidade. Modelo ERA O Modelo ERA, ou Modelo de Entidades, Relacionamentos e Atributos, qualifica um item de informao como Entidade, Relacionamento ou Atributo. Entidade um objeto (ou ente) em que se tem interesse especfico em acompanhar/monitorar sua existncia/vida no sistema e/ou que existe de forma independente de outras informaes, e/ou que se repete muito e possui grau de entidade e/ou que pertence a um conjunto finito e possui grau de entidade (estabilidade). Entidade Fraca So entidades que no tem vida prpria. Sua existncia depender da existncia de uma entidade principal. Exemplo.: Funcionrio e Dependente esto unidos por dependncia, ou seja, todo Dependente deve estar associado a um e somente um funcionrio. Entidade-Tipo a coleo, ou conjunto, de todas as Entidades que tm a mesma natureza, as mesmas propriedades, e que possuem atributos do mesmo tipo. Exemplo: 7670/Rmulo e 7798/Manoel so alunos de um mesmo curso, ento, so Entidades da Entidadetipo Aluno que o curso possui no seu modelo ERA. Matemtica, Portugus e Fsica so Entidades da Entidade-tipo Disciplina. Relacionamento um fato que une duas ou mais entidades. Relacionamento-tipo a coleo, ou conjunto, de todos os relacionamentos que tm a mesma natureza, as mesmas propriedades, que possuem atributos do mesmo tipo e que unem Entidades das mesmas Entidades-tipo pelo mesmo fato. Exemplo: Todas as informaes sobre as Disciplinas que os Alunos cursaram so do tipo Histrico; e sobre as que esto cursando so do tipo Matrcula (disciplinas em que os alunos esto matriculados).

Consulting Tecnologia & Sistemas Ltda www.consulting.com.br

3Atributo uma propriedade da Entidade-tipo ou do Relacionamento-tipo. anlogo ao campo de um registro. Sua posio dentro do modelo determinada de acordo com a dependncia que existe na sua variao de contedo (Dependncia funcional). Exemplo: 7670/Rmulo e 7798/Manoel so entidades da Entidade-tipo Aluno, logo, a Entidade-tipo Aluno estar representada pelos atributos matrcula e nome. Um atributo pode ser: simples, composto, multivalorado, global, identificador. Atributo Simples o atributo que guarda em si um nico valor indivisvel. Ex.: nome, preo, marca. Atributo composto o atributo resultado da soma de outros atributos. constitudo de subatributos. Ex.: endereo = rua + nmero + bairro + cep; data = dia + ms + ano Atributo Multivalorado o atributo que guarda em si repetidos valores. Pode assumir mais de um valor para cada ocorrncia. Ex.: telefone, formao. Atributo identificador (so) o(s) atributo(s) que diferencia(m) uma ocorrncia das demais dentro de um conjunto. Se nenhum dos atributos naturais serve como Identificador da ocorrncia, um atributo identificador suplementar deve ser acrescentado. Ex.: cdigo, matrcula. Existe uma analogia entre o atributo identificador de uma Entidade-tipo e a chave-primria do arquivo que esta Entidade-tipo vai gerar. O mesmo No acontece com Relacionamento-tipo. Um atributo identificador nunca poder estar vazio. Banco de Dados Relacional Um banco de dados relacional pode ser definido como um banco de dados que aparece ao usurio como uma coleo de tabelas. A caracterstica mais fundamental num banco de dados relacional a de que temos que identificar univocamente seus registros (que chamamos de linhas), ou seja, devemos definir um campo (ou mais de um) dentre os vrios campos do registro, para ser o atributo identificador do mesmo (chave primria). O Oracle um SGBD Relacional - Sistema de Gerenciamento de Banco de Dados Relacional (RDBMS - Relational Database Management System) e foi um dos primeiros sistemas de banco de dados a utilizar a Linguagem de Pesquisa Estruturada (SQL - Structured Query Language) como interface do usurio sendo, talvez, por este motivo, agora um dos principais sistemas de gerenciamento de banco de dados. Conceitos No estudo de banco de dados convm sabermos algumas definies importantes: Tabelas - So as unidades bsicas de um SGBD Relacional. formada por linhas e colunas, onde as linhas representam os registros e as colunas os campos da tabela. So muito conhecidas como Tabelas-Base. Exemplo: Tabela T_Funcionario Cod_Funcionario Cod_Departamento Nome_Funcionario - CHAR(06) - CHAR(05) - VARCHAR2(40) Consulting Tecnologia & Sistemas Ltda www.consulting.com.br

4Data_Nascimento -- DATE

Colunas - Um nome de coluna o nome que o usurio informar para representar os valores de dados que sero entrados sob cada coluna. Linhas - So os registros da tabela. Valores de dados - So os valores encontrados na interseo de uma coluna e uma linha. Chave primria - Uma ou mais de uma coluna que identifica uma linha, facilitando em muito o acesso aos dados. Viso ou Tabela Virtual(View) - uma tabela formada por uma pesquisa em uma ou mais tabela-base. Ela no existe, mas parece ao usurio como se existisse. Toda tabela num banco de dados relacional tem que possuir uma Chave Primria. As tabelas podero tambm ter chaves estrangeiras, que so campos que relacionam as tabelas do banco de dados, fazendo referncia entre uma e outra tabela. SQL - Linguagem de Pesquisa Estruturada A SQL - Linguagem de Pesquisa Estruturada (Structured Query Language) devido as suas caractersticas tornou-se a linguagem padro de sistemas gerenciadores de banco de dados relacionais. a linguagem de comunicao de todas as ferramentas e/ou aplicaes Oracle com o Oracle Server. SQL*Plus a ferramenta Oracle (interface) que executa os comandos SQL. Podemos com a SQL*Plus: -Pesquisar, adicionar, remover, modificar os dados do BD; -Criar, modificar, remover as estruturas de dados; -Controlar o acesso aos dados. Definio SQL - onde a pronuncia "ess-ki-ll" ou "sequel" que como a maioria das pessoas pronunciam - "Structured Query Language" (linguagem estruturada de pesquisa) , composta por um grupo de facilidades para definio, manipulaao e controle de dados em um banco de dados relacional. Como comeou essa histria de Banco de Dados Relacional e SQL? Em 1970 , E.F.Codd, nessa ocasio membro do Laboratrio de pesquisa da IBM em San Jose, Califrnia, publicou um trabalho agora clssico, "A Relational Model of Data for Large Shared Data Banks" - um modelo relacional de dados para grandes bancos de dados compartilhados (Communications of the ACM, Vol.13, No. 6, junho de 1970), em que se estabeleceu um grupo de princpios abstratos sobre gerncia de banco de dados: o assim chamado modelo relacional. Todo o campo da tecnologia de banco de dados relacional tem suas origens nesses trabalho. As idias de Codd incentivaram experincias e pesquisas em universidades, laboratriosde pesquisa industrial e estabelecimentos semelhantes, que resultaram em diversos produtos relacionais agora disponveis no mercado. Um aspecto em particular da referida pesquisa era o projeto de implementao de prottipo de uma srie de linguagens relacionais. Uma linguagem relacional uma linguagem que efetua , em alguma forma sinttica ou concreta, alguma ou todas as caractersticas do modelo relacional

Consulting Tecnologia & Sistemas Ltda www.consulting.com.br

5abastrato. Diversas dessas linguagens foram criadas no incio e no meio dos anos 70. Uma dessas linguagens em particular foi a chamada SEQUEL ("Structured English Query Language" - Linguagem de Pesquisa em ingls estruturado), definida por D.D. Chamberlin e outros (1974) no laboratrio de Pesquisas da IBM em San Jose, Califrnia, e inicialmente implementada em um prottipo da IBM chamado SEQUEL-SRM (1974-75). Em parte como resultado da experincia com o SEQUEL-XRM, foi definida em 1976-77 uma verso revisada do SEQUEL, chamada SEQUEL/2. (O nome foi subsequentemente alterado para SQL por razes legais). Comeou o trabalho em outro prottipo mais ambicioso da IBM, chamado System R. O System R., uma implementao de um grande subconjunto da linguagem SEQUEL/2 (ou SQL) , tornou-se operacional em 1977 e foi subsequentemente instalado em uma srie de estabelecimentos, usurios, tanto internos IBM quanto (sob um grupo de acordos comerciais de estudo) clientes selecionados da IBM. * Uma srie de mudanas posteriores foram feitas linguagem SQL durante a vida til de projeto do System R, em parte como resposta a sugestes de ususrios. Por exemplo, foi includa uma funo EXISTS para testar se um dado especificado existia no banco de Dados. Vamos a um exemplo prtico: SELECT DEPTNO, DNAME FROM DEPT D WHERE EXISTS (SELECT 'X' FROM EMP E WHERE E.DEPTNO = D.DEPTNO); * Existe outra forma de fazer este query. Porm esta a forma mais rpida de acesso ao Banco Em grande parte, graas ao sucesso do System R, tornou-se aparente ao final dos anos 70 que a IBM provavelmente desenvolveria um ou mais produtos baseados na tecnologia do System R especificamente, produtos que implementassem a linguagem SQL. Como resultado, outros vendedores tambm comearam a construir seus prprios produtos baseados no SQL. De fato, pelo menos um desses produtos, a saber o ORACLE, da Relational Software Inc. (que passou a se chamar Oracle Corporation), foi introduzido no mercado antes dos prprios produtos da IBM. Depois, em 1981, a IBM anunciou um produto SQL, chamado SQL/DS para o ambiente DOS/VSE. A seguir a IBM anunciou uma poutra verso do SQL/DS para o ambiente VM/CMS (1982), e outra para MVS chamada DB2, altamente compatvel com o SQL/DS (1983). Nos anos seguintes , diversos outros vendedores tambm anunciaram produtos baseados no SQL. Esses produtos incluam tanto produtos inteiramente novoscomo o DG/SQL (Data General Corporation, 1984) e SYBASE (Sybase Inc., 1986), quanto interfaces do SQL para produtos estabelecidos como o INGRES (Relational Technology INc. , 1981, 1985) e o IDM (Britton-Lee Inc., 1982). H atualmente muitos produtos no mercado que do suporte a algum dialetodo SQL, rodando em mquinas que cobrem toda a faixa desde microcomputadores at de grande porte. O SQL se tornou o padro no mundo do banco de dados relacional. Padro ANSI O SQL tambm se tornou o padro oficial. Em 1982, o American National Standards Institute (ANSI) encarregou seu Comit de Banco de Dados (chamado X3H2) de desenvolver uma proposta para uma linguagem relacional padro. Funcionalidade

Consulting Tecnologia & Sistemas Ltda www.consulting.com.br

6A funo da linguagem SQL dar suporte a definio , manipulao e controle dos dados em um banco de dados relacional. Um banco de dados relacional simplesmente um banco de dados que percebido pelo usurio como um grupo de tabelas onde tabela uma coleo de linhas e colunas. A Linguagem SQL pode ser usada atravs de dois modos: SQL Interativa Onde os comandos SQL so digitados interativamente, ou seja, logo aps a digitao do comando vemos sua execuo. SQL Embutida Neste modo os comandos SQL ficam embutidos no programa-fonte de uma linguagem de programao. Tal linguagem normalmente chamada linguagem hospedeira. Linguagens de programao como COBOL, C, PASCAL, PL/1, etc, admitem a SQL Embutida. A SQL divide-se em trs grupos: - Linguagem de Definio de Dados (DDL) - Linguagem de Controle de Dados (DCL) - Linguagem de Manipulao de Dados (DML)

Linguagem de Definio de Dados (DDL) Tem como objetivo definir, alterar e eliminar as tabelas usadas para armazenar os dados. CREATE, ALTER, DROP, RENAME, so comandos de definio de dados, dentre outros. Em SQL as tabelas possuem a funo de armazenar os dados do Banco de Dados. O comando para criao de tabelas no SQL o CREATE TABLE. Sintaxe (Bsica): CREATE TABLE nome_da_tabela_base (nome_de_coluna tipo_de_dado (tamanho) [NOT NULL [UNIQUE] ], ... ) CONSTRAINT nome_da_constraint PRIMARY KEY (nome_de_coluna) TABLESPACE nome_tablespace; Onde: nome_da_tabela_base o nome que identifica a tabela. nome_de_coluna o nome identificador da coluna. Tipo_de_dado(tamanho) o tipo de dado da coluna. VARCHAR2, NUMBER, DATE. Os tipos bsicos so: CHAR,

NOT NULL Pode ser especificado em qualquer coluna da tabela. Faz com que a coluna no admita nulos, isto , qualquer tentativa de se introduzir um nulo em tal coluna ser rejeitada.

Consulting Tecnologia & Sistemas Ltda www.consulting.com.br

7UNIQUE Pode ser especificado para qualquer coluna ou combinao de coluna da tabela. Cada uma dessas colunas, ou cada coluna em uma combinao de colunas, tambm deve Ter a especificao de NOT NULL. Qualquer tentativa de se introduzir uma linha na tabela, contendo um valor igual mesma coluna em alguma outra linha, ser rejeitada. Se UNIQUE no for especificado para uma dada coluna (ou combinao), ento essa coluna (ou combinao) pode conter valores duplicados. Nome_da_constraint o nome da chave primria, atributo identificador da tabela. nome_tablespace o nome do tablespace (Objeto lgico) que armazena os arquivos fsicos do Oracle (datafiles). Os comandos CREATE TABLE para as tabelas seriam: a)Para a tabela ALUNO CREATE TABLE T_Aluno (MATRICULA VARCHAR2(06) NOT NULL, NOME_ALUNO VARCHAR2(40) NOT NULL) CONSTRAINT pk_aluno PRIMARY KEY(MATRICULA), TABLESPACE st_01; a)Para a tabela DISCIPLINA CREATE TABLE T_Disciplina (COD_DISCIPLINA VARCHAR2(04) NOT NULL, NOME_DISCIPLINA VARCHAR2(30) NOT NULL) CONSTRAINT pk_disciplina PRIMARY KEY(COD_DISCIPLINA), TABLESPACE st_01; C) Para a tabela CURSA CREATE TABLE T_Cursa (MATRICULA VARCHAR2(06) NOT NULL, COD_DISCIPLINA VARCHAR2(04) NOT NULL, NOTA1 NUMBER(3,1), NOTA2 NUMBER(3,1), NOTA3 NUMBER(3,1)) CONSTRAINT pk_cursa PRIMARY KEY(MATRICULA,COD_DISCIPLINA) TABLESPACE st_01; Obs.: O comando CREATE TABLE apenas cria a tabela, ou seja, apenas cria a estrutura da tabela. Elas precisam, num segundo passo, serem povoadas.

Linguagem de Controle de Dados (DCL) A DCL (Data Control Language) contm elementos que sero teis num sistema multiusurio, onde a privacidade das informaes importante, a segurana das tabelas, bem como o controle dos privilgios dos usurios do BD. Os comandos Grant, Revoke, Audit, No Audit, Lock so comandos da DCL.

Consulting Tecnologia & Sistemas Ltda www.consulting.com.br

8

Exemplos: 1)GRANT SELECT, INSERT ON T_DEPARTAMENTO TO JOAO; D os privilgios de Select e Insert para o usurio Joo, na tabela T_Departamento. 1)REVOKE INSERT ON T_DEPARTAMENTO TO JOAO; Retira o privilgio de insero de dados (Insert) do usurio Joo, na tabela T_Departamento. Linguagem de Manipulao de Dados (DML) Esta linguagem contm os componentes da linguagem e conceitos para a manipulao das informaes armazenadas em tabelas. Os comandos SELECT, UPDATE, DELETE, INSERT, COMMIT, ROLLBACK, dentre outros, so comandos de manipulao de dados. Exemplos: INSERT INTO T_ALUNO VALUES (001,Joao da Silva); Inserir o registro de Joo da Silva na tabela T_Aluno. UPDATE T_SALARIO SET VAL_SALARIO_MINIMO = VAL_SALARIO_MINIMO * 1.2; Atualizar o salrio mnimo, da tabela salrio, em 20%. Iniciando uma Sesso SQL*Plus Executar o SQL*Plus e logar-se. C:\>SQLPLUS Enter user name: manoel Enter password: ******* O prompt do SQL*Plus ser exibido. SQL> Para sair (terminar uma sesso SQL*Plus), digitar exit. SQL>exit OBS.:

Consulting Tecnologia & Sistemas Ltda www.consulting.com.br

9O SQL*Plus possui um help. Basta digitar help ou help no prompt do SQL*Plus. Ex.: HELP UPDATE Vendo a estrutura de uma tabela O comando DESCRIBE exibe a estrutura da tabela especificada, isto , o nome, tipo, tamanho e se o campo de preenchimento obrigatrio ou no. EX.: DESCRIBE T_ALUNO Name MATRICULA NOME_ALUNO NULL NOT NULL NOT NULL Type VARCHAR2(06) VARCHAR2(40)

TIPOS DE DADOS BSICOS CHAR O tipo CHAR armazena seqncia de caracteres de tamanho fixo que consistem de letras, nmeros, caracteres especiais. O tamanho no pode ultrapassar 255 bytes. Em SQL Padro, quando um dado possui um tamanho menor que o especificado para a coluna, espaos em branco so acrescentados direita. O tamanho default 1. (No aconselhvel este tipo de dados apartir do Banco Oracle 8i). VARCHAR2 Armazena seqncias de caracteres de tamanho varivel que consistem de letras, nmeros, caracteres especiais. O tamanho mximo de 4000. O tamanho default 1. VARCHAR Idem ao VARCHAR2 NUMBER(T,D) Onde T significa o tamanho do campo e D a quantidade de casas decimais (se for o caso). DATE Tipo de dado usado para datas e horas (intervalo: 01 de janeiro de 4712 AC e 31 de dezembro de 4712 DC). LONG Idem ao VARCHAR2, mas com tamanho mximo de 2 Gigabytes. CLOB Tipo de Dado usado para armazenamento de caracteres de grandes objetos. O Tamanho mximo de 4 Gb. BLOB Tipo de Dado usado para armazenamento binrio de grandes objetos. O Tamanho mximo de 4 Gb.

Consulting Tecnologia & Sistemas Ltda www.consulting.com.br

10BFILE Tipo de Dado que contm a localizao de um arquivo binrio armazenado fora do banco de dados. Tamanho mximo de 4Gb. * Existem outros tipos de dados, mas estes so variaes dos tipos apresentados acima. SELECIONANDO DADOS: COMANDO SELECT O comando mais fundamental da linguagem SQL para manipulao dos dados o SELECT. Com ele que produzimos as Queries, ou seja ,as pesquisas no Banco de Dados. Sua sintaxe : SELECT [DISTINCT] (quais colunas queremos) FROM (de qual(is) tabela(s) ) [WHERE (condio de pesquisa) ] [GROUP BY colunas [HAVING condio ] ] [ORDER BY colunas ] Exemplos de Queries: 1)SELECT * FROM ALUNO; Retorna todas as linhas e todas as colunas da tabela ALUNO. 1)SELECT MATRICULA, NOME_ALUNO FROM ALUNO; Idem Query acima. 1)SELECT MATRICULA, NOME_ALUNO FROM ALUNO WHERE NOME_ALUNO = JOAO DA SILVA; Retorna os dados dos alunos que tenham nome igual a JOAO DA SILVA. 1)SELECT MATRICULA FROM CURSA WHERE ((NOTA1+NOTA2+NOTA3)/3) > 7 AND CD_DISCIPLINA = PORT; Retorna a matrcula de todos os alunos que obtiveram mdia acima de sete na disciplina PORT. 1)SELECT MATRICULA, CD_DISCIPLINA, NOTA1 FROM CURSA WHERE NOTA1 BETWEEN 5 AND 7; Retorna a relao de todas as matrculas, cdigo da disciplina e nota1, cuja notas1 esteja contida entre 5 e 7, inclusive; 1)SELECT MATRICULA, CD DISCIPLINA FROM CURSA WHERE NOTA3 IS NULL; Retorna as matrculas e disciplinas que esto sem lanamento da nota3. 1)SELECT MATRICULA, NOME_ALUNO FROM ALUNO WHERE NOME_ALUNO LIKE JOAO%;

Consulting Tecnologia & Sistemas Ltda www.consulting.com.br

11Retorna a matrcula e o nome dos alunos chamados JOAO (independente de seus sobrenomes); 1)SELECT * FROM CURSA WHERE CD_DISCIPLINA IN (MAT,PORT); Retorna os dados dos alunos que cursam as disciplinas MAT e PORT. 1)SELECT DISTINCT NOME_ALUNO FROM ALUNO; Retorna o nome dos alunos da tabela Aluno, no exibindo os nomes duplicados.

Denominamos Tabela_resultado o resultado de uma Query, isto , a tabela resultante de um SELECT. OBS.: a)O predicado LIKE (exemplo 7) determina que a pesquisa ser feita em todos os nomes que comecem com JOAO. O caractere % pode ser colocado tambm antes da palavra. EX.: ... LIKE %MARIA%. b)O CARACTERE * (exemplo 1) pega todas as colunas da tabela. EXPRESSES ARITMTICAS Uma expresso a combinao de um ou mais valores, operadores, e funes os quais avaliam para um valor. Expresses Aritmticas podem conter nome de colunas, valores numricos constantes e operadores aritmticos: Operadores + * / Descries Adio Subtrao Multiplicao Diviso

SQL> SELECT 1+1 FROM DUAL; 1+1 ---------2 SQL> Select 12/4 Diviso from dual; DIVISO ---------3 Se a sua expresso aritmtica conter mais de um operador a prioridade *,/ primeiro, ento +,segundo (deixe para direita se existir operadores com a mesma prioridade). No exemplo seguinte a multiplicao (250*12) avaliada primeiro; ento o valor do salrio adicionado no resultado da multiplicao (3000). Somente para linha do Smith: 800+3000=3800 Consulting Tecnologia & Sistemas Ltda www.consulting.com.br

12

select ename, sal + 250 * 12 from emp; ENAME ---------SMITH ALLEN WARD JONES SAL+250*12 ---------3800 4600 4250 5975

Parnteses podem ser usados para especificar a ordem na qual sero executados es operadores, se, por exemplo, a adio e requerida antes da multiplicao. select ename, (sal + 250) * 12 from emp; ENAME ---------SMITH ALLEN WARD JONES (SAL+250)*12 -----------12600 22200 18000 38700

FUNES AGREGADAS A caracterstica marcante das Funes Agregadas que produzem um nico valor a partir de uma coluna inteira de dados. Portanto, enquanto qualquer outro tipo de expresso retorna um valor para cada linha, as funes agregadas retornam um valor que representa um agregado dos valores referentes s vrias linhas. O atributo de uma funo agregada normalmente um nome de coluna ou uma expresso que tenha um nome de coluna como componente por exemplo, salrio * 1.25 . As funes MAX, MIN e COUNT aceitam caracteres e nmeros, entretanto as funes AVG e SUM devem possuir como atributo coluna que seja do tipo numrico, pois elas operam aritmeticamente. Podemos utilizar as palavras-chave DISTINCT e ALL em funes agregadas tendo o seguinte efeito: -A palavra-chave ALL faz com que todos os valores, inclusive os repetidos, sejam aproveitados. -A palavra-chave DISTINCT faz com que os valore repetidos sejam ignorados. Em todas as funes o ALL o deflua.

Exemplos: 1)SELECT AVG(SALARIO) FROM EMPREGADO; 1)SELECT SUM(SALARIO) FROM EMPREGADO;

Consulting Tecnologia & Sistemas Ltda www.consulting.com.br

131)SELECT MAX(SALARIO) FROM EMPREGADO; 1)SELECT MAX(NOME) FROM EMPREGADO; 1)SELECT MIN(SALARIO) FROM EMPREGADO; 1)SELECT COUNT(NOME) FROM EMPREGADO; 1)SELECT COUNT(DISTINCT NOME) FROM EMPREGADO;

ORDENANDO A TABELA RESULTADO A clusula ORDER BY nos permite ordenar as linhas da tabela-resultado alfabtica e numericamente, em ordem crescente ou decrescente. O default a ordem crescente. Para fazer a classificao com base em uma expresso ou funo, temos que represent-la com um nmero que identifique a sua posio na clusula SELECT. Isto tambm verdade para a clusula GROUP BY. Exemplos: 1)SELECT NOME, TEL FROM FUNC ORDER BY NOME DESC; 1)SELECT COD_FUNC, NOME, BAIRRO FROM FUNC ORDER BY NOME, BAIRRO; 1)SELECT COD_FUNC, NOME, BAIRRO FROM FUNC ORDER BY BAIRRO, NOME; 1)SELECT NOME, SALARIO FROM FUNC ORDER BY 2 DESC; Obs: Normalmente os valores nulos de uma coluna so exibidos em primeiro lugar quando a mesma classificada.

REVERTENDO A ORDEM DEFAULT Usa-se o comando DESC aps o nome da coluna especificada na clusula order by. Exemplo:

Consulting Tecnologia & Sistemas Ltda www.consulting.com.br

14SELECT DEPTNO, JOB, ENAME FROM EMP ORDER BY HIREDATE DESC;

ORDENANDO POR VRIAS COLUNAS possvel ordenar por mais de uma coluna. De fato, o limite o nmero de colunas na tabela. Para ordenar por duas colunas e mostrar a ordem reversa dos salrios, entre: SELECT DEPTNO, JOB, ENAME FROM EMP ORDER BY DEPTNO, SAL DESC;

A CLUSULA WHERE Corresponde ao operador de restrio da lgebra relacional. Ela colocada aps a clusula FROM. Exemplo da sintaxe: SELECT columns FROM table WHERE condio de pesquisa A clusula WHERE pode comparar valores em colunas, valores literais, expresses aritmticas ou funes. Sendo assim, a clusula WHERE espera por 3 elementos, so eles: 1) Um nome de coluna; 2) Um operador de comparao; 3) Um nome de coluna, constante ou lista de valores. Os operadores de comparao so usados na clusula WHERE e podem ser divididos entre duas categorias, que so: LGICOS e SQL. Apresentamos abaixo os Operadores Lgicos, que testaro as seguintes condies: Operador = > >= < 20;

COMPARANDO COLUNAS NA MESMA LINHA Voc pode comparar uma coluna a outra na mesma linha, assim como a uma constante. Como exemplo, suponha que voc queira obter todos aqueles empregados cuja comisso maior que os seus salrios: SELECT ENAME, SAL, COMM FROM EMP WHERE COMM>SAL; Abaixo apresentaremos os Operadores SQL, os quais operam com todos os tipos de dados: Operadores 1) BETWEEN ... AND ... Significado entre dois valores (inclusive);

2) IN(LIST) verifica um argumento de pesquisa, numa lista de valores que satisfaam a esta determinada condio; 3) LIKE 4) IS NULL 1) O OPERADOR BETWEEN Testa condio de valores mediante um limite mnimo e mximo inclusive. Como exemplo, suponha que voc queira obter todos os empregados, cujo salrio est entre 1000 e 2000: SELECT ENAME, SAL FROM EMP WHERE SAL BETWEEN 1000 AND 2000; 2) O OPERADOR IN Testa valores numa lista especfica. facilita a pesquisa dada uma parte da string; um valor nulo.

Consulting Tecnologia & Sistemas Ltda www.consulting.com.br

16Como exemplo, para obter todos os empregados subordinados a um dos trs gerentes destacados pelos nmeros abaixo, entre: SELECT EMPNO, ENAME, SAL, MGR FROM EMP WHERE MGR IN (7902, 7566, 7788); Nota: obrigatrio o uso de () plicas para caracteres e datas especificados na lista. 3) O OPERADOR LIKE Algumas vezes, pode ser que voc no saiba exatamente o valor pesquisar. Usando o operador LIKE ser possvel ento, selecionar linhas mediante a uma parte da string que sirva para o argumento desejado. Temos o smbolo abaixo com sua designao: Smbolo % Significado Representa qualquer sequncia de Zero ou mais caracteres.

Como exemplo, para listar todos os empregados cujo nome se inicia com um S, entre: SELECT ENAME FROM EMP WHERE ENAME LIKE S%; 4) O OPERADOR NULL o operador especfico para testar valores que so nulos. Como exemplo, para obter todos os empregados que no tenham gerentes, deve ser feito o teste para um valor nulo. SELECT ENAME, MGR FROM EMP WHERE MGR IS NULL;

EXPRESSES DE NEGAO Os seguintes operadores so utilizados como teste de negao: Operador != NOT COLNAME = Descrio no igual a (VAX, UNIX, PC) no igual a no igual a

Consulting Tecnologia & Sistemas Ltda www.consulting.com.br

17NOT COLNAME > no maior que

Abrangendo-se tambm os operadores SQL: Operador NOT BETWEEN NOT IN NOT LIKE IS NOT NULL Descrio no se encontra entre dois valores dados no se encontra numa lista de valores de dados no como a string no um valor nulo

Como exemplo1, para encontrar os empregados cujo Salrio no est entre um determinado intervalo, entre: SELECT ENAME, SAL FROM EMP WHERE SAL NOT BETWEEN 1000 AND 2000; Como exemplo2, para encontrar aqueles empregados cujo nome da funo (Job) no comece com a letra M, entre: SELECT ENAME, JOB FROM EMP WHERE JOB NOT LIKE M%; Como exemplo3, para encontrar todos os empregados que tenham um Gerente (MGR), entre: SELECT ENAME, MGR FROM EMP WHERE MGR IS NOT NULL;

CONSULTANDO DADOS COM MLTIPLAS CONDIES Os operadores AND e OR podem ser usados para estabelecer expresses lgicas compostas. O operador AND em determinada expresso, usado para que se atinja um resultado em que ambas as condies sejem verdadeiras; enquanto o operador OR espera que uma das condies sejem verdadeiras para que o resultado tambm seje verdadeiro. Como exemplo1, para encontrar todos os (CLERKS) que ganhem entre 1000 e 2000, entre: SELECT EMPNO, ENAME, JOB, SAL FROM EMP WHERE SAL BETWEEN 1000 AND 2000 AND JOB = CLERK;

Consulting Tecnologia & Sistemas Ltda www.consulting.com.br

18Como exemplo2, para encontrar todos os empregados que sejam CLERK e/ou todos os empregados que ganhem entre 1000 e 2000, entre: SELECT EMPNO, ENAME, JOB, SAL FROM EMP WHERE SAL BETWEEN 1000 AND 2000 OR JOB = CLERK; Nota: Voc pode combinar AND e OR na mesma expresso lgica. Quando AND e OR aparecerem na mesma clusula WHERE, todos os ANDs sero executados primeiro e os ORs em seguida sucessivamente; pois o AND tem maior precedncia sobre o OR. Como exemplo3, o comando abaixo retornar todos os gerentes com salrio > 1.500,00 ou todos que sejem vendedores. SELECT EMPNO, ENAME, JOB, SAL, DEPTNO FROM EMP WHERE SAL > 1.500,00 AND JOB = MANAGER OR JOB = SALESMAN; Os parntesis especificam a sequncia em que os operadores sero executados. Como exemplo, selecionar todos os gerentes e vendedores com salrio maior que 1.500,00, entre: SELECT EMPNO, ENAME, JOB, SAL, DEPTNO FROM EMP WHERE SAL > 1,500.00 AND (JOB = `MANAGER` OR JOB = `SALESMAN`);

PRECEDNCIA DE OPERADORES Todos os operadores obedecem a uma forma hierrquica de precedncia. Numa expresso, as operaes so executadas em ordem de suas precedncias, sempre da de maior precedncia para a de menor. E quando de mesma precedncia, sero executadas da esquerda para a direita. Esto assim na ordem abaixo: 1 Todos operadores de comparao e os operadores SQL tm igual precedncia (=, !=, , =, BETWEEN ... AND, IN, LIKE, IS NULL; 2 NOT ( reverte resultados de expresses lgicas); 3 AND; 4 OR.

SUBQUERYS Consulting Tecnologia & Sistemas Ltda www.consulting.com.br

19

Uma subquery um comando select dentro de um outro comando select onde retorna uma ou mais linhas a fim de satisfazer uma clausula WHERE. No exemplo abaixo temos um select em s_emp onde procuramos trazer o last_name e o title, onde o title pesquisado seja o mesmo do " Smith", para isso realizado uma subquery que nada mais que um select, que neste caso retorna um valor somente para a comparao na where. SQL> select last_name, title 2 from s_emp 3 where title = 4 (select title 5 from s_emp 6 where last_name = 'Smith'); LAST_NAME TITLE ------------------------- ------------------------Maduro Stock Clerk Smith Stock Clerk Nozaki Stock Clerk Patel Stock Clerk Newman Stock Clerk Markarian Stock Clerk Chang Stock Clerk Patel Stock Clerk Dancs Stock Clerk Schwartz Stock Clerk 10 rows selected.

Outro exemplo de subquery, que neste caso est comparando os valores da coluna SALARY com a mdia dos salrios da tabela s_emp. A funo AVG est trazendo a mdia dos salrios. SQL> select last_name, title, salary 2 from s_emp 3 where salary< 4 (select avg(salary) 5 from s_emp); LAST_NAME TITLE SALARY ------------------------- ------------------------- --------Urguhart Warehouse Manager 1200 Menchu Warehouse Manager 1250 Biri Warehouse Manager 1100 Smith Stock Clerk 940 Nozaki Stock Clerk 1200 Patel Stock Clerk 795 Newman Stock Clerk 750 Markarian Stock Clerk 850 Chang Stock Clerk 800 Patel Stock Clerk 795 Dancs Stock Clerk 860 Consulting Tecnologia & Sistemas Ltda www.consulting.com.br

20Schwartz 12 rows selected. Nos exemplos anteriores vemos que retornavam s um nico valor para comparao na clausula where, neste caso agora h o retorno de mais de um valor para a comparao na clausula where, mas para que ocorra a comparao com mais de um valor temos que usar o IN em vez do "=" no exemplo abaixo ocorre um erro: SQL> select last_name, title 2 from s_emp 3 where dept_id = 4 (select id from s_dept 5 where name = 'finance or region_id = 2); select last_name, title * ERROR at line 1: ORA-01756: quoted string not properly terminated Agora usando o IN na clausula where poder o dept_id ser comparado com as duas condies, o select trar os registros que na tabela s_dept que tenham o nome igual a 'Finace' ou que a region_id seja igual a 2. SQL> select last_name,first_name,title 2 from s_emp 3 where dept_id in 4 (select id 5 from s_dept 6 where name = 'Finance' or region_id =2); LAST_NAME FIRST_NAME TITLE ------------------------- ------------------------- ------------------------Quick-To-See Mark VP, Finance Menchu Roberta Warehouse Manager Giljum Henry Sales Representative Nozaki Akira Stock Clerk Patel Vikram Stock Clerk O uso do having em subquery Neste exemplo estamos querendo selecionar o dept_id e a mdia dos salrios de s_emp, grupados pelo dept_id, com a condio de que a mdia dos salrios de s_emp seja maior que a mdia dos salrios do dept 32 para isso usamos o HAVING. Vamos ao Exemplo: SQL> select dept_id,avg(salary) 2 from s_emp 3 group by dept_id 4 having avg(salary)> 5 (select avg(salary) 6 from s_emp 7 where dept_id = 32); Consulting Tecnologia & Sistemas Ltda www.consulting.com.br Stock Clerk 1100

21

DEPT_ID AVG(SALARY) --------- ----------33 1515 50 2025 Agora dentro do group by estamos usando o having e dentro da subquery selecionando o menor valor da mdia da tabela s_emp grupado por title SQL> 1 select title,avg(salary) 2 from s_emp 3 group by title 4 having avg(salary) = 5 (select min(avg(salary)) 6 from s_emp 7* group by title) TITLE AVG(SALARY) ------------------------- ----------Stock Clerk 949 SQL> select min(avg(salary)) 2 from s_emp 3 group by title; MIN(AVG(SALARY)) ---------------949 EDITANDO COMANDOS SQL Podemos editar comandos que foram digitados. Comando L[IST] A[PPEND] texto C[HANGE]/texto_anterior/texto_novo DEL I[NPUT] n n texto Descrio Lista o ltimo comando SQL digitado. Acrescenta texto no fim da linha corrente Troca o texto_anterior para texto_novo Apaga a linha corrente Acrescenta uma ou mais linhas aps a linha corrente; para sair no modo Input pressione Enter Faz com que a linha n passe a ser a linha corrente. Troca o texto da linha pelo texto.

Executando Pesquisas Padres com Variveis Substituveis Variveis Substituveis so usadas em declaraes SQL e permitem valores serem identificados na execuo. Explicao dessa Unidade nica Varivel Substituvel

Consulting Tecnologia & Sistemas Ltda www.consulting.com.br

22Voc pode usar variveis substituveis no arquivo comando ou nas declaraes SELECT para representar valores que sejam entrados na hora da execuo. Uma varivel pode ser uma idia de como uma valor pode ser armazenado temporariamente. Uma varivel representado por um nico i comercial(&), e o valor atribudo nela. A seguinte declarao apresenta ao usurio um nmero de departamento na execuo: SELECT FROM WHERE EMPNO, ENAME, SAL EMP DEPTNO = &DEPARTMENT_NUMBER;

Enter value for department_number : 10 EMPNO ENAME -------------7782 CLARK 7839 KING 7934 MILLER SAL ---------2,450.00 5,000.00 1,300.00

O exemplo acima usa a condio WHERE DEPTNO = 10. Com o nico "e" comercial o usurio solicitado toda vez que o comando executado, porque a varivel no definida e consequentemente o valor digitado no salvo. Um valor alfanumrico ou data precisa ser includo entre aspas simples na entrada. Para evitar a entrada das aspas simples na execuo, declara-se a varivel entre aspas simples. Na declarao seguinte, as variveis esto includas entre aspas simples, s que as aspas simples no so requeridas na execuo: SELECT FROM WHERE ENAME, DEPTNO, SAL*12 EMP JOB = '&JOB_TITLE';

Enter value for job_title: MANGER ENAME DEPTNO SAL*12 ---------- ------ ---------JONES 20 35700 BLAKE 30 34200 CLARK 10 29400 O tamanho da varivel indefinido, o valor ser entrado todo vez que for executado a declarao possvel entrar com um nome de coluna de um tabela na execuo. No seguinte exemplo voc entrar com um expresso aritmtica. SELECT DEPTNO, &ARITHMETIC_EXPRESSION FROM EMP Enter value for arithmetic_expression: sal/12 DEPTNO SAL/12 ------ ------20 66.6667 Consulting Tecnologia & Sistemas Ltda www.consulting.com.br

2330 30 20 30 30 10 20 10 30 20 30 20 10 133.333 104.167 247.917 104.167 237.5 204.167 250 416.667 125 91.6667 79.1667 250 108.333

Duplo & para Variveis substituveis Se uma varivel prefixada com um duplo "e" comercial(&&), SQL*Plus preenche o valor da varivel com o primeiro valor fornecido na execuo da declarao SQL. SELECT ENAME, DEPTNO, JOB FROM EMP WHERE DEPTNO = &&DEPTNO_PLEASE; Enter value for deptno_please: 10 ENAME -------------CLARK KING MILLER DEPTNO -----------10 10 10 JOB ------------MANAGER PRESIDENT CLERK

perguntado uma vez e no mais. Voc pode usar o comando DEFINE para determinar se uma varivel j est definida. Se a varivel definida, ela mostra o valor atribudo. SQL>DEFINE DEFINE DEPTNO_PLEASE = "10" (CHAR) O comando DEFINE ento usado para criar uma varivel para o usurio. O Comando DEFINE Um valor pode ser atribudo para uma varivel usando o comando DEF[INE] do SQL*Plus. O valor atribudo pode ser referenciado na declarao SELECT ou comando de arquivo pelo nome de varivel predefinido de um (&). Despreenchida usando o comando UNDEF[INE]. No exemplo seguinte, uma varivel tem seu contedo definido como uma expresso aritmtica que calcula a remunerao. Na subsequente declarao, a varivel REM referenciada para um nmero de vezes. A varivel ento despreenchida usando UNDEF(INE). DEFINE REM = "SAL*12+NVL(COMM,0)" SELECT ENAME, JOB, &REM Consulting Tecnologia & Sistemas Ltda www.consulting.com.br

24FROM EMP ORDER BY &REM; UNDEFINE REM ENAME ---------SMITH JAMES ADAMS WARD MILLER MARTIN TURNER ALLEN CLARK BLAKE JONES SCOTT FORD KING JOB ---------CLERK CLERK CLERK SALESMAN CLERK SALESMAN SALESMAN SALESMAN MANAGER MANAGER MANAGER ANALYST ANALYST PRESIDENT SAL*12+NVL(COMM,0) -----------------9600 11400 13200 15500 15600 16400 18000 19500 29400 34200 35700 36000 36000 60000

As Aspas duplas em volta da expresso so opcionais a menos que a expresso tenha espaos. Iniciando um Arquivo comando Contendo Variveis Substituveis. Suponhamos que voc queira uma srie de relatrios para listar os empregados com vrios cargos por exemplo; um para Vendedores, um para escriturrio, um para gerentes, etc. Voc j sabe como usar variveis substituveis para obter esses diversos relatrios de uma nica declarao SELECT. Porm, existe uma alternativa tcnica que voc pode usar , se voc quiser armazenar a declarao SELECT em um arquivo e ento usar o comando START para execut-lo. Essa tcnica requer o uso de algumas variveis substituveis especiais. Existem nove dessas variveis e seus nomes vo de um nove. Para e usar essas variveis no "e" comercial & coloca-se um numeral (1-9) no comando SQL. Essas variveis podem ser usados vrios nmeros ao mesmo tempo e em vrias ordens. Cada vez que o comando executado, cada &1 no comando alterado pelo primeiro parmetro depois de START arquivo, cada &2 substitudo pelo segundo parmetro, e assim por diante. Para criar um arquivo comando com um parmetro especificando o cargo para ser mostrado, faa: SELECT EMPNO, ENAME, SAL FROM EMP WHERE JOB = '&1'; SQL> SAVE JOB1 SQL retornar a mensagem Created File Job1

Consulting Tecnologia & Sistemas Ltda www.consulting.com.br

25Agora execute o comando com o parmetro CLERK. SQL*Plus substituir a varivel com o parmetro. SQL> START JOB1 CLERK EMPNO ENAME SAL ----- ----- ----7369 SMITH 800 7876 ADAMS 1100 7900 JAMES 950 Note que voc no pode usar essas variveis quando executar um comando com RUN. Voc somente armazena o comando em um arquivo e executa ele com o comando START.

O comando ACCEPT O comando ACCEPT permite criar um varivel com valor, a qual entrada na execuo, armazenando nela. O ACCEPT geralmente usado num arquivo comando. Esta varivel ento pode ser referenciada na declarao do SQL. Existem benefcios em usar o ACCEPT para definir Variveis Substituveis. Dados tipo Data podem ser checados. A mensagem de entrada de dados pode ser mais explicativa Valores da resposta pode ser escondido A sintaxe do comando : ACC(EPT) (HIDE) variable (NUMERICO/ALFANUMERICO) (PROMPT/NOPROMPT 'texto')

Sintaxe NUMBER/CHAR

Descrio determina o tipo de varivel. Se o valor entrado for invlido uma mensagem ser mostrada. mostra o texto se for especificado faz o ACCEPT omitir uma linha aguardando a entrada esconde entrada para o usurio. No caso de senha

PROMPT texto NOPROMPT HIDE

Exemplos SQL> ACCEPT SALARY NUMBER PROMPT 'Salary figure : ' Salary figure : 30000 SQL> ACCEPT PASSWORD CHAR PROMPT 'Password : ' HIDE Consulting Tecnologia & Sistemas Ltda www.consulting.com.br

26

Password : SQL> ACCEPT COMM NUMBER NOPROMPT 500 SQL> DEFINE DEFINE SALARY = 30000 (NUMBER) DEFINE PASSWORD = "FREEBIES" (CHAR) DEFINE COMM = 500 (NUMER)

GUARDANDO COMANDOS EM ARQUIVOS Podemos arquivar os comandos SQL que digitamos interativamente, em arquivos para uso futuro. Basta utilizarmos um editor de textos qualquer. Devemos no entanto, salvar tal arquivo com uma extenso .SQL. Para executar o script criado digitar @ e o nome do arquivo, no prompt do SQL*Plus. Exemplo: SQL>@lista_deptos.sql EXERCCIO 1)Logar-se no SQL*Plus 2)Criar a tabela abaixo: TABELA ALIMENTOS NOME DO CAMPO TIPO TAMANHO COD_ALIMENTO NUMRICO 04 NOME_ALIMENTO ALFANUMRICO 30 PREO NUMRICO 6,2 PROTENAS NUMRICO 6,2 1)Inserir 3 (trs) registros quaisquer na tabela Alimentos 2)Ver a estrutura da tabela 3)Exibir o alimento mais caro 4)Exibir o somatrio dos preos dos alimentos (inseridos na questo 3).

OBRIGATRIO S S N N

MANIPULANDO DADOS Conforme j vimos anteriormente os comando de manipulao dos dados do Oracle so: INSERT Adiciona novas linhas (registros) tabela.

Consulting Tecnologia & Sistemas Ltda www.consulting.com.br

27DELETE UPDATE COMMIT ROLLBACK Remove/Deleta linhas da tabela. Altera/Modifica linhas. Ratifica transaes efetuadas. Desfaz as transaes (ainda no ratificadas por um COMMIT).

Inserindo Dados Para incluirmos dados em uma tabela utilizamos o comando INSERT. Sua sintaxe : INSERT INTO [USUARIO.]TABELA [ (COLUNA1 [, COLUNAN ] ...) ] {VALUES (VALOR [, VALOR] ...) | QUERY } Exemplos: 1)INSERT INTO CURSA VALUES (TEC001,APD1,NULL,NULL,NULL); 1)INSERT INTO CURSA VALUES (TEC001,MAT1,80,NULL,NULL); Obs.: a)No necessrio especificar no comando INSERT os nomes das colunas caso voc queira incluir a linha inteira, ou seja, todas as colunas (exemplo 1). b)Todo campo do tipo NOT NULL deve sempre ser preenchido. c)Campo do tipo no numrico devem ser delimitados com plics. Se voc precisar incluir um apstrofe no seu string de caracteres use dois apstrofes seguidos, por exemplo: JOHNS para inserir JOHNS. d)Podemos usar a expresso NEXTVAL para inserirmos o prximo valor para, por exemplo, uma chave primria. Ex.: INSERT INTO T_DEPARTAMENTO(COD_DEPTO, NOME_DEPTO) VALUES (T_DEPARTAMENTO_COD_DEPTO.NEXTVAL,FINANCAS); Para tal, o campo T_DEPARTAMENTO_COD_DEPTO deve Ter sido criado como um objeto do tipo SEQUENCE.

INSERINDO COM UMA QUERY O comando INSERT pode utilizar uma query para incluir dados em uma tabela. Exemplos: 1)INSERT INTO FUNC_SUL SELECT * FROM FUNC WHERE BAIRRO IN (COPACABANA,IPANEMA,LEBLON); 1)INSERT INTO FUNC_CHEFE SELECT * FROM FUNC WHERE SALARIO > 600; Obs.:

Consulting Tecnologia & Sistemas Ltda www.consulting.com.br

28a)Para utilizar as queries acima, as tabelas FUNC_SUL e FUNC_CHEFE devem existir e possuir a mesma estrutura da tabela da query. b)Campos que so NOT NULL na tabela original tambm devero ser preenchido na tabela onde os dados sero inseridos.

ALTERANDO DADOS O Comando UPDATE atualiza linhas em uma tabela. Sintaxe: UPDATE nome_da_tabela SET coluna = valor [WHERE condio] Exemplos: 1)UPDATE T_SALARIO SET VAL_SALARIO = VAL_SALARIO * 1.5 WHERE VAL_SALARIO < 1000; Atualiza os salrios menores que 1000, em 50%. 1)UPDATE T_FUNCIONARIO SET VAL_SALARIO = 1800, COD_DEPTO = 13 WHERE COD_FUNCIONARIO = 2392; Altera o salrio do funcionrio 2392, para R$ 1.800,00, transferindo-o para o departamento de nmero 13. EXCLUINDO DADOS DA TABELA Utilizamos o comando DELETE para removermos linhas de uma tabela ou viso. Se no houver uma clusula WHERE todas as linhas da tabela ou viso sero eliminadas. Sintaxe: DELETE FROM {tabela | viso } [ WHERE condio ] Exemplos: 1)DELETE FROM FUNC WHERE NASC > 11-JAN-62; 1)DELETE FROM DEPENDENTES WHERE NOME LIKE MANOEL%; CONTROLANDO TRANSAES O controle de transaes lgicas no Oracle feito atravs dos comando COMMIT e ROLLBACK. Consulting Tecnologia & Sistemas Ltda www.consulting.com.br

29

RATIFICANDO TRANSAES O trabalho no Banco de Dados, deve ser processado em agrupamentos lgicos, ou seja, o Banco de Dados deve receber alteraes quaisquer mantendo-se coerente com o que o mesmo representa. Por exemplo, se um aumento na quantidade de fitas alugadas tiver sido entrado, o BD pode no estar coerente at que Estoque_fitas_disponveis tenha sido diminudo deste valor. Com isto definimos ento Transao como um grupo de mudanas que constitui um agrupamento lgico de entradas, isto , a Transao o conjunto de mudanas feitas no BD entre os comandos COMMIT. COMANDO COMMIT Ratifica a transao corrente fazendo todas as trocas no BD (grava fisicamente). Mudanas como INSERT, DELETE, UPDATE devem ser feitas em grupos como transaes lgicas, e depois submetidas, atravs do comando COMMIT, ao Banco de Dados. Isto assegura a gerncia e a integridade dos dados. Sintaxe: COMMIT Aps uma falha do sistema, somente as mudanas com COMMIT sero salvas. Como os comandos INSERT, UPDATE e DELETE podem fazer com que muitas linhas diferentes sejam alteradas, deve-se Ter o cuidado de no se fazer muitas mudanas antes de um COMMIT. Pode ocorrer tambm que, aps muitas mudanas (ainda no submetidas), acontea uma falha no sistema, necessitando que tais mudanas sejam feitas novamente. Obs.: a)Existe tambm a opo AUTOCOMMIT que faz com que cada mudana seja submetida aps a entrada. S deve ser usada quando as mudanas que sero feitas no esto logicamente relacionadas. b)Comandos que causam um COMMIT automtico: ALTER, AUDIT, CREATE, DISCONNECT, DROP, EXIT, GRANT, NOAUDIT, QUIT, REVOKE. Se voc digitou outros comandos e ainda no os submeteu com um COMMIT, e entrar com um dos comandos acima, ento todo o trabalho anterior ser submetido. COMANDO ROLLBACK O comando ROLLBACK cancela mudanas completadas, mas no submetidas ao BD, deixando assim o BD como se tais mudanas nunca tivessem sido feitas. Sintaxe: ROLLBACK O ROLLBACK executado quando ocorre uma falha no sistema (falta de energia, por exemplo). COMMIT INSERT DELETE Consulting Tecnologia & Sistemas Ltda www.consulting.com.br

30INSERT INSERT ROLLBACK UPDATE INSERT COMMIT COMANDO SAVEPOINT Dentro de uma transao extensa, podemos declarar pontos de salvamento (SAVEPOINTs) intermedirios dividindo o trabalho na Transao: INSERT... DELETE... UPDATE... SAVEPOINT PRIMEIRO INSERT... UPDATE... DELETE... SAVEPOINT SEGUNDO INSERT... UPDATE... DELETE... . . . Atravs dos SAVEPOINTs que declaramos, podemos desfazer partes de uma transao, deixando outras partes intactas. Exemplo.: ROLLBACK TO SAVEPOINT SEGUNDO Esta instruo anula os efeitos de todas as instrues posteriores ao SAVEPOINT SEGUNDO. Sua transao libera tambm quaisquer bloqueios que as instrues desfeitas adquiriram, para que outras transaes possam modificar os dados. Depois de um cancelamento at um SAVEPOINT, a transao ainda permanece ativa. Exerccio Criar uma tabela de equipamentos com 3 campos: COD_EQUIPAMENTO, NOME_EQUIPAMENTO, MARCA. Ex.: a)INSERT INTO T_EQUIPAMENTO VALUES (080,TELEVISAO CORES,SHARP); a)SAVEPOINT UM; b)INSERT INTO T_EQUIPAMENTO VALUES (081,MINI SYSTEM,AIWA); Consulting Tecnologia & Sistemas Ltda www.consulting.com.br

31a)SAVEPOINT DOIS; b)INSERT INTO T_EQUIPAMENTO VALUES (082,WALKMAN,SONY); a)SELECT * FROM T_EQUIPAMENTO; b)ROLLBACK TO SAVEPOINT UM; c)COMMIT; d)SELECT * FROM T_EQUIPAMENTO;

CRIANDO TABELAS E VISES (VIEWs) Conforme j vimos criamos tabelas em SQL com o comando CREATE TABLE. Ex.: CREATE TABLE T_ACESSORIO-ROUPA (COD_ACESSORIO NUMBER(03), NOME_ACESSORIO VARCHAR2(30), TAMANHO_ACESSORIO VARCHAR2(10), DATA_COMPRA DATE DEFAULT SYSDATE CONSTRAINT PK_T_ACESSORIO_ROUPA PRIMARY KEY (COD_ACESSORIO)); CRIANDO SEQUENCES DO ORACLE Este objeto utilizado dentro do banco de dados para fazer uma especie de "auto-incremento", utilizando nmeros sequenciais positivos ou negativos para uma coluna especifca. Utilizaremos este objeto quando queremos uma coluna que organize os registro do banco, um exemplo, seria a utilizao do Sequence para criao de colunas de Cdigo ou Matrcula. Abaixo demonstrarei um exemplo de criao do Sequence determinando suas opes de uso: SQL> CREATE SEQUENCE CONSULTING 2 START WITH 1 3 INCREMENT BY 1 4 MAXVALUE 999 5 CYCLE 6 CACHE 10 ; Na 1 Linha estamos dizendo para o Oracle criar uma sequencia com o nome CONSULTING. Na 2 Linha ser especificado o primeiro nmero da sequencia, no exemplo est 1. A 3 Linha vamos determinar o numero de incremento, no caso 1 em 1. Na 4 Linha ser determinada o nmero mximo que a sequencia atingir, exemplo 999 nmeros. A 5 Linha indica que a gerao dos nmeros ser aps ter atingido o nmero mximo ou o nmero minimo para as sequencias decrescentes.

Consulting Tecnologia & Sistemas Ltda www.consulting.com.br

32E a 6 Linha ir especificar para o banco uma quantidade de nmeros que ser guardado na memoria para posteriormente fazer uma consulta rpida. Bom, agora deu para entender a criao de um objeto sequence dentro do banco, precisamos saber agora como utiliz-la, e para isso basta voc incluir o sequence dentro do seu comando Insert, veja o exemplo : SQL> INSERT INTO TABELA (CODIGO, NOME, EMAIL, SITE) 2 VALUES ( CONSULTING.NextVal, 'Edson Junior', '[email protected]','www.consulting.com.br'); A linha acima foi includa com sucesso, mas perceba que apareceu uma palavra-chave em NEGRITO aps digitar o nome da sequence, essa palavra-chave para obter o prximo nmero sequencial (NextVal), poderiamos utilizar outra palavra-chave a CurrVal que nos daria o valor atual da sequencia. Depois de termos criado a sequence para a tabela, falarei sobre alguns pontos bons e ruins na sua utilizao no dia-dia. Pontos Bons - Ajuda na organizao dos registros. - Podemos utilizar uma unica sequence para vrias tabelas do banco de dados, economizando tempo e mo-de-obra. Pontos Ruins - Caso tenha uma perca de memoria ou uma falha do sistema, o objeto perder toda numerao sequencial, ficando totalmente inutilizavel. - Caso voc execute o comando DELETE na sua tabela, o nmero da sequencia que voc deleto ser pedido, ento ficar um "burraco" na sua coluna, pois a sequence no um auto-incremento que deixar sempre o registro com numerao correta. Depois de citar o empate tecnico entre os pontos bons e ruins, vamos pensar que voc queira ter um controle sobre as Sequences que voc criou no banco. Como fazer isso ? Seus problemas acabaram, pois o maravilhoso Oracle sabe como fazer isso bem facilmente, cada usurio tem seu schema onde guardada todas as sequences, type, type_methods e etc.. e um simples comando voc consegue ver as sequences que esto no seu Shema. SQL > DESC SYS.USER_SEQUENCES Ele retornar a descrio resumida da User_Sequence do SChema para voc. VISES OU TABELAS VIRTUAIS (VIEWs) Uma viso uma tabela resultante de uma query qual damos um nome. Depois que voc tiver criado uma viso, isto , dado um nome tabela resultado de uma determinada query, poder pesquisar os seus dados exatamente como faria com uma tabela qualquer.

Consulting Tecnologia & Sistemas Ltda www.consulting.com.br

33

As vises tm vrias funes, dentre elas Independncia de dados, Segurana de acesso e facilidade de acesso. Com as vises podemos restringir o acesso aos dados especificando que colunas e/ou linhas um determinado usurio, aplicao ou grupo pode ver, assim como o que eles podem fazer (Incluir, Modificar, Excluir). Muitas vezes o acesso aos dados exigem queries complexas. Um usurio pode construir uma viso que contenha uma certa complexidade e disponibiliz-la para usurios finais e programadores, que faro queries mais simples sobre esta Viso. Voc estar ento, retirando a complexidade da navegao de uma aplicao ou de um usurio no acesso aos dados. Sintaxe: CREATE VIEW nome_viso (coluna1, coluna2,... colunaN) AS SELECT (clusula Select); Exemplos: Vamos supor que muitos usurios e aplicaes necessitem do nome do funcionrio, nome dos seus dependentes e o endereo dos seus dependentes. O DBA poderia criar uma Viso que fornecesse esse conjunto de informaes da seguinte forma: CRATE VIEW VISAO_01 (NOME_FUNC, NOME_DEP, ENDERECO) AS SELECT T1.NOME, T2.NOME, T1.END FROM FUNC T1, DEPENDENTES T2 WHERE T1.COD_FUNC = T2.COD_FUNC; Obs.: Aps a execuo do CREATE VIEW podemos acessar os dados dessa VISO da mesma forma que uma tabela. Por exemplo, poderamos digitar a seguinte query: SELECT * FROM VISAO_01 ORDER BY 2,1; Existem algumas restries no uso de Views, que variam de implementao para implementao. Vejamos as principais, que so comuns a quase todos os banco de dados relacionais: 1)No podemos colocar a clusula UNION nem ORDER BY em um CREATE VIEW; 2)No podemos atualizar uma coluna que seja derivada de uma funo ou de uma expresso; 3):No podemos atualizar uma viso que seja composta por mais de uma tabela (JOIN ou Juno); 4)No podemos atualizar uma viso que contenha um GROUP BY; 5)No podemos inserir dados em uma viso se ela for composta por mais de uma tabela ou se no contiver todas as coluna definidas como NOT NULL na tabela bsica. VISES MATERIALIZADAS O que essas Views Materializadas (ou Snapshots) fazem de interessante?

Consulting Tecnologia & Sistemas Ltda www.consulting.com.br

34Utilizamos elas para fazermos clculos, armazenamentos de dados e dar agilidade na troca de informaes entre um banco de dados ou entre tabelas. Este recurso muito utilizado em ambientes de Data Warehouse, que trabalha com uma enorme quantidade de informaes. Pois com elas conseguimos melhorar a performance do sistema e trazer diversos benefcios ao Oracle. As Views Materializadas so utilizadas para fazer atualizaes, a prpria Oracle garante que as atualizaes so feitas com sucesso numa tabela destinatria aps terem sido efetivadas nas tabelas originais. Isso nos d mais tranqilidade na administrao e no desenvolvimento. Agora vamos ver um exemplo de como se faz uma Views Materializadas, olhe abaixo: SQL > CREATE MATERIALIZED VIEW CONSULTING 2 BUILD IMMEDIATE 3 REFRESH FAST 4 ENABLE QUERY REWRITE 5 AS (SELECT QUALQUER - Prem com Restries.) 6/ Linha 1 - ( CREATE MATERIALIZED VIEW CONSULTING) Aqui estamos comeando a criar nossa View Materializada, veja que depois da palavra VIEW devemos definir um nome para ela, no nosso exemplo utilizei meu nickname, CONSULTING. Para as verses anteriores ao 9i, crivamos sendo Snapshots, exemplo, CREATE SNAPSHOT NOME, ento mudou em relao a verso 9i. OBS: a verso 10g mantm o padro da verso 9i. Linha 2 - ( BUILD IMMEDIATE ) Nesse ponto estamos dizendo que a View Materializada dever utilizar os dados imediatamente na query rewrite (Seu SELECT), desde modo os dados sero processados com mais agilidade. Existe tambm outro mtodo, chamado build dedferred que significa que a view no ter nenhum tipo de dados a ser utilizada automaticamente, esse modo seria um processamento manual das informaes, que ser depois atualizado pelo Refresh, resumindo, que com essa opo o comando SELECT no ser executado imediatamente. Linha 3 - ( REFRESH FAST ) Esse mtodo para dizer que as modificaes sero utilizadas somente pela View Materializada, para utilizar este recurso com segurana, sugiro criar uma View Materializada Log, para ter controle sobre as modificaes que esto sendo feitas, explicarei isso na prxima coluna. Linha 4 - ( ENABLE QUERY REWRITE ) Essa linha de comando o que indica que o SELECT presente dentro da View Materializada ser reescrita e atualizada para os novos valores passados pela VIEW. A query rewrite pode ter trs nveis de integridade que vai desde o modo ENFORCED at o STALE_TOLERATED, que indicar ao banco de dados que tipo de confiana ele poder ter nos dados. Sobre as integridades, falaremos na prxima coluna tambm, pois e um pouco mais delicado. Linha 5 - ( AS SELECT ) Aqui ser colocado seu SELECT, onde poder fazer alguns clculos ou visualizaes de informaes para outras tabelas, como no exemplo de SELECT que irei passar. Consulting Tecnologia & Sistemas Ltda www.consulting.com.br

35

SELECT SUM(mulheres) FROM mundo WHERE nome='Cristiane' Ento o que acontecer? Estou pegando algumas informaes que ser atualizada no banco de dados, esse meu SELECT ele est bem simples, porm os SELECTS que devemos utilizar dentro das Views Materializadas devem seguir um padro delas, como, por exemplo, no utilizar clusulas como UNION, UNION ALL, INTERSECT e MINUS. Se utilizar alguma dessas clusulas a view no ir atualizar os dados, assim como tem que seguir alguns outros critrios. CRIANDO RESTRIES (CONSTRAINTs) Na criao de tabelas podemos definir algumas restries (constraints), visando manter a integridade/consistncia do banco de dados. So elas: CONSTRAINT NOT NULL preenchimento obrigatrio). UNIQUE PRIMARY KEY FOREIGN KEY CHECK OBJETIVO No permitir campos nulos (usada para campos de Especifica que o campo no poder conter valores duplicados. Especifica-se esta Constraint para os atributos identificadores das tabelas (chaves primrias) Para definio de chaves estrangeiras (foreign key), estabelecendo relacionamentos entre tabelas do BD. Valida o preenchimento de uma coluna da tabela.

ADICIONANDO, MODIFICANDO COLUNA DE UMA TABELA Para adicionar ou modificar colunas em uma tabela usamos o comando ALTER TABLE. Adicionar Sintaxe: ALTER TABLE nome_da_tabela ADD (nome_da_coluna tipo [ , nome_da coluna tipo] ... ) Exemplo: ALTER TABLE T_ACESSORIO_ROUPA ADD (PRECO_ACESSORIO NUMBER(6,2)); Modificar Sintaxe: ALTER TABLE nome_da_tabela MODIFY (nome_da_coluna tipo [ , nome_da coluna tipo] ...) Exemplos: 1)ALTER TABLE T_ACESSORIO MODIFY (NOME_ACESSORIO NOT NULL); Consulting Tecnologia & Sistemas Ltda www.consulting.com.br

36

1)2) ALTER TABLE T_ACESSORIO MODIFY (TAMANHO_ACESSORIO VARCHAR2(15)); Podemos tambm adicionar e remover restries (Constraints) das tabelas. Exemplos: a)ALTER TABLE T_EMP ADD CONSTRAINT T_EMP_COD_GERENTE_FK FOREIGN KEY (COD_GERENTE) REFERENCES T_EMP(COD_EMP); a)ALTER TABLE T_EMP DROP CONSTRAINT T_EMP_COD_GERENTE_FK; Obs.: A tabela do dicionrio de dados Oracle, denominada USER_CONSTRAINTS contm as restries (Constraints) do Banco de Dados. Exemplos: 1)DESCRIBE USER_CONSTRAINTS 1)SELECT CONSTRAINT_NAME, CONSTRAINT_TYPE, SEARCH_CONDITION FROM USER_CONSTRAINTS WHERE TABLE_NAME = T_ACESSORIO_ROUPA; REMOVENDO COLUNA DE UMA TABELA Para remover colunas em uma tabela usamos o comando ALTER TABLE DROP Column Sintaxe: ALTER TABLE NOTA DROP COLUMN Nome_da_Coluna

DELETANDO TABELAS OU VISES(VIEWs) Usamos o comando DROP TABLE | VIEW para deletarmos tabelas/vises. Sintaxe: DROP {TABLE | VIEW } nome_da_tabela|viso; Exemplo: DROP TABLE T_ALUNO;

EXERCCIO III

Consulting Tecnologia & Sistemas Ltda www.consulting.com.br

371)Crie a tabela T_ACESSORIO_ROUPA 2)Altere a tabela, incluindo uma coluna mesma 3)Modifique a tabela, alterando a coluna criada acima 4)Crie uma viso da tabela T_ACESSORIO_ROUPA 5)Delete a viso criada acima

CRIANDO NDICES O objetivo da criao de ndices agilizar a recuperao de dados, ou seja, acelerar a procura dos dados na tabela. Quando criamos ndices para uma tabela, especificando uma coluna, tal tabela classificada de tal forma que, sempre que for mencionada uma query, o sistema usar o ndice para Ter acesso direto aos dados desejados, ao invs de vasculhar a coluna toda. Um ndice um objeto do Banco de dados como uma tabela ou viso. Criamos um ndice com a declarao CREATE INDEX, e ele automaticamente atualizado quando a coluna (ou colunas) a ele associada(s) sofre(m) alguma alterao. Quando colocamos num ndice vrias colunas chamamos este de ndice composto ou concatenado. A manipulao de ndices uma tarefa administrativa, cabendo sua execuo ao DBA do sistema, portanto para criar e eliminar ndices no Oracle o usurio deve ser o DBA, ou seja, deve possuir o privilgio DBA. Sintaxe: CREATE [UNIQUE] INDEX ON nome_da_tabela (coluna1 [ ASC | DESC ] [ coluna2 [ ASC | DESC ] ] ... ); Usamos a palavra-chave UNIQUE para criar um ndice para a chave-primria da tabela, pois com UNIQUE valores duplicados na tabela no sero mais aceitos. Exemplos: 1)CREATE UNIQUE INDEX IND_COD_F ON FUNC(COD_FUNC); 1)CREATE INDEX NOM_BAIR ON FUNC (NOME, BAIRRO); Obs.: a)Convm criarmos ndices para colunas que, dentre outras caractersticas: -So usadas com freqncia em clusulas WHERE ou em Junes (JOINs); -Todos os valores da coluna so nicos (UNIQUE); -Contm intervalo grande. a)No convm criarmos ndices: -Se a tabela pequena, -A tabela alterada com freqncia.

Consulting Tecnologia & Sistemas Ltda www.consulting.com.br

38a)A tabela do dicionrio de dados denominada USER_INDEXES possui as informaes sobre os ndices do BD.

ELIMINANDO NDICES Qualquer ndice de uma tabela eliminado automaticamente quando a tabela eliminada. Para eliminarmos somente o ndice usamos o comando DROP. Sintaxe: DROP INDEX NOM_BAIR; A tabela ou viso onde foi criado o ndice no afetada pela sua eliminao.

PRIVILGIOS Nem todos os usurios do Oracle podem acessar todas as tabelas do Banco de Dados. Para conceder ou revogar privilgios de acesso/manipulao aos usurios o DBA utiliza os comando GRANT e REVOKE. Podemos conceder/revogar diversos tipos de privilgios, dependendo do usurio. Se um usurio final ir somente consultar Tabelas, Vises O DBA conceder somente privilgios de consulta (SELECT). Entretanto para um desenvolvedor o DBA dever dar, alm de privilgios de consulta, outros privilgios (por exemplo, privilgios de Criao/Alterao de tabelas, vises, etc.) Um privilgio de sistema um privilgio poderoso que, se concedido ao usurio, dar ao mesmo o direito de executar uma operao em nvel de banco de dados. Cabe portanto ao DBA a tarefa de definir quais usurios do Banco tero tais privilgios (podero ser outros administradores e/ou desenvolvedores de aplicaes). Exemplo: Um usurio com privilgio SELECT ANY TABLE pode consultar qualquer tabela do banco. Um usurio com o privilgio ALTER DATABASE pode alterar a estrutura fsica do banco, incluindo novos arquivos. Um privilgio de objetos do BD administra uma operao do banco de dados sobre um objeto especfico do BD (uma tabela, uma viso, ...). Exemplo: Um usurio com privilgio de SELECT na tabela SALRIOS, pode consultar a mesma. Um outro usurio com privilgio de UPDATE, na tabela SALARIOS, poder alterar a mesma (ao que no poder ser realizada pelo usurio com privilgio de SELECT apenas).

Consulting Tecnologia & Sistemas Ltda www.consulting.com.br

39COMANDO GRANT Concede privilgios aos usurios Oracle cadastrados. Sintaxe: GRANT to { usurio | role | public } [ WITH ADMIN OPTION ]; Exemplos: 1) GRANT CREATE SESSION, CREATE TABLE TO JOAO; 2) GRANT SELECT ANY TABLE TO manoel; 1)GRANT SELECT, INSERT, UPDATE, DELETE ON T_Salario TO joaquim;

COMANDO REVOKE O comando REVOKE retira (revoga) o privilgio concedido atravs do GRANT. Sintaxe: REVOKE {privilgio | role } FROM {usurio | role | PUBLIC }; Exemplos: 1)REVOKE SELECT ANY TABLE FROM manoel; 2)REVOKE UPDATE FROM joaquim;

AGRUPANDO PRIVILGIOS: ROLE Tendo em vista que o Oracle possui uma infinidade de privilgios e que a quantidade e diversidade de perfis de usurios em um banco de dados tambm grande, a administrao dos privilgios de todos eles (usurios) seria um tarefa no mnimo bastante trabalhosa. Visando dirimir este problema existe o objeto Oracle denominado ROLE. Em uma ROLE podemos agrupar diversos privilgios e conceder aos usurios, no mais os privilgios e sim as ROLES. Exemplo: 1)CREATE ROLE admin_salarios; 1)GRANT SELECT, INSERT, UPDATE,DELETE ON T_SALARIOS TO admin_salarios; 1)GRANT SELECT,INSERT, UPDATE, DELETE ON T_COMISSOES TO admin_salarios; Consulting Tecnologia & Sistemas Ltda www.consulting.com.br

401)GRANT admin_salarios to USUARIO_A, USUARIO_B, USUARIO_C, ... No exemplo acima, os usurios A, B e C receberam os privilgios da ROLE admin_salarios (que Seleciona, Insere, Altera e Elimina dados das Tabelas T_SALARIOS e T_COMISSOES). Obs.: O Comando REVOKE (revoga privilgios) tambm utilizado com ROLES. Exemplo: 1)REVOKE UPDATE ON T_COMISSOES FROM admin_salarios; 2)REVOKE USUARIO_B FROM admin_salarios;

ACESSANDO O SISTEMA OPERACIONAL Para utilizar um comando do sistema operacional sem sair do SQL*Plus basta digitar o comando HOST. Exemplo: HOST ou $ Obs.: -Para ir para o sistema operacional sem tirar o SQL*Plus da memria basta digitar o sinal de ! no prompt do SQL*Plus.

FUNES Funes fazem a pesquisa de bloco mais potente, e so usadas para manipular valores. Nessa Unidade falaremos de funes numricas e alfanumricas. Funes de Data, funes de Converso, e funes as quais operam sobre tipos de dados. Introduo a Funes Funes so usadas para manipular dados. Elas aceitam um ou mais argumentos e retorna um valor. Um argumento uma constante, refece-se a varivel ou coluna. O formato para uma funo a seguinte: funo_nome (arumento1,argument2,...)

Consulting Tecnologia & Sistemas Ltda www.consulting.com.br

41Funes podem ser usadas para: Clculos sobre datas modificar valores de itens individuais manipular sada para grupos de linhas alterar formatos de datas para mostr-los Existem diferentes tipos de funes: ALFANUMRICAS NUMRICAS DATA CONVERSO FUNES QUE ACEITAM VRIOS TIPOS DE DADOS GRUPO Algumas funes operam unicamente sobre linhas simples; outras manipulam grupo de linhas. A mais comuns funes usadas esto nesse manual. Funes de Linha nica age sobre cada linha retornada na pesquisa retorna um resultado por linha espera um ou mais argumento do usurio pode ser aninhada podem ser usadas com variveis do usurio, colunas, expresses podem ser usadas por exemplo nas : clausulas SELECT, WHERE, ORDER BY. Explicao da notao Notao Col Value n string Significado qualquer nome de coluna do Banco de Dados qualquer valor literal (alfanumrico/data/numrico) representa um nmero representa a linha de caracter

Consulting Tecnologia & Sistemas Ltda www.consulting.com.br

42

chars date

representa o nmero de caracteres especificados representa uma coluna data ou valor de data

FUNES ALFANUMRICAS E NUMRICAS Funes Alfanumricas Funes Alfanumricas aceitam dados alfanumricos e podem retornar alfanumrico ou valores numricos. A funo seguinte influncia na construo de valores alfanumricos. LOWER LOWER(col/value) fornece valores alfanumricos os quais esto em letra maiscula ou minscula e retornam em letra minscula

Para mostrar o nome dos departamentos em letra minscula e a constante SQL COURSE, faa: SELECT LOWER(DNAME), LOWER('SQL COURSE') FROM DEPT; LOWER(DNSAME) LOWER(SQL COURSE) ------------- ------------------reseatch sql course sales sql course operations sql course accounting sql course UPPER UPPER(col/value)

fornece caracteres alfanumricos, os quais esto em letra maiscula ou minscula e retornar em letra maiscula.

No exemplo seguinte, a funo UPPER fora o usurio entrar em letra maiscula. SELECT ENAME FROM EMP WHERE ENAME = UPPER('&ENAME'); Enter value for ename : smith ENAME ---------SMITH INITCAP INITCAP(col/value)

fora a primeira letra da Palavras ser em maiscula e o resto minscula

INITCAP(DANAME) INITCAO(LOC) --------------- -----------Consulting Tecnologia & Sistemas Ltda www.consulting.com.br

43Accounting New York Research Dallas Sales Chicago Operations Boston SELECT INITCAP(DNAME), INITCAP(LOC) FROM DEPT; LPAD e RPAD As funes LPAD e RPAD enchem valores alfanumricos para tamanhos especificados. LPAD(col/value,n,caracter) preenche a coluna ou valor literal da esquerda para o total tamanho de n posies. Os principais espaos esto preenchidos com o caracter. Se o caracter for omitido o valor padro espaos. SELECT LPAD(DNAME,20,'*'), LPAD(DNAME,20), LPAD(DEPTNO,20,'.') FROM DEPT; LPAD(DNAME,20,'*') -------------------*************RESEACH ***************SALES **********OPERATIONS ***********ACCOUTING LPAD(DNAME,20) -------------------RESEACH SALES OPERATIONS ACCOUNTING LPAD(DEPTNO,20,'.') -------------------..................20 ..................30 ..................40 ..................10

RPAD(col/value,n,caracter)

preenche a coluna ou valor literal da direita para o total tamanho de n posies. Os espaos a direita so preenchidos com o caracter. Se o caracter for omitido o preenchimento fica em branco.

SELECT RPAD(DNAME,20,'*'), RPAD(DNAME,20), RPAD(DEPTNO,20,'.') FROM DEPT; RPAD(DNAME,20,'*') -------------------RESEACH************* SALES*************** OPERATIONS********** ACCOUTING*********** RPAD(DNAME,20) -------------------RESEACH SALES OPERATIONS ACCOUNTING RPAD(DEPTNO,20,'.') -------------------20.................. 30.................. 40.................. 10..................

Essa vez a segunda coluna alinhada para a direita com brancos por padro. SUBSTR A funo seguinte assume os caracteres na linha estando numerados da esquerda para a direita comeando com 1. SUBSTR(col/value,pos,n) Retorna um linha de n caracteres da coluna ou valor literal, iniciando na posio nmero pos. Se n omitido Consulting Tecnologia & Sistemas Ltda www.consulting.com.br

44a linha extrada da posio pos at o fim. O prximo exemplo mostra o seguinte sublinha; quatro caracteres do literal ORACLE iniciando na segunda posio.contedo do Dname iniciando no segundo caracter. cinco caracteres do DNAME iniciando na terceira posio.

SELECT SUBSTR('ORACLE',2,4), SUBSTR(DNAME,2), SUBSTR(DNAME,3,5) FROM DEPT; SUBSTR('ORACLE',2,4) SUBSTR(DNAME,2) SUBSTR(DNAME,3,5) -------------------- ---------------------- ----------------------RACL ESEARCH SEAC RACL ALES LES RACL PERATIONS ERATI RACL CCOUNTING COUNT Note que os valores esto alinhados para a esquerda. Isso porque SQL*Plus sempre mostra dados alfanumricos alinhados para a esquerda por padro.

INSTR INSTR(col/value,caracter) INSTR(col/value,caracter,pos,n)

encontra a primeira ocorrncia do caracter. encontra a posio do caracter do tamanho do caracter na coluna ou valor literal iniciando na posio nmero pos

SELECT DNAME, INSTR(DNAME,'A'), INSTR(DNAME,'ES'), INSTR(DNAME,'C',1,2) FROM DEPT; DNAME INSTR(DNAME,'A') INSTR(DNAME,'ES') INSTR(DNAME,'C',1,2) -------------- ----------------- ----------------- -------------------ACCOUNTING 1 0 3 RESEACH 5 2 0 SALES 2 4 0 OPERATIONS 5 0 0 LTRIM e RTRIM LTRIM e RTRIM removem especficos caracteres de um linha. LTRIM(col/value,caractere(s)) removem da esquerda principalmente ocorrncias Consulting Tecnologia & Sistemas Ltda www.consulting.com.br

45de caracteres (ou combinao de caracteres especficos). Se o caracter no especificado cortar os brancos da esquerda SELECT DNAME, LTRIM(DNAME,'A'), LTRIM,'AS'), LTRIM(DNAME,'ASOP') FROM DEPT; DNAME LTRIM(DNAME,'A') LTRIM(DNAME,'AS') LTRIM(DNAME,'ASO P') ----------------------------------------------------------------RESEARCH RESEARCH RESEARCH RESEARCH SALES SALES LES LES OPERATIONS OPERATIONS OPERATIONS ERATIONS ACCOUNTING CCOUNTING CCOUTING CCOUTING

Consulting Tecnologia & Sistemas Ltda www.consulting.com.br

46

RTRIM(col/value,caractere(s)) remove da direita ocorrncia de caracter(s) (ou combinaes de caracteres especficos). Se os caracteres no forem especificados sero removidos os brancos. SELECT DNAME, RTRIM(DNAME,'G'), RTRIM,'GHS'), RTRIM(DNAME,'N') FROM DEPT; DNAME ---------------RESEARCH SALES OPERATIONS ACCOUNTING RTRM(DNAME,'G') ---------------RESEARCH SALES OPERATIONS ACCOUNTING RTRIM(DNAME,'GHS') -----------------RESEARC SALE OPERATION ACCOUTIN RTRIM(DNAME ,'N') ------------------RESEARCH SALES OPERATIONS ACCOUTING

RTRIM pode ser usada para ajudar na remoo de brancos ou caracter do final de um campo. SOUNDEX(col/value) retorna uma linha de caracteres representando o som da palavra para um coluna ou um valor literal. Esta funo retorna a fontica representao de uma palavra, voc pode comparar palavras que tenham escrita diferente e sons iguais. SELECT ENAME, SOUNDEX(ENAME) FROM EMP WHERE SOUNDEX(ENAME) = SOUNDEX('FRED'); ENAME SOUNDEX(ENAME) ---------- --------------FORD F630 LENGTH LENGTH(col/value) retorna o nmero de caracteres na coluna ou valor literal. SELECT LENGTH('SQL COURSE'), LENGTH(DEPTNO), LENGTH(DNAME) FROM DEPT; LENGTH('SQL COURSE') LENGTH(DEPTNO) LENGTH(DNAME) -------------------- -------------- ------------10 2 8 10 2 5 10 2 10 10 2 10 Note como a funo INSTR, LENGTH retorna um valor numrico.

Consulting Tecnologia & Sistemas Ltda www.consulting.com.br

47

TRANSLATE e REPLACE As funes TRANSLATE e REPLACE so usadas para substituir caracteres. TRANSLATE(col/value,from,to) transforma caracteres de para. Mais de um caracter pode ser combinado. Todas as ocorrncias from so substitudas com a correspondente caracter no to. Se o correspondente to no for digitado o from ser removido SELECT ENAME, TRANSLATE(ENAME,'C','P'), JOB, TRANSLATE(JOB,'AR','IT') FROM EMP WHERE DEPTNO = 10; ENAME TRANSLATE(ENAME,'C','P') JOB TRANSLATE(JOB,'AR','IT') ----------- ------------------------ ----------- -----------------------CLARK PLARK MENAGER MINIGET KING KING PRESIDENT PTESIDENT MILLER MILLER CLERK CLETK REPLACE(col/value,linha,linha_alterada) Retorna o valor da coluna com toda a ocorrncia da linha de alterao. Se a linha alterada for omitida todo a linha especificada ser removida.

SELECT JOB, REPLACE(JOB,'SALESMAN','SALESPERSON'), ENAME, REPLACE(ENAME,'CO','PX') FROM EMP; JOB REPLACE(JOB,'SALESMAN','SALESPERSON') REPLACE(ENAME,'CO','PX') ----------- ------------------------------------- ------------- -----------------------ANALYST ANALYST SCOTT SPXTT SALESMAN SALESPERSON TURNER TURNER SALESMAN SALESPERSON ALLEN ALLEN MANAGER MANAGER CLARK CLARK ENAME

A Funo REPLACE um complemento da funo TRANSLATE que substitui caracteres um a um e o REPLACE substitui um linha por outra. Aninhamento de Funes Funes de linhas nicas podem ser aninhadas para vrias finalidades. Se funes so aninhadas, elas so avaliadas de dentro para fora. Isto por exemplo: X(D(A(B(C(caracter))))) ordem lgica de execuo C,B,A,D e X. Suponhamos que voc queira encontrar o nmero de vezes que um determinado caracter ocorre em uma linha. Como voc faria isso?

Consulting Tecnologia & Sistemas Ltda www.consulting.com.br

48Voc pode aninhar as funes LENGTH e TRANSLATE para realizar um requisitado resultado. O exemplo seguinte permite contar o nmero de Ss em uma linha SELECT DNAME, LENGTH(DNAME), LENGTH(DNAME) - LENGTH(TRANSLATE(DNAME,'AS','A')) FROM DEPT; DNAME LENGHT(DNAME) LENGTH(TRANSLATE(DNAME,'AS','A')) ---------- ------------- ----------------------------------------------RESEARCH 8 1 SALES 5 2 OPERATIONS 10 1 ACCOUNTING 10 0 Aqui esto os passos para realizar esse resultado 1.Usa-se o LENGTH para identificar LENGTH(DNAME)-

o

nmero

de

caracteres

da

linha.

2.Ento usa a funo TRANSLATE para fazer todas as ocorrncias de S sair da linha. SELECT LENGTH(TRANSLATE(DNAME,'AS','A')) FROM DEPT; LENGTH(TRANSLATE(DNAME,'AS','A')) --------------------------------REEARCH ALE OPERATION ACCOUNTING 3. Note que A modificado para A, e S no corresponde a nenhum caracter para ser alterado. Como S no tem nenhum caracter correspondente ele removido da linha.. 4. Agora subtrai o tamanho da linha retirado os Ss do tamanho da linha original.(com os Ss) LENGTH(DNAME)-LENGTH(TRANSLATE(DNAME,'AS','A')) 5- O Resultado o nmero de ocorrncias do caracter S na linha. Funes Numricas As funes aceitam entrada de nmeros e retornam valores numricos. ROUND ROUND(col/value,n) arredonda um coluna, expresso ou valor para n casas decimais. Se n omitido no tem casas decimais. Se n for negativo, os nmeros para esquerda do decimal so arredondados. SELECT ROUND(45.923,1), ROUND(45.923), ROUND(45.323,1), ROUND(45.323,-1), ROUND(SAL/32,2)

FROM EMP

Consulting Tecnologia & Sistemas Ltda www.consulting.com.br

49WHERE DEPTNO = 10;ROUND(45.923,1) ROUND(45.923) ROUND(45.323,1) ROUND(45.323,-1) ROUND(SAL/32,2)

--------------45.9 45.9 45.9

------------46 46 46

--------------45.3 45.3 45.3

---------------40 40 40

--------------76.56 156.25 40.63

TRUNC TRUNC(col/value.n)

trunca a coluna, expresso ou valor para n casas decimais, ou se n omitido no tm casas decimais. Se n negativo os nmeros para esquerda das casas decimais so truncados para zero.

SELECT

TRUNC(45.923,1), TRUNC(45.923), TRUNC(45.323,1), TRUNC(45.323,-1), TRUNC(SAL/32,2)

FROM EMP WHERE DEPTNO = 10;TRUNC(45.923,1) TRUNC(45.923) TRUNC(45.323,1) TRUNC(45.323,-1) TRUNC(SAL/32,2)

--------------45.9 45.9 45.9 CEIL CEIL(col/value)

------------45 45 45

--------------45.3 45.3 45.3

---------------40 40 40

--------------76.56 156.25 40.62

encontra o menor valor maior que ou igual para a coluna, expresso ou valor.

SELECT CEIL(SAL), CEIL(99.9), CEIL(101.76), CEIL(-11.1) FROM EMP WHERE SAL BETWEEN 3000 AND 5000; CEIL(SAL) --------3000 5000 3000 CEIL(99.9) ---------100 100 100 CEIL(101.76) -----------102 102 102 CEIL(-11.1) -----------11 -11 -11

Consulting Tecnologia & Sistemas Ltda www.consulting.com.br

50FLOOR FLOOR(col/value)

encontra o maior valor menor que ou igual para a coluna, expresso ou valor

SELECT FLOOR(SAL), FLOOR(99.9), FLOOR(101.76), FLOOR(-11.1) FROM EMP WHERE SAL BETWEEN 3000 AND 5000; FLOOR(SAL) ---------3000 5000 5000 FLOOR(99.9) ----------99 99 99 FLOOR(101.76) ------------101 101 101 FLOOR(-11.1) ------------12 -12 -12

POWER POWER(col/value,n)

eleva uma coluna, expresso ou valor por uma potncia, n pode ser negativo mas deve ser um nmero, se no um erro ser retornado

SELECT SAL, POWER(SAL,2), POWER(SAL,3), POWER(50,5) FROM EMP WHERE DEPTNO = 10; SAL --------------2450.0 5000.0 1300.00 SQRT SQRT(col/value) POWER(SAL,2) --------------6002500 25000000 1690000 POWER(SAL,3) --------------14706125000 125000000000 2197000000 POWER(50,5) --------------312500000 312500000 312500000

encontra a raiz quadrada da coluna ou valor. Se a coluna ou valor for menor que zero ser retornado nulo.

SELECT SAL, SQRT(SAL), SQRT(40), SQRT(COMM) FROM EMP WHERE COMM > 0; SAL SQRT(SAL) SQRT(40) SQRT(COMM) ------------ ----------------- ------------ -------------1600.00 40 6.32455532 17.3205081 1250.00 35.3553391 6.32455532 22.3606798 1250.00 35.3553391 6.32455532 37.4165739 SIGN SIGM(col/value)

retorna -1 se a coluna, expresso ou valor negativa ou zero e 1 se for positivo

SELECT SAL-COMM, SIGN(SAL-COMM), COMM-SAL, SIGN(COMM-SAL) FROM EMP WHERE DEPTNO = 30; Consulting Tecnologia & Sistemas Ltda www.consulting.com.br

51

SAL-COMM ---------------1300 750 -150 1500

SIGN(SAL-COMM) ---------------1 1 -1 1

COMM-SAL ----------------1300 -750 150 -1500

SIGN(SAL-COMM) ----------------1 -1 1 -1

Freqentemente a funo SIGN usada para testar um valor se menor, maior ou igual a um segundo valor. O seguinte exemplo apresenta todos os empregados os quais o salrio maior que sua comisso. SELECT ENAME, SAL, COMM FROM EMP WHERE SIGN(SAL-COMM) = 1; ENAME ------------ALLEN WARD TURNER ABS ABS(col/value) SAL ---------------1600 1250 1500 COMM -------------300 500 0

encontra o valor absoluto de um coluna, expresso ou valor

SELECT SAL, COMM, COMM-SAL, ABS(COMM-SAL), ABS(-35) FROM EMP WHERE DEPTNO = 30; SAL -----------1600.00 1250.00 1250.00 2850.00 1500.00 950.00 COMM -----------300.00 500.00 1400.00 .00 COMM-SAL ------------1300 -750 150 -1500 ABS(COMM-SAL) -----------1300 750 150 1500 ABS(-35) -----------35 35 35 35 35 35

MOD MOD(val1,val2) encontra o resto da diviso val1 por val2 SELECT SAL, COMM, MOD(SAL,COMM), MOD(100,40) FROM EMP WHERE DEPTNO = 30 ORDER BY COMM; SAL --------------2,850.00 950.00 1,600.00 1,250.00 1,250.00 COMM --------------300.00 500.00 1,400.00 MOD(SAL,COMM) --------------100 250 1250 MOD(100,40) --------------20 20 20 20 20

Consulting Tecnologia & Sistemas Ltda www.consulting.com.br

521,500.00 .00 1500 20

Exerccio - Usando Funes Esses exerccios convm o uso de funes no somente para o SELECT mas no WHERE e ORDER BY. Se colunas sinnimas so usadas no resultado, use ento na clausula SELECT da sua declarao SQL. Oficina 1. Liste os nomes e salrios incrementados de 15% dos empregados e tambm os valores mostrados inteiros. DEPTNO -----20 30 30 20 30 30 10 20 10 30 20 30 20 10 ENAME ---------SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER PCTSAL ---------920 1840 1438 3421 1438 3278 3818 3450 5750 1725 1265 1093 3450 1495

2. Fazer a seguinte sada. EMPLOYEE_AND_JOB -------------------SMITH CLERK ALLEN SALESMAN WARD SALESMAN JONES MANAGER MARTIN SALESMAN BLAKE MANAGER CLARK MANAGER SCOTT ANALYST KING PRESIDENT TURNER SALESMAN ADAMS CLERK JAMES CLERK FORD ANALYST MILLER CLERK 3. Mostrar uma lista de todos os empregados com um identificador o qual composto das primeiras duas letras de seu cargo, o meio de dois dgitos de seu nmero e o cdigo soundex do seu nome. NAME CODE Consulting Tecnologia & Sistemas Ltda www.consulting.com.br

53---------SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER ADAMS JAMES FORD MILLER ----------CL36S530 SA49A450 SA52W630 MA56J520 SA65M635 MA69B420 MA78C462 AN78S300 PR83K520 SA84T656 CL87A352 CL90J520 AN90F630 CL93M460

4. Fazer uma ferramenta intensiva de pesquisa para listar os empregados com o cargo que o usurio entrar. Enter value for job : clerk EMPNO ENAME JOB ----7369 7876 7900 7934 ---------SMITH ADAMS JAMES MILLER ---------CLERK CLERK CLERK CLERK MG R ----7902 7788 7698 7782 HIREDATE --------13-JUN-83 04-JUN-84 23-JUL-84 21-NOV-83 SAL ---------800.00 1,100.00 950.00 1,300.00 COMM ---------DEPT NO -----20 20 30 10

Se voc tiver tempo: 5. Imprima um lista dos nomes de departamentos centralizados. Assuma a coluna com a largura de 20 caracteres. DEPARTMENT -------------------ACCOUNTING OPERATIONS RESEACH SALES 6. Encontrar a primeira ocorrncia de L no nome do empregado, e substitu-la por X. ENAME ---------SMITH ALLEN WARD JONES MARTIN BLAKE CLARK SCOTT KING TURNER FIRST_OCCURENCE_OF_L ------------------SMITH AXLEN WARD JONES MARTIN BXAKE CXARK SCOTT KING TURNER Consulting Tecnologia & Sistemas Ltda www.consulting.com.br

54ADAMS JAMES FORD MILLER ADAMS JAMES FORD MIXLER

Funes Numricas e Alfanumricas 1. SELECT DEPTNO, ENAME, ROUND(SAL*1.15)PCTSAL FROM EMP; 2. SELECT RPAD(ENAME,10)||LPAD(JOB,10) EMPLOYEE_AND_JOB FROM EMP; 3. SELECT ENAME NAME, SUBSTR(JOB,1,2)|| SUBSTR(EMPNO,2,2)|| SOUNDEX(ENAME CODE FROM EMP; 4. SELECT * FROM EMP WHERE UPPER(JOB) = UPPER('&JOB'); 5. SELECT LPAD(' ',(20-LRNGTH(DNAME))/2)||DNAME DEPARTMENT FROM DEPT; 6. SELECT ENAME, TRANSLATE(SUBSTR(ENAME,1,INSTR(ENAME,'L')),'L','X')|| SUBSTR(ENAME,INSTR(ENAME,'L') + 1) FIRST_OCCURRENCE_OF_L FROM EMP; Mais Funes de Linha nica Explicao dessa Unidade Nessa Unidade ns cobriremos funes de Data, de converso e funes que aceitam vrios tipos de entrada de dados. Funes de Data Funes de data operam sobre datas do ORACLE. Todas as funes de datas retornam valores de tipo data exceto MONTHS_BETWEEN o qual retorna um valor numrico.

Consulting Tecnologia & Sistemas Ltda www.consulting.com.br

55

Armazenamento de Datas no ORACLE Armazenamento de Datas internamente no ORACLE formato numrico, representao: Sculo Ano Ms Dia Horas Minutos Segundos O padro de data mostrados nas pesquisas DD-MON-YY. Sysdate Sysdate uma coluna que retorna a data e horrio corrente. Voc pode usar o SYSDATE como uma outra coluna qualquer. Por exemplo, voc pode mostrar data corrente selecionando o sysdate de uma tabela simulada chamada DUAL. A tabela DUAL uma tabela do sistema e deve ser permitido acess-la para todos os usurios. Ela contm uma coluna DUMMY e uma linha com o valor X. A tabela DUAL usada quando voc quer retornar apenas uma linha. Para mostrar a data corrente: SELECT SYSDATE FROM DUAL; Voc poderia facilmente selecionar o sysdate da tabela EMP, mas 14 sysdate seriam retornados. Usando Operadores Aritmticos Devido o fato das datas serem armazenadas como nmero, possvel fazer clculos com datas usando operadores aritmticos tal como adio e subtrao. Voc pode adicionar e subtrair nmeros constantes e bem como data de data. As operaes que voc pode realizar so: data + nmero data - nmero data - data Adicionando um nmero de dias em uma data, produzindo uma nova data subtraindo um nmero de dias de uma data, produzindo uma nova data subtraindo uma data de outra, produzindo um nmero de dias

data+nmero/24 adicionando um nmero de horas em uma data produzindo um nova data SELECT HIREDATE, HIREDATE+7, HIREDATE-7, SYSDATE - HIREDATE FROM EMP WHERE HIREDATE LIKE '%JUN%'; HIREDATE ---------------13-JUN-83 11-JUN-84 04-JUN-84 HIREDATE+7 ---------------20-JUN-83 18-JUN-84 11-JUN-84 HIREDATE-7 ---------------06-JUN-83 04-JUN-84 28-MAY-84 SYSDATEHIREDATE ---------------1982.70628 1618.70628 1625.70628

Consulting Tecnologia & Sistemas Ltda www.consulting.com.br

5604-JUN-84 11-JUN-84 28-MAY-84 1625.70628

Subtraindo SYSDATE de HIREDATE coluna da tabela EMP retorna o nmeros de dias que o empregado est admitido. MONSTHS_BEETWEEN MONTHS_BETWEEN(data1,data2)

encontra o nmero de meses entre data 1 e data2. O resultado pode ser positivo ou negativo. Se a data 1 for posterior a data2, ento o resultado ser positivo, se a data 1 for menor que a data 2 o resultado ser negativo.

SELECT MONTHS_BETWEEN(SYSDATE,HIREDATE), MONTHS_BETWEEN('01-JAN-84','05-NOV-88') FROM EMP WHERE MONTHS_BETWEEN(SYSDATE,HIREDATE)> 59; MONTHS_BETWEEN(SYSDATE,HIR EDATE) -------------------------------65.0873622 63 60.5067171 59.3454267 59.3454267 59.8292977 MONTHS_BETWEEN('01-JAN-84','05-NOV88') ---------------------------------------58.429332 -58.429332 -58.429332 -58.429332 -58.429332 -58.429332

A parte no inteira do resultado representa um parcela do ms. ADD_MONTHS ADD_MONTHS(data,n) adiciona n nmeros de meses na data. n deve ser inteiro e pode ser negativo. SELECT HIREDATE, ADD_MONTHS)HIREDATE,3), ADD_MOSTHS(HIREDATE,-3) FROM EMP WHERE DEPTNO = 20; HIREDATE ---------------------13-JUN-83 31-OCT-83 05-MAR-84 04-JUN-84 05-DEC-83 ADD_MONTHS)HIREDATE,3) ---------------------13-SEP-83 31-JAN-84 05-JUN-84 04-SEP-84 05-MAR-84 ADD_MOSTHS(HIREDATE,-3) ---------------------13-MAR-83 31-JUL-83 05-DEC-83 04-MAR-84 05-SEP-83

Consulting Tecnologia & Sistemas Ltda www.consulting.com.br

57

NEXT_DAY NEXT_DAY(data1,caracter)

data do prximo dia especificado da semana(caracter) seguinte data.1. Caracter deve ser um nmero representado um dia, ou o dia semana descrito em ingls.

SELECT HIREDATE, NEXT_DAY(HIREDATE,'FRIDAY'), NEXT_DAY(HIREDATE,6) FROM EMP WHERE DEPTNO = 20; HIREDATE ----------------14-MAY-84 09-JUL-84 21-NOV-83 LAST_DAY LAST_DAY(data) NEXT_DAY(HIREDATE,'FRIDAY') NEXT_DAY(HIREDATE, 6) ---------------------------------------------18-MAY-84 18-MAY-84 13-JUL-84 13-JUL-84 25-NOV-83 25-NOV-83

encontra a data do ultimo dia do ms da data especificada

SELECT SYSDATE, LAST_DAY(SYSDATE), HIREDATE, LAST_DAY(HIREDATE), LAST_DAY('15-FEB-88') FROM EMP WHERE DEPTNO = 20;SYSDATE -------------04-DEC-89 04-DEC-89 04-DEC-89 04-DEC-89 04-DEC-89 LAST_DAY(SYSDATE) ------------------------------31-DEC-89 31-DEC-89 31-DEC-89 31-DEC-89 31-DEC-89 HIREDATE --------------17-DEC-80 02-APR-81 09-DEC-82 12-JAN-83 03-DEC-81 LAST_DAY(HIREDATE) -------------------------------31-DEC-80 30-APR-81 31-DEC-82 31-JAN-83 31-DEC-81LAST_DAY(15-FEB-88)

---------------------------29-FEB-88 29-FEB-88 29-FEB-88 29-FEB-88 29-FEB-88

A funo ROUND pode ser aplicada para datas. ROUND(data) retorna a data com o horrio em 12:00(meio-dia) Isso usamos quando comparamos datas que tenham diferentes horrios. ROUND(data,MONTH) retorna o primeiro dia do ms da data, Se a data estiver na primeira metade do ms; se no retorna o primeiro do ms seguinte. retorna o primeiro dia do ano da data se data estiver na primeira metade do ano; se no retorna o primeiro do ano seguinte.

ROUND(data,YEAR)

SELECT SYSDATE, ROUND(SYSDATE,'MONTH'), ROUND(SYSDATE,'YEAR') FROM DUAL;

Consulting Tecnologia & Sistemas Ltda www.consulting.com.br

58SYSDATE ---------------------04-DEC-89 ROUND(SYSDATE,'MONTH') ---------------------01-DEC-89 ROUND(SYSDATE,'YEAR') ---------------------01-JAN-90

TRUNC TRUNC(data,caracter)

encontra a data do primeiro dia do ms da data quando o caracter = MONTH. Se o caracter = YEAR ele encontra o primeiro dia do ano.

SELECT SYSDATE, TRUNC(SYSDATE,'MONTH'), TRUNC(SYSDATE,'YEAR') FROM DUAL; SYSDATE ---------------------04-DEC-89 TRUNC(SYSDATE,'MONTH') ---------------------01-DEC-89 TRUNC(SYSDATE,'YEAR') ---------------------01-JAN-89

TRUNC usado se voc quiser remover o horrio do dia. O horrio contido no dia removido por padro. Funes de Converso SQL possui um nmero de funes para controlar os tipos de converso de dados. Essas funes de converses converte um valor de um tipo de dado para outro. TO_CHAR(nmero,data,formato) TO_NUMER(caracter) TO_DATE(caracter,formato) converte nmeros alfanumricos e datas para formatos

converte alfanumricos os quais possuem nmeros para numricos. converte um alfanumrico representando uma data, para um valor de data de acordo com o formato especificado. Se o formato omitido o formato padro DD=MON-YY.

TO_CHAR A funo TO_CHAR freqentemente usada para modificar um formato de data padro para um formato alternativo para mostrar. TO_CHAR(data,mscara) especifica que a data est sendo convertida para um novo formato na sada. Para converter a data corrente do formato padro (DD-MON-YY) para uma nova mscara. SELECT TO_CHAR(SYSDATE,'DAY, DDTH MONTH YYYY') FROM DUAL; TO_CHAR(SYSDATE,'DAY, DDTH MONTH YYYY') --------------------------------------TUESDAY , 05TH SEPTEMBER 1989

Consulting Tecnologia & Sistemas Ltda www.consulting.com.br

59

Note que: A mscara a qual deve estar entre aspas simples, pode ser includa em vrios formatos listados anteriormente. A coluna e mscara deve ser separadas por uma vrgula. DAY e MONTH na sada so espaados automaticamente com brancos no tamanho de 9 caracteres Para remover um espao em branco usar o FM(man