├── CASE2.sql ├── CASE3.sql ├── CASE4.sql ├── At1Ex1.sql ├── At1Ex2.sql ├── At2Ex1.sql ├── At2Ex2.sql ├── At2Ex3.sql ├── varray.sql ├── exception2.sql ├── exception3.sql ├── goto_exception.sql ├── upper.sql ├── HelloWorld.sql ├── leftjoin.sql ├── cursorExplicito6.sql ├── FOR.sql ├── IF.sql ├── subselect.sql ├── Media.sql ├── TABUADA_FOR.sql ├── goto.sql ├── varray2.sql ├── TABUADA_WHILE.sql ├── cursorExplicito3.sql ├── cursorImplicito.sql ├── nestedTables.sql ├── delete.sql ├── WHILE.sql ├── cursorImplicito2.sql ├── Converter_Real_pa_Dolar.sql ├── goto2.sql ├── Porcentagem.sql ├── LOOP.sql ├── Porcentagem2.sql ├── cursorExplicito5.sql ├── trigger2.sql ├── Converter_Dolar_pa_Real.sql ├── TABUADA_LOOP.sql ├── goto3.sql ├── cursorExplicito4.sql ├── tableIndex.sql ├── cursorExplicito7.sql ├── cursorExplicito2.sql ├── procedure2.sql ├── CASE.sql ├── cursorExplicito.sql ├── IF2.sql ├── function3.sql ├── procedure3.sql ├── update.sql ├── procedure.sql ├── config banco.txt ├── function.sql ├── exception.sql ├── RowType.sql ├── Query.sql ├── tableIndex2.sql ├── Query2.sql ├── function2.sql ├── insert.sql ├── trigger.sql ├── trigger3.sql ├── ProvaEx3.sql ├── ProvaEx1.sql ├── IF3.sql └── ProvaEx2.sql /CASE2.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DeveloperArthur/Programacao-PLSQL/HEAD/CASE2.sql -------------------------------------------------------------------------------- /CASE3.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DeveloperArthur/Programacao-PLSQL/HEAD/CASE3.sql -------------------------------------------------------------------------------- /CASE4.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DeveloperArthur/Programacao-PLSQL/HEAD/CASE4.sql -------------------------------------------------------------------------------- /At1Ex1.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DeveloperArthur/Programacao-PLSQL/HEAD/At1Ex1.sql -------------------------------------------------------------------------------- /At1Ex2.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DeveloperArthur/Programacao-PLSQL/HEAD/At1Ex2.sql -------------------------------------------------------------------------------- /At2Ex1.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DeveloperArthur/Programacao-PLSQL/HEAD/At2Ex1.sql -------------------------------------------------------------------------------- /At2Ex2.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DeveloperArthur/Programacao-PLSQL/HEAD/At2Ex2.sql -------------------------------------------------------------------------------- /At2Ex3.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DeveloperArthur/Programacao-PLSQL/HEAD/At2Ex3.sql -------------------------------------------------------------------------------- /varray.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DeveloperArthur/Programacao-PLSQL/HEAD/varray.sql -------------------------------------------------------------------------------- /exception2.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DeveloperArthur/Programacao-PLSQL/HEAD/exception2.sql -------------------------------------------------------------------------------- /exception3.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DeveloperArthur/Programacao-PLSQL/HEAD/exception3.sql -------------------------------------------------------------------------------- /goto_exception.sql: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DeveloperArthur/Programacao-PLSQL/HEAD/goto_exception.sql -------------------------------------------------------------------------------- /upper.sql: -------------------------------------------------------------------------------- 1 | //UPPER 2 | select nome 3 | from tb_funcionario 4 | where upper(NOME) 5 | like '% SILVA' or '% SILVA %' ; -------------------------------------------------------------------------------- /HelloWorld.sql: -------------------------------------------------------------------------------- 1 | /*set serveroutput on*/ 2 | 3 | DECLARE 4 | text VARCHAR2(25); 5 | BEGIN 6 | text:= 'Hello World'; 7 | dbms_output.put_line (text); 8 | END; 9 | -------------------------------------------------------------------------------- /leftjoin.sql: -------------------------------------------------------------------------------- 1 | //LEFT JOIN 2 | select tb_funcionario.nome, tb_departamento.nome 3 | from TB_FUNCIONARIO 4 | left join TB_DEPARTAMENTO 5 | on TB_FUNCIONARIO.COD = TB_DEPARTAMENTO.COD 6 | where tb_funcionario.idade > 30; -------------------------------------------------------------------------------- /cursorExplicito6.sql: -------------------------------------------------------------------------------- 1 | DECLARE 2 | CURSOR c_cliente IS SELECT codigo, nome FROM cliente; 3 | BEGIN 4 | FOR v_cliente IN c_cliente 5 | LOOP 6 | DBMS_OUTPUT.PUT_LINE('Cliente: '||v_cliente.nome); 7 | END LOOP; 8 | END; 9 | -------------------------------------------------------------------------------- /FOR.sql: -------------------------------------------------------------------------------- 1 | set serveroutput on 2 | 3 | declare 4 | v_inicio number(10):=&inicio; 5 | v_final number(10):=&final; 6 | begin 7 | for v_passo in v_inicio..v_final 8 | loop 9 | dbms_output.put_line(v_passo); 10 | end loop; 11 | end; -------------------------------------------------------------------------------- /IF.sql: -------------------------------------------------------------------------------- 1 | DECLARE 2 | V_ENTRADA NUMBER(10):=&NUMERO; 3 | BEGIN 4 | IF MOD (V_ENTRADA,2)=0 THEN 5 | DBMS_OUTPUT.PUT_LINE('O NUMERO EH PAR'); 6 | ELSE 7 | DBMS_OUTPUT.PUT_LINE('O NUMERO EH IMPAR'); 8 | END IF; 9 | END; 10 | 11 | -------------------------------------------------------------------------------- /subselect.sql: -------------------------------------------------------------------------------- 1 | /*SUBSELECT*/ 2 | select nome 3 | from tb_funcionario 4 | where mat in (select mat 5 | from TB_ATUA 6 | where cod in (select cod 7 | from TB_PROJETO 8 | where nome = 'INTEGRAR' or nome = 'CADUN' 9 | )); -------------------------------------------------------------------------------- /Media.sql: -------------------------------------------------------------------------------- 1 | /*set serveroutput on*/ 2 | 3 | DECLARE 4 | nota1 NUMBER(4,2); 5 | nota2 NUMBER(4,2); 6 | media NUMBER(4,2); 7 | BEGIN 8 | nota1:= ¬a1; 9 | nota2:= ¬a2; 10 | media:= (nota1+nota2)/2; 11 | dbms_output.put_line('a media eh ' || media); 12 | END; 13 | -------------------------------------------------------------------------------- /TABUADA_FOR.sql: -------------------------------------------------------------------------------- 1 | set serveroutput on 2 | 3 | declare 4 | v_num number(10); 5 | v_i number(10):=1; 6 | v_f number(10):=10; 7 | begin 8 | v_num:=&Digite_o_valor; 9 | 10 | for v_x in v_i..v_f 11 | loop 12 | dbms_output.put_line(v_num||'x'||v_x||'='||v_num*v_x); 13 | end loop; 14 | end; -------------------------------------------------------------------------------- /goto.sql: -------------------------------------------------------------------------------- 1 | set serveroutput on 2 | DECLARE 3 | V_AUX NUMBER(2) := 0; 4 | V_CONTADOR NUMBER(2):=1; 5 | BEGIN 6 | <> 7 | V_AUX := V_AUX +1; 8 | V_CONTADOR:=V_CONTADOR+1; 9 | DBMS_OUTPUT.PUT_LINE (V_AUX); 10 | IF V_CONTADOR<=10 THEN 11 | GOTO INICIO; 12 | END IF; 13 | END; -------------------------------------------------------------------------------- /varray2.sql: -------------------------------------------------------------------------------- 1 | set serveroutput on 2 | declare 3 | type tmatriz is varray(5) of number(10); 4 | v_nome tmatriz; 5 | begin 6 | v_nome:=tmatriz(10,20); 7 | v_nome.extend(3); 8 | v_nome(3):=30; 9 | v_nome(4):=40; 10 | v_nome(5):=50; 11 | dbms_output.put_line(v_nome(&posicao)); 12 | end; -------------------------------------------------------------------------------- /TABUADA_WHILE.sql: -------------------------------------------------------------------------------- 1 | set serveroutput on 2 | 3 | declare 4 | v_mult number(3):=№ 5 | v_cont number(3); 6 | begin 7 | v_cont:=1; 8 | 9 | while v_cont <= 10 10 | loop 11 | dbms_output.put_line(v_mult ||' x '||v_cont||'='||v_cont*v_mult); 12 | v_cont:=v_cont+1; 13 | end loop; 14 | end; -------------------------------------------------------------------------------- /cursorExplicito3.sql: -------------------------------------------------------------------------------- 1 | DECLARE 2 | CURSOR C_ALUNO IS 3 | SELECT NOTA1, NOTA2, CPF FROM ALUNO; 4 | V_M NUMBER(4,2); 5 | BEGIN 6 | FOR V_ALUNO IN C_ALUNO 7 | LOOP 8 | V_M := (V_ALUNO.NOTA1+V_ALUNO.NOTA2)/2; 9 | UPDATE ALUNO SET MEDIA = V_M WHERE CPF=V_ALUNO.CPF; 10 | END LOOP; 11 | END; -------------------------------------------------------------------------------- /cursorImplicito.sql: -------------------------------------------------------------------------------- 1 | set serveroutput on 2 | BEGIN 3 | update aluno set media=(nota1+nota2)/2; 4 | if sql%found then 5 | dbms_output.put_line ('Alteracao efetuada com sucesso.'||sql%rowcount||' linhas alteradas'); 6 | else 7 | DBMS_OUTPUT.PUT('nenhum aluno encontrado'); 8 | end if; 9 | END; -------------------------------------------------------------------------------- /nestedTables.sql: -------------------------------------------------------------------------------- 1 | create or replace type tabcpf is table of number(11); 2 | 3 | create table funcionario (nome varchar2(20), dep tabcpf) 4 | nested table dep store as dep_int; 5 | 6 | insert into funcionario values ('Arthur', tabcpf(1,2,3)); 7 | 8 | select f.nome, d.column_value from funcionario f, table(f.dep) d; -------------------------------------------------------------------------------- /delete.sql: -------------------------------------------------------------------------------- 1 | /*Exercicio 3*/ 2 | DECLARE 3 | v_numero FORNECEDOR.NUMERO%type := &NUMERO_DO_FORNECEDOR; 4 | BEGIN 5 | 6 | delete from fornecedor where NUMERO = v_numero; 7 | dbms_output.put_line('Fornecedor do numero: '||v_numero|| 8 | ' foi excluido com sucesso'); 9 | END; 10 | 11 | -------------------------------------------------------------------------------- /WHILE.sql: -------------------------------------------------------------------------------- 1 | set serveroutput on 2 | 3 | declare 4 | v_inicio number(10):=&inicio; 5 | v_final number(10):=&final; 6 | v_passo number(10); 7 | begin 8 | v_passo:=v_inicio; 9 | 10 | while v_passo<=v_final 11 | loop 12 | dbms_output.put_line(v_passo); 13 | v_passo:=v_passo+1; 14 | end loop; 15 | end; -------------------------------------------------------------------------------- /cursorImplicito2.sql: -------------------------------------------------------------------------------- 1 | set serveroutput on 2 | BEGIN 3 | update aluno set media=(nota1+nota2)/2 where (nota1+nota2)/2 >= 6; 4 | if sql%found then 5 | dbms_output.put_line ('Alteracao efetuada com sucesso.'||sql%rowcount||' linhas alteradas'); 6 | else 7 | DBMS_OUTPUT.PUT('nenhum aluno encontrado'); 8 | end if; 9 | END; -------------------------------------------------------------------------------- /Converter_Real_pa_Dolar.sql: -------------------------------------------------------------------------------- 1 | /*Programa para converter REAL em DOLAR*/ 2 | 3 | /*set serveroutput on*/ 4 | 5 | DECLARE 6 | dolar constant NUMBER(5,2) := 2.03; 7 | reais constant NUMBER(5,2) := 45; 8 | total NUMBER(5,2); 9 | BEGIN 10 | total := reais * dolar; 11 | dbms_output.put_line('O valor convertido eh: '||total); 12 | END; 13 | -------------------------------------------------------------------------------- /goto2.sql: -------------------------------------------------------------------------------- 1 | set serveroutput on 2 | DECLARE 3 | V_AUX NUMBER(2) := 0; 4 | V_CONTADOR NUMBER(2):=1; 5 | BEGIN 6 | <> 7 | IF V_CONTADOR>10 THEN 8 | GOTO FIM; 9 | END IF; 10 | V_AUX := V_AUX +1; 11 | V_CONTADOR:=V_CONTADOR+1; 12 | DBMS_OUTPUT.PUT_LINE (V_AUX); 13 | GOTO INICIO; 14 | <> 15 | NULL; 16 | END; 17 | -------------------------------------------------------------------------------- /Porcentagem.sql: -------------------------------------------------------------------------------- 1 | /*Programa que calcula o valor do novo salario minimo com mais 8%*/ 2 | 3 | /*set serveroutput on*/ 4 | 5 | DECLARE 6 | salario constant NUMBER(5,2) := 500.00; 7 | salario_novo NUMBER(5,2); 8 | BEGIN 9 | salario_novo := salario + salario * 0.08; 10 | dbms_output.put_line('Salario novo: '||salario_novo); 11 | END; 12 | -------------------------------------------------------------------------------- /LOOP.sql: -------------------------------------------------------------------------------- 1 | set serveroutput on 2 | 3 | declare 4 | v_inicio number(10):=&inicio; 5 | v_final number(10):=&final; 6 | v_passo number(10); 7 | begin 8 | v_passo:=v_inicio; 9 | 10 | loop 11 | dbms_output.put_line(v_passo); 12 | v_passo:=v_passo+1; 13 | if v_passo > v_final then 14 | exit; 15 | end if; 16 | end loop; 17 | end; -------------------------------------------------------------------------------- /Porcentagem2.sql: -------------------------------------------------------------------------------- 1 | /*Programa que calcula o valor do novo salario minimo com mais 10%*/ 2 | 3 | /*set serveroutput on*/ 4 | 5 | DECLARE 6 | salario NUMBER(5,2); 7 | salario_novo NUMBER(5,2); 8 | BEGIN 9 | salario:=&Digite_seu_salario; 10 | salario_novo := salario + salario * 0.1; 11 | dbms_output.put_line('Salario novo: '||salario_novo); 12 | END; -------------------------------------------------------------------------------- /cursorExplicito5.sql: -------------------------------------------------------------------------------- 1 | DECLARE 2 | CURSOR c_cliente IS SELECT codigo, nome FROM cliente; 3 | v_cliente c_cliente%rowtype; 4 | BEGIN 5 | OPEN c_cliente; 6 | LOOP 7 | FETCH c_cliente INTO v_cliente; 8 | EXIT when c_cliente%notfound; 9 | DBMS_OUTPUT.PUT_LINE('Cliente: '||v_cliente.nome); 10 | END LOOP; 11 | CLOSE c_cliente; 12 | END; 13 | -------------------------------------------------------------------------------- /trigger2.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE TRIGGER verifica_valor 2 | BEFORE UPDATE OF valor ON produto 3 | FOR EACH ROW 4 | 5 | BEGIN 6 | IF :NEW.VALOR>10 THEN 7 | :NEW.VALOR:=10; 8 | END IF; 9 | 10 | INSERT INTO valor_produto VALUES (:OLD.codigo, :OLD.valor, :NEW.valor); 11 | END; 12 | 13 | update produto set valor = 11; 14 | 15 | select * from PRODUTO; -------------------------------------------------------------------------------- /Converter_Dolar_pa_Real.sql: -------------------------------------------------------------------------------- 1 | /*Programa para converter DOLAR em REAL*/ 2 | 3 | /*set serveroutput on*/ 4 | 5 | DECLARE 6 | dolar NUMBER(5,2); 7 | cambio NUMBER(5,2); 8 | reais NUMBER(5,2); 9 | BEGIN 10 | dolar := &Digite_o_valor_em_dolar; 11 | cambio := &Digite_o_cambio; 12 | reais := cambio/dolar; 13 | dbms_output.put_line('O valor convertido eh: '||reais); 14 | END; -------------------------------------------------------------------------------- /TABUADA_LOOP.sql: -------------------------------------------------------------------------------- 1 | set serveroutput on 2 | 3 | declare 4 | v_num number(10):=&Digite_o_valor; 5 | v_cont number(10); 6 | v_i number(10):=1; 7 | v_f number(10):=10; 8 | begin 9 | v_cont:=v_i; 10 | loop 11 | dbms_output.put_line(v_num||'x'||v_cont||'='||v_num*v_cont); 12 | v_cont := v_cont+1; 13 | if v_cont > 10 then 14 | exit; 15 | end if; 16 | end loop; 17 | end; -------------------------------------------------------------------------------- /goto3.sql: -------------------------------------------------------------------------------- 1 | set serveroutput on 2 | DECLARE 3 | V_AUX NUMBER(4); 4 | V_ini number(4) := &ini; 5 | V_fim number(4) := &fim; 6 | V_soma number(4):=0; 7 | BEGIN 8 | V_AUX := V_ini; 9 | <> 10 | V_soma := V_soma + V_AUX; 11 | V_AUX := V_AUX +1; 12 | IF (V_AUX <= V_fim)THEN 13 | GOTO INICIO; 14 | END IF; 15 | DBMS_OUTPUT.PUT_LINE (V_soma); 16 | END; -------------------------------------------------------------------------------- /cursorExplicito4.sql: -------------------------------------------------------------------------------- 1 | DECLARE 2 | CURSOR c_cliente IS SELECT codigo, nome FROM cliente; 3 | v_codcli cliente.codigo%type; 4 | v_nomecli cliente.nome%type; 5 | BEGIN 6 | OPEN c_cliente; 7 | LOOP 8 | FETCH c_cliente INTO v_codcli, v_nomecli; 9 | EXIT when c_cliente%notfound; 10 | DBMS_OUTPUT.PUT_LINE('Cliente: '|| v_nomecli); 11 | END LOOP; 12 | CLOSE c_cliente; 13 | END; -------------------------------------------------------------------------------- /tableIndex.sql: -------------------------------------------------------------------------------- 1 | set serveroutput on 2 | DECLARE 3 | TYPE tipoPop IS TABLE OF NUMBER(10) INDEX BY VARCHAR2(64); 4 | cidade tipoPop; 5 | qtde NUMBER; 6 | nome VARCHAR2(64); 7 | BEGIN 8 | cidade('Monte Alegre do Sul') := 5000; 9 | cidade('Sao Caetano') := 60000; 10 | cidade('Amparo') := 50000; 11 | cidade('Sao Paulo') := 1000000; 12 | dbms_output.put_line(cidade('&cidade')); 13 | END; -------------------------------------------------------------------------------- /cursorExplicito7.sql: -------------------------------------------------------------------------------- 1 | set serveroutput on 2 | DECLARE 3 | CURSOR c_cliente IS SELECT nome FROM cliente where estrelas>= 4 order by nome; 4 | v_nomecli cliente.nome%type; 5 | BEGIN 6 | OPEN c_cliente; 7 | LOOP 8 | FETCH c_cliente INTO v_nomecli; 9 | EXIT when c_cliente%notfound; 10 | DBMS_OUTPUT.PUT_LINE('Cliente: '||v_nomecli); 11 | END LOOP; 12 | CLOSE c_cliente; 13 | END; 14 | -------------------------------------------------------------------------------- /cursorExplicito2.sql: -------------------------------------------------------------------------------- 1 | DECLARE 2 | CURSOR C_ALUNO IS 3 | SELECT NOTA1, NOTA2, CPF FROM ALUNO; 4 | V_ALUNO C_ALUNO%ROWTYPE; 5 | V_M NUMBER(4,2); 6 | BEGIN 7 | OPEN C_ALUNO; 8 | LOOP 9 | FETCH C_ALUNO INTO V_ALUNO; 10 | EXIT WHEN C_ALUNO%NOTFOUND; 11 | V_M := (V_ALUNO.NOTA1+V_ALUNO.NOTA2)/2; 12 | UPDATE ALUNO SET MEDIA = V_M WHERE CPF=V_ALUNO.CPF; 13 | END LOOP; 14 | CLOSE C_ALUNO; 15 | END; -------------------------------------------------------------------------------- /procedure2.sql: -------------------------------------------------------------------------------- 1 | /*criando a procedure*/ 2 | CREATE or REPLACE procedure proc_calcmedia 3 | (nota1 number, nota2 number, media out varchar2) 4 | AS 5 | BEGIN 6 | media:= (nota1+nota2)/2; 7 | END proc_calcmedia; 8 | 9 | DECLARE 10 | v_media number(4,2); 11 | v_nota1 number(4,2):=¬a1; 12 | v_nota2 number(4,2):=¬a2; 13 | BEGIN 14 | proc_calcmedia(v_nota1, v_nota2, v_media); 15 | Dbms_output.put_line(v_media); 16 | END; -------------------------------------------------------------------------------- /CASE.sql: -------------------------------------------------------------------------------- 1 | DECLARE 2 | V_RA ALUNO.RA%TYPE := &RA_ALUNO; 3 | V_NOTA ALUNO.NOTA%TYPE; 4 | V_CONCEITO VARCHAR2(12); 5 | BEGIN 6 | SELECT NOTA 7 | INTO V_NOTA 8 | FROM ALUNO 9 | WHERE RA = V_RA; 10 | 11 | V_CONCEITO := 12 | CASE 13 | WHEN V_NOTA <= 7 THEN 'REGULAR' 14 | WHEN V_NOTA < 9 THEN 'BOM' 15 | ELSE 'EXCELENTE' 16 | END; 17 | DBMS_OUTPUT.PUT_LINE ('Conceito: ' || V_CONCEITO); 18 | END; 19 | -------------------------------------------------------------------------------- /cursorExplicito.sql: -------------------------------------------------------------------------------- 1 | DECLARE 2 | CURSOR C_ALUNO IS 3 | SELECT NOTA1, NOTA2, CPF FROM ALUNO; 4 | V_N1 ALUNO.NOTA1%TYPE; 5 | V_N2 ALUNO.NOTA2%TYPE; 6 | V_CPF ALUNO.CPF%TYPE; 7 | V_M NUMBER(4,2); 8 | BEGIN 9 | OPEN C_ALUNO; 10 | LOOP 11 | FETCH C_ALUNO INTO V_N1, V_N2, V_CPF; 12 | EXIT WHEN C_ALUNO%NOTFOUND; 13 | V_M := (V_N1+V_N2)/2; 14 | UPDATE ALUNO SET MEDIA = V_M WHERE CPF=V_CPF; 15 | END LOOP; 16 | CLOSE C_ALUNO; 17 | END; -------------------------------------------------------------------------------- /IF2.sql: -------------------------------------------------------------------------------- 1 | DECLARE 2 | V_RA ALUNO.RA%TYPE := &RA_ALUNO; 3 | V_NOTA ALUNO.NOTA%TYPE; 4 | V_CONCEITO VARCHAR2(12); 5 | BEGIN 6 | 7 | SELECT NOTA 8 | INTO V_NOTA 9 | FROM ALUNO 10 | WHERE RA = V_RA; 11 | 12 | IF V_NOTA <= 7 THEN 13 | V_CONCEITO := 'REGULAR'; 14 | ELSIF V_NOTA < 9 THEN 15 | V_CONCEITO := 'BOM'; 16 | ELSE V_CONCEITO := 'EXCELENTE'; 17 | END IF; 18 | DBMS_OUTPUT.PUT_LINE ('Conceito: ' || V_CONCEITO); 19 | END; -------------------------------------------------------------------------------- /function3.sql: -------------------------------------------------------------------------------- 1 | create or replace function ft_operacao( 2 | op number, valor1 number, valor2 number 3 | )return number 4 | AS 5 | res number(10); 6 | BEGIN 7 | if op = 1 then 8 | res := valor1+valor2; 9 | elsif op = 2 then 10 | res := valor1 * valor2; 11 | elsif op = 3 then 12 | res := valor1/valor2; 13 | else 14 | res := valor1-valor2; 15 | end if; 16 | return res; 17 | END ft_operacao; 18 | 19 | select ft_operacao(1,5,5) from dual; -------------------------------------------------------------------------------- /procedure3.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE PROCEDURE sp_fatorial 2 | (v_aux in number, V_RES out number) 3 | IS 4 | BEGIN 5 | V_RES := 1; 6 | FOR V_CONTADOR IN 1..V_AUX 7 | LOOP 8 | V_RES := V_RES * V_CONTADOR; 9 | END LOOP; 10 | END sp_fatorial; 11 | 12 | 13 | DECLARE 14 | v_aux number(2):= &Entrada; 15 | V_RES number(10); 16 | v_contador number(10); 17 | BEGIN 18 | sp_fatorial(v_aux, V_RES); 19 | DBMS_OUTPUT.PUT_LINE (V_RES); 20 | END; 21 | 22 | 23 | -------------------------------------------------------------------------------- /update.sql: -------------------------------------------------------------------------------- 1 | /*Exercicio 4*/ 2 | 3 | DECLARE 4 | v_valor FORNECEDOR.VALORVENDAS%type := &Digite_valor_a_ser_aumentado; 5 | v_estrelas FORNECEDOR.ESTRELAS%type := &Digite_parametro_de_estrelas; 6 | BEGIN 7 | update fornecedor 8 | set FORNECEDOR.VALORVENDAS = FORNECEDOR.VALORVENDAS + v_valor 9 | where fornecedor.ESTRELAS = v_estrelas; 10 | 11 | dbms_output.put_line('Valor foi aumentado para + '||v_valor||', nos fornecedores de estrelas iguais a '||v_estrelas); 12 | END; 13 | 14 | -------------------------------------------------------------------------------- /procedure.sql: -------------------------------------------------------------------------------- 1 | CREATE OR REPLACE PROCEDURE conceito 2 | (v_nota IN number, v_conceito OUT VARCHAR2) 3 | IS 4 | BEGIN 5 | IF V_NOTA <= 7 THEN 6 | V_CONCEITO := 'REGULAR'; 7 | ELSIF V_NOTA < 9 THEN 8 | V_CONCEITO := 'BOM'; 9 | ELSE 10 | V_CONCEITO := 'EXCELENTE'; 11 | END IF; 12 | END conceito; 13 | 14 | DECLARE 15 | v_nota number(9,2):= ¬a; 16 | v_conceito VARCHAR2(12); 17 | BEGIN 18 | conceito (v_nota,v_conceito); 19 | Dbms_output.put_line(v_conceito); 20 | END; -------------------------------------------------------------------------------- /config banco.txt: -------------------------------------------------------------------------------- 1 | CONNECT / AS SYSDBA -> Pressione Enter 2 | 3 | ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED; -> Pressione Enter 4 | 5 | ALTER USER scott identified by values '1234'; -> Pressione Enter 6 | 7 | connect scott -> Pressione Enter 8 | senha: 1234 -> Pressione Enter 9 | 10 | CONNECT / AS SYSDBA -> Pressione Enter 11 | 12 | ALTER USER scott identified by values 'tiger'; -> Pressione Enter 13 | 14 | connect scott -> Pressione Enter 15 | senha: tiger -> Pressione Enter 16 | -------------------------------------------------------------------------------- /function.sql: -------------------------------------------------------------------------------- 1 | set serveroutput on 2 | 3 | CREATE or REPLACE function ft_calcmedia( 4 | nota1 number, nota2 number 5 | ) return number 6 | AS 7 | media number(10,2); 8 | BEGIN 9 | media:=(nota1+nota2)/2; 10 | return media; 11 | END ft_calcmedia; 12 | 13 | select ft_calcmedia(8,5) from dual; 14 | select ft_calcmedia(7,5) from dual; 15 | select ft_calcmedia(8.5,9) from dual; 16 | /*alterar todos os campos usando update e funcao 17 | update aluno set media = ft_calcmedia(nota1, nota2);*/ 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /exception.sql: -------------------------------------------------------------------------------- 1 | set serveroutput on 2 | DECLARE 3 | v_ra NUMBER(10); 4 | v_nome varchar(20); 5 | BEGIN 6 | select ra, nome into v_ra, v_nome from aluno where ra = '&ra'; 7 | dbms_output.put_line('v_ra||'-'||v_nome'); 8 | EXCEPTION 9 | when no_data_found then 10 | dbms_output.put_line('ERRO: Nenhum aluno cadastrado com esse RA'); 11 | when too_many_rows then 12 | dbms_output.put_line('ERRO: Ha mais de um aluno com RA informado'); 13 | when others then 14 | dbms_output.put_line('ERRO DESCONHECIDO'); 15 | END; 16 | 17 | 18 | -------------------------------------------------------------------------------- /RowType.sql: -------------------------------------------------------------------------------- 1 | /*Exercicio 6*/ 2 | DECLARE 3 | v_numeroQuery FORNECEDOR.NUMERO%type := &Digite_numero_a_ser_consultado; 4 | v_forn fornecedor%rowtype; 5 | BEGIN 6 | select numero, nome, endereco, Valorvendas 7 | into v_forn.numero, v_forn.nome, v_forn.endereco, v_forn.valorvendas 8 | from FORNECEDOR where NUMERO = v_numeroQuery; 9 | 10 | dbms_output.put_line('Busca realizada com sucesso'); 11 | dbms_output.put_line('Nome: '||v_forn.nome||', Numero: '||v_forn.numero||', Valor vendas: '||v_forn.valorvendas||', Endereco: '||v_forn.endereco); 12 | END; 13 | -------------------------------------------------------------------------------- /Query.sql: -------------------------------------------------------------------------------- 1 | /*Programa que retorna o nome do Aluno 2 | de acordo com o RA que o usuario fornece*/ 3 | 4 | /*set serveroutput on*/ 5 | 6 | CREATE TABLE ALUNO ( 7 | RA NUMBER(5), 8 | NOME VARCHAR2(40)); 9 | INSERT INTO ALUNO VALUES (1,'ANTONIO'); 10 | INSERT INTO ALUNO VALUES (2,'BEATRIZ'); 11 | 12 | DECLARE 13 | v_ra aluno.ra%type; 14 | v_nome aluno.nome%type; 15 | BEGIN 16 | v_ra := &RA_DO_ALUNO; 17 | 18 | select nome, ra 19 | into v_nome, v_ra 20 | from aluno where ra = v_ra; 21 | 22 | dbms_output.put_line('Aluno: ' || v_nome || '| RA: ' || v_ra); 23 | END; 24 | -------------------------------------------------------------------------------- /tableIndex2.sql: -------------------------------------------------------------------------------- 1 | set serveroutput on 2 | DECLARE 3 | TYPE tipoPop IS TABLE OF NUMBER(10) INDEX BY VARCHAR2(64); 4 | cidade tipoPop; 5 | qtde NUMBER; 6 | nome VARCHAR2(64); 7 | BEGIN 8 | cidade('Monte Alegre do Sul') := 5000; 9 | cidade('Sao Caetano') := 60000; 10 | cidade('Sao Caetano') := 35000; 11 | cidade('Amparo') := 50000; 12 | cidade('Sao Paulo') := 1000000; 13 | nome := cidade.FIRST; 14 | WHILE nome IS NOT NULL 15 | LOOP 16 | qtde := cidade(nome); 17 | dbms_output.put_line(nome || ': ' || to_char(qtde)); 18 | nome := cidade.NEXT(nome); 19 | end loop; 20 | END; -------------------------------------------------------------------------------- /Query2.sql: -------------------------------------------------------------------------------- 1 | /*Exercicio 5*/ 2 | 3 | DECLARE 4 | v_numeroQuery FORNECEDOR.NUMERO%type := &Digite_numero_a_ser_consultado; 5 | v_numero FORNECEDOR.NUMERO%type; 6 | v_nome FORNECEDOR.NOME%type; 7 | v_end FORNECEDOR.ENDERECO%type; 8 | v_vendas FORNECEDOR.VALORVENDAS%type; 9 | BEGIN 10 | select numero, nome, endereco, Valorvendas 11 | into v_numero, v_nome, v_end, v_vendas 12 | from FORNECEDOR where NUMERO = v_numeroQuery; 13 | 14 | dbms_output.put_line('Busca realizada com sucesso'); 15 | dbms_output.put_line('Nome: '||v_nome||', Numero: '||v_numero||', Valor vendas: '||v_vendas||', Endereco: '||v_end); 16 | END; 17 | -------------------------------------------------------------------------------- /function2.sql: -------------------------------------------------------------------------------- 1 | CREATE or REPLACE function ft_compara( 2 | nota1 number, 3 | nota2 number, 4 | nota3 number, 5 | nota4 number 6 | ) return varchar2 7 | AS 8 | v_media1 number(4,2); 9 | v_media2 number(4,2); 10 | dc varchar2(50); 11 | BEGIN 12 | V_media1 := (nota1+nota2)/2; 13 | V_media2 := (nota3+nota4)/2; 14 | IF v_media1>v_media2 THEN 15 | dc:= 'Aluno1 teve melhor desempenho que Aluno2.'; 16 | END IF; 17 | 18 | IF v_media2>v_media1 THEN 19 | dc:= 'Aluno2 teve melhor desempenho que Aluno1.'; 20 | END IF; 21 | 22 | IF v_media1=v_media2 THEN 23 | dc:= 'Aluno1 e Aluno2 tiveram mesmo desempenho.'; 24 | END IF; 25 | 26 | return dc; 27 | END ft_compara; 28 | 29 | select ft_compara (1,2,3,4) from dual; -------------------------------------------------------------------------------- /insert.sql: -------------------------------------------------------------------------------- 1 | /*Exercicio 2*/ 2 | desc fornecedor; 3 | select * from fornecedor; 4 | DECLARE 5 | v_num FORNECEDOR.NUMERO%type := &NUMERO_DO_FORNECEDOR; 6 | v_nome FORNECEDOR.NOME%type := '&NOME_DO_FORNECEDOR'; 7 | v_end FORNECEDOR.ENDERECO%type := '&ENDERECO_DO_FORNECEDOR'; 8 | v_cpf FORNECEDOR.CPF%type := &CPF_DO_CPF; 9 | v_star FORNECEDOR.ESTRELAS%type := '&ESTRELAS_DO_FORNECEDOR'; 10 | v_vendas FORNECEDOR.VALORVENDAS%type := &VENDAS_DO_FORNECEDOR; 11 | v_comissao FORNECEDOR.VALORCOMISSAO%type := &COMISSOES_DO_FORNECEDOR; 12 | BEGIN 13 | insert into fornecedor values (v_num, v_nome, 14 | v_end, v_cpf, 15 | v_star, v_vendas, 16 | v_comissao, null, null); 17 | 18 | END; 19 | -------------------------------------------------------------------------------- /trigger.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE produto 2 | (codigo NUMBER(4), 3 | valor NUMBER(7,2)); 4 | 5 | CREATE TABLE valor_produto 6 | (codigo NUMBER(4), 7 | valor_anterior NUMBER(7,2), 8 | valor_novo NUMBER(7,2)); 9 | 10 | CREATE OR REPLACE TRIGGER verifica_valor 11 | /*trigger executa quando for feito um update*/ 12 | BEFORE UPDATE 13 | OF valor 14 | ON produto 15 | /*for each row = rodar em quantas linhas forem possiveis*/ 16 | FOR EACH ROW 17 | 18 | BEGIN 19 | /*OLD = antes do update / NEW = depois do update*/ 20 | INSERT INTO valor_produto VALUES (:OLD.codigo, :OLD.valor, :NEW.valor); 21 | END; 22 | 23 | /* 24 | INSERT INTO produto VALUES (1,2.5); 25 | INSERT INTO produto VALUES (2,3.2); 26 | INSERT INTO produto VALUES (3,5.8); 27 | */ 28 | 29 | UPDATE produto SET valor = 5.4 WHERE codigo = 3; 30 | 31 | SELECT * FROM valor_produto; -------------------------------------------------------------------------------- /trigger3.sql: -------------------------------------------------------------------------------- 1 | CREATE TABLE audit_table ( 2 | del number(6), ins number(6),upd number(6)); 3 | 4 | Insert into audit_table values (0,0,0); 5 | Drop table emp cascade constraints; 6 | 7 | Create table emp ( 8 | cod number(6), nome varchar2(20)); 9 | 10 | CREATE OR REPLACE TRIGGER audit_table 11 | BEFORE DELETE OR INSERT OR UPDATE ON emp 12 | BEGIN 13 | IF DELETING THEN 14 | UPDATE audit_table SET del = del + 1; 15 | ELSIF INSERTING THEN 16 | UPDATE audit_table SET ins = ins + 1; 17 | ELSIF UPDATING THEN 18 | UPDATE audit_table SET upd = upd + 1; 19 | END IF; 20 | END; 21 | 22 | Insert into emp values (1, 'leonardo'); 23 | Insert into emp values (2, 'ricardo'); 24 | Insert into emp values (3, 'jose'); 25 | Update emp set nome = 'mane' where cod=1; 26 | Update emp set nome = 'mane' where cod=2; 27 | Delete from emp where cod=3; 28 | 29 | select * from audit_table; -------------------------------------------------------------------------------- /ProvaEx3.sql: -------------------------------------------------------------------------------- 1 | /*3. Construa uma procedure que tenha 3 parâmetros numéricos como entrada, representando 2 | tres notas do aluno (AV1, AV2 e AV3). 3 | O programa deverá calcular media aritmética considerando AV1, AV2 e AV3. Caso media seja igual 4 | ou superior a 6 retornar APROVADO caso contrário retornar REPROVADO. 5 | OBS: não usar DBMS_OUTPUT dentro da procedure.*/ 6 | 7 | CREATE OR REPLACE PROCEDURE pc_media 8 | (v_n1 IN number,v_n2 IN number,v_n3 IN number, v_res OUT VARCHAR2) 9 | IS 10 | media number(9,2):= ((v_n1+v_n2+v_n3)/3); 11 | BEGIN 12 | 13 | IF media >= 6 THEN 14 | v_res := 'APROVADO'; 15 | ELSE 16 | v_res := 'REPROVADO'; 17 | END IF; 18 | END pc_media; 19 | 20 | DECLARE 21 | v_n1 number(9,2):= ¬a1; 22 | v_n2 number(9,2):= ¬a2; 23 | v_n3 number(9,2):= ¬a3; 24 | v_res VARCHAR2(12); 25 | BEGIN 26 | pc_media (v_n1,v_n2,v_n3,v_res); 27 | Dbms_output.put_line(v_res); 28 | END; 29 | -------------------------------------------------------------------------------- /ProvaEx1.sql: -------------------------------------------------------------------------------- 1 | /*1. Considere as tabelas abaixo: 2 | CREATE TABLE aluno 3 | (ra varchar2(8), 4 | nota number(4,2), 5 | situacao varchar2(9) 6 | ); 7 | CREATE TABLE cadastro_log 8 | (ra varchar2(8), 9 | nota_antigo NUMBER(4,2), 10 | nota_novo NUMBER(4,2), 11 | situacao_antigo varchar2(9), 12 | situacao_novo varchar2(9), 13 | operacao number(1) 14 | ); 15 | Criar uma trigger que sempre que se efetuar uma alteração ou uma deleção na tabela aluno, os 16 | dados deverão ser gravados em cadastro_log. OBS: caso seja alteração, gravar 1 no campo 17 | operacao, caso seja deleção gravar 2 no campo operacao.*/ 18 | 19 | create or replace trigger tg_grava 20 | before update or delete 21 | on aluno 22 | for each row 23 | begin 24 | if updating then 25 | INSERT INTO cadastro_log VALUES (:OLD.RA, :OLD.NOTA,:NEW.NOTA,:OLD.SITUACAO,:NEW.SITUACAO,1); 26 | end if; 27 | if deleting then 28 | INSERT INTO cadastro_log VALUES (:OLD.RA, :OLD.NOTA,:NEW.NOTA,:OLD.SITUACAO,:NEW.SITUACAO,2); 29 | end if; 30 | END; 31 | -------------------------------------------------------------------------------- /IF3.sql: -------------------------------------------------------------------------------- 1 | /* 2 | ACESSAR TABELA FORNECEDOR, CUJO CÓDIGO DEVERÁ SER INFORMADO NA TELA E 3 | ALTERAR O VALOR DA COMISSÃO, NAS CONDIÇÕES ABAIXO. 4 | Fazer usando IF-THEN-ELSE e fazer usando CASE. 5 | 6 | Fazer a seguinte atualização na comissão: 7 | Se as vendas forem maiores que 6000 a comissão deverá ser 15% do valor das vendas 8 | Caso contrário a comissão deverá ser 5% do valor das vendas 9 | No final, dar uma mensagem do valor calculado da comissão. 10 | */ 11 | 12 | DECLARE 13 | v_numero number(1):=&NUMERO; 14 | v_vendas FORNECEDOR.VALORVENDAS%type; 15 | BEGIN 16 | 17 | select Valorvendas 18 | into v_vendas 19 | from FORNECEDOR where NUMERO = v_numero; 20 | 21 | IF v_vendas >= 6000 THEN 22 | update fornecedor 23 | set FORNECEDOR.VALORCOMISSAO = FORNECEDOR.VALORVENDAS*0.15 24 | where NUMERO = v_numero; 25 | ELSE 26 | update fornecedor 27 | set FORNECEDOR.VALORCOMISSAO = FORNECEDOR.VALORVENDAS*0.05 28 | where NUMERO = v_numero; 29 | END IF; 30 | 31 | dbms_output.put_line('Valor da comissao atualizado para: '||v_vendas); 32 | 33 | END; 34 | -------------------------------------------------------------------------------- /ProvaEx2.sql: -------------------------------------------------------------------------------- 1 | /*2. Dado o bloco PL/SQL abaixo transformá-lo em função. 2 | DECLARE 3 | V_soma NUMBER(3) := 0; 4 | V_ini number(2) := &ini; 5 | V_fim number(2) := &fim; 6 | V_msg varchar2(100); 7 | BEGIN 8 | FOR V_CONTADOR IN v_ini..v_fim 9 | LOOP 10 | V_soma := V_soma + V_CONTADOR; 11 | END LOOP; 12 | IF V_soma > 51 THEN 13 | V_msg:='maior que 51'; 14 | END if; 15 | IF V_soma < 51 THEN 16 | V_msg:='menor que 51'; 17 | END IF; 18 | IF V_soma = 51 THEN 19 | V_msg:='igual a 51'; 20 | END IF; 21 | DBMS_OUTPUT.PUT_LINE (V_msg); 22 | END;*/ 23 | 24 | create or replace function ft_test 25 | (V_ini number, V_fim number) 26 | return varchar2 27 | as 28 | V_msg varchar2(20); 29 | V_soma NUMBER(8):=0; 30 | BEGIN 31 | FOR V_CONTADOR IN v_ini..v_fim 32 | LOOP 33 | V_soma := V_soma + V_CONTADOR; 34 | END LOOP; 35 | 36 | IF V_soma > 51 THEN 37 | V_msg:='maior que 51'; 38 | END if; 39 | 40 | IF V_soma < 51 THEN 41 | V_msg:='menor que 51'; 42 | END IF; 43 | 44 | IF V_soma = 51 THEN 45 | V_msg:='igual a 51'; 46 | END IF; 47 | 48 | return V_msg; 49 | END ft_test; 50 | 51 | select ft_test (6,11)from dual; 52 | --------------------------------------------------------------------------------