Introdução ao PL/SQL

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

Download "Introdução ao PL/SQL"

Transcrição

1 Introdução ao PL/SQL

2 Pág.: 2/53 SUMÁRIO 1 FUNDAMENTOS O QUE É O PL/SQL? COMO É EXECUTADO UM PL/SQL NO ORACLE SERVER ESTRUTURA DE UM BLOCO PL/SQL TIPOS DE BLOCOS PL/SQL DECLARANDO VARIÁVEIS NO PL/SQL ATRIBUINDO VALORES A VARIÁVEIS TIPOS DE VARIÁVEIS O ATRIBUTO %TYPE CONTROLANDO O FLUXO DE EXECUÇÃO (IF) LOOP BASIC LOOP FOR LOOP WHILE LOOP LOOPS Encadeados e LABELS TRABALHANDO COM CURSORES Implicit Cursor Explicit Cursor Controlando um Cursor Explicito Declarando um Cursor Abrindo um Cursor Buscando os dados do Cursor Fechando o Cursor Atributos para Cursores Explícitos Cursor Explícito com Parâmetros Cursor FOR LOOPS Cursor FOR LOOPS usando SUBQUERIES TRABALHANDO COM VARIÁVEIS COMPOSTAS PL/SQL RECORDS Referenciando e Inicializando RECORDS O atributo %ROWTYPE PL/SQL TABLES Criando uma PL/SQL TABLE Referenciando uma PL/SQL TABLE PL/SQL TABLES DE RECORDS... 22

3 Pág.: 3/ Referenciando uma PL/SQL TABLE de RECORD Métodos PL/TABLE Exceções de usuário RAISE_APPLICATION_ERROR STORED PROCEDURES PROCEDURES Executando uma PROCEDURE no SQL*PLUS Opção DEFAULT para parâmetros Métodos para especificar parâmetros Chamando um procedimento a partir de um bloco PL/SQL Removendo um procedimento do banco de dados FUNCTIONS Executando uma FUNCTION no SQL*PLUS Removendo uma função do banco de dados Diferenças entre Procedures e Functions PACKAGES (PACOTES) ESCOPO PÚBLICO ESCOPO PRIVADO COMPONENTES DE UMA PACKAGE CRIANDO UMA ESPECIFICAÇÃO DE PACOTE CRIANDO O CORPO DO PACOTE EXECUTANDO UM PROCEDIMENTO DE UMA PACKAGE NO SQL*PLUS VARIÁVEIS GLOBAIS REMOVENDO PACOTES TRIGGERS (GATILHOS) USANDO PREDICADOS CONDICIONAIS (DELETING/INSERTING/UPDATING) USANDO OS QUALIFICADORES :NEW E :OLD GERENCIANDO GATILHOS EXCEÇÕES NO PL/SQL O QUE É UMA EXCEÇÃO? TRATANDO UMA EXCEÇÃO PROPAGANDO EXCEÇÕES TIPOS DE EXCEÇÕES Pré-definidas Exceções não pré-definidas Funções para tratamento de exceções Exemplos de valores do SQLCODE EXERCÍCIOS CONTROLE DO FLUXO DE EXECUÇÃO(IF/LOOP) CURSORES PLSQL RECORDS,PLSQL TABLES, FUNCTIONS PROCEDURES PACKAGES, TRIGGERS EXCEPTIONS... 39

4 Pág.: 4/53 1 FUNDAMENTOS 1.1 O que é o PL/SQL? PROCEDURAL LANGUAGE/SQL (PL/SQL) é uma linguagem PROCEDURAL da ORACLE estendida do SQL. PL/SQL incorpora muitas características das linguagens de programação desenvolvidas durante os anos 1970 e Esta permite que a manipulação de dados e consultas seja incluída em unidades de programas, fazendo o PL/SQL uma poderosa linguagem de processamento de transação. 1.2 Como é executado um PL/SQL no ORACLE SERVER Blocos de PL/SQL são passados e processados por uma PL/SQL ENGINE, que pode residir dentro de uma ferramenta ORACLE ou dentro do ORACLE SERVER. A PL/SQL ENGINE utilizada depende de onde o bloco PL/SQL é invocado.

5 Pág.: 5/53 O PL/SQL ENGINE filtra os comandos SQL e manda individualmente o comando SQL para o SQL STATEMENT EXECUTOR no ORACLE SERVER. O PROCEDURAL STATEMENTS EXECUTOR processa o PL/SQL com os dados retornados do ORACLE SERVER. Isto reduz o trabalho de envio para o ORACLE SERVER (especialmente em CLIENT/SERVER). Resumo PL/SQL ENGINE :Pode estar contida dentro de ferramentas ORACLE como no ORACLE SERVER. Filtra os comandos SQL e envia para o ORACLE SERVER (SQL STATEMENT EXECUTOR). PROCEDURE STATEMENT EXECUTOR :Recebe blocos PL/SQL e dados oriundos do ORACLE SERVER e processa o PL/SQL. SQL STATEMENT EXECUTOR : Executa comandos SQL. 1.3 Estrutura de um bloco PL/SQL Um bloco PL/SQL é composto por três seções : DECLARATIVE (opcional), EXECUTABLE (obrigatória) e EXCEPTION HANDLING (opcional). Unicamente as palavras BEGIN e END são exigidas. Seção DECLARATIVE EXECUTABLE EXCEPTION HANDLING Significado Contém todas as variáveis constantes, cursores e exceções dos usuários que são utilizadas nas outras seções. Contém comandos SQL e PL/SQL Especifica ações a serem executadas quando um erro ocorre dentro de seção EXECUTABLE

6 Pág.: 6/53 Ex. DECLARE...(Variáveis, cursores, constantes, etc.) BEGIN...(Comandos SQL e PL/SQL) EXCEPTION...(Ações a serem executadas caso um erro aconteça) END; 1.4 Tipos de blocos PL/SQL ANONYMOUS BLOCK: ANONYMOUS BLOCK são blocos não nomeados. Eles são declarados em um ponto de uma aplicação onde eles serão executados e passados para o PL/SQL ENGINE executar. SUBPROGRAMS : SUBPROGRAMS são blocos PL/SQL nomeados que podem ser executados e invocados. Você pode declarar ele geralmente como PROCEDURES ou FUNCTIONS. Você pode armazenar SUBPROGRAMS no SERVER ou a nível de aplicação. ANONYMOUS PROCEDURE FUNCTIONS [DECLARE] PROCEDURE nome IS FUNCTION nome RETURN DATATYPE IS BEGIN BEGIN BEGIN - comandos [EXCEPTION] END; - comandos [EXCEPTIONS] END; - comandos [EXCEPTIONS] END; Obs. A função é similar a PROCEDURE, exceto que a função retorna valor.

7 Pág.: 7/ Declarando variáveis no PL/SQL Variáveis são unidades de armazenamento de dados em um bloco PL/SQL, podendo seus valores serem alterados de acordo com a lógica do programa.o escopo de uma variável é o escopo da unidade de programa onde foi declarada.uma variável deve necessariamente ser declarada, definindo seu tipo e tamanho(opcional dependendo do tipo) Você precisa declarar todas as variáveis dentro da seção declarativa antes de referenciar dentro de um bloco PL/SQL. Você tem a opção de atribuir um valor inicial. Sintaxe : identifier [CONSTANT] DATATYPE [NOT NULL] [:= DEFAULT expr] Identifier CONSTANT DATATYPE NOT NULL expr é o nome da variável contém uma variável que não pode ser alterada (precisam ser inicializadas) é um scalar, composite ou lob determina que a variável não pode ser nula. (Precisam de um valor inicial) é qualquer expressão PL/SQL. Uma literal, outra variável ou uma expressão envolvendo operações ou FUNCTIONS Exemplos Declare data_nascimento DATE; cod_departamento NUMBER(2) NOT NULL := 10; cidade VARCHAR2(30) := 'PORTO ALEGRE'; dolar CONSTANT NUMBER := 1.8; cod_funcionario NUMBER (10) DEFAULT 10;

8 Pág.: 8/53 Obs. Identifiers não podem ser maiores que 30 caracteres e o primeiro caracter deve ser uma letra. Por DEFAULT variáveis são inicializadas com NULL 1.6 Atribuindo valores a variáveis Para atribuir valores a variáveis, use o operador :=. Sintaxe. identifier := expr; identifier expr : o nome da variável : pode ser variável, literal ou uma FUNCTION; Exemplos Obs. BEGIN dolar := 1.4; data_nascimento := '16-MAY-2000'; cod_departamento := 10; data_atual1 := SYSDATE; data_atual2 := to_date ('16-MAY-2000'); END; - Literais STRINGS são atribuídas com aspas simples - por exemplo olá. Se você deseja colocar uma aspa dentro da STRING, coloque duas. - ' olá '' '.

