Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
BANCO DE DADOS
HISTÓRICO
No processamento de dados tradicional, as aplicações (sistemas) eram
basicamente dirigidas a um setor específico da empresa e, conseqüêntemente, sua
construção baseava-se nos dados utilizados em tal setor.
Desta forma, o sistema de informação da empresa, como um todo, era constituído
por diversos sistemas, possuindo processos e arquivos próprios e independentes.
Problemas :
A) A comunicação de dados entre tais empresas, quando necessária era difícil.
(integração);
BANCO DE DADOS
Segundo [Date], o sistema de banco de dados consiste em um sistema de
manutenção de informações por computador que tem por objetivo manter as
informações e disponibilizá-las aos seus usuários quando solicitadas.
Segundo [Palmer], um banco de dados é uma coleção de dados, organizados e
integrados, que constituem uma representação natural de dados, sem imposição de
restrições ou modificações para todas as aplicações relevantes sem duplicação de dados.
Principais Objetivos:
D) Garantir a privacidade
Garantir que o acesso aos dados possa ser controlada pelo administrador do banco de
dados, garantindo a segurança dos dados contra acessos e modificações indevidas.
F) Segurança de dados
Sendo que o banco de dados é constituído por informações da empresa, a segurança
dessas contra perdas ou destruição deve ser um ponto importante. O banco de dados
deve permitir cópias dos dados que possam ser restaurados parcial ou totalmente.
A) Dados
São os dados armazenados em um banco de dados. Exemplo: dados dos empregados de
uma empresa, com o número, nome, profissão, salário, etc.
Em um banco de dados os dados serão integrados e compartilhados.
Integrado - por "integrado" queremos dizer que o banco de dados pode ser imaginado
como a única filiação de diversos arquivos de dados que, de outra forma, seriam
distintos, eliminando-se total ou parcialmente qualquer redundância entre os mesmos.
EMPREGADO ( Número-Empregado, Nome,
Endereço, Salário, Número-Departamento)
DEPARTAMENTO ( Número-Departamento,
Nome-Departamento, Localização)
B) Hardware
Consiste na máquina que vai abrigar o banco de dados.
C) Software
É a interface entre o banco de dados físico (isto é, os dados que estão armazenados) e os
usuários. Ou seja, o usuário só acessa os dados através de um software, que é chamado
de sistema de gerenciamento do banco de dados (SGDB) ou DATA BASE
MANAGEMENT SYSTEM (DBMS).
D) Usuários
Os usuários são o conjunto de pessoas que irão acessar as informações armazenadas em
um banco de dados.
CLASSES DE USUÁRIOS
Existem basicamente 3 classes de usuários, que são:
1. O programador de aplicações
É o responsável pela definição dos programas de aplicação que utilizam o banco de
dados, utilizando alguma linguagem de programação.
2. O usuário final
Normalmente tem acesso ao banco de dados por meio de uma das aplicações on-line
desenvolvidas na empresa.
O usuário final experto eventualmente pode acessar o banco através da linguagem SQL.
ESQUEMA CONCEITUAL
O esquema conceitual contém a "visão do mundo real da empresa que
está sendo modelada no banco de dados". Deve conter informações sobre todas
as entidades da empresa, assim como seus atributos, relacionamentos e restrições de
acesso. (Estruturas Lógicas)
ESQUEMA EXTERNO
A definição de esquema externo é feita a partir do esquema conceitual e que
contém a definição dos dados necessários a uma classe de aplicações específicas. Essa
definição é feita de forma a procurar atender às características particulares dessas
aplicações. É pelo esquema externo que os programas da classe de aplicações
correspondente acessam o subconjunto do banco de dados necessário a seu
funcionamento.
ESQUEMA INTERNO
O esquema interno contém a descrição da representação de armazenamento físico
de dados. Dessa forma, qualquer representação física pode ser implementada sem
restrições. No esquema interno fica também a descrição de como os dados estão
armazenados. (Estruturas Físicas).
7
A) ESTRUTURAS LÓGICAS
O processo de modelagem de uma percepção do mundo real é feito construindo-se
estruturas lógicas formadas pelas entidades e relações relevantes a essa percepção.
B) ESTRUTURAS FÍSICAS
As estruturas físicas representam a forma utilizada para organizar os dados nos
meios de armazenamento secundário.
Para permitir que sejam criadas estruturas físicas convenientes a cada situação, um
SGDB deve oferecer diversos tipos de estruturas e, entre as principais temos:
Listas encadeadas, arquivos de inversões, estruturas de acesso randômico, arquivos
seqüenciais, índices primários e secundários, arquivo de ligações.
1. Primeiro, o SGDB consiste de uma banco de dados construído para realizar operações
de baixo nível exigidas para suportar as funções acima.
2. Segundo, o SGDB consiste de uma aplicação feita sob medida, projetada e
implementada pelo usuário para realizar alguma função específica do negócio.
3. Terceiro, o SGDB consiste de ferramentas genéricas de última geração que permitem
que um usuário projete e implemente uma função específica do negócio.
FUNCIONAMENTO DO SGDB
1. O usuário emite uma solicitação de acesso, usando uma linguagem específica. Por
exemplo: Select NR_EMP, NOME, SALARIO FROM TAB_EMP;
2. O SGDB intercepta a solicitação e analisa-a;
3. O SGDB, por sua vez, inspeciona os esquemas externos para aquele usuário e faz o
mapeamento necessário;
4. O SGDB executa as operações necessárias no banco de dados armazenado
5. O SGDB retorna o resultado ao usuário.
COMUNICAÇÕES DE DADOS
As solicitações ao banco de dados a partir de uma usuário são normalmente
transmitidas (a partir do terminal ou micro do usuário - que pode estar
fisicamente longe do sistema - para alguma aplicação on-line, e dali para o
DBMS) na forma de mensagens de comunicação.
As respostas ao usuário (do DBMS e da aplicação on-line de volta ao
terminal do usuário) também são transmitidas sob forma de mensagens. Todas essas
transmissões de mensagens são efetuadas sob direção de um outro sistema de software,
o gerenciador de comunicação dos dados, que não faz parte do DBMS.
MODELO RELACIONAL
Integridade da identidade
Não se permite a nenhum atributo que participe da chave primária de uma relação
básica que aceite valores nulos.
Integridade referencial
As chaves externas que estabelecerem as ligações e implementarem
relacionamentos, devem ter valor igual a alguma chave primária de identidade
(TABELA) existente.
Não pode haver chave externa apontando para uma chave primária inexistente.
11
Um banco de dados projetado através do modelo ER, deve ser mapeado para um
esquema relacional através de uma linguagem de definição de dados (DDL). A
linguagem que será utilizada neste contexto será SQL padrão ANSI/ISO.
COMANDOS
CREATE TABLE
Cria uma tabela e define suas colunas e outras propriedades.
CREATE VIEW
Define uma visão sobre uma ou mais tabelas e /ou sobre outras visões.
CREATE INDEX
Cria índice para uma tabela.
ALTER TABLE
Inclui ou redefine uma coluna numa tabela existente (não consta no padrão ANSI).
DROP TABLE
Exclui uma tabela.
DROP VIEW
Exclui uma visão.
DROP INDEX
Exclui um índice.
12
COMANDOS
SELECT
Seleciona linhas e colunas de uma ou mais tabelas.
INSERT
Inclui linhas numa tabela ou visão.
UPDATE
Muda o valor de uma ou mais campos de uma tabela.
DELETE
Exclui linhas de uma tabela.
O exemplo do banco de dados é composta por 3 tabelas: a tabela EMP que contém
dados dos empregados, a tabela DEPT que contém dados dos departamentos e a tabela
SALGRADE que contém a grade salarial.
14 rows selected.
LINGUAGEM SQL
A linguagem SQL é própria para a realização de operações como recuperar dados
(QUERY), atualizar ou eliminar dados, alterar colunas de tabelas, criar e eliminar
tabelas e qualquer outras modificações que se deseje fazer em um banco de dados
relacional.
Os comandos SQL podem ser divididos em quatro grupos de comandos:
1. Query;
2. Definição de dados;
3. Manipulação de dados;
4. Controle de dados;
Em 1986 a ANSI adotou o SQL como uma linguagem padrão para banco de dados
relacional - RDBMS.
BENEFÍCIOS
• É uma linguagem não procedural;
• Permite trabalhar com várias tabelas;
• Permite utilizar o resultado de uma instrução SQL em outra instrução SQL
(sub-queries);
• Não necessita especificar o método de acesso ao dado;
• É uma linguagem para vários usuários como:
A) Administrador do sistema;
B) Administrador do banco de dados (DBA);
C) Programadores de aplicações;
D) Pessoal da agência e tomada de decisão;
• É de fácil aprendizado;
• Permite a utilização dentro de uma linguagem procedural como C, COBOL,
FORTRAN, Pascal e PL/I - SQL embutida.
RECUPERAÇÃO SIMPLES
ou
14 rows selected.
ADIÇÃO (+)
SUBTRAÇÃO (-)
MULTIPLICAÇÃO (*)
DIVISÃO (/)
Observação:
16
14 rows selected
ENAME SAL+250*12
---------- ---------------
SMITH 3800
ALLEN 4600
. .
. .
. .
MILLER 4300
17
ENAME (SAL+250)*12
-------------- ----------------
SMITH 12600
ALLEN 22200
WARD 18000
. .
. .
. .
MILLER 18600
B) APELIDOS DE COLUNAS
Para criar um apelido para uma coluna, entre com o apelido depois do nome da
coluna no comando SELECT.
C) OPERADOR DE CONCATENAÇÃO
O operador de concatenação permite ligar uma coluna a outra.
EMPREGADO
--------------------------
7369SMITH
7499ALLEN
7521WARD
7566JONES
.
.
.
7934MILLER
18
A função NVL (comm, 0) substitui por 0 os valores nulos, para que não afetem a
soma. Na multiplicação utiliza-se 1 no lugar de um valor nulo para não afete a
multiplicação.
CLÁUSULA DISTINTICT
A cláusula distinct é utilizada para eliminar os valores duplicados na saída (no
resultado).
19
DEPTNO
--------------
20
30
30
20
30
30
10
20
10
30
20
30
20
10
14 rows selected.
DEPTNO JOB
----------- ---------------
10 CLERK
10 MANAGER
10 PRESIDENT
20 ANALYST
20 CLERK
20 MANGER
30 SALESMAN
7 rows selected.
20
CLÁUSULA ORDER BY
A cláusula ORDER BY é utilizada para ordenar (classificar) as linhas da tabela .
A ordem do resultado pode aparecer em ordem decrescente (DESC) ou ascendente
(ASC) que é default.
A cláusula order by sempre deve aparecer por último no comando select.
14 rows selected.
SQL> SELECT ename, job, sal FROM emp ORDER BY ename DESC;
14 rows selected.
SQL> SELECT ename, job, sal FROM emp ORDER BY job DESC, SAL
14 rows selected.
SQL> SELECT ename, job, sal FROM emp ORDER BY job DESC, sal DESC;
14 rows selected.
CLÁUSULA WHERE
OPERADORES LÓGICOS
A cláusula WHERE pode assumir os seguintes operadores lógicos:
Igual (=)
Maior (>)
Maior ou Igual ( >= )
Menor (<)
Menor ou Igual ( <= )
SQL> SELECT ename, sal, FROM emp WHERE deptno = 10;
ENAME SAL
-------------- -------
CLARK 2450
KING 5000
MILLER 1300
SQL> SELECT ename, sal, FROM emp WHERE sal > 2000;
ENAME SAL
----------- ------
JONES 2975
BLAKE 2850
CLARK 2450
SCOTT 3000
KING 5000
FORD 3000
6 rows selected.
23
OPERADORES BOOLEANOS
A cláusula WHERE pode assumir os seguintes operadores booleanos:
• AND;
• OR;
• NOT.
AND - As duas condições devem ser satisfeitas para que a consulta retorne
uma ou mais linhas da tabela.
Sintaxe:
SELECT colunas FROM nome-da-tabela WHERE condição1 AND condição2;
Recuperação Qualificada:
SQL> SELECT ename, sal, depto FROM emp WHERE deptno = 20 AND sal > 1500;
SQL> SELECT ename, sal, depto FROM emp WHERE deptno = 20 OR sal > 1500;
KING 5000 10
ADAMS 1100 20
FORD 3000 20
9 rows selected.
2 rows selected.
OPERADORES SQL
ENAME SAL
----------- -------
ALLEN 1600
WARD 1250
MARTIN 1250
TURNER 1500
ADAMS 1100
MILLER 1300
6 rows selected.
B) Operador IN
O operador IN testa os valores da coluna, e recupera somente os valores que estão
na lista de valores especificados pelo operador IN.
4 rows selected.
26
Observação
Caso forem usados caracteres ou data na lista, especificá-los entre aspas simples.
C) Operador LIKE
O operador LIKE permite recuperar linha da tabela sem saber exatamente o valor
que está sendo procurado, utilizando para isso os símbolos (%) e ( _ ).
O símbolo de sublinhado ( _ ) é usado para representar um único caractere.
O símbolo de percentagem (%) é usado para representar uma cadeia de caracteres
de qualquer tamanho (inclusive zero).
ENAME
------------------------------
SMITH
SCOTT
2 rows selected.
Observação
O LIKE só pode ser usado com cadeia de caracteres ou com dados gráficos, e não com
dados numéricos.
D) Operador IS NULL
O operador IS NULL testa os valores da coluna, e recupera somente as linhas da
tabela que possuírem o valor null.
Obtenha os números dos empregados que não possuírem gerente, ou seja o campo
número do gerente (mgr) é igual a nulo.
ENAME MGR
-------------- -------
KING
27
Operador Significado
NOT BETWEEN NÃO ENTRE DOIS VALORES ESPECIFICADOS
NOT IN NÃO ENTRE UMA LISTA DE VALORES
NOT LIKE NÃO ENTRE UM PADRÃO ESPECIFICADO
IS NOT NULL NÃO IGUAL AO VALOR NULL
28
AMBIENTE SQL
EXEMPLO : C:SQLPLUS
1. Quando você digita um comando SQL, ele é armazenado em uma parte da memória
chamada BUFFER SQL, e permanece neste buffer até que outro comando SQL seja
digitado.
2. Se você digitou [ENTER] antes de terminar o comando, o SQL*PLUS abre uma linha
nova numerada para continuar a digitando o comando SQL.
4. Enquanto o comando SQL está no buffer, ele pode ser editado utilizando os seguintes
comandos
COMANDOS DESCRIÇÃO
FORMATO
function_name(argumento1, argumento2, ...)
a.1) LOWER
Converte em letras minúsculas.
Exemplo:
Obtenha o nome de todos os departamentos em letras minúsculas.
a.2) UPPER
Converte em letras maiúsculas.
Exemplo:
Obtenha o nome de todos os departamentos em letras maiúsculas.
a.3) INITCAP
Converte a primeira letra de cada palavra para maiúscula.
Exemplo:
Obtenha o nome e a localização de todos os departamentos, mostrando a primeira letra
do nome e localização em maiúscula.
a.4) LENGH
Retorna o número de caracteres ou dígitos de uma coluna ou de uma cadeia de
caracteres (literal).
Exemplo
Obtenha o número de caracteres do literal 'SQL COURCE', das colunas deptno e dname.
b.1) ROUND
Retorna o arredondamento de colunas, expressões ou valores para n casas decimais. Se
n é omitido, nenhuma casa decimal é colocada.
Exemplo:
b.2) TRUNC
Retorna o truncamento de colunas, expressões ou valores em n casas decimais. Se n é
omitido nenhuma casa decimal é truncada.
Exemplo:
b.3) SORT
Retorna a raiz quadrada de uma coluna ou valor. Se a coluna ou valor forem menores
que zero, então retorna um valor nulo.
Exemplo:
b.4) SIGN
• Retorna -1 se a coluna, ou expressão, ou valor forem negativos;
• Retorna 0 se a coluna, ou expressão, ou valor forem zero;
• Retorna 1 se a coluna, ou expressão, ou valor forem positivos;
Exemplo:
SQL> SELECT sal - comm, sign(sal - comm), comm - sal, sign(comm - sal)
FROM emp
WHERE deptno = 30;
32
b.5) ABS
Retorna o valor absoluto de uma coluna ou valor.
Exemplo:
c.1) SYSDATE
Retorna a data e hora corrente.
Exemplo:
Obtenha a data corrente:
OPERAÇÕES ARITMÉTICAS
É possível adicionar e subtrair números constantes de datas.
Exemplo:
SQL> SELECT hiredate, hiredate+7, hiredate -7, sysdate - hiredate
FROM emp
WHERE hiredate
LIKE '%JUN%';
c.2) MONTHS_BETWEEN
Retorna o número de meses entre duas datas.
Exemplo:
c.3) ADD_MONTHS
Adiciona n número de meses na data, onde n deve ser um inteiro e pode ser negativo.
Exemplo:
c.4) NEXT_DAY
Retorna a data do próximo dia da semana informado.
Exemplo:
c.5) LAST_DAY
Retorna a data do último dia do mês.
Exemplo:
D) FUNÇÕES DE CONVERSÃO
d.1) TO_CHAR
Converte um formato de data default para um formato alternativo especificado.
YYYY Ano
Y, YYY Ano com vírgula
MM Mês
MONTH Nome do mês
MON Nome do mês com abreviação
WW ou W Mês do ano ou mês
DDD ou DD ou D Dia do ano, mês ou semana
DAY Nome do dia da semana
HH ou HH12 Hora do dia (1 - 12)
HH24 Hora do dia (0 - 23)
MI Minuto
SS Segundos
Sufixos
TH Número
DDTH 14TH
Exemplo:
SQL> SELECT SYSDATE
FROM dual;
TO_CHAR também é utilizado para converter tipo de dado NUMBER para tipo de dado
CHAR (novo formato).
d.2) TO_NUMBER
Converte o número armazenado para um tipo de dado NUMBER.
Exemplo:
35
d.3) TO_DATE
Permite formatar para outros formatos de datas.
Exemplo:
d.4) NVL
Converte um valor nulo para um valor especificado.
Exemplo:
SQL> SELECT ename, sal comm, sal * 12 + NVL(comm, 0), NVL(comm, 1000)
FROM emp
WHERE deptno = 30;
d.5) GREATEST
Retorna o maior valor de uma lista de valores.
Exemplo:
d.6) LEAST
Retorna o menor valor de uma lista de valores.
Exemplo
d.7) VSIZE
Retorna o número de bytes que são utilizados para armazenar internamente os dados
(colunas ou valores)
Exemplo:
36
FUNÇÕES DE GRUPO
e.1) AVG
Retorna a média dos valores da coluna, ignorando valores nulos.
Exemplo:
Obtenha a média de salários de todos os empregados.
e.2) COUNT
Retorna o número de ocorrências da expressão, ou coluna. Usando *, retorna todas as
ocorrências das linhas incluindo, duplicadas e nulas.
Exemplo:
Obtenha o número de empregados da empresa
Exemplo:
Obtenha o número de empregados do departamento 10
e.3) SUM
Retorna a soma dos valores da coluna, ignorando valores nulos.
Exemplo:
Obtenha a soma de todos os salários dos empregados.
37
Exemplo:
Obtenha a soma de todos os salários do departamento 10.
e.4) MAX
Retorna o valor máximo de uma coluna.
Exemplo:
Obtenha o maior salário dos empregados.
Exemplo:
Obtenha o maior salário do departamento 20.
e.5) MIN
Retorna o valor mínimo de uma coluna.
Exemplo:
Obtenha o menor salário dos empregados.
Exemplo:
Obtenha o menor salário do departamento 10.
CLÁUSULA GROUP BY
A cláusula GROUP BY referencia uma coluna especificada da tabela relacionada
na cláusula FROM e agrupa as linhas com base nos valores iguais dessa coluna.
O resultado da cláusula GROUP BY particiona a tabela em um conjunto de
grupos, não efetuando qualquer tipo de ordenação.
Exemplo:
Obtenha o maior salário de cada profissão.
Exemplo:
Obtenha o menor salário de cada profissão.
Exemplo:
Obtenha o maior salário da profissão CLERK.
Exemplo:
Obtenha o menor salário da profissão CLERK.
Exemplo:
Obtenha a média salarial por departamento.
CLÁUSULA HAVING
A cláusula HAVING especifica uma restrição sobre a tabela agrupada que resultou
de uma cláusula GROUP BY anterior e elimina os grupos que não satisfazem a
condição estabelecida.
39
A cláusula HAVING é usada para especificar a qualidade que um grupo deve ter
para ser incluído no resultado. Ela efetua para os grupos a mesma função que a cláusula
WHERE efetua para as linhas.
A cláusula HAVING é sempre utilizada junto com a cláusula GROUP BY, sendo
que o HAVING é especificado sempre após o GROUP BY.
Exemplo:
Obtenha a média de salário dos departamentos que possuem mais de 3 empregados.
Exemplo:
Obtenha as profissões que o maior salário é igual ou maior que 3000.
SUBQUERIES (SUBCONSULTAS)
Uma subquery é uma cláusula SELECT aninhada com outra cláusula SELECT e
que retorna um resultado intermediário.
Exemplo:
SELECT coluna1, coluna2, ..........
FROM tabela
WHERE coluna = (SELECT coluna1, coluna2,........
FROM tabela
WHERE condição);
Exemplo:
Obtenha o nome, profissão e salário do empregado que possui o menor salário.
Uma subquery é composta por duas cláusulas SELECT, o SELECT principal e select
interno.
O comando SELECT interno é executado primeiro, produzindo um resultado. No
exemplo acima o resultado é 800.
O SELECT principal é processado usando o valor retornado pelo SELECT interno.
Observação: sempre que o SELECT interno retorna uma linha da tabela podem ser
utilizadas os operadores =, !=, <, <=, >, >=.
Exemplo:
Obtenha o nome, profissão, de todos os empregados que possuem a mesma profissão do
empregado BLAKE.
b.1) OPERADOR IN
Relembrando, o operador IN testa (verifica) os valores que estão em uma lista de
valores.
Exemplo:
Obtenha o nome, salário e número do departamento dos empregados que recebem o
menor salário de cada empregado.
ANY
Compara um valor com cada valor da lista de valores que foi retornado pela subquery.
Exemplo:
Obtenha o nome, salário, profissão e número do departamento de todos empregados que
recebem um salário maior que o menor salário dos empregados do departamento 30.
ALL
Compara um valor com todos os valores da lista de valores retornados pela subquery.
Exemplo:
Obtenha o nome, salário, profissão e número do departamento de todos os empregados
que recebem um salário maior, que todos os salários dos empregados do departamento
30.
Utilização do ORDER BY
Não é possível utilizar o ORDER BY em um SELECT interno, a regra é utilizar
somente um ORDER BY em uma subquery e este deve ser o último comando do
SELECT, ou seja no SELECT mais externo.
Aninhamento de subqueries
Também é possível aninhar (encadear) várias queries uma dentro da outra, não existindo
limites.
Exemplo:
Obtenha o número dos departamentos, onde os empregados recebem um salário médio
maior que a média salarial do departamento 30.
Exemplo:
Obtenha a profissão dos empregados que recebem a mais alta média salarial.
JOIN-EQUI-JOIN (SIMÉTRICO)
Exemplo:
Obtenha o nome e a profissão de todos os empregados e o nome dos
departamentos em que os empregados estão lotados.
Para resolver este exemplo, é necessário comparar (condição de join) o valor da
coluna deptno da tabela emp cpm o mesmo valor da coluna deptno da tabela dept,
extraindo os nomes dos departamentos.
Exemplo:
Obtenha o nome, a profissão de todos os empregados, o número e nome do
departamento em que os empregados estão lotados.
ERROR at line 1:
ORA-00918: columm ambiguously defined
PROBLEMA DE AMBIGÜIDADE
Sempre que existirem colunas com o mesmo nome em tabelas diferente é
necessário qualificar estas colunas informando o nome da tabela conforme o exemplo:
Exemplo:
SQL> SELECT ename, job, D.deptno, dname
FROM emp E, dept D
WHERE E.deptno = D.deptno
ORDER BY D.deptno;
Exemplo:
O join entre as tabelas emp e salgrade é do tipo NON-EQUI-JOIN, onde a grade
salarial dos empregados está armazenado na tabela salgrade, e o seu salário deve estar
entre (BETWEEN) um valor máximo e mínimo esta grade.
O operador BETWEEN é utilizado para construir a condição.
UNION
A união de duas relações é o conjunto de todas as linhas que estão em uma ou outra
relação, ignorando as duplicada, ou seja, retorna a união de dois SELECTs, ignorando as
linhas duplicadas.
INTERSECT
A interseção é o conjunto de todas as linhas que estão simultaneamente em ambas as
relações, ou seja, retorna a interseção de dois SELECTs.
MINUS
A diferença é o conjunto de todas as linhas que estão em apenas uma das relações, ou
seja, retornam a subtração de dois SELECTs.
TIPOS DE DADOS
Um banco de dados relacional consiste de tabelas, e para criar as tabelas do banco
de dados, é necessário especificar para cada coluna o tipo de dado e seu tamanho
máximo.
O SQL suporta basicamente os seguintes tipos de dados:
A) CHAR (W)
Especifica um tipo de dado que é composto de letras, números e caracteres
especiais, onde o W determina o comprimento máximo em caracteres. Não pode ser
maior que 255.
B) NUMBER
Especifica um tipo de dado que é composto por dígitos de 0 a 9. O sinal de mais (
+ ), menos (- ) e ponto decimal são opcionais.
C) NUMBER (W)
Especifica um tipo de dado que é composto por dígitos de 0 a 9. O sinal de mais (
+ ), menos (- ) e ponto decimal são opcionais. O W especifica o comprimento máximo,
não podendo ser maior que 38.
D) NUMBER(W,D)
Idem a NUMBER(W), sendo que o D determina o número de dígitos após o
pontos decimal.
E) DATE
Especifica um tipo de dado para armazenar data e hora.
F) LONG
Especifica um tipo de dado para qualquer tipo de caracter, podendo armazenar até
65.535 caracteres. Não é permitido definir mais de uma coluna por tabela.
Exemplos:
FIGURA
Coluna FIGURA com valores LONG.
48
ESTRUTURAS DE DADOS
• Tabelas podem ser criadas a qualquer hora;
• O comprimento do armazenamento dos dados é variável, onde somente os
caracteres/números armazenados ocupam espaço, espaços à esquerda e à direita
não são armazenados;
• Na criação da tabela, não é necessário especificar o tamanho da tabela;
• A estrutura da tabela pode ser alterada ON-LINE;
Se for especificado a restrição NOT NULL, cada linha deve ter valor diferente de NULL
para esta coluna. Se não for especificado nada, a opção NULL default é utilizada.
Exemplo:
CREATE TABLE dept (
deptno NUMBER(2) not null,
dname CHAR(12),
loc CHAR(12);
49
Exemplo1:
Criar uma tabela com as colunas número, nome, profissão e salário dos empregados do
departamento 30.
Exemplo 2:
Criar uma tabela com as colunas nome, salário e grade salarial de todos os empregados.
SAVEPOINTS APOS_INSERT_60
ROLLBACK APOS_INSERT_60;
IMPORTÂNCIA DA TRANSAÇÃO
As transações dão uma maior flexibilidade e controle quando se trabalha com
dados e garante a consistência dos dados quando ocorre um erro de usuário ou de
sistema.
CONTROLE DA INTEGRIDADE
Para manter o controle da integridade do banco de dados, os comando COMMIT e
ROLLBACK são utilizados. Estes comandos também fazem parte do padrão ANSI da
linguagem SQL.
Exemplo:
GRANT CONNECT, RESOURCE TO HANS IDENTIFIED BY SENHA1;
SINTAXE: ORACLE7
SINTAXE:
Exemplo:
GRANT SELECT ON DEPT TO HANS;
SINTAXE:
Exemplo:
REVOKE DELETE ON EMP FROM SCOTT;
Observação: Para verificar quais os usuários e seus privilégios e sobre quais tabelas,
visões ou seqüências, selecionar as tabelas do dicionário de dados
USER-TAB_GRANTS ou USER_COL_GRANTS;
A) - Sistema Operacional
O sistema Operacional estabelece um procedimento de LOGIN, ou seja, para abrir uma
sessão , informa-se um usuário válido e sua senha;
C) TABLESPACE
O usuário só pode alocar uma determinada área na TABLESPACE, definido pelo DBA.
D) TABLE (TABLE)
O criador das tabelas, chamado de OWNER, é o dono das tabelas criadas e para que
outros usuários tenham acesso as mesmas tabelas, o OWNER deve dar privilégios de
INSERT, UPDATE e DELETE para cada usuário específico ou para todos usuários
(PUBLIC).
E) DATE (DADOS)
Se o usuário tem acesso a uma tabela, todos os dados desta tabela estão disponíveis para
aquele usuário, mas se existir a necessidade de restringir o acesso aos dados de uma
tabela específica, isto é possível através da criação de um VIEW, onde o OWNER pode
dar acesso somente a determinadas linhas (ROWS) e colunas.
52
CONTROLE DE CONCORRÊNCIA
TIPOS DE BLOQUEIO
A) Bloqueio DDL - DATA DICTIONARY LOCK
• O controle de acesso é definido nos objetos do Banco de Dados;
• É utilizado nas operações dos comandos SQL que modificam o DICIONÁRIO
DE DADOS; EX.: CREATE TABLE, ALTER TABLE, DROP TABLE;
• Automaticamente controlado pelo núcleo do banco de dados;
53
NÍVEL DE BLOQUEIO
O bloqueio pode ser feito de duas formas, à nível de tabela ou nível de linha
(ROW);
* O bloqueio de tabela - Toda tabela fica bloqueada;
* O bloqueio de linha (ROW) - Uma linha individual da tabela fica
bloqueada.
DEADLOCK
Um DEADLOCK pode ocorrer quando dois ou mais usuários estão tentando
acessar o mesmo objeto do banco de dados.
Exemplo:
DROP TABLE dept;
Exemplo:
RENAME emp TO employee;
54
DICIONÁRIO DE DADOS
USER_xxxx
Visões com este prefixo possuem informação sobre os objetos criados pelo
usuário, ou seja, dos quais é dono (OWNER).
ALL_xxxx
O usuário pode acessar objetos aos quais recebeu direitos de acesso e dos quais é o
dono.
DBA_xxxx
Somente o usuário DBA pode acessar estas visões.
Exemplo:
NAME TYPE
-------------------------- -------------------
OBJECT_NAME CHAR(20)
OBJECT_ID NUMBER(38)
OBJECT_TYPE CHAR(10)
CREATED DATE
MODIFIED DATE
Exemplo:
Inserir o departamento número 50, com nome MARKETING e localização SAN JOSÉ.
Observação
Colunas com tipo de dado CHAR e DATE, devem ser colocadas entre aspas simples.
Para inserir uma data ou hora em outro formato utiliza-se a função TO_DATE.
Observação:
Sempre que o INSERT é executado, um prompt com o nome da variável é mostrado.
Exemplo:
Observação:
A tabela TABD10 deve ser criada antes.
57
UPDATE nome_tabela
SET nome_coluna1 = valor/expressão
[ , nome_coluna2 = valor/expressão, ...........]
WHERE condição;
Exemplo:
Alterar a profissão para vendedor e aumentar o salário em 10% para o empregado com
nome SCOTT.
UPDATE emp
SET job = 'VENDEDOR'
sal = sal *1.1
WHERE ename = 'SCOTT';
Exemplo:
Excluir todos os empregados que pertencem ao departamento 10.
Exemplo:
Criar uma view.
Exemplo:
DROP VIEW d10emp;
SEQUENCE - SEQÜÊNCIA
O ORACLE permite gerar uma seqüência numérica automática, que por exemplo
pode ser utilizada como CHAVE PRIMÁRIA única.
Exemplo
CREATE SEQUENCE dept_seq
INCREMENT BY 10
START WITH 10
MAXVALUE 10000;
Exemplo:
INSERT INTO dept
VALUES(dep_seq.NEXTVAL, 'ACCOUTING', 'NEW YORK');
Exemplo:
INSERT INTO dept
INDEXES - ÍNDICES
O ORACLE permite a criação de índices para recuperação de dados do banco de
dados. O método utilizado é o B-TREE.
Exemplo:
CREATE INDEX i_name ON emp (ename);
B) EXCLUIR ÍNDICES
DROP INDEX nome_índice;
Exemplo:
DROP INDEX i_name;
PROCESSO TRANSACIONAL
TRANSAÇÃO
Uma transação é uma operação executada no banco de dados que corrompe uma série de
alterações em uma ou mais tabelas.
Exemplo:
Retirar dinheiro no caixa do banco da sua conta concorrente.
Uma transação começa com o primeiro comando executável DML (INSERT, UPDATE,
DELETE) e termina quando encontra uma das seguintes situações:
• Um comando COMMIT/ROLLBACK;
• Um comando DDL;
61
COMMIT
• O comando COMMIT torna as alterações feitas no banco de dados como permanentes
no banco de dados;
• Exclui todos os SAVEPOINTS em uma transação;
• Termina a TRANSAÇÃO;
• Libera todos os bloqueios (LOCKS) executados pela transação.
62
COMMIT IMPLÍCITO
O COMMIT IMPLÍCITO ocorre nas seguintes situações:
• Antes de um comando DDL;
• Após um comando DDL;
• Ao terminar o SQL*PLUS (EXIT);
Exemplo de transação:
Incluir novo departamento na empresa.
A) COMANDO SET
O comando SET controla o ambiente no qual o SQL*PLUS está operando, podendo-se
fazer uma ambiente default, colocando os comandos SET's no arquivo LOGIN.SQL.
Sempre que o SQL*PLUS for executado este arquivo é lido, configurando o
SQL*PLUS.
Para verificar que variáveis de ambiente estão configuradas, utiliza-se SQL> SHOW
ALL;
Variáveis utilizadas
PAGESIZE [24 n]
Especifica o número de linhas por página.
Exemplo:
SQL>SET PAGESIZE 20;
LINESIZE [80 n]
Especifica o tamanho da linha
Exemplo:
SQL> SET LINESIZE 80
FEEDBACK [6 n OFF/ON]
Especifica o número de registros mostrados no comando SELECT. O parâmetro
ON/OFF mostra ou não.
63
ECHO [OFF/ON]
Mostra ou não a execução dos comandos SQL*PLUS, quando da utilização do comando
START ou @.
Exemplo:
SQL> SET ECHO ON
64
HEADING [OFF/ON]
Mostra ou não o nome das colunas no resultado do SELECT.
Exemplo:
SQL> SET HEADING OFF
PAUSE [OFF/ON]
Especifica pausa para mostrar no vídeo os resultados, teclando ENTER a cada pausa.
Exemplo:
SQL> SET PAUSE ON
B) COLUMN
O comando COLUMN estabelece opções para coluna.
An Alfanumérico, n tamanho
9 Numérico 999999 1234
0 Força zeros à esquerda 099999 001234
$ Sinal de dólar flutuante $999999 $1234
. (ponto) Ponto decimal 999999.99 1234.00
, Vírgula 999,999 1,234
(vírgula)
MI Sinal de menos 999999MI 1234-
Opções:
HEADING
Especifica um cabeçalho para cada coluna.
JUSTFY
Permite especificar o alinhamento da coluna, pode ser: LEFT, CENTER, RIGHT
DEFAULT
CHAR/DATE é JUSTFY LEFT
NUMBER é JUSTFY RIGHT
NULL string
Especifica uma string quando o valor é nulo.
65
Exemplo:
COL deptno FORMAT 099 HEADING 'Dept.'
COL job FORMAT A9 HEADING 'Profissão' JUSTFY RIGHT
COL empno FORMAT 9999 HEADING 'Número| Empregado'
COL sal FORMAT 99,999.99 HEADING 'Salário| Mensal'
COL comm FORMAT 99,999.99 HEADING 'Comissão| Anual' NULL 'Nulo'
COL rem FORMAT 999,999.999 HEADING 'Total| Remuneração'
14 rows selected.
TTITLE "string"
BTITLE
Mostra um rodapé de cada página centralizada.
BTITLE "string"
SQL> TTITLE
SQL> BTITLE
67
Exemplo:
TTITLE 'Company Report | Produced by Porsonalel DEPT'
BTITLE 'Company Confidential'
D) VARÁVEIS DO SISTEMA
SQL.PNO Página corrente
SQL.LNO Número de linha
SQL.USER Username
SQL.SQLCODE Último erro numa operação SQL
formato:
SKIP n
Pula n linhas. Se n for omitido, então pula uma linha.
LEFT
Alinhamento à esquerda.
CENTER
Alinhamento centralizado.
RIGHT
Alinhamento à direita.
FORMAT
Especifica o formato.
Exemplo:
TTITLE LEFT FORMAT 0999 'PAGE: 'SQL.PNO -
RIGHT 'Produced by | Accouting' SKIP 2 -
CENTER 'Confidential Sales Report' SKIP -
CENTER '--------------------------' SKIP 2 -
CENTER '----------------------'
Exemplo:
COLUMN SYSDATE NEW_VALUE TODAY NO PRINT
TTITLE LEFT 'Date : ' TODAY RIGHT FORMAT 999 'Page: '-
SQL.PNO SKIP -
LEFT 'USER: ' SQL.USER SKIP -
CENTER 'A Report With Reformated Date ' SKIP 2
Exemplo:
TTITLE LEFT 'Date: ' TODAY
G) QUEBRA DE RELATÓRIOS
O comando BREAK permite definir quebras a nível de coluna, página e relatório.
Exemplo:
Fazer totalizações no final do relatório.
BREAK ON REPORT
Opções:
PAGE
Pula de página quando o valor da coluna é alterado.
SKIP n
Pula n linhas quando o valor é alterado.
69
DUP[LICATE]
Valores duplicados. Default é NODUP.
Exemplo 01:
BREAK ON REPORT ON deptno PAGE ON job SKIP 2
BREAK ON REPORT ON deptno PAGE ON job DUP
Exemplo 02:
BREAK ON deptno SKIP 1 ON job ON REPORT
SQL> BREAK
H) CÁLCULOS A NÍVEL DE QUEBRA
O comando COMPUTE permite definir cálculos em quebras estabelecidas no comando
BREAK.
FORMATO
OF
Especifica a coluna ou expressão no qual o valor é calculado.
ON
Especifica o item de dado ou tabela usado para quebra.
Clause(s)
AVG
Valor médio, em tipo NUMBER.
COUNT
Contador de valores não nulos, em todos os tipos.
MAX
Valor máximo, em tipo NUMBER e CHAR.
MIN
Valor mínimo, em tipo NUMBER e CHAR.
70
NUMBER
Contador de linhas, em todos os tipos.
SUM
Somador em valores não nulos, em tipo NUMBER.
SQL> COMPUTE
Exemplo:
BREAK ON deptno SKIP 1 ON job ON REPORT
Exemplo 01
14 rows selected.
72
Exemplo 02
Relatório Confidencial
14 rows selected.
Exemplo 03
Confidencial
------------
Número Salário Comissão Total
Dept. Profissão Empregado Mensal Anual Remuneração
------- --------------- ------------- --------------- --------------- ---------------
010 PRESIDENT 7839 5,000.00 Nulo 60,0000.00
030 SALESMAN 7844 1,500.00 500.00 18,500.00
020 CLERK 7876 1,100.00 Nulo 13,200.00
030 CLERK 7900 950.00 Nulo 11,400.00
020 ANALYST 7902 3,000.00 Nulo 36,000.00
010 CLERK 7934 1,300.00 Nulo 15,600.00
14 rows selected.
75
Exemplo 04
SET PAGESIZE 20
SET LINESIZE 80
COL deptno FORMAT 099 HEADING ‘Dept.’
COL job FORMAT A9 HEADING ‘Profissão’ JUSTFY RIGHT
COL empno FORMAT 9999 HEADING ‘Número | Empregado’
COL sal FORMAT 99,999.99 HEADING ‘Salário | Mensal’
COL comm FORMAT 99,999.99 HEADING ‘Comissão | Anual’ NULL
‘Nulo’
COL rem FORMAT 999,999.99 HEADING ‘Total | Remuneração’
COL SYSDATE NEW_VALUE DATA NOPRINT
TTITLE LEFT 'Data :' DATA RIGHT FORMAT 0999 'Page :' SQL.PNO SKIP -
LEFT 'Usuário :' SQL.USER -
RIGHT 'Relatório Produzido pelo RH' SKIP 2 -
CENTER 'Relação de Empregados' SKIP -
CENTER '-------------------------' SKIP 2
BTITLE CENTER 'Condifencial' SKIP -
CENTER '------------'
--------------- ---------------
AVG 2,073.21 675,00
SUM 29,025.00 2,700.00
Confidencial
----------------
79
14 rows selected.
80
PL/SQL
O PL/SQL é uma linguagem de 3ª de geração que tem por objetivo processar
informações do banco de dados ORACLE.
Características
• Permite recuperar, incluir, atualizar e excluir dados de tabelas ;
• Permite criar variáveis e constantes;
• Permite utilizar comandos condicionais e de repetição.
Estrutura do PL/SQL
Um bloco PL/SQL é basicamente composto de uma área de declaração, de comandos e
de exceções;
DECLARE
.
.
definir variáveis e constantes
.
.
BEGIN
.
.
/* ---------Comentários------------*/
comandos (exemplo: SELECT ......)
.
atribuição de variáveis
.
condições (exemplo: IF...ELSE...END IF)
.
comando (COMMIT)
END:
VARIÁVEIS
São áreas em memórias que servem para armazenar dados, podendo conter diversos
valores ao longo da execução do programa.
CONSTANTES
Também são áreas de memória que servem para armazenar dados, mas que possui valor
fixo e deve ser inicialmente no ato da declaração e seguido da palavra "CONSTANT".
TIPOS DE DADOS
81
CHAR
Variáveis ou constantes que armazenam valores alfanuméricos com no máximo de 255
caracteres. Caso não seja informado o tamanho, o default '1 1.
Exemplo:
PAGAMENTO CHAR(40);
82
NUMBER
Variáveis ou constantes que armazenam valores numéricos com no máximo de 38
caracteres. Caso não seja informado o tamanho, o default é 38. Também pode ser
definido precisão escalar.
Exemplo:
RECIBO NUMBER(2);
CODIGO CONSTANT NUMBER(4) :=1;
DATE
Variáveis ou constantes que armazenam data, hora (com minutos e segundo e o século).
Exemplo:
DATA_RECEBE DATE;
BOOLEAN
Variáveis ou constantes que armazenam TRUE, FALSE ou NULL.
Exemplo:
FLAG BOOLEAN;
DECLARAÇÃO DE ATRIBUTOS
Para declarar uma variável, constante ou coluna com a mesma definição da coluna de
uma tabela, o atributo %TYPE pode ser utilizado.
Formato
nome_tabela.nome_coluna%TYPE;
Exemplo:
v_empno emp.empno%TYPE;
COMANDOS DE ATRIBUIÇÃO
No PL/SQL o comando de atribuição é o sinal de dois-pontos seguido do sinal de
igualdade ( := ).
Exemplo:
RESULTADO:=NUMERO1/(NUMERO2+NUMERO3);
Para garantir que os dados a serem manipulados não serão alterados ou excluídos
por outros usuários, utiliza-se o comandos LOCK TABLE ou o comando SELECT com
a cláusula FOR UPDATE.
84
Sintaxe:
IF condição THEN
comandos....
[ELSEIF condição THEN comandos]
[ELSE comandos]
END IF
Exemplo:
*/
* *This block debits account 3 by $500 onl if there are sufficient
** funds to cover the withdraw.
**
** copyright © 1989, 1992 by Oracle Corporation
*/
DECLARE
85
acct_balance NUMBER(11,2);
acct CONSTANT NUMBER(4) := 3;
debit_amt CONSTANT NUMBER(5,2) := 500.00;
BEGIN
SELECT bal INTO acct_balance
FROM accounts
FOR UPDATE OF bal;
IF acct_balance >= debit-amt THEN
UPDATE accounts SET bal = bal - debit_amt
WHERE account_id = acct;
ELSE
INSERT INTO temp VALUES
(acct, acct_balance, 'infficient funds');
--insert account, current balance, and message
END IF;
COMMIT;
END;
/
Sintaxe:
FOR contador IN [REVERSE] inicial...final LOOP
relação_de_comandos
END LOOP
/*
** This example illustrates block structure and scope rules. An
** outer block declares two variables named X and COUNTER, and loops
four
** times. Inside the loop is a sub-block that also declares a variable
** named X. The values inserted into the TEMP table show that the two
** X's are indeed different.
**
*/
DECLARE
X NUMBER := 0;
COUNTER NUMBER := 0;
BEGIN
FOR i IN 1..4 LOOP
X:=X +1000;
COUNTER:=COUNTER + 1;
INSERT INTO temp VALUES (X, COUNTER, 'in OUTER
loop');
/*start an inner block */
86
DECLARE
X NUMBER := 0; --this is a local version of x
BEGIN
FOR i IN 1..4 LOOP
X:=X+1; --this increments the local X
COUNTER := COUNTE +1;
INSERT INTO temp VALUES (X, COUNTER, 'inner
loop');
END LOOP;
END;
END LOOP;
COMMIT;
END;
/
87
Sintaxe:
WHILE condição LOOP
relação_de_comandos
END LOOP
*/
** This block finds the first employee who has a salary over $4000
** and is higher in the chain of command then employee 7902
**
*/
DECLARE
salary emp.sal%TYPE;
mgr_num emp.mgr%TYPE;
last_name emp.ename%TYPE;
starting_empno CONSTANT NUMBER(4) := 7902;
BEGIN
SELECT sal, mgr INTO salary, mgr_num
FROM emp
WHERE empno = starting_empno;
WHILE salary < 4000 LOOP
SELECT sal, mgr, ename INTO salary, mgr_num, last_name
FROM emp
WHERE empno = mgr_num;
END LOOP;
INSERT INTO temp VALUES (NULL, slary, last_name);
COMMIT;
END;
/
Sintaxe:
LOOP
relação_de_comandos
END LOOP
88
COMANDO EXIT
O comando EXIT é utilizado para interromper a execução de um comando
Sintaxe:
EXIT [WHEN condição]
/*
** Programa exemplo, utilizando FOR...LOOP...END LOOP
**
*/
DECLARE
X NUMBER := 100;
BEGIN
FOR i NIM 1..10 LOOP
IF MOD(i,2) = 0 THEN --i is even
INSERT INTO temp VALUES (i, X, 'i is even');
ELSE
INSERT INTO temp VALUES (i, X, 'i is odd');
END IF;
X:=X + 100;
END LOOP;
COMMIT;
END;
/
89
NO_DATA_FOUND
Quando não existirem dados para retornar no comando select.
OTHERS
Quando ocorrem outros erros.
Sintaxe:
WHEN tratador_exception THEN
comando1;
comando2;
comando3;
Exemplo:
DECLARE
v_ename CHAR(15);
v_job CHAR(10);
BEGIN
SELECT ename, job
INTO v_ename, v_job
FROM emp
WHERE empno = 1111;
EXCEPTION
WHEN NO_DATA_FOUND THEN
90
CURSORES
Às vezes o PL/SQL necessita de uma área de trabalho para armazenar dados
recuperados por um comando SQL. Esta área recebe um nome, e é conhecido como
CURSOR.
CURSOR EXPLÍCITOS
O comando SELECT normalmente recupera mais de um registro (ROWS) da tabela, e
estes registros podem ser armazenados em um CURSOR definido para serem
processados mais tarde.
Para trabalhar com cursores, os seguintes passos devem ser seguidos:
• Declarar o cursor (DECLARE);
• Abrir o cursor (OPEN);
• Buscar os dados do cursor (FETCH);
• Fechar o cursor (CLOSE).
A) DECLARANDO O CURSOR
Sintaxe:
CURSOR nome_cursor IS
comando_select;
B) ABRINDO O CURSOR
Sintaxe:
OPEN nome_cursor;
D) FECHANDO O CURSOR
Sintaxe:
CLOSE nome_cursor;
Exemplo:
DECLARE
name CHAR(12);
hdate DATE;
oldcomm NUMBER(7,2);
CURSOR sell IS
SELECT ename, hiredate, comm
FROM emp
WHERE deptno = 30 AND sal > 1000;
BEGIN
OPEN sell;
LOOP
FETCH sell INTO name, hdate, oldcomm;
92
Exemplo:
LOOP
FETCH sell INTO name, hdate, oldcomm;
EXIT WHEN sell%NOTFOUND;
..............
END LOOP;
ATRIBUTO %FOUND
Este atributo é o contrário do %NOTFOUND. Ao atributo é atribuído verdadeiro, se o
FETCH encontrar registros (rows) para buscar, caso contrário é atribuído FALSO.
Exemplo:
LOOP
FETCH sell INTO name, hdate, oldcomm;
IF sell%FOUND THEN
INSERT INTO tabela01 VALUES (...);
ELSE
EXIT
END IF;
.......
END LOOP;
/*
** Exemplo PL/SQL utilizando CURSOR
**
*/
DECLARE
num1 data_table.n1%TYPE; -- Declare variables
num2 data_table.n2&TYPE; -- to be of same type as
num3 data_table.n3%TYPE; --database columns
result temp.num_col1%TYPE;
CURSOR c1 is
SELECT n1, n2, n3
FROM data_table
WHERE exper_num = 1;
BEGIN
OPEN c1;
LOOP
FETCH c1 INTO num1, num2, num3;
EXIT WHEN c1%NOTFOUND;
94
/*
**
** Programa exemplo, utilizando CURSOR
**
*/
DECLARE
CURSOR c1 IS
SELECT ename, empno, sal
FROM emp
ORDE BY sal DESC;
-- start with highest-paid employee
my_ename CHAR(10);
my_empno NUMBER(4);
my_sal NUMBER(7,2);
BEGIN
OPEN c1;
FOR i IN 1..5 LOOP
FETCH c1 INTO my_ename, my_empno, my_sal;
EXIT WHEN c1%NOTFOUND;
/*in case the number requested is more*/
/*than the total number of employees*/
INSERT INTO temp VALUES (my_sal, my_empno, my_ename);
COMMIT;
END LOOP;
CLOSE c1;
END;
/
*/
** Thies block does some numeric processing on data that
** comes from experiment #1. The results are stored in
** the TEMP table.
**
*/
DECLARE
num1 data_table.n1%TYPE; -- Declare variables
95
/*
**
** This block does some numeric processing on data that comes
** from experiment #1. The results are stored in the TEMP table.
**
*/
DECLARE
result temp.num_col1%TYPE;
CURSOR c1 IS
SELECT n1, n2, n3
FROM data_table
WHERE exper_num = 1;
BEGIN
FOR c1rec IN c1 LOOP
/* calculate an store the results*/
result:=c1rec.n2/(c1rec.n1 + c1rec.n3);
INSERT INTO temp VALUES (result, NULL, NULL);
END LOOP;
COMMIT
END;
/