FUNCTIONS EM UMA INSTRUÇÃO SQL...

Tamanho: px
Começar a partir da página:

Download "FUNCTIONS EM UMA INSTRUÇÃO SQL..."

Transcrição

1 PL/SQL Avançado

2 2 1 MUTATING TABLES O QUE É MUTATING TABLE? SIMULANDO UM MUTATING TABLE QUAIS EVENTOS CAUSAM MUTATING TABLE CURSOR VARIABLES CARACTERÍSTICAS DAS VARIÁVEIS CURSOR DECLARANDO O TIPO REF CURSOR E A VARIÁVEL DO TIPO CURSOR ABRINDO UMA VARIÁVEL DO TIPO CURSOR (OPEN - FOR) EXTRAINDO DADOS DA VARIÁVEL DO TIPO CURSOR (FETCH) FECHANDO UMA VARIÁVEL DO TIPO CURSOR (CLOSE) EXEMPLO DE VARIABLE CURSOR LOCAL MODULES EXEMPLO DE UM LOCAL MODULE OVERLOADING FUNCTIONS EM UMA INSTRUÇÃO SQL PRAGMA RESTRICT_REFERENCES PRIMARY KEY X WHERE CURRENT OF X ROWID PARA UPDATE ALTERANDO PELA PRIMARY KEY ALTERANDO PELA WHERE CURRENT OF Efeitos causados pelo FOR UPDATE ALTERANDO PELO ROWID COMPARAÇÃO PRIMARY KEY X WHERE CURRENT OF X ROWID PARA UPDATE EXPLICIT CURSORS X IMPLICIT CURSORS COMPARANDO IMPLICIT CURSOR X EXPLICIT CURSOR ORACLE AND PL/SQL FEATURES BY VERSION NUMBER DEPENDÊNCIAS E RECOMPILAÇÃO DE OBJETOS DEPENDÊNCIA DIRETA E INDIRETA DEPENDÊNCIA LOCAL E REMOTA CONSIDERAÇÕES SOBRE A RECOMPILAÇÃO AUTOMÁTICA DE OBJETOS VISUALIZANDO DEPENDÊNCIAS DIRETAS (USER_DEPENDENCIES) VISUALIZANDO DEPENDÊNCIAS DIRETAS E INDIRETAS ORACLE PACKAGES DBMS_JOB DBMS_DDL DBMS_JOB DBMS_OUTPUT DBMS_SQL UTL_FILE DBMS_SHARED_POOL COBOL E ORACLE EXTERNAL FUNCTIONS... 29

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

4 4 1 MUTATING TABLES 1.1 O que é MUTATING TABLE? Uma MUTATING table ou tabela mutante é uma tabela que está sendo modificada atualmente por uma instrução UPDATE, DELETE ou INSERT. 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 is MUTATING, trigger/function may not see it ORA-06512: at "USUARIO2.TRG_BUPD_QUOTAS_AREAS", line 2 ORA-04088: error during execution of trigger 'USUARIO2.TRG_BUPD_QUOTAS_AREAS' CREATE OR REPLACE TRIGGER TRG_BUPD_QUOTAS_AREAS 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 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 já possui quotas cadastrada para este periodo'); END LOOP; END TRG_BINS_QUOTAS_AREAS;

5 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 TRIGGERS CRIADAS NA TABELA ITENS PEDIDOS COM OPERAÇÕES EM PEDIDOS Evento Ocorrência MUTATING BEFORE INSERT AFTER INSERT BEFORE UPDATE AFTER UPDATE BEFORE DELETE AFTER DELETE 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

6 6 TRIGGERS CRIADAS NA TABELA ITENS_PEDIDOS COM OPERAÇÕES EM ITENS_PEDIDOS Evento Ocorrência MUTATING BEFORE INSERT SELECT na tabela ITENS_PEDIDOS AFTER INSERT SELECT na tabela ITENS_PEDIDOS SIM BEFORE UPDATE SELECT na tabela ITENS_PEDIDOS SIM AFTER UPDATE SELECT na tabela ITENS_PEDIDOS SIM BEFORE DELETE SELECT na tabela ITENS_PEDIDOS SIM AFTER DELETE SELECT na tabela ITENS_PEDIDOS SIM

7 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 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ê: - Associe uma variável do tipo cursor com diferentes consultas em tempos diferentes durante a execução de seu programa. Uma variável do tipo cursor pode ser usada para extrair dados de diferentes conjuntos de resultados. Passe uma variável do tipo cursor como argumento a um procedimento ou função. - Você pode compartilhar o resultado de uma consulta com outros procedimentos.

8 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]; 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: DECLARE -- Criando o tipo TYPE DeptCurTyp IS REF CURSOR RETURN dept%rowtype; -- Criando a variável dept_cv DeptCurTyp; BEGIN... END;

