Edgar Roque
Leandro Farias
Manoel Serafim Neto
Rodrigo da Silva Gonçalves
Thiago da Silva Gonçalves
Resumo
Oracle Corporation é uma companhia que desenvolve softwares corporativos. Neste
artigo será abordado o seu principal produto, o sistema de gestão de bancos de dados
relacionais chamado Oracle. Um breve histórico desde sua criação até as versões atuais;
principais empresas mundiais que o utiliza; tipos de dados existentes em suas
aplicações; plataformas que rodam o Banco de Dados e algumas funções peculiares.
Abstract
Oracle Corporation is a company that develops enterprise software. This article will
address the main product, the management system relational database called Oracle. A
brief history since its inception to the present version, leading companies using it, kind
of existing data in their applications, platforms that run the database and some features
peculiar.
1
PL/SQL (Expressão inglesa Procedural Language/Structured Query Language) é uma extensão da linguagem padrão SQL para o SGBD Oracle da
Oracle Corporation. É uma Linguagem Procedural da Oracle que estende a linguagem SQL. Permite que a manipulação de dados seja incluída em
unidades de programas. Blocos de PL/SQL são passados e processados por uma PL/SQL É a linguagem básica para criar programas complexos e
poderosos, não só no banco de dados, mas também em diversas ferramentas Oracle.
1
última (2007) lançada pela Oracle Corporation. Existe também uma versão livre, Oracle
Database 10g Express Edition, disponível para download na internet. Fundada em 1º de
setembro de 1988, a Oracle do Brasil, tem sede em São Paulo (SP) e filiais em Belo
Horizonte (MG), Brasília (DF), Porto Alegre (RS) e Rio de Janeiro (RJ). A Oracle do
Brasil conta com mais de 600 parceiros. Alguns clientes no País: Alcoa, TAM, Ticket,
Tigre, Telefonica, General Motors, Sky Brasil, L'Óreal, CVC, Banco Toyota, Schahin
Engenharia, entre outros.
2
varia de 0 a 9 com o padrão 6; TIMESTAMP (precisão) WITH TIME ZONE -
Campo de tamanho fixo de 13 bytes, que representa um valor data/hora e
também armazena a time zone; TIMESTAMP (precisão) WITH LOCAL TIME –
Campo de tamanho variável na faixa de 7 a 11 bytes. É similar ao tipo anterior.
A diferença é que ele armazena a time zone do banco de dados e recupera a time
zone do cliente.
d) Tipos de Dados Intervalos: INTERVAL DAY (day_precision) TO SECOND
(second_precision) - Campo de tamanho fixo de 11 bytes que representa um
período de tempo. Ele inclui dias, meses, horas, minutos e segundos;
INTERVAL YEAR (year_precision) TO MONTH - Campo de tamanho fixo de
5 bytes que representa um período de tempo. Inclui anos e meses.
e) Tipos de Dados Binários: RAW (size) - Campo de tamanho variável que
armazena dados em formato binário. O tamanho máximo para esse tipo é de
2000 bytes; LONG RAW - Campo de tamanho variável que armazena dados em
formato binário. O tamanho máximo para esse tipo é 2 GB; BLOB - Binary
Large Object é um campo que armazena dados binários não estruturados. Seu
tamanho máximo é de 4 GB; CLOB - Caracter Large Object é um campo que
armazena caracteres até um tamanho máximo de 4 GB; NCLOB - National
Character Large Object é um campo que armazena caracteres comuns e
Unicode e pode chegar a 4GB; BFILE - Um arquivo binário externo. O tamanho
máximo é de 4 GB. Esse tamanho também é limitado pelo S.O.
f) Tipos de Dados Rows: ROWID - Um tipo de dado que contem dados binários e
é utilizado para representar o endereço de um registro; UROWID - Universal
ROWID é o tipo de dado usado para armazenar o endereço lógico e físico de um
registro de uma tabela organizada por índice.
3
4. Versões existentes no mercado [4]
Além das diferentes versões do software de gerenciamento de banco de dados Oracle, a
Oracle Corporation subdivide seu produto em "edições" variáveis - aparentemente por
razões de marketing e controle de licenças.
Standard Edition (SE) contém a funcionalidade básica de banco de dados. A
Oracle Corporation licencia este produto na base de usuários ou de sockets,
normalmente para servidores com um à quatro UCPs 2. Se o número de UCPs
exceder 4, o usuário deve migrar para a licensa Enterprise. SE não possui limite
de memória e pode utilizar clusterização com o Oracle RAC sem custo
adicional.
Enterprise Edition (EE) inclue mais funcionalidades que a 'Standard Edition',
especialmente nas áreas de performance e segurança. A Oracle Corporation
licencia este produto na base de usuários ou de núcleos de processamento,
normalmente para servidores com um ou mais UCPs. EE não tem limite de
memória e pode utilizar clusterização usando o software Oracle RAC.
Standard Edition One, introduzido com o Oracle 10g, possui algumas restrições
de funcionalidades adicionais. A Oracle Corporation comercializa-o para uso
em sistemas com uma ou duas UCPs. Ela não possui limitações de memória.
Express Edition ('Oracle Database XE'), introduzido em 2005, oferece o Oracle
10g livre para distribuição nas plataformas Windows e Linux (com uma
limitação de apenas 150 MB e restrita ao uso de apenas uma UCP, um máximo
de 4 GB de dados de usuário e 1 GB de memória). O suporte para esta versão é
feito exclusivamente através de fóruns on-line, sem o suporte da Oracle.
Oracle Personal Edition fornece a funcionalidade de "alto fim" da Enterprise
Edition mas é comercializada (e licenciada) para desenvolvedores específicos
que trabalham em estações de trabalho pessoais.
Oracle Database Lite, destinada para rodar em dispositivos móveis. O banco de
dados, localizado parcialmente no dispositivo móvel, pode sincronizar com uma
instalação baseada em servidor.
2
Central Processing Unit (Unidade central de processamento, em português) ou o processador é a parte de um sistema de computador que executa
as instruções de um programa de computador, e é o elemento primordial na execução das funções de um computador.
4
5. Funções internas do BD Oracle [5]
A Oracle oferece através da linguagem PL/SQL muitos recursos para utilização e
tratamentos de dados, como funções matemáticas, de datas e caracteres. A maioria dos
sistemas de informações da atualidade precisam manipular seus dados e necessitam
dessas funções para consultar seu histórico.
O armazenamento e consulta de dados, o próprio SGBD oferece recursos. Estes recursos
são funções que contém parâmetros de formatação permitindo a manipulação de
conteúdo como, data, caracteres e valores numéricos no servidor do banco de dados.
A tabela abaixo ilustra algumas funções de manipulação de caracteres.
Tabela 1
Funções de manipulação de String(caracter)
LOWER(string) Converte uma string em caixa alta para caixa baixa.
Select LOWER(nome) from Funcionario
INITCAP(string) Converte a primeira letra da palavra em maiúscula
Select INITCAP(nome) from funcionario
CONCAT(string) Serve para juntar as colunas em apenas uma sequência.
Select CONCAT(CONCAT(nome,´- ´), endereço) from
funcionario
5
A tabela abaixo ilustra algumas funções de matemática.
Tabela 3
Funções matemáticas
ROUND(numero, precisão) Arredonda o número fornecido de acordo com a
precisão informada.
Select salario, ROUND(salario, -2) from funcionario
MOD(numero, divisor) Retorna o resto de uma divisão.
Select salario, MOD(salario,3) from funcionario
POWER(numero, potência) Retorna o valor elevado à potência informada.
Select salario, POWER(salario, 2) from funcionario
6. Procedures [6]
Uma procedure nada mais é do que um bloco PL/SQL nomeado. Pode ser compilado e
armazenado no banco de dados como um objeto de schema. Graças a essa característica
as procedures são de fácil manutenção, o código é reutilizável e permitem que
trabalhemos com módulos de programa. A sintaxe básica de uma procedure é:
Onde:
REPLACE - indica que caso a procedure exista ela será eliminada e substituída pela
nova versão criada pelo comando; BLOCO PL/SQL - inicia com uma cláusula BEGIN
e termina com END ou END nome_da_procedure; NOME_DA_PROCEDURE -
indica o nome da procedure; PARÂMETRO - indica o nome da variável PL/SQL que
é passada na chamada da procedure ou o nome da variável que retornará os valores da
procedure ou ambos. O que irá conter em parâmetro depende de MODO; MODO -
Indica que o parâmetro é de entrada (IN), saída (OUT) ou ambos (IN OUT). É
importante notar que IN é o modo default, ou seja, se não declararmos nada o modo do
nosso parâmetro será, automaticamente, IN; TIPODEDADO - indica o tipo de dado do
parâmetro. Pode ser qualquer tipo de dado do SQL ou do PL/SQL. Pode usar
referências como %TYPE, %ROWTYPE ou qualquer tipo de dado escalar ou
6
composto. Atenção: não é possível fazer qualquer restrição ao tamanho do tipo de dado
neste ponto; IS|AS - a sintaxe do comando aceita tanto IS como AS. Por convenção
usamos IS na criação de procedures e AS quando estivermos criando pacotes; BLOCO
PL/SQL - indica as ações que serão executadas por aquela procedure.
Exemplo de Criação:
CREATE PROCEDURE stp_Cidade (
P_codigo Cidade.Codigo%Type,
P_nome Cidade.nome%Type,
P_uf Cidade.uf%Type,
P_pais Cidade.pais%Type) IS
BEGIN
Delete Cidade Where Codigo = P_codigo;
END;
Exemplo de Alteração:
REPLACE PROCEDURE stp_Cidade (
P_codigo Cidade.Codigo%Type,
P_nome Cidade.nome%Type,
P_uf Cidade.uf%Type,
P_pais Cidade.pais%Type) IS
BEGIN
Delete Cidade Where Codigo = P_codigo;
END;
Exemplo de Exclusão:
DROP PROCEDURE stp_Cidade;
7. Funções [7]
Uma função no Oracle é muito semelhante a uma procedure. Ambos aceitam
argumentos, que podem ter qualquer modo. Ambos são formas diferentes de blocos de
PL/SQL, com seções declarativas, executável e de exceções. Ambos podem ser
armazenados na base de dados e declarados num bloco. Porém, uma chamada de
procedure é uma instrução PL/SQL por si só, enquanto que uma chamada de função é
chamada como parte de uma expressão.
7
Create [OR REPLACE] FUNCTION nome_função
[(argumento[{IN | OUT | IN OUT}] tipo,
…
[(argumento[{IN | OUT | IN OUT}] tipo,
RETURN tipo_retorno { IS | AS }
corpo_funcao
8
Index Non-Clustered: Possui uma ordenação a nível de página possuindo as mesmas
restrições dos index clustered.
As vezes temos que recuperar as informações das tabelas o mais rápido possível porém
as vezes usamos os index em uma determinada consulta, porém não obtemos as
informações com a rapidez que foram solicitadas, para tentar solucionar esse problema
foi inserido a opção de filtro, tal opção só é demonstrada quando usamos os index em
conjunto da clausula ‘Where’ podendo aumentar a performance.
Para trabalhar com clausula ‘Where’ em conjunto com index temos algumas restrições:
Não podemos usar Non-Clustered.
Não podemos usar colunas computadas.
Temos sempre que ter o cuidado quando trabalhamos com index para não deixa as
paginas de dados chegarem ao seu tamanho máximo, para auxiliar, o banco possui duas
opções, a Fillfactor e a Pad_Index, onde a opção FillFactor especifica uma
porcentagem de espaço livre nos níveis, onde esse espaço será usado na criação ou
recriação de um index e quando usamos o Pad_Index estamos aplicando a porcentagem
de espaço livre do nível FillFactor nos níveis intermediário.
Outro recurso na criação de index que é muito importante na hora de criá-lo é a cláusula
‘With On Line’ que por padrão vem desativada, se não ativarmos essa cláusula no
momento que fomos criar um index tudo ocorre normalmente, porém quando
precisamos recriar algum index não conseguiremos fazer qualquer seleção ou alteração
nos dados das tabelas, pois ficar bloqueado o acesso as informações.
Onde:
Tipo - Os index podendo ser unique, clustered ou no clustered; Nome - Nome que
devemos da ao index; Tabela - Nome da entidade que ira criar o index; Colunas -
Nome das colunas que iremos usar respeitando as restrições.
9. Trigers [9]
São procedimentos que podem ser gravados em Java, PL/SQL ou C. São executados (ou
disparados) implicitamente quando uma tabela é modificada, um objeto é criado ou
9
ocorrem algumas ações de usuário ou de sistema de banco de dados. As triggers são
similares as stored procedures diferindo, apenas, na maneira como são chamadas. A
trigger é executada implicitamente quando ocorre algum evento de trigger, enquanto a
stored procedure deve ser executado explicitamente.
Ex.:
CREATE OR REPLACE TRIGGER Print_salary_changes
BEFORE DELETE OR INSERT OR UPDATE ON Emp_tab
FOR EACH ROW
WHEN (new.Empno > 0)
DECLARE
sal_diff number;
BEGIN
[…]
END;
10
explícito significa que o usuário publicou um COMMIT comunicado. Um pedido
implícito pode ser feita através do término normal de uma aplicação ou em
linguagem de definição, por exemplo. As alterações introduzidas pelas instruções
SQL da sua transação se tornam permanentes e visíveis a outros usuários somente
após sua transação for confirmada. Somente os usuários de outras operações que
começou depois vão ver as alterações confirmadas.
Nível de instrução Rollback
Se em algum momento durante a execução de uma instrução SQL acontecer um erro,
todos os efeitos da declaração são revertidas. O efeito da reversão é como se essa
afirmação nunca tivesse sido executado. Esta operação é um nível de rollback.
Um exemplo de erro descoberto durante a instrução é tentar inserir um valor duplicado
em uma chave primária. SQL único envolvido em um impasse (concorrência para os
mesmos dados) também pode causar um nível de rollback.
11
12. Referências
[1]http://www.oracle.com/global/br/corporate/pressroom/FACTSHEET_Brasil_Abril.p
df (acesso em 15/09/2010)
[2]http://pt.efreedom.com/Question/1-1377797/Lista-de-tipos-de-dados-Oracle (acesso
em 14/09/2010)
[3] http://www.oracle.com/index.html (acesso em 14/10/2010)
[4]http://www.oracle.com/global/br/corporate/pressroom/FACTSHEET_Brasil_Abril.p
df (acesso em 15/10/2010)
[5]http://pgdocptbr.sourceforge.net/pg80/sql-createfunction.html (acesso em
23/10/2010)
[6]http://www.linhadecodigo.com.br/artigo/335/PL_SQLProcedures-e-
Fun%C3%A7%C3%B5es.aspx (acesso em 16/11/2010)
[7]http://www.linhadecodigo.com.br/artigo/335/PL_SQLProcedures-e-
Fun%C3%A7%C3%B5es.aspx (acesso em 16/11/2010)
[8]http://www.devmedia.com.br/post-15590-Trabalhado-com-Index-SQL-
SERVER.html (acesso em 22/10/2010)
[9]http://www.linhadecodigo.com.br/artigo/322/oracletrigger.aspx (acesso em
16/11/2010)
[10]http://download.oracle.com/docs/cd/B10501_01/server.920/a96524/c17trans.htm
(acesso em 16/11/2010)
[11]http://www.youblisher.com/p/55209-Trabalho-Banco-de-Dados-Oracle/ (acesso em
16/11/2010)
12