PLSQL Avancado

May 17, 2019 | Author: a2barbosa | Category: Pl/Sql, Sql, Data Type, Pointer (Computer Programming), Computer Program
Share Embed Donate


Short Description

Apostila de PL/SQL Avançado...

Description

PL/SQL Avançado

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

2

1

MUTATING MUTATING TABLES TABLES ............................ .......................................... ............................ ............................ ............................... ............................... ............................ ........................ .......... 4 1.1 1.2 1.3

2

O QUE É MUTATING TABLE ?.................................... ?.................................................. ............................... ............................... ............................ ........................ .......... 4 SIMULANDO UM MUTATING TABLE .............................. ............................................ ............................ ............................. ............................... ...................... ...... 4 QUAIS EVENTOS CAUSAM MUTATING TABLE......................... TABLE....................................... .............................. .............................. .......................... ............ 5

CURSOR VARIABLES VARIABLES............. ........................... ............................. ............................... .............................. ............................ ............................. ............................... ...................... ...... 7 2.1 2.2 2.3 2.4 2.5 2.6

3

CARACTERÍSTICAS DAS VARIÁVEIS CURSOR ............................. ........................................... ............................ .............................. .............................. .............. 7 DECLARANDO O TIPO REF CURSOR E A VARIÁVEL DO TIPO CURSOR ............................ .......................................... ................... ..... 8 ABRINDO UMA VARIÁVEL DO TIPO CURSOR (OPEN - FOR) ............................ ............................................ .............................. ................... ..... 9 EXTRAINDO DADOS DA VARIÁVEL DO TIPO CURSOR (FETCH) (FETCH) ............................ ........................................... .............................. ............... 9 FECHANDO UMA VARIÁVEL DO TIPO CURSOR (CLOSE) (CLOSE).............. .............................. ............................... ............................. ........................ .......... 9 EXEMPLO DE VARIABLE CURSOR CURSOR ........................... .......................................... ............................. .............................. .............................. ........................ .......... 10

LOCAL MODULES................... MODULES................................. ............................. ............................... .............................. ............................ ............................. ............................... .................... .... 11 3.1

EXEMPLO DE UM LOCAL MODULE MODULE ........................... .......................................... ............................. .............................. .............................. ........................ .......... 11

4

OVERLOADIN OVERLOADING.......... G........................ ............................ ............................. ............................... .............................. ............................ ............................. ............................... .................... .... 12

5

FUNCTIONS FUNCTIONS EM UMA INSTRUÇÃO INSTRUÇÃO SQL...................................... SQL.................................................... ............................. ............................... .................... .... 14 5.1

6

PRAGMA RESTRICT_REFER RESTRICT_REFERENCES........ ENCES...................... ............................. ............................. .............................. .............................. ........................ .......... 14

PRIMARY KEY X WHERE CURRENT OF X ROWID PARA UPDATE.................. UPDATE....... ..................... ................... ......... 17 6.1 6.2

ALTERANDO PELA PRIMARY KEY................................... KEY................................................. ............................ ............................. ............................... .................... .... 17 ALTERANDO PELA WHERE CURRENT OF ............................. ........................................... ............................ .............................. ............................ ............ 18

6.2.1

6.3

6.4 7

Efeitos causados pelo FOR UPDATE .................... ......... ........... .................... ......... ........... .................... ......... ........... .................... .......... ................ ...... 18

ALTERANDO PELO ROWID ............................ .......................................... ............................. ............................. .............................. .............................. ........................ .......... 18 UPDATE............ ........ ... 19 COMPARAÇÃO PRIMARY KEY X WHERE CURRENT OF X ROWID PARA UPDATE.......

EXPLICIT EXPLICIT CURSORS CURSORS X IMPLICIT IMPLICIT CURSORS CURSORS .............................. ............................................ ............................. ............................... .................... .... 21 7.1

COMPARANDO IMPLICIT CURSOR X EXPLICIT CURSOR.............. CURSOR............................. ............................. ............................ ................ 22

8

ORACLE AND PL/SQL PL/SQL FEATURES FEATURES BY VERSION VERSION NUMBER.............. NUMBER .............................. .............................. ........................ .......... 23