9 Pág.: 9/ Tipos de variáveis TIPO VARCHAR2(SIZE) NUMBER (PRECISION, SCALE) DATE CHAR[(SIZE)] LONG LONG ROW BOOLEAN BINARY_INTEGER PLS_INTEGER DESCRIÇÃO Tipo base para variáveis caracter de Tamanho variável. até Não há tamanho DEFAULT para a definição de variáveis e constantes. Números fixos e com ponto flutuante Tipo base para data e hora Tipo base para variáveis de tamanho Tipo base para variáveis caracter de tamanho variável. acima de bytes. O máximo é bytes. Tipo base para variáveis binárias e bytes. Não é implementada no PL/SQL; TRUE,FALSE ou NULL Tipo base para números inteiros entre e Tipo base para números inteiros entre e O Atributo %TYPE Serve para declarar uma variável de acordo com uma coluna de uma tabela ou com base em outra variável já declarada. 1.9 Controlando o fluxo de execução (IF) Você pode alterar o fluxo de execução usando o comando condicional IF. Segue abaixo as três formas para o IF. - IF-THEN-END IF - IF-THEN-ELSE-END IF - IF-THEN-ELSIF-END IF

10 Pág.: 10/53 Sintaxe IF condição THEN comandos; [ELSIF condição THEN comandos ] [ELSE comandos;] END; Exemplos 1) 2) 3) 4)... IF ESTADO= 'RS' THEN NOME := 'RIO GRANDE DO SUL'; END IF; IF ESTADO = 'RS' THEN NOME := 'RIO GRANDE DO SUL'; ELSE NOME := 'OUTRO QUALQUER'; END IF; IF ESTADO = 'RS' THEN NOME := 'RIO GRANDE DO SUL'; ELSIF ESTADO = 'SP' THEN NOME := 'SÃO PAULO'; END IF; IF ESTADO = 'RS' THEN NOME := 'RIO GRANDE DO SUL'; ELSIF ESTADO = 'SP' THEN NOME := 'SÃO PAULO'; ELSE NOME := 'OUTRO QUALQUER'; END IF;...

11 Pág.: 11/ LOOP Existem três tipos de LOOP : BASIC LOOP FOR LOOP WHILE LOOP BASIC LOOP Sintaxe LOOP comandos EXIT [WHEN condição]; END LOOP; Ex. DECLARE contador NUMBER (2) := 1; BEGIN LOOP comandos; contador := contados + 1; EXIT WHEN contador > 10; END LOOP;

12 Pág.: 12/ FOR LOOP Sintaxe FOR counter IN [REVERSE] lower_bound..upper_bound LOOP comandos; END LOOP; counter REVERSE é uma variável implicitamente declarada do tipo inteiro (INTEGER) com valores automaticamente incrementados ou decrementadas por 1 para cada execução do LOOP. causa um decremento no counter. O DEFAULT é Ex. FOR I IN LOOP comandos; END LOOP; WHILE LOOP Sintaxe WHILE condition LOOP comandos; END LOOP; Condition é uma variável BOOLEAN ou uma expressão Ex. WHILE I <=10 LOOP I := I + 1;; END LOOP;

13 Pág.: 13/ LOOPS Encadeados e LABELS Você pode encadear LOOPS. Por exemplo, colocar um FOR LOOP dentro de um WHILE LOOP. Normalmente a terminação do LOOP mais interno não termina a execução do LOOP mais externo. No entanto, você pode usar um LABEL para o LOOP mais externo e forçar a saída através do comando EXIT. Exemplo BEGIN <<LOOP_EXTERNO>> LOOP contador := contador + 1; EXIT WHEN contador > 10; <<LOOP_INTERNO>> LOOP EXIT LOOP_EXTERNO WHEN... EXIT LOOP_INTERNO WHEN... END LOOP LOOP_INTERNO; END LOOP LOOP_EXTERNO; END;

14 Pág.: 14/53 2 TRABALHANDO COM CURSORES O ORACLE SERVER usa uma área chamada SQL áreas para executar um comando SQL e armazenar as informações. Você pode usar cursores PL/SQL para nomear um SQL e acessar as informações armazenadas. Tipos de cursores Implicit Explicit são declarados por um PL/SQL implicitamente para todos os DML e comandos SELECT que retornam um linha. para consultas que retornam mais de uma linha. Cursores explícitos são declarados e nomeados pelo programados e manipulados através de comandos específicos Implicit Cursor O ORACLE SERVER implicitamente abre um cursor para processar cada comandos SQL não associado com um cursor explicitamente declarado Explicit Cursor Um cursor explícito individualmente processa cada linha retornada por um comando SELECT. O conjunto de linhas retornadas por SELECT é chamado por result set. Ex. Result Set 2234 JOÃO 4543 PEDRO Cursor==> 3233 MARIA Linha corrente 2221 CARLOS

15 Pág.: 15/ Controlando um Cursor Explicito Não Sim DECLARE ==> OPEN ==> FETCH ==>EMPTY?==> CLOSE Cria um Abre o Lê a corrente Testa a Fecha SQL area cursor. linha para existência de cursor Seta como variáveis Linhas ativo Retorna para o FETCH se foram encontradas linhas Declarando um Cursor Sintaxe CURSOR cursor_name IS comando_select; cursor_name comando_select é um identificador PL/SQL é um comando SELECT (sem o INTO) Ex. DECLARE CURSOR c1 IS SELECT empno, ename FROM emp; BEGIN Abrindo um Cursor Sintaxe OPEN cursor_name;

16 Pág.: 16/ Buscando os dados do Cursor Sintaxe FETCH cursor_name INTO [variable1, variable2,...] record_name]; cursor_name variable record_name o nome do cursor previamente declarado a variável de saída para armazenar o retorno o nome do RECORD onde os dados serão armazenados. O RECORD pode ser declarado usando o %ROWTYPE. Ex. FETCH c1 INTO v_empno, v_ename; Fechando o Cursor O comando CLOSE fecha o cursor. Desabilita o cursor e o resultado tornando-o como indefinido. Feche o cursor após completar o processamento do comando SELECT. Isto permite que o cursor seja reaberto se necessário. Se você executar o FETCH em um cursor já fechado, acontecerá a exceção INVALID_CURSOR Atributos para Cursores Explícitos Segue abaixo alguns atributos que podemos utilizar para auxiliar no processamento de cursores. NOME RETORNO Descrição %ISOPEN BOOLEAN Retorna TRUE e o cursor está aberto %NOTFOUND BOOLEAN Retorna TRUE se o FETCH não retornou linhas %FOUND BOOLEAN Retorna TRUE se o FETCH retornou linhas %ROWCOUNT NUMBER Retorna o total de linhas retornadas

17 Pág.: 17/ Cursor Explícito com Parâmetros Você pode passar parâmetros para o cursor antes que este seja aberto. Isto significa que você pode abrir e fechar um cursor várias vezes em um bloco PL/SQL, retornando diferentes informações. Sintaxe CURSOR cursor_name [(parameter_name DATATYPE,...)] IS comando_select; cursor_name parameter_name DATATYPE comando_select é um identificador PL/SQL de um cursor previamente declarado. o nome do parâmetro um scalar DATATYPE um SELECT sem o INTO Ex. DECLARE CURSOR c1 (v_deptno NUMBER, v_job VARCHAR2) IS SELECT empno,ename FROM emp WHERE deptno = v_deptno AND job = v_job; Cursor FOR LOOPS Um cursor FOR LOOP processa linhas como um cursor explícito. Ele é um fácil de utilizar porque o cursor quando aberto, as linhas são retornadas para cada interação do LOOP, e é fechado automaticamente quando todas as linhas foram processadas. O LOOP termina automaticamente no fim da ultima interação quando a ultima linha é retornada.

18 Pág.: 18/53 Sintaxe FOR record_name IN cursor_name LOOP comando1; comando2; END LOOP; record_name implicitamente cursor_name é um nome de um RECORD declarado é um identificador PL/SQL de u cursor previamente declarado. Ex. DECLARE CURSOR c1 IS SELECT empno,ename FROM emp; BEGIN FOR emp_record IN c1 LOOP -- O OPEN e o FETCH são implicitamente executados IF emp_record.empno = 7839 THEN... END IF; END LOOP; -- O CLOSE é executado implicitamente. END; Cursor FOR LOOPS usando SUBQUERIES Exemplo BEGIN FOR emp_record IN ( SELECT empno,ename FROM emp) LOOP END; -- O OPEN e o FETCH são implicitamente executados IF emp_record.empno = 7839 THEN... END IF; END LOOP; -- O CLOSE é executado implicitamente.

