CRIANDO PROCEDURES!!! //OK! CREATE OR REPLACE PROCEDURE inserirRelTorreProduto(p_codTorre relTorreProduto.codTorre%TYPE, p_codProduto relTorreProduto.codProduto%TYPE) AS BEGIN INSERT INTO relTorreProduto(codTorre, codProduto) VALUES(p_codTorre, p_codProduto); COMMIT; END inserirRelTorreProduto; / //OK! CREATE OR REPLACE PROCEDURE inserirComprador(p_cnpj comprador.cnpj%TYPE, p_qntLotes comprador.qntLotes%TYPE, p_nome comprador.nome%TYPE, p_credibilidade comprador.credibilidade%TYPE) AS BEGIN INSERT INTO comprador(cnpj, qntLotes, nome, credibilidade) VALUES (p_cnpj, p_qntLotes, p_nome, p_credibilidade); COMMIT; END inserirComprador; / CRIANDO FUNCTIONS!!! CREATE OR REPLACE FUNCTION getCapacidadeTorre( p_codigo IN torre.codigo%TYPE) RETURN VARCHAR2 IS retorno VARCHAR(30); BEGIN SELECT capacidade INTO retorno FROM torre WHERE p_codigo=codigo; RETURN retorno; END getCapacidadeTorre; / CRIANDO CURSORES!!! set serveroutput on; DECLARE p_nome empregado.nome%TYPE; p_salario empregado.salario%TYPE; p_telefone empregado.telefone%TYPE; CURSOR granaGalera IS SELECT nome, salario, telefone FROM empregado; BEGIN OPEN granaGalera; LOOP FETCH granaGalera INTO p_nome, p_salario, p_telefone; EXIT WHEN granaGalera%NOTFOUND; DBMS_OUTPUT.PUT_LINE('nome: '|| p_nome || ' salário: ' || TO_CHAR(p_salario) || ' telefone: ' || TO_CHAR(p_telefone)); END LOOP; CLOSE granaGalera; END; / CRIANDO TRIGGERS!!! CREATE OR REPLACE TRIGGER muda CREATE OR REPLACE TRIGGER altera_km AFTER UPDATE ON locacao FOR EACH ROW BEGIN IF :NEW.data_entrega IS NOT NULL THEN UPDATE carro SET km_carro = :NEW.km_final WHERE chassi = :NEW.chassi; END IF; END; /