9 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 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; 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 } INTO registro; FETCH {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 cursor, verifica também se o número de variáveis é correspondente ao número de colunas retornadas pela consulta. Caso contrário será gerado um erro. O erro irá ocorrer em tempo de compilação se a variável for de um tipo "forte" e em tempo de execução se a variável for de um tipo "fraco". Em tempo de execução, a PL/SQL evoca a EXCEPTION ROWTYPE_MISMATCH. 2.5 Fechando uma Variável do Tipo Cursor (CLOSE) A declaração CLOSE desabilita a variável do tipo cursor. Depois disto o conjunto de resultados associado é indefinido. A sintaxe é a seguinte:

10 10 CLOSE {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); -- END LOOP; -- END PRC_BUSCA_DADOS; -- PROCEDURE PRC_EXIBE_CLIENTES (PI_QUANTIDADE NUMBER ) IS -- LR_CLIENTE PCK_CLIENTES.PC_CLIENTE; -- BEGIN -- OPEN lr_cliente FOR SELECT * FROM CLIENTES; PRC_BUSCA_DADOS (lr_cliente,pi_quantidade);

11 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 O exemplo abaixo tem a finalidade de mostra o nome dos clientes com base na tabela cliente. Este possui um LOCAL MODULE denominado prc_imprime. CREATE OR REPLACE PROCEDURE prc_mostra_clientes IS PROCEDURE prc_imprime (p_nome clientes.nome_cliente%type) IS BEGIN DBMS_OUTPUT.PUT_LINE (p_nome); END; BEGIN FOR reg_emp in (select nome_cliente from clientes) loop prc_imprime(reg_emp.nome_cliente);

12 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 LOCATION VARCHAR2 IN FILENAME VARCHAR2 IN OPEN_MODE VARCHAR2 IN FUNCTION FOPEN RETURNS RECORD Argument Name Type In/Out Default? ID BINARY_INTEGER OUT LOCATION VARCHAR2 IN FILENAME VARCHAR2 IN OPEN_MODE VARCHAR2 IN MAX_LINESIZE BINARY_INTEGER IN Tais estão definidas na PACKAGE SPECIFICATION. Estas, possuem o mesmo nome, diferenciando-se somente no número de parâmetros. Quanto a PROCEDURE for executada com o parâmetro MAX_LINESIZE o ORACLE irá executar a PROCEDURE que possui este parâmetros. Podemos usar o OVERLOADING para manter duas versões de uma mesma rotina. No exemplo citado acima, a ORACLE inicialmente não possuía o parâmetro MAX_LINESIZE na função OPEN. Para manter a compatibilidade de

13 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, 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

14 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 em várias tabelas. Sendo assim. 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 - As funções que lêem os valores de variáveis empacotadas não pode ser executadas remotamente ou em paralelo - Somente funções chamadas em uma cláusula SELECT, VALUES ou SET podem gravar ou valores em variáveis empacotadas (variáveis definidas na PACKAGE SPECIFICATION) - A função não pode chamar outro subprograma que quebre uma das regras acima. Quando executarmos um comando SQL que possui chamada a uma função de banco e esta quebrar uma das restrições acima, um erro acontecerá. 5.1 PRAGMA RESTRICT_REFERENCES Assegura que as restrições ao uso de funções em instruções SQL não sejam violadas. Não permite que a função seja criada se esta viola as restrições. É obrigatório no caso de chamar uma função dentro de um comando SQL.

15 15 Sintaxe PRAGMA RESTRICT_REFERENCES (function_name, WNDS [,WNPS] [,RNDS] [,RNPS] ); WNDS WNPS RNDS RNPS Writes No Database State. A função não pode modificar as tabelas do banco de dados Writes No Package State. A função não pode 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 FUNCTION fnc_vlr_beneficio (p_cod_emp NUMBER,,p_salario NUMBER,p_admissão NUMBER) RETURN NUMBER; END; PRAGMA RESTRICT_REFERENCES (fnc_vlr_beneficio, WNDS); O comando PRAGMA definido abaixo da definição da função FNC_VLR_BENEFICIO assegura a que a função FNC_VLR_BENEFICIO não irá alterar tabelas do banco (WNDS). Na criação do corpo da PACKAGE, será valida esta restrição. Caso exista uma alteração em alguma tabela do banco, a PACKAGE será criada com erro.

16 16

17 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 DECLARE CURSOR c_emp IS SELECT * FROM EMPREGADOS WHERE 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 cd_empregado = emp_row.cd_empregado; END LOOP; END; O update dentro do loop, usa o primary key da tabela, que utiliza o índice da primay key para efetuar busca. No entanto, surge uma questão : porque precisaríamos executar uma busca no índice da primary key se já temos conhecimento do registro corrente. De fato, o segundo index lookp é desnecessário. PL/SQL pode referenciar o registro corrente através do uso da clausula WHERE CURRENT OF cursor_name. Usando esta notação, PL/SQL pode usar um row address (ROWID) armazenado na estrutura do cursor para localizar o registro sem um index lookup.

18 Alterando pela WHERE CURRENT OF DECLARE CURSOR c_emp IS SELECT * FROM EMPREGADOS WHERE SALARIO > FOR UPDATE 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 current of c_emp; END LOOP; END; O WHERE CURRENT OF clase elimina o I/O envolvido com m index lookup e aumenta a performace do UPDATE. No entanto, para usar o WHERE CURRENT OF, você precisa primeiro locar (LOCK) os registros envolvidos usando a clausula FOR UPDATE no select Efeitos causados pelo FOR UPDATE Todos os registros selecionados pela QUERY precisam ser locados (LOCKED) antes que a primeiro registro possa ser retornado. Se você irá unicamente processar alguns registros, ou se, o tempo de resposta é fundamental, você provavelmente não irá querer usar a clįusula FOR UPDATE. Se você quer otimizar o UPDATE evitando desnecessários index read mas não quer assegurar o lock da cláusula FOR UPDATE, você pode pegar o ROWID and usar este para efetuar o UPDATE. 6.3 Alterando pelo ROWID

19 19 DECLARE CURSOR c_emp IS SELECT e.rowid, e.* FROM EMPREGADOS e WHERE SALARIO > 50000; 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; END LOOP; END; 6.4 Comparação PRIMARY KEY X WHERE CURRENT OF x ROWID para UPDATE Acesso / Instrução SELECT UPDATE PRIMARY KEY FOR UPDATE WHERECURRENT OF ROWID Obs. Os valores apresentados na tabela representam o número de blocos lido para cada forma de acesso (BLOCK READ).

20 20

21 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 FROM clientes WHERE contato = 'JOAO'; AND data_aniversario = '10-may-2000'; END; Um cursor é de fato associado com o código acima, mas é criado pela chamada do PL/SQL. Sendo um cursor referenciado, é denominado IMPLICIT CURSOR. Embora IMPLICIT CURSOR seja mais conveniente para a programação. Eles podem causar OVERHEAD. IMPLICID CURSORS podem unicamente retornar uma linha e o ORACLE precisa checar se uma única linha será retornada (TOO MANY ROWS). Se a busca é baseada em um índice, então o cheque pode ser feito em um único adicional I/O. Tipicamente, isto aumenta o numero de leituras exigidas de 3 para 4. Se os dados são baseados em um TABLE SCAN, então o ORACLE continua lendo até o fim da tabela. Em média, isto resulta em 2 acesso adicionais. DECLARE CURSOR c_nome is SELECT nome INTO :nome_cliente FROM clientes WHERE contato = 'JOAO' AND data_aniversario = '10-may-2000'; BEGIN OPEN C_NOME; FETCH C_NOME; CLOSE C_NOME; END;

22 Comparando IMPLICIT CURSOR X EXPLICIT CURSOR TABLE SCAN INDEX LOOKUP IMPLICIT CURSOR EXPLICIT CURSOR 84 3 Obs. Os valores apresentados na tabela representam o número acessos a tabela.

23 23 8 Oracle and PL/SQL Features by version Number Oracle PL/SQL Features Added or Changed Version Version Initial Version CHAR datatype changed to fixed length Stored subprograms(procedures, functions, packages, And triggers User-defined composite types tables e record Intersession communication with the DBMS_PIPE and DBMS_ALERT packages Output in SQL*Plus or Server Manager with the DBMS_OUTPUT package User-defined subtypes Ability to use user-defined functions in SQL statememts Dynamic PL/SQL with the DBMS_SQL package Cursor Variables Ability to use constrained subtypes Ability to schedule PL/SQL batch processing with the DBMS_JOB package Enhancements to cursor variables (allow fetch on server), And weakly typed) File I/O with the UTL_FILE package PL/SQL table attributes and tables of records Triggers stored in compiled form Objects Types Coolection types nested tables and varrays Advanced Queuing option External Procedures LOB Enhancements

24 Native dynamic SQL Java external routimes Invoker s rights NCOPY parameters Autonomous transactions Bulk operations 9 Dependências e recompilação de objetos Alguns objetos fazem podem referencia a outros objetos com parte de sua definição. Por exemplo, um procedimento pode conter uma instrução SELECT que seleciona colunas de uma tabela. Por esse motivo, o procedimento é chamado de objeto dependente, enquanto a tabela é chamada de objeto referenciado. Se você alterar a definição de um objeto referenciado, os objetos dependentes podem ou não continuar funcionando adequadamente. O Oracle Server registra, automaticamente, as dependências entre objetos. Para gerenciar as dependências, todos os objetos do esquema possuem um status (válido ou inválido registrado no dicionário de dados na view USER_OBJECTS. 9.1 Dependência Direta e Indireta Quando um objeto faz referência direta a um objeto denominamos de dependência direta. No entanto, um procedimento pode fazer referência indiretamente a outro objeto através de outro objeto intermediário. Esta referência é denominada dependência indireta. Observe o quadro abaixo :

25 25 A relação entre o PROCEDIMENTO e a VIEW é denominada dependência direta. Já a relação entre o procedimento e a TABELA é denominada dependência indireta. 9.2 Dependência Local e Remota Dependências locais caracteriza-se quando os objetos situam-se no mesmo banco de dados. O ORACLE SERVER gerência, automaticamente todas as dependências locais usando uma tabela do dicionário de dados. Quando um referenciado é alterado, os objetos dependentes tornam-se inválidos. Na próxima vez que um objeto inválido for chamado, o ORACLE SERVER recompilará automaticamente. No caso de dependência remotas, os objetos ficam em nós diferentes. O ORACLE SERVER não gerência dependências entre objetos de esquema remoto a não ser dependências de procedimentos local-para-procedimento-remoto. O

26 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. 9.3 Considerações sobre a recompilação automática de objetos - Em algumas situações defrontamos com o erro ORA???? ao executar um procedimento de banco. Tal erro não acorre após a execução do procedimento novamente. Isto ocorre por que quanto executamos o procedimento na sessão (sql*plus / forms) a data da ultima alteração(timestamp) é armazenada em uma área no ORACLE(library cache). Quando executamos o procedimento novamente, o ORACLE verifica se a data de ultima alteração do procedimento na library cache é a mesma que data armazenada no dicionário ORACLE. Caso exista diferença, significa que a PROCEDURE foi alterada depois que PROCEDURE foi armazenada na library cache. Sendo assim, o ORACLE validar (parse) o procedimento para que não próxima vez o erro não ocorra. - Ao alterar objetos remotos, recomenda-se recompilar manualmente os objetos dependentes locais, não se baseando no mecanismo de dependência remota automático, a fim de evitar interrupção da produção - O mecanismo de dependência remota é diferente do mecanismo de dependência local. Na primeira vez que um subprograma remoto recompilado é chamado por um procedimento local, obtêm-se um erro de execução e o subprograma local é invalidado; na segunda vez que for chamado, ocorrerá uma recompilação implícita.

27 Visualizando dependências diretas (USER_DEPENDENCIES) Podemos acessar a VIEW USER_DEPENDENCIES para identificar as dependências de um objeto. Segue abaixo a estrutura da tabela. Coluna NAME TYPE REFERENCED_OWNER REFERENCED_NAME REFERENCED_TYPE REFERENCED_LINK_NAME Descrição Nome do Objeto dependente Tipo do Objeto dependente (PROCEDURE, FUNCTION, PACKAGE, PACKAGE BODY, TRIGGER ou VIEW) Esquema (OWNER) do objeto referenciado Nome do objeto referenciado Tipo do objeto referenciado Database link 9.5 Visualizando dependências diretas e indiretas A ORACLE fornece VIEWS de usuários para exibir dependências diretas e indiretas em um formado hierárquico (TREE). Para isto é necessário as seguintes etapas : a) Certifique-se que o script ULTDTREE.SQL foi executado(com o DBA) b) Preencha a tabela DEPTREE_TEMPTAB com as informações para um determinado objetio referenciado, chamando o procedimento DEPTTREE_FILL. Segue abaixo os parâmetros do procedimento Tipo_objeto Proprieário(owner) Nome_objeto é o tipo do objeto referenciado é o esquema do objeto referenciado é o nome do objeto c) Consulte as views DEPTREE e IDDEPTREE SELECT nested_level, type, name FROM deptree ORDER BY seq#; NESTED_LEVEL TYPE NAME TABLE EMP 1 VIEW NEW_EMP 2 PROCEDURE ADD_EMP 1 PROCEDURE QUERY_EMP SELECT * FROM IDEPTREE;