19 Pág.: 19/53 3 TRABALHANDO COM VARIÁVEIS COMPOSTAS COMPOSITE DATATYPES COMPOSITE DATATYPES (também conhecida como COLLECTIONS) são RECORD, TABLE,NESTED TABLE e VARRAY. 3.1 PL/SQL RECORDS Um RECORD é um grupo de itens armazenados em um campo. Por exemplo, suponha que você tenha diferentes tipos de dados de um empregado como nome, salário, data de nascimento. Estes dados possuem diferentes tipos mas estão logicamente ligados a um empregado. Sendo assim, defini-se um RECORD para agrupar os campos do empregado. Segue abaixo algumas considerações : - cada RECORD pode ter muitos campos - RECORD pode ter atribuído valores DEFAULT e podem ser definidos como NOT NULL - campos sem valor DEFAULT são inicializados com NULL - você pode declarar e referenciar RECORDS encadeados. Um RECORD pode ser componente de outro RECORD. Sintaxe TYPE type_name IS RECORD (field_declaration [, field_declaration]...) identifier type_name O tipo do field_declaration pode ser definido de acordo a sintaxe abaixo: field_name {field_type variable%type table.column.%type table%rowtype } [[NOT NULL] {:= DEFAULT : expr] type_name o nome do tipo RECORD. Este identificador é usado para declarar registros. field_name este é o nome de um campo dentro de um RECORD.

20 Pág.: 20/53 field type este é o tipo do campo. Exemplo DECLARE TYPE emp_record_type IS RECORD (nome VARCHAR2(30),cargo VARCHAR2(10),salario NUMBER (13,2)); emp_record emp_record_type; Referenciando e Inicializando RECORDS Campo de uma variável do tipo RECORD são acessados pelo nome. Para referenciar ou inicializar um campo de um RECORD, você precisa especificar o nome do RECORD seguido do nome do campo. Ex. emp_record.nome := 'PEDRO'; O atributo %ROWTYPE Para declarar uma variável baseada em tabela ou VIEW, você deve usar o %ROWTYPE. Ex. DECLARE emp_record empregados%rowtype 3.2 PL/SQL TABLES Objetos do tipo TABLE são chamados de PL/SQL TABLES. Eles são modelados como uma TABLE (DATABASE TABLE). PL/SQL TABLE usam uma PRIMARY KEY que permite acessar os registros.

21 Pág.: 21/53 Uma PL/SQL TABLE : - é similar a um ARRAY - Precisa ter dois componentes - Uma PRIMARY KEY do tipo BINARY_INTEGER que indexa a PL/SQL TABLE - Uma coluna do tipo SCALAR ou RECORD Sintaxe TYPE type_name IS TABLE OF { column_type variable%type table.column%type} [NOT NULL] [INDEX BY BINARY INTEGER]; identifier type_name Criando uma PL/SQL TABLE Há dois passos para criação de uma PL/SQL TABLE. 1. Declare um tipo TABLE 2. Declare uma variável do tipo criado (passo 1) DECLARE TYPE date_table_type IS TABLE OF DATE INDEX BY BINARY INTEGER; date_table date_table_type; Referenciando uma PL/SQL TABLE Sintaxe PL/SQL_TABLE_NAME(primary_key_value) := value; Ex. date_table (1) := SYSDATE;

22 Pág.: 22/ PL/SQL TABLES de RECORDS Você pode definir uma PL/SQL TABLE com base na estrutura de RECORD. Para isto, você pode usar o atributo %ROWTYPE ou um RECORD já definido. Exemplo DECLARE TYPE dept_table_type IS TABLE OF dept%rowtype INDEX BY BINARY_INTEGER; dept_table dept_table_type; Referenciando uma PL/SQL TABLE de RECORD. Exemplo dept_table(15).location := 'Porto Alegre';

23 Pág.: 23/ Métodos PL/TABLE Método EXISTS (n) COUNT Descrição Retorna TRUE se o elemento(n) existe na PL/SQL tabela Retorna o número de elementos da PL/SQL TABLE FIRST/LAST Retorna a primeira linha e ultima da PL/SQL TABLE. Retorna NULL se a PL/SQL TABLE está vazia PRIOR(n) Retorna o índice que precede o índice n em uma PL/SQL TABLE NEXT(n) Retorna o índice que sucede o índice n em uma PL/SQL TABLE EXTEND(n,i) Para aumentar o TABLE de uma PL/SQL TABLE. EXTEND coloca um elemento NULL no final da PL/SQL TABLE EXTEND(n) coloca n elementos NULL na PL/SQL TABLE EXTEND(n,i) coloca n copias do elemento i no final da PL/SQL TABLE TRIM Remove um elemento do final da PL/SQL TABLE DELETE DELETE deleta todas as linhas da PL/SQL DELETE (n) TABLE deleta o n elemento da PL/SQL TABLE DELETE (m,n) remove os elementos no intervalo entre m e n Exceções de usuário Estas exceções não são vinculadas a um erro ORACLE e são levantadas através do comando RAISE. Geralmente são utilizadas para o tratamento de erros de regra de negócio do sistema.

24 Pág.: 24/53 Ex. DECLARE e_limite_credito EXCEPTION; BEGIN... RAISE e_limite_credito;... EXCEPTION WHEN e_limite_credito;... END; RAISE_APPLICATION_ERROR É uma PROCEDURE que permite gerar um erro e mensagem. Sintaxe raise_application_error (error number, message [, {TRUE FALSE}]; error_number : erro definido pelo usuário entre e message : a mensagem do erro. Ex. EXCEPTION WHEN NO_DATA_FOUND THEN RAISE_APPLICATION_ERROR (-20001,'Dolar não cadastrado'); END;

25 Pág.: 25/53 4 STORED PROCEDURES 4.1 PROCEDURES Podemos definir uma PROCEDURE como um bloco PL/SQL nomeado que pode obter parâmetros (argumentos) e executar alguma ação. Uma PROCEDURE pode ficar armazenada dentro de forms ou no banco de dados (STORED PROCEDURE). Sendo armazenada no banco de dados, estas provêm a reutilização. Uma vez validados, eles podem ser usados em várias aplicações, Se a definição for alterada, somente o procedimento será afetado, o que simplifica bastante a manutenção. Sintaxe (criação no banco de dados) CREATE [OR REPLACE] PROCEDURE nome_procedimento [parâmetro1 [modo1] tipodedados1, parâmetro2 [modo2] tipodedados2,... ) IS AS PL/SQL BLOCK nome_procedimento parâmetro modo tipo de dados PL/SQL Block Nome da PROCEDURE Nome da variável PL/SQL IN (DEFAULT) OUT IN OUT Tipo de dados do parâmetro - Number,varchar2,date,etc.(sem tamanho) - %TYPE - %ROWTYPE - Um tipo pré-definido em uma PACKAGE Bloco PL/SQL que define as ações executadas pelo procedimento

26 Pág.: 26/53 Ex. CREATE OR REPLACE PROCECURE aumenta_salario (p_cd_empregado IN emp.cd_empregado%type, p_percentual IN NUMBER) IS BEGIN UPDATE emp SET salario = salario * p_percentual WHERE cd_empregado = p_cd_empregado; END; / PROCEDURE created Executando uma PROCEDURE no SQL*PLUS Utilize o comando EXECUTE para executar uma PROCEDURE SQL> EXECUTE aumenta_salario (10,1.10); PL/SQL PROCEDURE successfull completed. Obs. - Para executar uma PROCEDURE com parâmetro OUT ou IN OUT é necessário declarar uma variável e referenciá-la na chamada da PROCEDURE com dois pontos para receber o retorno. Ex. SQL> VARIABLE g_name VARCHAR2(30) SQL> EXECUTE retorna_nome (10,:g_name); PL/SQL PROCEDURE successfull completed. - O SQL*PLUS não permite a declaração de variáveis BOOLEAN

27 Pág.: 27/ Opção DEFAULT para parâmetros Você pode especificar um valor DEFAULT para um parâmetro caso este não seja informado. Para isto é necessário acrescentar a clausula DEFAULT após a definição do tipo de dados do parâmetro. CREATE OR REPLACE PROCECURE aumenta_salario (p_cd_empregado IN emp.cd_empregado%type, p_percentual IN NUMBER DEFAULT 1.10) IS BEGIN UPDATE emp SET salario = salario * p_percentual WHERE cd_empregado = p_cd_empregado; END; / Métodos para especificar parâmetros Existem três formas de especificar os parâmetros na chamada de um procedimento : posicional, nomeado e combinação Posicional Nomeado Combinada Assume os valores na ordem que são passados Assume o valor associado ao nome do parâmetro através do uso do =>. Assume os primeiro parâmetros como posicional e os outros através do nomeado. Exemplos Considere a seguinte PROCEDURE prc_aumenta_precos ( cd_empresa NUMBER,cd_filial NUMBER,cd_produto NUMBER);

28 Pág.: 28/53 chamada posicional EXECUTE prc_aumenta_precos (1,12,1223); chamada nomeada EXECUTE prc_aumenta_preco (cd_produto=>1223,cd_empresa=>1,cd_filial=>12); chamada combinada EXECUTE prc_aumenta_preco (1,cd_produto=>1223,cd_filial=>12); Chamando um procedimento a partir de um bloco PL/SQL Você pode chamar um procedimento dentro de um bloco PL/SQL (anônimo ou armazenado no banco de dados. Exemplo BEGIN prc_aumenta_precos (1,12,1223); END; Removendo um procedimento do banco de dados Uma vez criado (CREATE) a PROCEDURE fica armazenada no banco de dados. Para remover, utilize o comando DROP no SQL*PLUS. Exemplo SQL> DROP PROCEDURE prc_aumenta_precos; PROCEDURE dropped;

29 Pág.: 29/ FUNCTIONS Assim como a PROCEDURE, podemos definir uma função como um bloco PL/SQL nomeado que pode obter parâmetros (argumentos) e executar alguma ação. A única diferença é que a função necessita o retorno de um valor. Sintaxe (criação no banco de dados) CREATE [OR REPLACE] FUNCTION nome_procedimento [parâmetro1 [modo1] tipodedados1, parâmetro2 [modo2] tipodedados2,... ) RETURN tipo de dados IS AS PL/SQL Block nome_procedimento parâmetro modo tipo de dados Nome da PROCEDURE Nome da variável PL/SQL IN (DEFAULT) OUT IN OUT Tipo de dados do parâmetro - Number,varchar2,date, etc.(sem tamanho) - %TYPE - %ROWTYPE - Um tipo pré-definido em uma PACKAGE RETURN tipo de dados PL/SQL Block Tipo de dados do retorno da função. Segue as mesmas regras do tipo de dados dos parâmetros Bloco PL/SQL que define as ações executadas pela função

30 Pág.: 30/53 Ex. CREATE OR REPLACE FUNCTION retorna_nome (p_cd_empregado IN emp.cd_empregado%type) RETURN emp.nome%type IS v_nome emp.nome%type BEGIN SELECT nome INTO v_nome FROM emp WHERE cd_empregado = p_cd_empregado; END; / RETURN v_nome; PROCEDURE created Executando uma FUNCTION no SQL*PLUS Utilize o comando EXECUTE para executar uma função e PRINT para visualizar o valor a variável de retorno (g_nome). Ex. SQL> VARIABLE g_nome VARCHAR2(30) SQL> EXECUTE :g_nome retorna_nome (10); PL/SQL PROCEDURE successfull completed. SQL> PRINT g_nome Removendo uma função do banco de dados Uma vez criado (CREATE) a PROCEDURE fica armazenada no banco de dados. Para remover, utilize o comando DROP no SQL*PLUS. Ex. SQL> DROP FUNCTION retorna_nome; FUNCTION dropped;

31 Pág.: 31/53

32 Pág.: 32/ Diferenças entre Procedures e Functions Ambas possuem funcionalidades semelhantes,porém a function por si só representa um valor, ou seja, mesmo não tendo parâmetros do tipo OUT ela retorna um valor.procedures só retornam valores se possuírem parâmetros do tipo OUT. Outra diferença importante é a possibilidade de se executar funções dentro de um comando SELECT desde que elas não possuam parâmetros OUT. Já procedures não oferecem essa funcionalidade. Ex.: SELECT FNC_VALIDA( ) CGC_VALIDO FROM DUAL; CGC_VALIDO TRUE

33 Pág.: 33/53 5 PACKAGES (PACOTES) Uma PACKAGE (pacote) tem a finalidade de agrupar itens FUNCTIONS / PROCEDURES/variáveis) relacionadas. Por exemplo, podemos agrupar todos as funções e PROCEDURES relacionadas ao sistema financeiro. Um componente de uma PACKAGE (FUNCTION/PROCEDURE/variável) pode ser público ou privado. 5.1 Escopo Público Quando um elemento de um PACKAGE pode ser referenciado ou executado por outros objetos ORACLE (PROCEDURE/FUNCTION, etc.). Para isto, o componente (FUNCTION,PROCEDURE) deve ser declarado na especificação do pacote. 5.2 Escopo Privado Só pode ser referenciado por outras construções que são parte do mesmo pacote. 5.3 Componentes de uma PACKAGE 1 - Variável pública (global) 2 - Procedimento público 3 - Procedimento privado 4 - Variável privada (local do pacote) 5 - Variável local (local do procedimento)

34 Pág.: 34/ Criando uma especificação de Pacote Sintaxe CREATE OR REPLACE PACKAGE nome_pacote IS AS tipo público e declarações de item especificações do SUBPROGRAM END nome_pacote nome_pacote tipo público e declarações de item especificações do SUBPROGRAM Nome do pacote Declara variáveis, constantes, cursores, exceções e tipos declara os SUBPROGRAMS PL/SQL Obs. - Todos os itens declarados na especificação são do escopo público. Ou seja, são itens (PROCEDURES, FUNCTIONS) que podem ser chamados repetitivamente por outras construções no mesmo pacote ou de fora do pacote Ex. CREATE OR REPLACE PACKAGE pck_financeiro IS PROCEDURE prc_gera_cobranca (p_data IN date); END pck_financeiro; / 5.5 Criando o corpo do Pacote O corpo de uma PACKAGE é o local onde são definidas as ações para cada programa (público ou privada). É no corpo que encontra-se o programa (PL/SQL) de cada elemento (PROCEDURE, FUNCTIONS). Também podem ser definidas as variáveis privadas da PACKAGE.

35 Pág.: 35/53 CREATE [OR REPLACE] PACKAGE BODY nome_pacote IS AS tipo público e declarações de item especificações do SUBPROGRAMA. END nome_pacote nome_pacote tipo público e declarações de item especificações do SUBPROGRAMA Nome do pacote Declara variáveis, constantes, cursores, exceções e tipos declara os SUBPROGRAMS PL/SQL públicos e privados Obs. - a ordem que os SUBPROGRAMS privados (PROCEDURES, FUNCTIONS) são definidos no corpo é de grande importância. Você deve definir ou declarar SUBPROGRAMS privados antes de chamá-los a partir de outros. No caso de SUBPROGRAMS públicos tal definição não faz-se necessária. Ex. CREATE OR REPLACE PACKAGE BODY pck_financeiro IS PROCEDURE prc_gera_cobranca (p_data IN date) IS BEGIN INSERT INTO COBRANCAS (SELECT nome_cliente,cpf,valor,dt_vencimento FROM DEBITOS WHERE dt_vencimento> p_data AND dt_pagamento IS NULL); END; END pck_financeiro; /

36 Pág.: 36/ Executando um procedimento de uma PACKAGE no SQL*PLUS Para executar uma PROCEDURE/FUNCTIONS no SQL*PLUS utilize o comando EXECUTE seguido do nome_do_pacote.nome_do_subprograma. SQL> EXECUTE pck_financeiro.prc_gera_cobranca(sysdate); Obs. somente podem ser executados os SUBPROGRAMS que são públicos. Ou seja, estão declarados na especificação. 5.7 Variáveis Globais Você pode declarar variáveis públicas (globais) que irão existir durante a sessão do usuário. Exemplo CREATE OR REPLACE PACKAGE pck_parametros IS cd_empresa_default NUMBER := 1; cd_filial_default NUMBER := 12; END pck_parametros; SQL> SET SERVEROUTPUT ON SQL> EXECUTE dbms_output.put_line - ('Empresa DEFAULT = ' pck_parametros.cd_empresa_default); Empresa DEFAULT=12 PL/SQL PROCEDURE sucessfull completed. 5.8 Removendo Pacotes Para remover uma especificação e o corpo utilize o comando DROP PACKAGE. Ex. DROP PACKAGE nome_do_pacote Para remover somente o corpo utilize o comando DROP PACKAGE BODY. Ex. DROP PACKAGE BODY nome_do_pacote

37 Pág.: 37/53 6 TRIGGERS (gatilhos) Uma TRIGGER é um bloco PL/SQL executado de forma implícita sempre que um determinado evento ocorre. Por exemplo, pode-se definir uma TRIGGER que é disparada sempre quando um funcionário é incluído. SINTAXE CREATE OR [REPLACE] TRIGGER nome_gatilho tempo evento1 [OR evento2 or evento3] ON nome_tabela [FOR EACH ROW] [WHEN condição] BEGIN corpo_gatilho; END; nome_gatilho tempo é o nome do gatilho Indica o tempo de disparo em relação ao evento ocorrido BEFORE UPDATE [OF column] DELETE tabela FOR EACH ROW WHEN corpo do gatilho Indica a tabela ou VIEW Determina que o gatilho deve ser disparado a cada linha inserida Especifica a restrição de gatilho (Esse predicado é condicional e avaliado para cada linha a fim de determinar se o corpo do gatilho é executado ou não É o corpo do gatilho que define as ações executadas (comandos PL/SQL)

38 Pág.: 38/53 Ex CREATE OR REPLACE TRIGGER insert_emp BEFORE INSERT ON EMP BEGIN IF TO_CHAR(SYSDATE,'D') IN (7,1) THEN RAISE_APPLICATION_ERROR (-20050, 'Você só pode incluir empregados em dias úteis'); END IF; END; 6.1 Usando Predicados Condicionais (DELETING/INSERTING/UPDATING) Em algumas situações faz-se necessário descobrir o evento que foi disparado. Utilize os predicados DELETING/INSERTING e UPDATING para isto. Ex. CREATE OR REPLACE TRIGGER insert_emp BEFORE INSERT OR UPDATE OR DELETE ON EMP BEGIN IF TO_CHAR(sysdate,'D') IN (7,1) THEN IF INSERTING RAISE_APPLICATION_ERROR (-20050, 'Você só pode incluir empregados em dias úteis'); ELSIF UPDATING('SAL') RAISE_APPLICATION_ERROR (-20051, 'Você só pode alterar salário de empregados em dias úteis'); ELSIF DELETING RAISE_APPLICATION_ERROR (-20052, 'Você só pode excluir empregados em dias úteis'); END IF; END IF; END;

39 Pág.: 39/ Usando os Qualificadores :NEW e :OLD Você pode usar os valores das colunas da tabela. Para isto utilize os qualificadores NEW e OLD. Em uma TRIGGER faça referencia ao valor de uma coluna antes e depois da alteração dos dados. OPERAÇÃO Valor antigo Valor novo INSERT NULL Valor inserido UPDATE Valor antes de Valor após atualizar atualizar DELETE Valor antes da deletar NULL Ex. CREATE OR REPLACE TRIGGER insert_emp BEFORE INSERT ON EMP FOR EACH ROW BEGIN IF :NEW.SALARIO = 0 THEN RAISE_APPLICATION_ERROR(-20050, 'Salário não pode ser 0'); END IF; END; Obs. - Os qualificadores OLD e NEW estão disponíveis nos gatilhos ROW (FOR EACH ROW). - Preceda esses qualificadores como dois pontos em cada instrução SQL e PL/SQL - Não há prefixo dois pontos (:) caso os qualificadores sejam referenciados à condição de restrição WHEN.

40 Pág.: 40/ Gerenciando Gatilhos Segue abaixo alguns comandos utilizados para o gerenciamento de Gatilhos : Habilitando / Desabilitando um Gatilho ALTER TRIGGER nome_gatilho DISABLE/ENABLE Habilitando/Desabilitando todos os Gatilhos de uma tabela ALTER TRIGGER nome_gatilho ALL_TRIGGERS Recompilando um TRIGGER ALTER TRIGGER nome_gatilho COMPILE Removendo um gatilho DROP TRIGGER nome_gatilho

41 Pág.: 41/53 7 EXCEÇÕES NO PL/SQL 7.1 O que é uma exceção? Identificador em PL/SQL que é levantado durante a execução de um bloco PL/SQL. Tal exceção pode acontecer através de um erro ORACLE ou da execução do comando RAISE. Um bloco sempre é finalizado quando uma exceção acontece. Mas você pode declarar uma exceção para manipular e executar ações caso um erro aconteça. Ex. Um erro ORACLE (ORA-01403) acontece quando nenhum registro é retornado de um SELECT. Para este erro, é gerada a exceção NO_DATA_FOUND. 7.2 Tratando uma exceção Se uma exceção acontece durante a execução de um PL/SQL e esta é tratada, a exceção não propaga para seções externas. O PL/SQL bloco é executado com sucesso. Ex. DECLARE BEGIN a exceção é levantada EXCEPTION a exceção é tratada END

42 Pág.: 42/ Propagando exceções Quando uma exceção não tratada no bloco PL/SQL em que ela acontece, esta é propagada a blocos mais externos. Caso não seja encontrada a execução do PL/SQL é finalizada com falha. Ex. DECLARE BEGIN BEGIN a exceção é levantada EXCEPTION a exceção não é tratada END; EXCEPTION a exceção não é tratada END; Obs. A propagação de exceção acontece também em STORED PROCEDURE. Ou seja, caso uma PROCEDURE retorne uma exceção, esta pode ser tratada no bloco PL/SQL que a chamou. Caso aconteça, o bloco PL/SQL é finalizado com erro. 7.4 Tipos de exceções Pré-definida Não pré-definidas de Usuário

43 Pág.: 43/ Pré-definidas Não são declaradas e são exceções geradas implicitamente pelo ORACLE. São aproximadamente 20. Segue abaixo as mais utilizadas : EXCEÇÃO Erro ORACLE Causa CURSOR_ALREDY_OPEN ORA Tentar abrir um cursor já aberto DUP_VAL_ON_INDEX ORA Tentar inserir um valor duplicado em uma tabela (PRIMARY KEY) INVALID_CURSOR ORA Operação Ilegal com um cursor. Ex. tentar executar um FETCH em um cursor que não foi aberto INVALID_NUMBER ORA Conversão de uma STRING para NUMBER. NO_DATA_FOUND ORA Um SELECT não retornou dados TOO_MANY_ROWS ORA Um SELECT retornou mais de um registro VALUE_ERROR ORA Atribuir um valor mais a uma variável ZERO_DIVIDE ORA Divisão por ZERO Exceções não pré-definidas Exceções não pré-definidas são aquelas que não são geradas automaticamente na ocorrência de um erro ORACLE. No entanto, você pode fazer explicitamente a associação de um erro ORACLE a uma exceção e tratála. Utilize o PRAGMA para associar um erro ORACLE a uma exceção. Segue abaixo os passos para tratar uma exceção não pré-definida. 1) Declare uma exceção dentro da seção de declaração (DECLARE) exception exception EXCEPTION; o nome da exceção

44 Pág.: 44/53 2) Associe a exceção declarada a um erro ORACLE usando o comando PRAGMA EXCEPTION_INT PRAGMA EXCEPTION_INIT (exception, error_number); exception error_number a exceção previamente declarada um erro Oracle 3) Referencie a exceção declarada dentro de seção EXCEPTION. Ex. DECLARE e_produto_invalido EXCEPTION; PRAGMA EXCEPTION_INIT (e_produto_invalido, -2292); BEGIN... EXCEPTION WHEN e_produto_invalido THEN... END; Obs. O erro é um erro de violação de integridade de CONTRAINTS Funções para tratamento de exceções Quando um erro acorre, você pode identificar o erro ocorrido e a mensagens através do uso de duas funções. SQLCODE SQLERRM : Retorna o código do erro ORACLE. Você pode atribuir a uma variável NUMBER. : Retorna a mensagem do erro ORACLE.

