Procedure e funções pl/sql
5 X 1 = 5 5 X 2 = 10 ... 5 X 10 = 50
DECLARE V_N CONSTANT NUMBER(2) := 5; BEGIN FOR I IN 1..10 LOOP DBMS_OUTPUT.PUT_LINE(V_N || ' X ' || I || ' = ' || V_N*I); END LOOP; END; /
2. Criar um bloco PL/SQL anônimo para imprimir as tabuadas abaixo: 1 X 1 = 1 1 X 2 = 2 ... 10 X 9 = 90 10 X 10 = 100
BEGIN FOR I IN 1..10 LOOP FOR J IN 1..10 LOOP DBMS_OUTPUT.PUT_LINE(I || ' X ' || J || ' = ' || I*J); END LOOP; END LOOP; END; /
3. Criar um bloco PL/SQL para apresentar os anos bissextos entre 2000 e 2100. Um ano será bissexto quando for possível dividi‐lo por 4, mas não por 100 ou quando for possível dividi‐lo por 400. DECLARE V_ANO NUMBER(4); BEGIN FOR V_ANO IN 2000..2100 LOOP IF (MOD(V_ANO,4) = 0 AND MOD(V_ANO,100) != 0) OR (MOD(V_ANO,400) = 0) THEN DBMS_OUTPUT.PUT_LINE(V_ANO); END IF; END LOOP; END; /
4. Criar um bloco PL/SQL para atualizar a tabela abaixo, conforme segue:
Produtos categoria A deverão ser reajustados em 5% Produtos categoria B deverão ser reajustados em 10% Produtos categoria C deverão ser reajustados em 15%
PRODUTO -----------------------CODIGO CATEGORIA VALOR -----------------------1001 A 7.55 1002 B 5.95 1003 C 3.45 ------------------------
CREATE TABLE PRODUTO ( CODIGO NUMBER(4), CATEGORIA CHAR(1), VALOR NUMBER(4,2)); INSERT INTO PRODUTO VALUES (1001,'A',7.55); INSERT INTO PRODUTO VALUES (1002,'B',5.95); INSERT INTO PRODUTO VALUES (1003,'C',3.45); --SOLUÇÃO 1 DECLARE CURSOR C_PRODUTO IS SELECT * FROM PRODUTO; V_PRODUTO PRODUTO%ROWTYPE; BEGIN FOR V_PRODUTO IN C_PRODUTO LOOP IF V_PRODUTO.CATEGORIA = 'A' THEN UPDATE PRODUTO SET VALOR = VALOR * 1.05 WHERE CODIGO = V_PRODUTO.CODIGO; ELSIF V_PRODUTO.CATEGORIA = 'B' THEN UPDATE PRODUTO SET VALOR = VALOR * 1.10 WHERE CODIGO = V_PRODUTO.CODIGO; ELSE UPDATE PRODUTO SET VALOR = VALOR * 1.15 WHERE CODIGO = V_PRODUTO.CODIGO; END IF; END LOOP; END; /
--SOLUÇÃO 2 DECLARE CURSOR C_PRODUTO