28 DEPENDENCIES TABLE SCOTT.EMP VIEW SCOTT.NEW_EMP PROCEDURE SCOTT.ADD_EMP PROCEDURE SCOTT.QUERY_EMP 28

29 29 10 ORACLE PACKAGES 10.1 DBMS_JOB 10.2 DBMS_DDL 10.3 DBMS_JOB 10.4 DBMS_OUTPUT 10.5 DBMS_SQL 10.6 UTL_FILE 10.7 DBMS_SHARED_POOL 11 COBOL E ORACLE 12 EXTERNAL FUNCTIONS 13 DIVERSOS (DICAS) 13.1 Hints de paginação 13.2 PLS_INTEGER 13.3 VARRAY (oracle8) 13.4 Recursividade 13.5 Dicionário ORACLE

30 30

Oracle PL/SQL Overview

Oracle PL/SQL Overview Faculdades Network Oracle PL/SQL Overview Prof. Edinelson PL/SQL Linguagem de Programação Procedural Language / Structured Query Language Une o estilo modular de linguagens de programação à versatilidade

Leia mais

FAPLAN - Faculdade Anhanguera Passo Fundo Gestão da Tecnologia da Informação Banco de Dados II Prof. Eder Pazinatto Stored Procedures Procedimento armazenados dentro do banco de dados Um Stored Procedure

Leia mais

Oracle 10g: SQL e PL/SQL

Oracle 10g: SQL e PL/SQL Oracle 10g: SQL e PL/SQL PL/SQL: Visão Geral Enzo Seraphim Visão Geral Vantagens de PL/SQL Suporte total à linguagem SQL Total integração com o Oracle Performance Redução da comunicação entre a aplicação

Leia mais

BANCO DE DADOS II Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com

BANCO DE DADOS II Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com - Aula 11-1. INTRODUÇÃO TRIGGERS (GATILHOS OU AUTOMATISMOS) Desenvolver uma aplicação para gerenciar os dados significa criar uma aplicação que faça o controle sobre todo ambiente desde a interface, passando

Leia mais

SQL Gatilhos (Triggers)

SQL Gatilhos (Triggers) SQL Gatilhos (Triggers) Laboratório de Bases de Dados Gatilho (trigger) Bloco PL/SQL que é disparado de forma automática e implícita sempre que ocorrer um evento associado a uma tabela INSERT UPDATE DELETE

Leia mais

PROCEDIMENTOS ARMAZENADOS (Stored Procedures)

PROCEDIMENTOS ARMAZENADOS (Stored Procedures) PROCEDIMENTOS ARMAZENADOS (Stored Procedures) 1. Introdução Stored Procedure é um conjunto de comandos, ao qual é atribuído um nome. Este conjunto fica armazenado no Banco de Dados e pode ser chamado a

Leia mais

Banco de Dados II. Triggers e Functions. Prof. Moser Fagundes. Curso TSI Instituto Federal Sul-Rio-Grandense (IFSul) Campus Charqueadas

Banco de Dados II. Triggers e Functions. Prof. Moser Fagundes. Curso TSI Instituto Federal Sul-Rio-Grandense (IFSul) Campus Charqueadas Banco de Dados II Triggers e Functions Prof. Moser Fagundes Curso TSI Instituto Federal Sul-Rio-Grandense (IFSul) Campus Charqueadas Sumário da aula Functions (funções) Triggers (gatilhos) Atividades Functions

Leia mais

Bancos de Dados I. Integridade semântica

Bancos de Dados I. Integridade semântica Bancos de Dados I PUC-Rio Departamento de Informática (DI) Eng./Ciência da Computação e Sist. Informação Contrôle de Integridade em SGBDs: procedimentos armazenados, gatilhos e funções Prof. sergio@inf.puc-rio.br

Leia mais

Sistemas de Informação