45 Pág.: 45/ Exemplos de valores do SQLCODE Segue abaixo os valores possíveis do SQLCODE na ocorrência de uma exceção. SQLCODE Descrição 0 Nenhuma exceção foi encontrada 1 User-defined exception +100 NO_DATA_FOUND exception Número Negativo Outro erro ORACLE

46 Pág.: 46/53 8 Exercícios Controle do fluxo de execução(if/loop) 1) Criar uma função chamada FNC_EXISTE_KING do tipo boolean Fazer com que a função retorne true se existe algum funcionário com o nome de KING.Senão retorna false Dicas:(utilizar) - uma variável antes do inicio do bloco do tipo number - a função COUNT - a cláusula INTO - IF/ELSE/END IF - RETURN 2) Criar a função FNC_FAIXA_SALARIAL do tipo varchar2 Retornar otimo se a soma dos salários for maior que Retornar bom se a soma dos salários for entre e Retornar razoável se a soma dos salários for entre e Retornar ruim caso nenhuma das condições acima seja satisfatória Dicas:(utilizar) - uma variável antes do inicio do bloco do mesmo tipo do campo sal da tabela emp(% TYPE) - SUM - IF/ELSIF/ELSE/END IF - a cláusula INTO - RETURN 3) Criar a função FNC_VALOR_DUPLO do tipo number Esta função irá duplicar um número(com valor inicial de 15) até que ele seja maior que 1000.Retornar o resultado do cálculo. Dicas:(utilizar) - uma variável to tipo number com valor inicial - LOOP(basic)/END LOOP - EXIT WHEN - RETURN