9

DEPENDÊNCIA DEPENDÊNCIASS E RECOMPILAÇÃO RECOMPILAÇÃO DE OBJETOS.................... OBJETOS.................................. .............................. .............................. ................. ... 24 9.1 9.2 9.3 9.4 9.5

10 10.1 10.2 10.3 10.4 10.5 10.6 10.7

11

DEPENDÊNCIA DIRETA E INDIRETA .............................. ............................................ ............................ ............................ ............................... ............................ ........... 24 DEPENDÊNCIA LOCAL E REMOTA ............................ .......................................... .............................. ............................... ............................. ............................ ................ 25 CONSIDERAÇÕES SOBRE A RECOMPILAÇÃO AUTOMÁTICA DE OBJETOS ............................. ........................................... ................. ... 26 VISUALIZANDO DEPENDÊNCIAS DIRETAS (USER_DEPENDE (USER_DEPENDENCIES) NCIES)............. ............................. .............................. ................. ... 27 VISUALIZANDO DEPENDÊNCIAS DIRETAS E INDIRETAS ........................... .......................................... ............................. ............................ ................ 27

ORACLE PACKAGES PACKAGES............ ............................ .............................. ............................. ............................. ............................ .............................. .............................. ................. ... 29 DBMS_JOB.............. DBMS_JOB............................ .............................. .............................. ............................ ............................. ............................. .............................. .............................. ................. ... 29 DBMS_DDL........... DBMS_DDL......................... ............................ ............................. ............................... .............................. ............................ ............................. ............................... .................... .... 29 DBMS_JOB.............. DBMS_JOB............................ .............................. .............................. ............................ ............................. ............................. .............................. .............................. ................. ... 29 DBMS_OUTPUT.......................... DBMS_OUTPUT.......................................... .............................. ............................. ............................. .............................. .............................. ........................ .......... 29 DBMS_SQL DBMS_SQL .............................. ............................................. ............................. ............................ .............................. ............................... ............................. ............................ ................ 29 UTL_FILE....................... UTL_FILE..................................... .............................. .............................. ............................. ............................. .............................. .............................. ........................ .......... 29 DBMS_SHARED DBMS_SHARED_POOL..... _POOL................... ............................. ............................... .............................. ............................ ............................. ............................... .................... .... 29

COBOL E ORACLE.................................. ORACLE................................................ ............................ .............................. ............................... ............................. ............................ ................ 29

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

3

13 13.1 13.2 13.3 13.4 13.5

DIVERSOS DIVERSOS (DICAS)................ (DICAS)................................ .............................. ............................. ............................. ............................ .............................. .............................. ................. ... 29 HINTS DE PAGINAÇÃO .............................. ............................................ ............................. ............................. ............................ .............................. .............................. ................. ... 29 PLS_INTEGER PLS_INTEGER............... ............................. .............................. .............................. ............................. ............................. .............................. .............................. ........................ .......... 29 VARRAY (ORACLE8) ............................... ............................................. ............................ .............................. ............................... ............................. ............................ ................ 29 RECURSIVIDADE ............................. ............................................. .............................. ............................. ............................. .............................. .............................. ........................ .......... 29 DICIONÁRIO ORACLE ORACLE ............................ .......................................... ............................. ............................. ............................ .............................. .............................. ................. ... 29

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

4

1 MUT MUTATING TIN G TABLE TABLES S

1.1

O que é MUTATING TABLE ? 

Uma MUTATING table ou tabela mutante é uma tabela que está sendo modificada modificada atualmente por por uma instrução instrução UPDATE, DELETE DELETE ou INSERT. Uma Uma tabela não é considerada mutante para gatilhos STATEMENT, somente para triggers de ROW (FOR EACH ROW).

1.2 Simulando um MUTATING TABLE 