Sistemas de Informação Sistemas de Informação Rules and Triggers André Restivo Sistemas de Informação 2006/07 Rules e Triggers Nem todas as restrições podem ser definidas usando os mecanismos que estudamos anteriormente: - CHECK

Leia mais

Laboratório de Banco de Dados Prof. Luiz Vivacqua. PL/pgSQL A Linguagem de programação do PostgreSQL

Laboratório de Banco de Dados Prof. Luiz Vivacqua. PL/pgSQL A Linguagem de programação do PostgreSQL Laboratório de Banco de Dados Prof. Luiz Vivacqua PL/pgSQL A Linguagem de programação do PostgreSQL 1) Visão Geral A PL/pgSQL é uma linguagem de programação procedural para o Sistema Gerenciador de Banco

Leia mais

Integridade dos Dados

Integridade dos Dados 1 Integridade dos Dados Integridade dos Dados Melissa Lemos melissa@inf.puc-rio.br A integridade dos dados é feita através de restrições, que são condições obrigatórias impostas pelo modelo. Restrições

Leia mais

8. Outros tipos de Transação (Modo de Transação de Autoconfirmação e Modo Implícito)

8. Outros tipos de Transação (Modo de Transação de Autoconfirmação e Modo Implícito) 8. Outros tipos de Transação (Modo de Transação de Autoconfirmação e Modo Implícito) Nos itens anteriores vimos transações do tipo explícitas, ou seja, aquelas que iniciam com BEGIN TRANSACTION. As outras

Leia mais

Projeto de Banco de Dados

Projeto de Banco de Dados Projeto de Banco de Dados Prof. Marcelo Siedler Objetivos do documento: Apresentar os conceitos de stored procedutes e funções. Exercícios. Referência: http://dev.mysql.com/doc/refman/4.1/pt/stored-procedures.html

Leia mais

PROGRAMAÇÃO EM BANCO DADOS Stored Procedure e Trigger

PROGRAMAÇÃO EM BANCO DADOS Stored Procedure e Trigger PROGRAMAÇÃO EM BANCO DADOS Stored Procedure e Trigger A tecnologia de banco de dados permite persistir dados de forma a compartilha-los com varias aplicações. Aplicação 1 aplicação 2 aplicação 3 SGDB Banco

Leia mais

PL/pgSQL por Diversão e Lucro

PL/pgSQL por Diversão e Lucro PL/pgSQL por Diversão e Lucro Roberto Mello 3a. Conferência Brasileira de PostgreSQL - PGCon-BR Campinas - 2009 1 Objetivos Apresentar as partes principais do PL/pgSQL Apresentar casos de uso comum do

Leia mais

António Rocha Nuno Melo e Castro

António Rocha Nuno Melo e Castro António Rocha Nuno Melo e Castro ! Transact-SQL (T-SQL) Extensão ao SQL Permite controlo do fluxo de execução Permite comandos DDL (contrariamente ao PLSQL) T-SQL combina: poder de manipulação de dados

Leia mais

PL/SQL. Profa. Dra. Cristina Dutra de Aguiar Ciferri. Laboratório de Bases de Dados PL/SQL

PL/SQL. Profa. Dra. Cristina Dutra de Aguiar Ciferri. Laboratório de Bases de Dados PL/SQL PL/SQL Laboratório de Bases de Dados PL/SQL Program Language SQL linguagem de programação da Oracle que permite processar dados armazenados no banco de dados Exemplos de operações permitidas alterar, remover,

Leia mais

Logado no OracleXE vamos acessar a opção:

Logado no OracleXE vamos acessar a opção: Tutorial PL/SQL O PL/SQL é uma linguagem procedural que roda diretamente no núcleo do SGBD Oracle. O objetivo deste tutorial é mostrar a criação de funções e procedimentos em PL/SQL, interagindo com comandos

Leia mais

Triggers e Regras. Fernando Lobo. Base de Dados, Universidade do Algarve

Triggers e Regras. Fernando Lobo. Base de Dados, Universidade do Algarve Triggers e Regras Fernando Lobo Base de Dados, Universidade do Algarve 1 / 14 Triggers Um trigger permite que uma determinada sequência de comandos SQL seja accionada quando um determinado evento ocorre.

Leia mais

APOSTILA BANCO DE DADOS INTRODUÇÃO A LINGUAGEM SQL

APOSTILA BANCO DE DADOS INTRODUÇÃO A LINGUAGEM SQL 1. O que é Linguagem SQL 2. Instrução CREATE 3. CONSTRAINT 4. ALTER TABLE 5. RENAME TABLE 6. TRUCANTE TABLE 7. DROP TABLE 8. DROP DATABASE 1 1. O que é Linguagem SQL 2. O SQL (Structured Query Language)

Leia mais

Triggers no PostgreSQL

Triggers no PostgreSQL Triggers no PostgreSQL Traduzido do manual do PostgreSQL Pode-se utilizar PL/pqSQL para a definição de triggers (gatilhos). Um procedimento do tipo trigger é criado com o comando CREATE FUNCTION, declarando

Leia mais

Banco de Dados Avançados Banco de Dados Ativo

Banco de Dados Avançados Banco de Dados Ativo Universidade Federal de Pernambuco Centro de Informática Banco de Dados Avançados Banco de Dados Ativo Equipe: Felipe Cavalcante Fernando Kakimoto Marcos Corrêa Sumário 1. Mini-Mundo... 3 1.1 Entidades...

Leia mais

Operação de União JOIN

Operação de União JOIN Operação de União JOIN Professor Victor Sotero SGD 1 JOIN O join é uma operação de multi-tabelas Select: o nome da coluna deve ser precedido pelo nome da tabela, se mais de uma coluna na tabela especificada

Leia mais

PROGRAMAÇÃO EM BANCO DADOS Store Procedure e Trigger

PROGRAMAÇÃO EM BANCO DADOS Store Procedure e Trigger PROGRAMAÇÃO EM BANCO DADOS Store Procedure e Trigger a tecnologia de banco de dados permite persistir dados de forma a compartilha-los com varias aplicações. Aplicação 1 aplicação 2 aplicação 3 SGDB Banco

Leia mais

Triggers. um trigger permite que uma determinada sequência de comandos SQL seja accionada quando um determinado evento ocorre.

Triggers. um trigger permite que uma determinada sequência de comandos SQL seja accionada quando um determinado evento ocorre. Triggers um trigger permite que uma determinada sequência de comandos SQL seja accionada quando um determinado evento ocorre. o evento pode ser INSERT, UPDATE, ou DELETE. o trigger pode ser accionado imediatamente

Leia mais

FUNCTION ) RETURNS INTEGER AS $$ DECLARE

FUNCTION ) RETURNS INTEGER AS $$ DECLARE PERFORM O comando PERFORM permite a execução de um comando SELECT desprezando o resultado do comando. PERFORM query; A variável especial FOUND é definida como verdadeiro se a instrução produzir pelo menos

Leia mais

SQL Server Triggers Aprenda a utilizar triggers em views e auditar as colunas atualizadas em uma tabela

SQL Server Triggers Aprenda a utilizar triggers em views e auditar as colunas atualizadas em uma tabela SQL Server Triggers Aprenda a utilizar triggers em views e auditar as colunas atualizadas em uma tabela Certamente você já ouviu falar muito sobre triggers. Mas o quê são triggers? Quando e como utilizá-las?