47 Pág.: 47/53 4) Criar a função FNC_EXECUTA_5_VEZES do tipo boolean Irá executar 5 vezes um comando de exponenciação 2 de um número com início de 2.Retornar true se o número é maior 200 e false se é menor Dicas:(utilizar) - uma variável to tipo number com valor inicial - FOR LOOP/END LOOP - POWER - IF/ELSE/END IF - RETURN 5) Criar a função FNC_MENOR_10 do tipo number Irá executar o comando de somar um valor(inicial 0) com uma constante(inicial 15) enquanto este valor seja menor que 100.Retornar o valor calculado Dicas:(utilizar) - uma variável to tipo number com valor inicial - uma constante - WHILE LOOP/END LOOP - RETURN Cursores 1) Criar uma função chamada FNC_BUSCA_NOME do tipo varchar2 Ela retornará o nome do funcionário da tabela EMP que tem o código 30. Dicas: - CURSOR - OPEN - FETCH - CLOSE - RETURN 2) Criar uma função chamada FNC_BUSCA_DEPT do tipo varchar2 Ela retornará o código e nome do departamento concatenados do funcionário JAMES. Dicas: - CURSOR - OPEN - FETCH(com duas colunas) - CONCAT ou (ex: VAR1 VAR2 = VAR1VAR2) - CLOSE - RETURN

