-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathclass14_2020_06_18_repetition_structure_pl_sql.sql
89 lines (74 loc) · 2.06 KB
/
class14_2020_06_18_repetition_structure_pl_sql.sql
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
-- ESTRUTURA DE REPETIÇÃO PL/SQL
-- Estrutura de Repetição FOR
-- Sintaxe:
FOR controle IN initial_value .. final_value
LOOP
-- instruções PL/SQL
END LOOP;
-- Exemplo:
DECLARE
vcontrole NUMBER(2);
BEGIN
vcontrole := 11;
FOR vcontrole IN 11 .. 20
LOOP
IF (vcontrole <= 15) THEN
INSERT INTO PRODUTO VALUES(vcontrole, 'Produto X' || vcontrole, 3, 10+vcontrole);
ELSE
INSERT INTO PRODUTO VALUES(vcontrole, 'Produto Z' || vcontrole, 5, 20+vcontrole);
END IF;
END LOOP;
END;
/
-- Estrutura de Repetição WHILE
-- Sintaxe:
WHILE (condicao)
LOOP
-- instruções PL/SQL
END LOOP;
-- Exemplo:
DECLARE
vcontrole NUMBER(2);
BEGIN
vcontrole := 15;
WHILE(vcontrole <= 20)
LOOP
UPDATE PRODUTO SET vlr_produto = vlr_produto * 1.05 WHERE id_produto = vcontrole;
vcontrole := vcontrole+1;
END LOOP;
END;
/
-- PROCEDIMENTOS (PROCEDURE)
-- Exemplo
-- Retornar valor total de um orçamento a partir do seu número (id_orcamento)
CREATE OR REPLACE PROCEDURE ptotal(vnumero IN ITEM_ORCAMENTO.id_orcamento%TYPE)
IS -- quando é necessário declarar variável.
vtotal NUMBER(12,2);
BEGIN
SELECT SUM(qtd_orcamento * vlr_ITEM_ORCAMENTO) INTO vtotal
FROM ITEM_ORCAMENTO WHERE id_orcamento = vnumero;
DBMS_OUTPUT.PUT_LINE('Total = R$' || vtotal);
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Erro ou id_orcamento inexistente...');
END;
/
exec ptotal(2) -- executa um procedimento, passando o id.
SET SERVEROUTPUT ON; -- ativa visualização das variáveis.
SHOW ERRORS; -- mostrar os erro.
-- Procedimento para cadastrar clientes
CREATE OR REPLACE PROCEDURE cadcli(
vnome IN CLIENTE.nom_cliente%TYPE,
vdtnasc IN CLIENTE.dtn_cliente%TYPE,
vemail IN CLIENTE.email_cliente%TYPE,
vdoc IN CLIENTE.doc_cliente%TYPE
)
AS -- quando não é necessário declarar variável.
BEGIN
INSERT INTO CLIENTE VALUES (seq_cod_cliente.NEXTVAL, vnome, vdtnasc, vemail, vdoc);
COMMIT;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Erro na execução...');
END;
/