Leia mais

Armazenamento de Dados. Prof. Antonio Almeida de Barros Junior

Armazenamento de Dados. Prof. Antonio Almeida de Barros Junior Armazenamento de Dados Prof. Antonio Almeida de Barros Junior 1 Armazenamento de Dados Todos os dados que utilizamos até o momento, ficavam armazenados apenas na memória. Ao final da execução dos programas,

Leia mais

UNINGÁ UNIDADE DE ENSINO SUPERIOR INGÁ FACULDADE INGÁ CIÊNCIA DA COMPUTAÇÃO CURSORS. Profº Erinaldo Sanches Nascimento

UNINGÁ UNIDADE DE ENSINO SUPERIOR INGÁ FACULDADE INGÁ CIÊNCIA DA COMPUTAÇÃO CURSORS. Profº Erinaldo Sanches Nascimento UNINGÁ UNIDADE DE ENSINO SUPERIOR INGÁ FACULDADE INGÁ CIÊNCIA DA COMPUTAÇÃO CURSORS Profº Erinaldo Sanches Nascimento Introdução Cursor é usado para percorrer um conjunto de linhas retornadas por uma consulta

Leia mais

AULA 2 INTERAÇÃO COM O BANCO DE DADOS

AULA 2 INTERAÇÃO COM O BANCO DE DADOS AULA 2 INTERAÇÃO COM O BANCO DE DADOS BANCO DE DADOS POSTGRESQL O PostgreSQL é um sistema gerenciador de banco de dados dos mais robustos e avançados do mundo. Seu código é aberto e é totalmente gratuito,

Leia mais

SQL Procedural. Josino Rodrigues Neto josinon@gmail.com

SQL Procedural. Josino Rodrigues Neto josinon@gmail.com SQL Procedural Josino Rodrigues Neto josinon@gmail.com SQL Procedural Agregada em SQL-92 As ferramentas têm nomes para suas linguagens SQL procedurais/embutidas Oracle : PL/SQL Postgres PL/Pgsql SQL Server

Leia mais

Hugo Pedro Proença, 2007

Hugo Pedro Proença, 2007 Stored Procedures À medida que a complexidade dos sistemas aumenta, torna-se cada vez mais difícil a tarefa de integrar o SQL com as aplicações cliente. Além disto, é necessário que todas as aplicações

Leia mais

Roteiro 9 - SQL Básico: chave estrangeira, operadores de comparação e operadores booleanos

Roteiro 9 - SQL Básico: chave estrangeira, operadores de comparação e operadores booleanos Roteiro 9 - SQL Básico: chave estrangeira, operadores de comparação e operadores booleanos Objetivos: Criar restrições para atributos, chaves primárias e estrangeiras; Explorar consultas SQL com uso de

Leia mais

Gatilhos (Triggers) Prof. Márcio Bueno {bd2tarde,bd2noited}@marciobueno.com. Elaborado por Maria Lígia B. Perkusich

Gatilhos (Triggers) Prof. Márcio Bueno {bd2tarde,bd2noited}@marciobueno.com. Elaborado por Maria Lígia B. Perkusich Gatilhos (Triggers) Prof. Márcio Bueno {bd2tarde,bd2noited}@marciobueno.com Elaborado por Maria Lígia B. Perkusich O que é um gatilho (trigger)? Um gatilho é um tipo especial de procedimento armazenado

Leia mais

Tarefa Orientada 19 Triggers

Tarefa Orientada 19 Triggers Tarefa Orientada 19 Triggers Objectivos: Criar triggers AFTER Criar triggers INSTEAD OF Exemplos de utilização Os triggers são um tipo especial de procedimento que são invocados, ou activados, de forma

Leia mais

Introdução às funções e procedimentos. SQL suporta funções e procedimentos úteis com tipos de dados específicos

Introdução às funções e procedimentos. SQL suporta funções e procedimentos úteis com tipos de dados específicos Bases de Dados Stored procedures e triggers Introdução às funções e procedimentos SQL suporta funções e procedimentos úteis com tipos de dados específicos p.ex. objectos geométricos, imagens intersecção

Leia mais

Linguagem PL/SQL e Triggers

Linguagem PL/SQL e Triggers TECNOLOGIA DE BASES DE DADOS Linguagem PL/SQL e Triggers António Manuel Silva Ferreira UNIVERSIDADE DE LISBOA FACULDADE DE CIÊNCIAS DEPARTAMENTO DE INFORMÁTICA asfe@di.fc.ul.pt Sumário Linguagem PL/SQL

Leia mais

BANCO DE DADOS. info 3º ano. Prof. Diemesleno Souza Carvalho diemesleno@iftm.edu.br www.diemesleno.com.br

BANCO DE DADOS. info 3º ano. Prof. Diemesleno Souza Carvalho diemesleno@iftm.edu.br www.diemesleno.com.br BANCO DE DADOS info 3º ano Prof. Diemesleno Souza Carvalho diemesleno@iftm.edu.br www.diemesleno.com.br Na última aula estudamos Unidade 4 - Projeto Lógico Normalização; Dicionário de Dados. Arquitetura

Leia mais

Controle de transações em SQL

Controle de transações em SQL Transações Controle de transações em SQL Uma transação é implicitamente iniciada quando ocorre uma operação que modifica o banco de dados (INSERT, UPDATE ou DELETE). Uma transação pode terminar normalmente

Leia mais

Orientação a Objetos

Orientação a Objetos 1. Domínio e Aplicação Orientação a Objetos Um domínio é composto pelas entidades, informações e processos relacionados a um determinado contexto. Uma aplicação pode ser desenvolvida para automatizar ou

Leia mais

SQL comando SELECT. SELECT [DISTINCT] <campos> FROM <tabela> [condição] [ ; ] Paulo Damico - MDK Informática Ltda.

SQL comando SELECT. SELECT [DISTINCT] <campos> FROM <tabela> [condição] [ ; ] Paulo Damico - MDK Informática Ltda. SQL comando SELECT Uma das tarefas mais requisitadas em qualquer banco de dados é obter uma listagem de registros armazenados. Estas tarefas são executadas pelo comando SELECT Sintaxe: SELECT [DISTINCT]

Leia mais

MANUAL INSTALAÇÃO WEB SERVICE

MANUAL INSTALAÇÃO WEB SERVICE MANUAL INSTALAÇÃO WEB SERVICE Recebimento de dados pelo Hospital Versão 1.1 2/9/2014 Contato suporte@gtplan.com.br Índice Introdução... 2 Requerimentos para instalação do Web Service... 2 Instalação...

Leia mais

SQL Linguagem de Definição de Dados. Laboratório de Bases de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

SQL Linguagem de Definição de Dados. Laboratório de Bases de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri SQL Linguagem de Definição de Dados SQL Structured Query Language Uma das mais importantes linguagens relacionais (se não a mais importante) Exemplos de SGBD que utilizam SQL Oracle Informix Ingress SQL

Leia mais

Monitoria GDI Aula Prática. DML + PL/SQL parte 1

Monitoria GDI Aula Prática. DML + PL/SQL parte 1 Monitoria GDI Aula Prática DML + PL/SQL parte 1 DML linguagem de manipulação de dados SQL Estrutura básica de uma consulta SQL SELECT Coluna1[,Coluna2[,Coluna3[,...]]] FROM Tabela1[,Tabela2[,...]] WHERE