48 Pág.: 48/53 3) Criar uma função chamada FNC_EXISTE_FUNC do tipo boolean Utilize o atributo %FOUND de um cursor que recebe a data como parâmetro para saber se existe algum funcionário admitido na data de 09/06/1981.Se existir retornar TRUE,senão FALSE. Dicas: - CURSOR - OPEN - FETCH - %FOUND - CLOSE - RETURN 4) Criar uma função chamada FNC_TOTAL_ANALISTA do tipo number Esta função retornará a soma de salários dos funcionários com o cargo de analista utilizando uma estrutura de repetição com cursor declarado na seção DECLARATIVE. Dicas: - CURSOR - FOR LOOP (EX: FOR emp_record in c1 LOOP) - Operador + - RETURN 5) Criar uma função chamada FNC_NEW_YORK Esta função retorna quantos funcionários de um departamento localizado em NEW YORK(FOR LOOP com subquery) tem salário maior que 2500(use OPEN recebendo como parâmetro o código do funcionário) Dicas: - FOR LOOP com subquery - CURSOR - OPEN - FETCH - %FOUND - CLOSE - operador + como contador

49 Pág.: 49/53 PLSQL Records,PLSQL Tables, Functions Procedures 1) Criar uma função chamada FNC_JAMES_1981 do tipo boolean que retorne TRUE se o funcionário JAMES foi admitido no ano de 1980(não usar nenhuma variável, somente Record).Caso contrário retorna FALSE. Dicas: - %ROWTYPE(da tabela EMP) - SELECT INTO - RETURN 2) Criar uma procedure chamada PRC_EMP_JOVEM do tipo varchar2 que retorne o nome e o salário(parâmetros IN/OUT) do funcionário KING ou JONES que seja mais jovem na empresa. Dicas: - usar 2 records - usar 2 SELECT INTO ou cursor que receba empno como parâmetro - operador de comparação < - RETURN 3) Criar uma função chamada FNC_CALCULA_DECIMO do tipo number Popule uma PL/SQL table com o seguinte sql : SELECT * FROM EMP Retorne o salário do décimo elemento da lista. Dicas: - TABLE - LOOP ou FOR LOOP - Referência ao elemento (ex.: pltable(4).código) - RETURN 4) Criar uma função chamada FNC_DUPLICA do tipo number que duplica uma PLSQL table populada com o sql: SELECT * from dept e soma ao deptno da PLSQL table duplicada o valor 10. Apagar a primeira PLSQL table e retornar o maior valor de DEPTNO da segunda. Dicas : - TABLE(2 vezes) - EXTEND - LOOP ou FOR LOOP - Operador + - DELETE - RETURN

50 Pág.: 50/53 5) Criar uma procedure chamada PRC_INSERE_DEPT a qual insere um departamento na tabela DEPT com os valores : DEPTNO = Max(deptno) + 1 DNAME = DEPT DO nome do aluno logado(user) LOC = POA Dicas: - INSERT - COMMIT(para gravar os dados no banco) 6) Criar uma procedure chamada PRC_PERCENTUAL que recebe como parâmetro de entrada um percentual e de saída um número(salário). Este percentual será usado para atualizar o salário do funcionário com maior salário fazendo com que seja % maior que o segundo maior salário. Dicas: Parâmetros: P_PERCENTUAL IN NUMBER P_SAL OUT EMP.SAL%TYPE Ex: se o percentual é 10. O JAMES possui o maior salário O KING possui o segundo maior salário Atualizar o salário do JAMES para 10 % a mais que o salário do KING Retornar ao parâmetro P_SAL o salário do funcionário com o segundo maior salário. 7) Criar uma procedure chamada PRC_VERIFICA que verifique se o valor retornado pela função FNC_CALCULA_DECIMO é igual ao salário do funcionário retornado pela execução da procedure PRC_PERCENTUAL(percentual de 10 %).Se for igual emitir mensagem Salário do décimo funcionário é o segundo maior salário, senão Erro ao procurar salário do décimo funcionário. Dicas: - Atribuir a função a uma variável - Executar a procedure passando dois parâmetros - Avaliar o resultado do segundo parâmetro - dbms_output.put_line( mensagem )

51 Pág.: 51/53 Packages, Triggers Criar uma Package chamada PCK_GERAL.(espec. e corpo).criar uma variável pública com o nome de lg_percentual number inicializado com 12. 2) Criar uma função chamada FNC_TESTA_CIDADE na package PCK_GERAL do tipo boolean que recebe o nome da cidade e um parâmetro(p_total_sal) do tipo número.avaliar se a diferença da soma dos salário dos departamentos da cidade com o parâmetro P_TOTAL_SAL é maior que a variável pública LG_PERCENTUAL..Se sim retornar TRUE senão retornar FALSE. 3) Criar uma procedure chamada PRC_EXECUTA_FUNCAO na package PCK_GERAL que executa a função FNC_TESTA_CIDADE passando como parâmetro a cidade do funcionário JAMES e a soma de salários do seu departamento.se a função retornar TRUE emitir a mensagem Função retornou um valor válido para a cidade do funcionário JAMES, senão Função executada com erro Dicas: - DBMS_OUTPUT.PUT_LINE - RAISE_APPLICATION_ERROR 4) Criar uma trigger na tabela DEPT com o nome BI_DEPT que será disparada antes da inserção de uma linha na tabela e que incrementa em 10 o novo número do departamento. Dicas : - BEFORE INSERT - UPDATE - :NEW 5) Criar uma trigger na tabela EMP chamada BU_EMP que será disparada antes da atualização(update) da coluna SAL.Gerar um erro caso a diferença entre o salário novo e antigo seja superior a 10 % ou o salário novo seja menor que o antigo Dicas: - BEFORE UPDATE OF nome da coluna - :NEW/:OLD - operador > 6) Criar uma trigger chamada BID_DEPT na tabela DEPT que será disparada antes da inserção/deleção.caso seja uma inserção deve gerar um erro se já existir um departamento com o mesmo nome.caso seja uma deleção deve-se gerar um erro se existe algum funcionário associado ao departamento.

52 Pág.: 52/53 Dicas: - BEFORE INSERT OR DELETE - INSERTING - DELETING - SELECT - RAISE_APPLICATION_ERROR(-20500, MENSAGEM ) 7) Criar uma trigger chamada AI_DEPT na tabela DEPT que será disparada depois da inserção na tabela DEPT.Ela deve inserir um empregado com os dados(fictícios) do user do departamento inserido. Dicas: - AFTER INSERT - INSERT - :NEW - USER 8) Criar uma trigger chamada BU2_EMP(before update) na tabela EMP que somente será disparada se o empregado foi admitido depois de Atualizar a comissão do funcionário para NULL se o novo salário for diferente do antigo. Dicas: - BEFORE UPDATE - WHEN - :NEW/:OLD Exceptions Crie uma função chamada FNC_ACHOU que retorne TRUE se achou um funcionário com o nome de PEDRO.Senão retorne FALSE. Dicas: - SELECT INTO - EXCEPTION - NO_DATA_FOUND - RETURN

53 Pág.: 53/53 2) Crie uma procedure chamada PRC_INSERE_FUNC que tem como objetivo inserir um funcionário na tabela EMP com o empno de 7876(outros dados fictícios). Caso ocorra um erro de chave duplicada emitir uma mensagem dizendo que o código já existe.para qualquer outro erro emitir a mensagem Não é possível cadastrar funcionário Dicas: - INSERT - EXCEPTION - DUP_VAL_ON_INDEX - OTHERS - DBMS_OUTPUT.PUT_LINE 3) Crie uma função chamada FNC_USER_EXCEP que retorna um número. Esta função seleciona o código do departamento dos funcionários que tem o nome iniciado com J.Se retornar mais de uma linha a função retornará 2.Se não retornar nenhuma linha a função retornará 0. Caso o código selecionado seja 30 gerar um erro definido na seção declaration chamada exceção_30 e a função retorna(30). Dicas: - SELECT INTO - TOO_MANY_ROWS - NO_DATA_FOUND - Excecao_30 EXCEPTION - RAISE excecao_30 - WHEN excecao_30 4) Criar uma trigger chamada BU_DEPT que é disparada antes da atualização da tabela DEPT. Caso o novo local não esteja na relação dos locais já cadastrados gerar um erro definido na seção declarative e gerado via RAISE_APPLICATION_ERROR. Tratar a exceção levantada atualizando o novo local para NEW YORK Dicas: - nome_da_exceção EXCEPTION - PRAGMA_EXCEPTION_INIT(nome_da_exceção,numero menor que ) - SELECT COUNT - RAISE_APPLICATION_ERROR - EXCEPTION - WHEN nome_da_exceção THEN - :NEW

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

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

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

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

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

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

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

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

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