Considere a trigger abaixo. Esta é disparada antes do UPDATE (BEFORE UPDATE) para cada row (FOR EACH ROW). A trigger tem a finalidade de verificar se na tabela QUOTAS_AREAS já não existe outro registro com datas intercaladas. A tabela QUOTAS_AREAS é uma tabela MUTATING. Sendo assim, a trigger não executará retornando o seguinte erro : ORA-04091: table USUARIO2.QUOTAS_AREAS USUARIO2.QUOTAS_AREAS is MUTATING, trigger/function may not see it ORA-06512: at "USUARIO2.TRG_BUPD_Q "USUARIO2.TRG_BUPD_QUOTAS_AREA UOTAS_AREAS", S", line li ne 2 ORA-04088: error during execution of trigger 'USUARIO2.TRG_BUPD_QUOTAS_A 'USUARIO2.TRG_BUPD_QUOTAS_AREAS' REAS'

CREATE OR REPLACE TRIGGER TRG_BUPD_QUOTAS_ARE TRG_BUPD_QUOTAS_AREAS AS BEFORE UPDATE ON QUOTAS_AREAS FOR EACH ROW BEGIN FOR REG_AREAS_QUOTAS IN (SELECT * FROM QUOTAS_AREAS WHERE COD_PRODUTO = :NEW.COD_PRODUTO AND COD_AREA = :NEW.COD_AREA :NEW.COD_AREA AND (DATA_INICIAL BETWEEN :NEW.DATA_INICIAL AND :NEW.DATA_FINAL OR DATA_FINAL BETWEEN :NEW.DATA_INICIAL AND :NEW.DATA_FINAL)) LOOP RAISE_APPLICATION_ERROR (-20001,'Produto (-20001,'Produto já possui quotas cadastrada para este periodo'); END LOOP; END TRG_BINS_QUOTAS_AREAS;

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

5

1.3

Quais eventos causam MUTATING TABLE 

O erro causado por uma tabela MUTATING depende da versão do ORACLE. A cada versão alguns eventos não causam mais MUTATING TABLE. Segue abaixo alguns eventos que causam MUTATING. Este foram testados na ORACLE 8.1.6. TRIGGERS CRIADAS NA TABELA ITENS PEDIDOS COM OPERAÇÕES EM PEDIDOS

Evento

Ocorrência

MUTATING

BEFORE INSERT

SELECT na tabela PEDIDOS UPDATE na tabela PEDIDOS INSERT na tabela PEDIDOS DELETE na tabela PEDIDOS SELECT na tabela PEDIDOS UPDATE na tabela PEDIDOS INSERT na tabela PEDIDOS DELETE na tabela PEDIDOS SELECT na tabela PEDIDOS UPDATE na tabela PEDIDOS INSERT na tabela PEDIDOS DELETE na tabela PEDIDOS SELECT na tabela PEDIDOS UPDATE na tabela PEDIDOS INSERT na tabela PEDIDOS DELETE na tabela PEDIDOS SELECT na tabela PEDIDOS UPDATE na tabela PEDIDOS INSERT na tabela PEDIDOS DELETE na tabela PEDIDOS SELECT na tabela PEDIDOS UPDATE na tabela PEDIDOS INSERT na tabela PEDIDOS DELETE na tabela PEDIDOS

NÃO NÃO NÃO NÃO NÃO NÃO NÃO NÃO NÃO NÃO NÃO NÃO NÃO NÃO NÃO NÃO NÃO NÃO NÃO NÃO NÃO NÃO NÃO NÃO

AFTER INSERT

BEFORE UPDATE

AFTER UPDATE

BEFORE DELETE

AFTER DELETE

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

6

TRIGGERS CRIADAS NA TABELA ITENS_PEDIDOS COM OPERAÇÕES EM ITENS_PEDIDOS

Evento BEFORE INSERT AFTER INSERT BEFORE UPDATE AFTER UPDATE BEFORE DELETE AFTER DELETE

Ocorrência SELECT na tabela ITENS_PEDIDOS ITENS_PEDIDOS SELECT na tabela ITENS_PEDIDOS ITENS_PEDIDOS SELECT na tabela ITENS_PEDIDOS ITENS_PEDIDOS SELECT na tabela ITENS_PEDIDOS ITENS_PEDIDOS SELECT na tabela ITENS_PEDIDOS ITENS_PEDIDOS SELECT na tabela ITENS_PEDIDOS ITENS_PEDIDOS

MUTATING NÃO SIM SIM SIM SIM SIM

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

7

2 CURSOR VARIABLES

A versão 2.3 do PL/SQL, disponível com o ORACLE SERVER Versão 7.3, permite que se crie e utilize variáveis do tipo cursor. Da mesma forma que o cursor convencional, a variável do tipo cursor aponta para a linha corrente no conjunto de resultados de uma consulta que retorne múltiplas linhas, mas ao contrário do cursor estático, que está vinculado à uma única consulta, as variáveis cursor podem ser associadas a várias consultas, até mesmo dentro de um mesmo programa. Variáveis do tipo cursor são verdadeiras variáveis PL/SQL , você pode associar novos valores a ela e passa-la como argumento a subprogramas. Uma variável do tipo cursor é como um ponteiro nas linguagens C e Pascal, ela guarda a posição na memória (endereço) de um objeto ao invés de guardar o próprio objeto. Portanto quando você declara uma variável do tipo cursor você está criando um ponteiro e não um objeto. O principal benefício da variável do tipo cursor é que ela provê um mecanismo para se passar resultados de consultas entre diferentes programas PL/SQL, ou ainda entre programa PL/SQL cliente e programa servidor. Em um ambiente cliente/servidor, por exemplo, um programa do lado cliente poderia abrir a variável do tipo cursor e começar a extrair seus dados, e então passar essa variável como argumento a uma PROCEDURE armazenada no servidor. Este programa poderia então continuar continuar a extrair seus dados e passar a variável de volta ao cliente para que este feche o cursor. 2.1

Características das Variáveis Cursor 

As variáveis do tipo cursor permitem que você:

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

8

- Empregue toda a funcionalidade de cursores estáticos. Você pode utilizar as declarações OPEN, FETCH e CLOSE e referenciar os atributos %ISOPEN,%FOUND, %NOTFOUND e %ROWCOUNT em variáveis do tipo cursor. - Associar o conteúdo de uma variável do tipo cursor (inclusive seu conjunto de resultados) a outra variável do tipo cursor.

2.2

Declarando o Tipo REF CURSOR e a Variável do Tipo Cursor 

A criação de variáveis do tipo cursor é feita em duas etapas: primeiro você define um tipo REF CURSOR e então declara a variável como sendo daquele tipo. A sintaxe para se criar um tipo de referência a cursor é a seguinte: TYPE nome_tipo_cursor IS REF CURSOR [RETURN tipo_retornado]; tipo_retornado]; Onde nome_tipo_cursor é o nome do tipo e tipo_retornado é a especificação do dado retornado pelo tipo cursor. O tipo_retornado pode ser qualquer estrutura válida para uma clausula RETURN de um cursor normal, definida usando o atributo %ROWTYPE ou referenciando um registro (record) previamente definido. A clausula RETURN é opcional, e quando usada, o tipo é dito "forte" pois fica atachado a um tipo record, ou tipo row. Qualquer variável do tipo cursor declarada de um tipo "forte" pode apenas ser utilizada com declarações SQL que retornem dados do mesmo tipo da declaração usada na clausula RETURN. Por outro lado, o tipo cursor que não possui a clausula RETURN é dito "fraco" e pode ser utilizado de formas muito mais flexíveis, isto é, pode ser utilizado com consultas que retornem qualquer estrutura de dados. Uma vez declarado o tipo REF CURSOR você pode declarar a variável daquele tipo, como mostrado no seguinte exemplo:

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