Leia mais

Treinamento. DBA Oracle 11g. Duração: 120 horas

Treinamento. DBA Oracle 11g. Duração: 120 horas Treinamento DBA Oracle 11g Duração: 120 horas Neste curso no primeiro módulo (Introdução ao Oracle 11g SQL e PL_SQL) é oferecido um curso introdutório à tecnologia do banco de dados Oracle 11g. Também

Leia mais

CIÊNCIA E TECNOLOGIA DO RIO

CIÊNCIA E TECNOLOGIA DO RIO INSTITUTO FEDERAL DE EDUCAÇÃO, CIÊNCIA E TECNOLOGIA DO RIO GRANDE DO NORTE BANCO DE DADOS II Docente: Éberton da Silva Marinho e-mail: ebertonsm@gmail.com eberton.marinho@ifrn.edu.br Curso de Tecnologia

Leia mais

Bases de Dados 2007/2008. Aula 9

Bases de Dados 2007/2008. Aula 9 Bases de Dados 2007/2008 Aula 9 1. T-SQL TRY CATCH 2. TRATAMENTO ERROS RAISERROR 3. TRIGGERS 4. EXERCÍCIOS Sumário Referências http://msdn2.microsoft.com/en-us/library/ms189826.aspx (linguagem t-sql) http://www.di.ubi.pt/~pprata/bd/bd0405-proc.sql

Leia mais

BANCO DE DADOS II Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com

BANCO DE DADOS II Prof. Ricardo Rodrigues Barcelar http://www.ricardobarcelar.com - Aula 10 - PROCEDIMENTOS ARMAZENADOS - STORED PROCEDURES 1. INTRODUÇÃO Em muitas situações será necessário armazenar procedimentos escritos com a finalidade de se utilizar recursos como loop, estruturas

Leia mais

Prof. Carlos Majer Aplicações Corporativas UNICID

Prof. Carlos Majer Aplicações Corporativas UNICID Este material pertence a Carlos A. Majer, Professor da Unidade Curricular: Aplicações Corporativas da Universidade Cidade de São Paulo UNICID Licença de Uso Este trabalho está licenciado sob uma Licença

Leia mais

Programação SQL. Introdução

Programação SQL. Introdução Introdução Principais estruturas duma Base de Dados: Uma BD relacional é constituída por diversas estruturas (ou objectos ) de informação. Podemos destacar: Database: designa a própria BD; Table/Tabela:

Leia mais

PHP INTEGRAÇÃO COM MYSQL PARTE 1

PHP INTEGRAÇÃO COM MYSQL PARTE 1 INTRODUÇÃO PHP INTEGRAÇÃO COM MYSQL PARTE 1 Leonardo Pereira leonardo@estudandoti.com.br Facebook: leongamerti http://www.estudandoti.com.br Informações que precisam ser manipuladas com mais segurança

Leia mais

Triggers e mais... Instituto Militar de Engenharia IME 1o. Semestre/2005 Triggers Propósito mais amplo que restrições Restrições onde se explicita o evento Regras event-condition-action (ECA) Eventos:

Leia mais

Criando Banco de Dados, Tabelas e Campos através do HeidiSQL. Prof. Vitor H. Migoto de Gouvêa Colégio IDESA 2011

Criando Banco de Dados, Tabelas e Campos através do HeidiSQL. Prof. Vitor H. Migoto de Gouvêa Colégio IDESA 2011 Criando Banco de Dados, Tabelas e Campos através do HeidiSQL Prof. Vitor H. Migoto de Gouvêa Colégio IDESA 2011 Edição 2 Pedreiros da Informação Criando Banco de Dados, Tabelas e Campos através do HeidiSQL

Leia mais

Listando itens em ComboBox e gravando os dados no Banco de Dados MySQL.

Listando itens em ComboBox e gravando os dados no Banco de Dados MySQL. Listando itens em ComboBox e gravando os dados no Banco de Dados MySQL. Prof. Vitor H. Migoto de Gouvêa Colégio IDESA 2012 Edição 7 Listando e Gravando Listando itens em ComboBox e gravando os dados no

Leia mais

Procedimentos armazenados

Procedimentos armazenados Procedimentos armazenados Prof. Márcio Bueno {bd2tarde,bd2noited}@marciobueno.com Material da Profª Maria Lígia B. Perkusich Procedimentos armazenados (i) Definição Um procedimento armazenado (stored procedure)

Leia mais

Um objeto de estatística contém informações de distribuição de valores de uma ou mais colunas de uma tabela ou view indexada

Um objeto de estatística contém informações de distribuição de valores de uma ou mais colunas de uma tabela ou view indexada Desvendando Estatísticas do SQL Server Parte 1 Nesta série de artigos vamos dar um mergulho profundo nas Teorias Probabilísticas (mais conhecido como estatísticas) do SQL Server. Introdução Estatísticas

Leia mais

Triggers em PostgreSQL. Linguagem de Programação de Banco de Dados. Triggers em PostgreSQL. Triggers em PostgreSQL

Triggers em PostgreSQL. Linguagem de Programação de Banco de Dados. Triggers em PostgreSQL. Triggers em PostgreSQL Prof. Ms. Luiz Alberto Contato: lasf.bel@gmail.com Linguagem de Programação de Banco de Dados Triggers em PostgreSQL Todos os bancos de dados comerciais possuem uma linguagem procedural auxiliar para a

Leia mais

trigger insert, delete, update

trigger insert, delete, update 1 Um trigger é um conjunto de instruções SQL armazenadas no catalogo da BD Pertence a um grupo de stored programs do MySQL Executado quando um evento associado com uma tabela acontece: insert, delete,

Leia mais

Sumário. Capítulo 2 Conceitos Importantes... 32 Tópicos Relevantes... 32 Instance... 33 Base de Dados... 36 Conclusão... 37

Sumário. Capítulo 2 Conceitos Importantes... 32 Tópicos Relevantes... 32 Instance... 33 Base de Dados... 36 Conclusão... 37 7 Sumário Agradecimentos... 6 Sobre o Autor... 6 Prefácio... 13 Capítulo 1 Instalação e Configuração... 15 Instalação em Linux... 15 Instalação e Customização do Red Hat Advanced Server 2.1... 16 Preparativos

Leia mais

Usando PostgreSQL na Regra de Negócio de um ERP. Fabiano Machado Dias Eduardo Wolak

Usando PostgreSQL na Regra de Negócio de um ERP. Fabiano Machado Dias Eduardo Wolak Usando PostgreSQL na Regra de Negócio de um ERP Fabiano Machado Dias Eduardo Wolak Regra de negócio? São todas as regras existentes num sistema de informação, que ditam seu comportamento, suas restrições

Leia mais

Manter estatísticas atualizadas é uma das regras de ouro na busca por performance.

Manter estatísticas atualizadas é uma das regras de ouro na busca por performance. Atualização de Estatísticas Um objeto de estatística pode ser atualizado manualmente pelo usuário, através dos comandos SP_UPDATESTATS e/ou UPDATE STATISTICS. Enquanto que a procedure SP_UPDATESTATS atualiza

Leia mais

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008

Tabela de Símbolos. Análise Semântica A Tabela de Símbolos. Principais Operações. Estrutura da Tabela de Símbolos. Declarações 11/6/2008 Tabela de Símbolos Análise Semântica A Tabela de Símbolos Fabiano Baldo Após a árvore de derivação, a tabela de símbolos é o principal atributo herdado em um compilador. É possível, mas não necessário,