Create Sequence Cria uma sequence. Uma sequence é um objeto que permite vários usuários gerarem valores inteiros sem repetição.

Create Sequence Cria uma sequence. Uma sequence é um objeto que permite vários usuários gerarem valores inteiros sem repetição. Conceitos PL/Sql Create Sequence Cria uma sequence. Uma sequence é um objeto que permite vários usuários gerarem valores inteiros sem repetição. Sintaxe CREATE SEQUENCE [schema.]sequence [INCREMENT BY

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

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

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

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

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

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

Tarefa Orientada 18 Procedimentos armazenados

Tarefa Orientada 18 Procedimentos armazenados Tarefa Orientada 18 Procedimentos armazenados Objectivos: Criar Procedimentos armazenados Chamar procedimentos armazenados Utilizar parâmetros de entrada e de saída Um procedimento armazenado representa

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

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

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

Tratamento de Exceções

Tratamento de Exceções Tratamento de Exceções Laboratório de Bases de Dados Tratamento de Exceções Exceções erros e imprevistos que podem ocorrer durante a execução de um bloco PL/SQL SGBD ao encontrar um erro ou um imprevisto,

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

Laboratório de Banco de Dados II Aula 1. Stored Procedures

Laboratório de Banco de Dados II Aula 1. Stored Procedures Laboratório de Banco de Dados II Aula 1 Stored Procedures Stored procedures Uma seqüência de comandos SQL pode ser agrupada, formando uma stored procedure A sua execução é comandada, invocando-se o nome

Leia mais

Banco de Dados. Marcio de Carvalho Victorino www.dominandoti.eng.br. Exercícios SQL

Banco de Dados. Marcio de Carvalho Victorino www.dominandoti.eng.br. Exercícios SQL Banco de Dados Exercícios SQL 1 TRF (ESAF 2006) 32. Analise as seguintes afirmações relacionadas a Bancos de Dados e à linguagem SQL: I. A cláusula GROUP BY do comando SELECT é utilizada para dividir colunas

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

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

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

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

INTRODUÇÃO AO PL/SQL

INTRODUÇÃO AO PL/SQL INTRODUÇÃO AO PL/SQL ALEX JOSE SILVA RECIFE/2015 Índice Introdução Ao Pl/Sql...3 Entendendo a linguagem...4 Principais características da linguagem PL/SQL...5 Blocos de código...5 Declaração de variáveis...5

Leia mais

DESENVOLVIMENTO DE SOFTWARE

DESENVOLVIMENTO DE SOFTWARE VARIAÁ VEL Antes de iniciarmos os comandos referentes a Banco de Dados, precisamos de uma breve descrição técnica sobre Variáveis que serão uma constante em programação seja qual for sua forma de leitura.

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

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

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

Neste artigo, serão apresentados os principais conceitos sobre os TRIGGERS e sua aplicabilidade.

Neste artigo, serão apresentados os principais conceitos sobre os TRIGGERS e sua aplicabilidade. www.devm edia.com.br [versão para im pressão] MySQL TRIGGERS Neste artigo, serão apresentados os principais conceitos sobre os TRIGGERS e sua aplicabilidade. MySQL TRIGGERS Neste artigo, serão apresentados

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

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

Uma expressão básica em SQL consiste em três cláusulas: select, from e where.

Uma expressão básica em SQL consiste em três cláusulas: select, from e where. Introdução a Banco de Dados O.K. Takai; I.C.Italiano; J.E. Ferreira. 67 8 A Linguagem SQL A linguagem SQL é um padrão de linguagem de consulta comercial que usa uma combinação de construtores em Álgebra

Leia mais

PROCEDURES, FUNÇÕES, PL/SQL, CURSORES, VIEW, ÍNDICE e SEQUÊNCIA. Stored procedure PL/SQL. Procedimentos e Funções. Procedimento (procedure) Procedure

PROCEDURES, FUNÇÕES, PL/SQL, CURSORES, VIEW, ÍNDICE e SEQUÊNCIA. Stored procedure PL/SQL. Procedimentos e Funções. Procedimento (procedure) Procedure PROCEDURES, FUNÇÕES, PL/SQL, CURSORES, VIEW, ÍNDICE e SEQUÊNCIA Stored procedure Uma Stored procedure é um grupo de comandos SQL e PL/SQL que executam determinada tarefa e podem ser invocados por um nome.

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

INTRODUÇÃO À LINGUAGEM C++

INTRODUÇÃO À LINGUAGEM C++ INTRODUÇÃO À LINGUAGEM C++ 1 - VARIÁVEIS Variáveis espaço de memória reservado para armazenar tipos de dados, com um nome para referenciar seu conteúdo. Observações importantes Todas as variáveis devem

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

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

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

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

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

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

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

Manipulando Strings no VBA (Replace, Mid e InStr)

Manipulando Strings no VBA (Replace, Mid e InStr) Manipulando Strings no VBA (Replace, Mid e InStr) por Eduardo Vieira Machado (Good Guy) Hoje gostaria de tratar de um assunto bastante atraente no Access e que é muito trabalhado nas empresas - a manipulação

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

Consultoria e Treinamento em Bancos de Dados Relacionais

Consultoria e Treinamento em Bancos de Dados Relacionais Tabela de conteúdos CREATE TABLE AS...1 CREATE DOMAIN...1 Funções de dados...2 Funções de data e hora...2 Funções de agregação...3 Expressões condicionais...4 CASE...4 COALESCE...4 NULLIF...4 Controle

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

Treinamento. Sumário

Treinamento. Sumário Sumário 01 Introdução ao PLSQL... 5 Objetivo do Curso... 6 Conceitos Básicos... 7 O que é PLSQL?... 7 Por que aprender a PLSQL?... 7 Blocos PLSQL... 7 Comentários... 8 Execução de Blocos... 9 Ambiente

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

Autor: Tiago Lone Nível: Básico Criação: 19/12/2005 Última versão: 18/12/2006. PdP. Pesquisa e Desenvolvimento de Produtos

Autor: Tiago Lone Nível: Básico Criação: 19/12/2005 Última versão: 18/12/2006. PdP. Pesquisa e Desenvolvimento de Produtos TUTORIAL Barra de LEDs Autor: Tiago Lone Nível: Básico Criação: 19/12/2005 Última versão: 18/12/2006 PdP Pesquisa e Desenvolvimento de Produtos http://www.maxwellbohr.com.br contato@maxwellbohr.com.br

Leia mais

SQL e PL/SQL Oracle Dicas de preparação para certificação

SQL e PL/SQL Oracle Dicas de preparação para certificação - 1 - SQL e PL/SQL Oracle Dicas de preparação para certificação Selection: para escolher linhas em uma tabela Projection: para escolher colunas em uma tabela Join: pode trazer simultaneamente dados que

Leia mais

Oracle 10g Dicas de PL/SQL. Conteúdo

Oracle 10g Dicas de PL/SQL. Conteúdo Oracle 10g Dicas de PL/SQL Conteúdo Objetivos... 2 Comentários... 2 Declarações... 2 Conversões de variáveis... 2 DDL Criar, alterar ou apagar tabelas Create, Alter or Drop table... 3 Restrições na criação

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

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

LINGUAGEM SQL. SQL Server 2008 Comandos iniciais

LINGUAGEM SQL. SQL Server 2008 Comandos iniciais 1 LINGUAGEM SQL SQL Server 2008 Comandos iniciais SQL - STRUCTURED QUERY LANGUAGE Quando os Bancos de Dados Relacionais estavam sendo desenvolvidos, foram criadas linguagens destinadas à sua manipulação.

Leia mais

GBC043 - Sistemas de Banco de Dados Funções e Gatilhos no PostgreSQL

GBC043 - Sistemas de Banco de Dados Funções e Gatilhos no PostgreSQL GBC043 - Sistemas de Banco de Dados Funções e Gatilhos no PostgreSQL Ilmério Reis da Silva ilmerio@facom.ufu.br www.facom.ufu.br/~ilmerio/sbd UFU/FACOM/BCC Página 2 Prgrama Teórico/Prático - SQL Linguagem

Leia mais

António Rocha Nuno Melo e Castro

António Rocha Nuno Melo e Castro António Rocha Nuno Melo e Castro PL/SQL Extensão ao SQL Estruturada em blocos Permite controlo do fluxo de execução Permite integração entre diferentes ferramentas Oracle Não permite comandos DDL PL/SQL

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

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

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

Introdução à Engenharia da Computação. Banco de Dados Professor Machado

Introdução à Engenharia da Computação. Banco de Dados Professor Machado Introdução à Engenharia da Computação Banco de Dados Professor Machado 1 Sistemas isolados Produção Vendas Compras Banco de Dados Produtos... Banco de Dados Produtos... Banco de Dados Produtos... Desvantagens:

Leia mais

Regras Métodos Identificadores Variáveis Constantes Tipos de dados Comandos de atribuição Operadores aritméticos, relacionais e lógicos

Regras Métodos Identificadores Variáveis Constantes Tipos de dados Comandos de atribuição Operadores aritméticos, relacionais e lógicos Lógica Aula 2 Técnicas de Programação Criando algoritmos Regras Métodos Identificadores Variáveis Constantes Tipos de dados Comandos de atribuição Operadores aritméticos, relacionais e lógicos Criando

Leia mais

poder de manipulação de dados do SQL com poder de processamento das lp procedimentais

poder de manipulação de dados do SQL com poder de processamento das lp procedimentais PL/SQL Extensão ao SQL Estruturada em blocos Permite controlo do fluxo de execução Permite integração entre diferentes ferramentas Oracle Não permite comandos DDL PL/SQL combina: poder de manipulação de

Leia mais

Analisando e comparando as funções do DBNavegator

Analisando e comparando as funções do DBNavegator Prof or : Gilberto Braga e Renato Candini Nome Número: Série DELPHI PARA PROGRAMAÇÃO DE COMPUTADORES II AULA 2 Competências: Integrar sistemas; Habilidades: Utilizar modelos, pseudocódigos e ferramentas

Leia mais

SQL Linguagem de Definição de Dados. Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri

SQL Linguagem de Definição de Dados. Banco de Dados Profa. Dra. Cristina Dutra de Aguiar Ciferri SQL Linguagem de Definição de Dados Banco 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

Leia mais

1.6. Tratamento de Exceções

1.6. Tratamento de Exceções Paradigmas de Linguagens I 1 1.6. Tratamento de Exceções Uma exceção denota um comportamento anormal, indesejado, que ocorre raramente e requer alguma ação imediata em uma parte do programa [GHE 97, DER

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

Banco de Dados. Um momento crucial na organização dos dados é a forma com que cadastramos estes dados, a estrutura de armazenamento que criamos.

Banco de Dados. Um momento crucial na organização dos dados é a forma com que cadastramos estes dados, a estrutura de armazenamento que criamos. Banco de Dados O que é um Banco de Dados? Este assunto é muito vasto, tentaremos resumi-lo para atender as questões encontradas em concursos públicos. Já conhecemos o conceito de dado, ou seja, uma informação

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

FERRAMENTA DE APOIO A REESTRUTURAÇÃO DE CÓDIGO FONTE EM LINGUAGEM PL/SQL BASEADO EM PADRÕES DE LEGIBILIDADE

FERRAMENTA DE APOIO A REESTRUTURAÇÃO DE CÓDIGO FONTE EM LINGUAGEM PL/SQL BASEADO EM PADRÕES DE LEGIBILIDADE FERRAMENTA DE APOIO A REESTRUTURAÇÃO DE CÓDIGO FONTE EM LINGUAGEM PL/SQL BASEADO EM PADRÕES DE LEGIBILIDADE Formando: Dyckson Dyorgio Dolla Orientador: Prof. Everaldo Artur Grahl Julho / 2001 ROTEIRO DA

Leia mais

Banco de dados. Linguagens de Banco de Dados II. Wedson Quintanilha da Silva - www.assembla.com/spaces/objetivobd/documents

Banco de dados. Linguagens de Banco de Dados II. Wedson Quintanilha da Silva - www.assembla.com/spaces/objetivobd/documents Banco de dados Linguagens de Banco de Dados II 1 Linguagem de Definição de Dados - DDL Comandos utilizados para criação do esquema de dados; Um DDL permite ao utilizador definir tabelas novas e elementos

Leia mais

Bases de Dados 2012/2013 Funções/procedimentos e triggers. Helena Galhardas 2012 IST. Bibliografia. Manual referência PostgreSQL

Bases de Dados 2012/2013 Funções/procedimentos e triggers. Helena Galhardas 2012 IST. Bibliografia. Manual referência PostgreSQL Bases de Dados 2012/2013 Funções/procedimentos e triggers em PostgreSQL Helena Galhardas Bibliografia Manual referência PostgreSQL http://www.postgresql.org/docs/9.2/static/ plpgsql.html http://www.postgresql.org/docs/9.2/static/

Leia mais

Linguagem de Consulta - SQL

Linguagem de Consulta - SQL SQL Structured Query Language Linguagem de Consulta Estruturada; Originou-se da linguagem SEQUEL (1974); Revisada e chamada de SQL em 1976/77; Em 1986, padronizada pelo ANSI/ISO - chamada SQL-86; Em 1987

Leia mais

Ex.: INSERT INTO tmpautor (CDAUTOR, NMAUTOR) VALUES (1, Renato Araújo )

Ex.: INSERT INTO tmpautor (CDAUTOR, NMAUTOR) VALUES (1, Renato Araújo ) PRONATEC - Programador de Sistemas Banco de Dados 1) Incluindo linhas nas tabelas a. Para incluir linhas em tabelas utilize o comando INSERT INTO INSERT INTO tabela [ ( coluna [, coluna,...] ) ] VALUES

Leia mais

Aula 12: Funções. Pré-requisitos: Todas as aulas anteriores deste módulo. 1. Aproveitando Códigos no Programa

Aula 12: Funções. Pré-requisitos: Todas as aulas anteriores deste módulo. 1. Aproveitando Códigos no Programa Aula 12: Funções Nesta aula explicaremos o que são e como usar funções nos seus programas em JavaScript. Você aprenderá como elas podem receber e retornar valores à estrutura que as acionou. Entenderá

Leia mais

Incluindo, atualizando e excluindo linhas nas tabelas

Incluindo, atualizando e excluindo linhas nas tabelas 5 Incluindo, atualizando e excluindo linhas nas tabelas Agora que nossas tabelas estão devidamente criadas, relacionadas e com índices para agilizar as pesquisas, vamos movimentar os dados nas tabelas

Leia mais

2008.1 SQL. Autor: Renata Viegas

2008.1 SQL. Autor: Renata Viegas SQL Autor: Renata Viegas 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

Leia mais

Projeto de Banco de Dados: Empresa X

Projeto de Banco de Dados: Empresa X Projeto de Banco de Dados: Empresa X Modelo de negócio: Empresa X Competências: Analisar e aplicar o resultado da modelagem de dados; Habilidades: Implementar as estruturas modeladas usando banco de dados;

Leia mais

São 182 videoaulas de Oracle pl/sql procedures functions triggers Forms Reports

São 182 videoaulas de Oracle pl/sql procedures functions triggers Forms Reports Preço R$ 129.00 Compre aqui São 182 videoaulas de Oracle pl/sql procedures functions triggers Forms Reports - Clique aqui para ver o cronograma das aulas - Clique aqui para ver as imagens deste curso -

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

BANCO DE DADOS -INTRODUÇÃO AO SQL. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br

BANCO DE DADOS -INTRODUÇÃO AO SQL. Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br BANCO DE DADOS -INTRODUÇÃO AO SQL Prof. Angelo Augusto Frozza, M.Sc. frozza@ifc-camboriu.edu.br INTRODUÇÃO AO SQL Ferramentas brmodelo Ferramenta Case PostgreSQL versão 8 ou superior SGBD Em 1986 o American

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

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

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

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

LINGUAGEM SQL. DML - Linguagem de Manipulação de Dados

LINGUAGEM SQL. DML - Linguagem de Manipulação de Dados LINGUAGEM SQL Structured Query Language, ou Linguagem de Consulta Estruturada ou SQL, é uma linguagem de pesquisa declarativa para banco de dados relacional (base de dados relacional). Muitas das características

Leia mais

PL/SQL. Linguagens hospedeiras

PL/SQL. Linguagens hospedeiras PL/SQL Linguagens hospedeiras Aplicações interrogar a BD tomar decisões dialogar com o utilizador etc. linguagem de programação convencional C, Cobol, Ada, Java linguagem de manipulação de dados optimizada

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

2. Criar um bloco PL/SQL anônimo para imprimir as tabuadas abaixo: 5 X 10 = 50 5 X 2 = 10... 10 X 10 = 100 1 X 2 = 2...

2. Criar um bloco PL/SQL anônimo para imprimir as tabuadas abaixo: 5 X 10 = 50 5 X 2 = 10... 10 X 10 = 100 1 X 2 = 2... 1. Criar um bloco PLSQL anônimo para imprimir a tabuada abaixo: 5 X 1 = 5 5 X 2 = 10... 5 X 10 = 50 V_N CONSTANT NUMBER(2) := 5; FOR I IN 1..10 LOOP DBMS_OUTPUT.PUT_LINE(V_N ' X ' I ' = ' V_N*I); 2. Criar

Leia mais