9

É importante lembrar que a declaração de uma variável do tipo cursor não cria um objeto cursor. Para que isto ocorra é necessário usar a sintaxe OPEN FOR, que cria um novo objeto cursor e o associa à variável. Outra observação importante é que variáveis cursor não possuem persistência de estado por serem apenas ponteiros, não podendo portanto serem referenciadas após o fim da execução e xecução do procedimento que abriu o cursor. Topo 2.3

Abrindo uma Variável do Tipo Cursor (OPEN - FOR) 

A declaração OPEN - FOR associa o cursor com uma consulta que retorne múltiplas linhas, executa a consulta e identifica o conjunto de respostas. A sintaxe para a declaração é: OPEN {nome_variável_cursor } FOR declaração_sql; declaração_sql; Onde variável_cursor_de_ambiente é uma variável declarada em um ambiente PL/SQL como o SQL*Plus ou programa Pro*C, e declaração_sql é qualquer declaração SELECT que não possua a clausula FOR UPDATE. Outras declarações OPEN - FOR podem abrir a mesma variável do tipo cursor para diferentes consultas, não sendo necessário para isto fecha-lo antes. 2.4

Extraindo Dados da Variável do Tipo Cursor (FETCH) 

Assim como com cursores estáticos, para se obter o resultado da consulta é utilizada a declaração FETCH que extrai as linhas uma a uma da variável do tipo cursor, e possui a seguinte sintaxe: FETCH {nome_variável_cursor {nome_variável_cursor } INTO registro; FETCH {nome_variável_cursor {nome_variável_cursor } INTO variável1 [,variável2 ...]; Quando a variável do tipo cursor foi declarada como sendo de um tipo "forte", o compilador PL/SQL verifica se a estrutura dos dados após a clausula INTO são compatíveis com a estrutura da consulta associada à variável do tipo

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

10

CLOSE {nome_variável_cursor {nome_variável_cursor }; 2.6

Exemplo de VARIABLE CURSOR 

Este exemplo tem o objetivo de mostrar os dados dos clientes. Através da execução da PROCEDURE prc_exibe_clientes podemos mostra dados dos cliente. Sendo que, esta PROCEDURE possui um parâmetro que determina a quantidade de clientes que devem ser mostrados. Esta PROCEDURE abre cursor (VARIABLE CURSOR) e chama a PROCEDURE PRC_EXIBE_DADOS. Esta, executa FETCHS no cursor. CREATE OR REPLACE PACKAGE PCK_CLIENTES IS -TYPE PC_CLIENTE IS REF CURSOR RETURN CLIENTES%ROWTYPE; -PROCEDURE PRC_EXIBE_CLIENTES (PI_QUANTIDADE NUMBER ); -END PCK_CLIENTES;

CREATE OR REPLACE PACKAGE BODY PCK_CLIENTES IS PROCEDURE PRC_BUSCA_DADOS (PI_CURSOR IN PCK_CLIENTES.PC_CLIENTE ,PI_QUANTIDADE NUMBER) IS -LR_CLIENTE CLIENTES%ROWTYPE; -BEGIN -FOR indice IN 1..pi_quantidade LOOP -FETCH pi_cursor INTO lr_cliente; EXIT WHEN pi_cursor%NOTFOUND; DBMS_OUTPUT.PUT_LINE ('Nome : '||lr_cliente.nome_cliente);

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

11

CLOSE lr_cliente; -END PRC_EXIBE_CLIENTES; END PCK_CLIENTES;

3 LOCAL MODULES

Um local module é uma PROCEDURE ou FUNCTION que é definida dentro na seção de declaração de bloco PL/SQL (Anônimo ou nomeado). Este módulo é chamado local porque é unicamente definido dentro de um bloco PL/SQL pai. Este não pode ser chamado por outro bloco PL/SQL externo.

3.1

Exemplo de um LOCAL MODULE 

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

12

END LOOP; END;

4 OVERLOADING

Esse é um recurso que permite que você defina diferentes subprograma s (FUNCTIONS/P´ROCEDURES) com o mesmo nome dentro de uma pacote (PACKAGE). A maneira de destinguir os subprogramas é pelo nome e número de parâmetros. Como exemplo, usaremos uma PACKAGE do ORACLE, a UTL_FILE.

FUNCTION FOPEN RETURNS RECORD Argument Name Type In/Out Default? ---------------------------------------- ------ -------ID BINARY_INTEGER OUT

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

13

em código de programas já construídos, criou-se uma nova com o parâmetro MAX_LINESIZE. Obs. Para identificar qual subprograma será executado utiliza-se inicialmente o número de parâmetros, caso este seja idêntico nos procedimento, procedimento, utiliza-se o tipo de dados dos parâmetros. Ex. Observe abaixo os procedimentos PUT_LINE definidos na PACKAGE SPECIFICATION da DBMS_OUTPUT. Ambas possuem o mesmo nome e número de parâmetros. No entanto, o tipo de dado do parâmetro é diferente nos três procedimentos. PROCEDURE PUT_LINE Argument Name Type In/Out Default? ----------------------- -------------------- ------ -------A VARCHAR2 IN PROCEDURE PUT_LINE Argument Name Type In/Out Default? ----------------------- -------------------- ------ -------A NUMBER IN PROCEDURE PUT_LINE Argument Name Type In/Out Default? ----------------------- -------------------- ------ -------A DATE IN

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

14

5 FUNCTIONS EM UMA INSTRUÇÃO SQL

O ORACLE permite o uso de funções armazenados no banco de dados em uma instrução SQL. Tal recurso é utilizado geralmente para facilitar o entendimento de consultas complexas. Ex. Considere que o cálculo de aposentadoria de um empregado é o resultado várias consultas consultas em várias tabelas. tabelas. Sendo assim. assim. poderíamos poderíamos criar uma função (stored procedure) que retorna o valor de beneficio com base em algumas informações da tabela empregado. SELECT nome, FNC_VLR_BENEFICIO (cod_emp, salario, data_admissão) FROM empregados No entanto algumas restrições deve ser respeitadas : - A função não pode modificar tabelas de banco de dados; portanto, ela não pode executar INSERT, UPDATE e DELETE

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

15

Sintaxe PRAGMA RESTRICT_REFERENCES RESTRICT_REFERENCES (function_name, (function_name, WNDS [,WNPS] [,RNDS] [,RNPS] );

WNDS WNPS RNDS RNPS

Writes No Database State. A função não pode modificar modificar as tabelas do banco de dados Writes No Package State. A função não pode modificar modificar valores de variáveis de PACKAGE Read No Database State. A função não pode consultar as tabelas do banco de Read No Package State. A função não pode ler a variáveis de package

Exemplo CREATE OR REPLACE PACKAGE PCK_FOLHA IS

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

16

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

17

6 PRIMARY KEY X WHERE CURRENT OF x ROWID para UPDATE

Freqüentemente, você pode deparar com a seguinte situação. Abrir um cursor de uma tabela, executar um complexo processamento com base nos dados obtidos e alterar a tabela em questão. 6.1

Alterando pela PRIMARY KEY 

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

18

6.2

Alterando pela WHERE CURRENT OF 

DECLARE CURSOR c_emp IS SELECT * FROM EMPREGADOS WHERE SALARIO > 50000 FOR UPDATE novo_salario novo_salario number; BEGIN FOR emp_row in c_emp LOOP

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

19

DECLARE CURSOR c_emp IS SELECT e.rowid, e.* FROM EMPREGADOS e WHERE SALARIO > 50000; novo_salario novo_salario number; BEGIN FOR emp_row in c_emp LOOP novo_salario := calcula_salario (emp_row.salario) ; update empregados set salario = novo_salario where rowid = emp_row.rowid;

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

20

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

21

7 EXPLICIT CURSORS X IMPLICIT CURSORS O PL/SQL permite que um comando SQL seja incluído em um bloco sem estar explicitamente associado a um cursor. Sege exemplo abaixo : BEGIN SELECTt nome INTO :nome_cliente :nome_cliente FROM clientes WHERE contato = 'JOAO'; AND data_aniversario = '10-may-2000'; '10-may-2000';

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

22

7.1

Comparando IMPLICIT CURSOR X EXPLICIT CURSOR 

IMPLICIT CURSOR  EXPLICIT CURSOR 

TABLE SCAN 322 84

INDEX LOOKUP 4 3

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

23

8 Oracle and PL/SQL Features by version Number

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

24

8.1

8.1

Native dynamic SQL Java external routimes Invoker´s rights NCOPY parameters Autonomous Autonomous transactions Bulk operations

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

25

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

26

procedimento local e todos os seus objetos dependentes serão inválidos, mas não serão recompilados automaticamente quando chamados pela primeira vez.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

27

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

28

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

29

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

Titles you can't find anywhere else

Try Scribd FREE for 30 days to access over 125 million titles without ads or interruptions! Start Free Trial Cancel Anytime.

30

View more...

Comments

Copyright ©2017 KUPDF Inc.
SUPPORT KUPDF