Leia mais

BD Oracle. Licenciatura em Engenharia Informática e Computação. Bases de Dados 2003/04

BD Oracle. Licenciatura em Engenharia Informática e Computação. Bases de Dados 2003/04 BD Oracle SGBD Oracle Licenciatura em Engenharia Informática e Computação Bases de Dados 2003/04 BD Oracle Introdução aos SGBD Base de Dados Colecção de dados que descrevem alguma realidade Sistema de

Leia mais

Persistência de Dados

Persistência de Dados Persistência de s Universidade do Estado de Santa Catarina - Udesc Centro de Ciências Tecnológicas - CCT Departamento de Ciência da Computação Tecnologia de Sistemas de Informação Estrutura de s II - DAD

Leia mais

Trabalhando com conexão ao banco de dados MySQL no Lazarus. Prof. Vitor H. Migoto de Gouvêa Colégio IDESA 2011

Trabalhando com conexão ao banco de dados MySQL no Lazarus. Prof. Vitor H. Migoto de Gouvêa Colégio IDESA 2011 Trabalhando com conexão ao banco de dados MySQL no Lazarus Prof. Vitor H. Migoto de Gouvêa Colégio IDESA 2011 Edição 4 O Componente Trabalhando com conexão ao banco de dados MySQL no Lazarus Ano: 03/2011

Leia mais

Comandos de Manipulação

Comandos de Manipulação SQL - Avançado Inserção de dados; Atualização de dados; Remoção de dados; Projeção; Seleção; Junções; Operadores: aritméticos, de comparação,de agregação e lógicos; Outros comandos relacionados. SQL SQL

Leia mais

RECUPERAÇÃO DE CONTEÚDO BANCO DE DADOS

RECUPERAÇÃO DE CONTEÚDO BANCO DE DADOS RECUPERAÇÃO DE CONTEÚDO BANCO DE DADOS No Instituto Federal do Paraná tounou-se necessário o armazenamento de certas informações para controle de pessoal. Para armazenar tais dados é necessário saber que:

Leia mais

4.6. SQL - Structured Query Language

4.6. SQL - Structured Query Language 4.6. SQL - Structured Query Language SQL é um conjunto de declarações que é utilizado para acessar os dados utilizando gerenciadores de banco de dados. Nem todos os gerenciadores utilizam SQL. SQL não

Leia mais

Administração de Banco de Dados

Administração de Banco de Dados Administração de Banco de Dados Adriano J. Holanda http://holanda.xyz 28/8/2015 Índices Para os testes com os índices criaremos uma tabela chamada tteste com o comando teste=> CREATE TABLE tteste (id int4);

Leia mais

AULA 2 INTERAÇÃO COM O BANCO DE DADOS

AULA 2 INTERAÇÃO COM O BANCO DE DADOS AULA 2 INTERAÇÃO COM O BANCO DE DADOS BANCO DE DADOS POSTGRESQL O PostgreSQL é um sistema gerenciador de banco de dados dos mais robustos e avançados do mundo. Seu código é aberto e é totalmente gratuito,

Leia mais

Bases de Dados 2007/2008. Aula 8

Bases de Dados 2007/2008. Aula 8 Bases de Dados 2007/2008 Aula 8 1. T-SQL 2. VARIÁVEIS 3. CURSORES 4. PROCEDIMENTOS 5. EXERCÍCIOS Sumário Referências http://msdn2.microsoft.com/en-us/library/ms189826.aspx (linguagem t-sql) http://www.di.ubi.pt/~pprata/bd/bd0405-proc.sql

Leia mais

UNISA Universidade de Santo Amaro. http://www.unisa.br. Material de Estudo. Módulo I: Básico Banco de dados SQL Server. http://www.unisa-sis.

UNISA Universidade de Santo Amaro. http://www.unisa.br. Material de Estudo. Módulo I: Básico Banco de dados SQL Server. http://www.unisa-sis. UNISA Universidade de Santo Amaro http://www.unisa.br Material de Estudo Módulo I: Básico Banco de dados SQL Server http://www.unisa-sis.info Junho/2010 Objetivo do Workshop Compartilhar e apresentar

Leia mais

Introdução ao SQL. Aécio Costa

Introdução ao SQL. Aécio Costa Aécio Costa A linguagem SQL é um padrão de linguagem de consulta comercial e possui as seguintes partes: Linguagem de definição de dados (DDL) Linguagem interativa de manipulação de dados (DML) Definição

Leia mais

Revisão: Introdução. - Integração com o AutoManager; 1 Atualização de versão do banco de dados PostgreSQL

Revisão: Introdução. - Integração com o AutoManager; 1 Atualização de versão do banco de dados PostgreSQL Urano Indústria de Balanças e Equipamentos Eletrônicos Ltda. Rua Irmão Pedro 709 Vila Rosa Canoas RS Fone: (51) 3462.8700 Fax: (51) 3477.4441 Características do Software Urano Integra 2.2 Data: 12/05/2014

Leia mais

Linguagem SQL Sub-linguagem DDL

Linguagem SQL Sub-linguagem DDL Linguagem SQL Sub-linguagem DDL A SQL - Structured Query Language, foi desenvolvido pela IBM em meados dos anos 70 como uma linguagem de manipulação de dados (DML - Data Manipulation Language para suas

Leia mais

SQL Pacotes. Profa. Dra. Cristina Dutra de Aguiar Ciferri. Laboratório de Bases de Dados Pacotes

SQL Pacotes. Profa. Dra. Cristina Dutra de Aguiar Ciferri. Laboratório de Bases de Dados Pacotes SQL Pacotes Laboratório de Bases de Dados Características Pacotes objetos do banco de dados são equivalentes a bibliotecas Armazenam procedimentos funções definições de cursores declarações de variáveis

Leia mais

PL/pgSQL. Introdução. Introdução. Introdução

PL/pgSQL. Introdução. Introdução. Introdução Introdução PL/pgSQL Banco de Dados II Prof. Guilherme Tavares de Assis PL/pgSQL (Procedural Language for the PostgreSQL) é uma linguagem procedural carregável desenvolvida para o SGBD PostgreSQL, que possui

Leia mais

Introdução à Banco de Dados. Nathalia Sautchuk Patrício

Introdução à Banco de Dados. Nathalia Sautchuk Patrício Introdução à Banco de Dados Nathalia Sautchuk Patrício Histórico Início da computação: dados guardados em arquivos de texto Problemas nesse modelo: redundância não-controlada de dados aplicações devem

Leia mais

O dono de uma livraria cuja base de dados é administrada por si pediu-lhe para efectuar as seguintes alterações ao preço dos livros:

O dono de uma livraria cuja base de dados é administrada por si pediu-lhe para efectuar as seguintes alterações ao preço dos livros: - Necessidade O dono de uma livraria cuja base de dados é administrada por si pediu-lhe para efectuar as seguintes alterações ao preço dos livros: Os livros que custarem mais de 10, devem ver o seu preço

Leia mais

CONTRA CONTROLE DE ACESSOS E MODULARIZADOR DE SISTEMAS

CONTRA CONTROLE DE ACESSOS E MODULARIZADOR DE SISTEMAS MINISTÉRIO DO DESENVOLVIMENTO AGRÁRIO SUBSECRETARIA DE PLANEJAMENTO, ORÇAMENTO E ADMINISTRAÇÃO COORDENAÇÃO-GERAL DE MODERNIZAÇÃO E INFORMÁTICA CONTRA CONTROLE DE ACESSOS E MODULARIZADOR DE SISTEMAS MANUAL

Leia mais

1. SQL Instrumental...2 1.1 Select...3 1.2 Delete...13 1.3 Update... 1.4 Insert... 1.5 Group by... 1.6 Having... 1.7 Unnion All...

1. SQL Instrumental...2 1.1 Select...3 1.2 Delete...13 1.3 Update... 1.4 Insert... 1.5 Group by... 1.6 Having... 1.7 Unnion All... SQL 1. SQL Instrumental...2 1.1 Select...3 1.2 Delete...13 1.3 Update... 1.4 Insert... 1.5 Group by... 1.6 Having... 1.7 Unnion All... 2. Servidor... 2.1 Ativando log no Broker... 2.2 Leitura do log no

Leia mais

*O RDBMS Oracle é um sistema de gerenciamento de banco de dados relacional.

*O RDBMS Oracle é um sistema de gerenciamento de banco de dados relacional. Arquitetura Oracle e seus componentes Hoje irei explicar de uma forma geral a arquitetura oracle e seus componentes. Algo que todos os DBA s, obrigatoriamente, devem saber de cabo a rabo. Vamos lá, e boa

Leia mais

Prof.: Clayton Maciel Costa clayton.maciel@ifrn.edu.br

Prof.: Clayton Maciel Costa clayton.maciel@ifrn.edu.br Programação com acesso a BD Prof.: Clayton Maciel Costa clayton.maciel@ifrn.edu.br 1 Modelos de Dados, Esquemas e Instâncias 2 Modelos de Dados, Esquemas e Instâncias Modelo de dados: Conjunto de conceitos

Leia mais

BANCO DE DADOS BANCO DE DADOS. Prof. Patrícia Lucas 3º Trimestre

BANCO DE DADOS BANCO DE DADOS. Prof. Patrícia Lucas 3º Trimestre BANCO DE DADOS BANCO DE DADOS Prof. Patrícia Lucas 3º Trimestre ROTEIRO PARA O 3º TRIMESTRE 1. O MySQL DDL SQL 1. Como funciona o MySQL 2. Como criar um banco de dados no MySQL 3. Como criar tabelas: comandos

Leia mais

Boletim Técnico. Criação de formulário dinâmico para o módulo WEB. Produto : TOTVS Web, 11.8.0.0

Boletim Técnico. Criação de formulário dinâmico para o módulo WEB. Produto : TOTVS Web, 11.8.0.0 de formulário dinâmico para o módulo WEB Produto : TOTVS Web, 11.8.0.0 Chamado : P118SSTWEB\REQ168 Data da publicação : 17/10/12 País(es) : Brasil Banco(s) de Dados : Oracle Esta melhoria depende de execução

Leia mais

SQL Structured Query Language

SQL Structured Query Language Janai Maciel SQL Structured Query Language (Banco de Dados) Conceitos de Linguagens de Programação 2013.2 Structured Query Language ( Linguagem de Consulta Estruturada ) Conceito: É a linguagem de pesquisa

Leia mais

2008.1. A linguagem SQL

2008.1. A linguagem SQL SQL 2008.1 A linguagem SQL SQL - Structured Query Language. Foi definida nos laboratórios de pesquisa da IBM em San Jose, California, em 1974. Teve seus fundamentos no modelo relacional Sua primeira versão

Leia mais

DIFERENÇAS ENTRE FUNÇÃO E BLOCO FUNCIONAL; CRIAÇÃO DE FUNÇÃO / BLOCO FUNCIONAL; UTILIZAÇÃO NO LADDER; EXEMPLO DE BLOCO FUNCIONAL;

DIFERENÇAS ENTRE FUNÇÃO E BLOCO FUNCIONAL; CRIAÇÃO DE FUNÇÃO / BLOCO FUNCIONAL; UTILIZAÇÃO NO LADDER; EXEMPLO DE BLOCO FUNCIONAL; Boletim Técnico EP3 11/07 Utilizando Funções e Blocos Funcionais de usuário pelo software A1 19 de outubro de 2007 O objetivo deste boletim é mostrar como utilizar o recurso de Funções (Functions) e Blocos

Leia mais

1. Domínio dos Atributos

1. Domínio dos Atributos Structure Query Language SQL Guilherme Pontes lf.pontes.sites.uol.com.br 1. Domínio dos Atributos Por domínio, ou tipo, pode-se entender como a maneira como determinado atributo (ou campo, se tratando

Leia mais

INE 5336. Banco de Dados II. Sumário

INE 5336. Banco de Dados II. Sumário INE 5336 Banco de Dados II Ronaldo S. Mello 2004/2 1 SQL Embutida Sumário 2 Processamento de Consultas 3 Introdução a Transações 4 Recuperação de Falhas 5 Controle de Concorrência 6 Banco de Dados Distribuído

Leia mais

UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE ESCOLA AGRÍCOLA DE JUNDIAÍ EAJ - PRONATEC / REDE etec MÓDULO III DESENVOLVIMENTO PROFESSOR ADDSON COSTA

UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE ESCOLA AGRÍCOLA DE JUNDIAÍ EAJ - PRONATEC / REDE etec MÓDULO III DESENVOLVIMENTO PROFESSOR ADDSON COSTA UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE ESCOLA AGRÍCOLA DE JUNDIAÍ EAJ - PRONATEC / REDE etec MÓDULO III DESENVOLVIMENTO PROFESSOR ADDSON COSTA RESUMO DE AULA CRIAÇÃO E MANIPULAÇÃO DO BANCO DE DADOS

Leia mais

Banco de Dados I. Aula 12 - Prof. Bruno Moreno 04/10/2011

Banco de Dados I. Aula 12 - Prof. Bruno Moreno 04/10/2011 Banco de Dados I Aula 12 - Prof. Bruno Moreno 04/10/2011 Plano de Aula SQL Definição Histórico SQL e sublinguagens Definição de dados (DDL) CREATE Restrições básicas em SQL ALTER DROP 08:20 Definição de

Leia mais

INICIAL. Guia de Criação da Base Produção Paralela IMPORTANTE: MESMO QUE SEJAM EXECUTADOS

INICIAL. Guia de Criação da Base Produção Paralela IMPORTANTE: MESMO QUE SEJAM EXECUTADOS Guia de Criação da Base Produção Paralela INICIAL SEQUENCES, tabelas de BMF e CADASTRO. Atualização de Bancos de Dados. Validações necessárias. IMPORTANTE: MESMO QUE SEJAM EXECUTADOS OS PROCEDIMENTOS DA

Leia mais

Motivação. Aplicações precisam acessar o BD Linguagens BD X Linguagens Programação. paradigmas diferentes (impedance mismatch)

Motivação. Aplicações precisam acessar o BD Linguagens BD X Linguagens Programação. paradigmas diferentes (impedance mismatch) Sumário 1 Introdução ao Processamento de Consultas 2 Otimização de Consultas 3 Plano de Execução de Consultas 4 Introdução a Transações 5 Recuperação de Falhas 6 Controle de Concorrência 7 Fundamentos

Leia mais