Mostrando postagens com marcador PL/SQL. Mostrar todas as postagens
Mostrando postagens com marcador PL/SQL. Mostrar todas as postagens

terça-feira, 13 de maio de 2014

Exemplo Cursor PL/SQL

set serveroutput on
declare
--passo 1: declarar as variáveis
v_employee_id employees.employee_id%type;
v_first_name employees.first_name%type;
v_hire_date employees.hire_date%type;
v_salary employees.salary%type;
-- passo 2: declarar o cursor
CURSOR v_employees_cursor is
  select employee_id,first_name,hire_date,salary
  from employees
  order by employee_id;
 begin
 -- passo 3: abrir o cursor
 open v_employees_cursor;
 loop
 -- passo 4: buscar as linhas do cursor
 FETCH v_employees_cursor
 into v_employee_id,v_first_name,v_hire_date,v_salary;
 --sai do loop quando não existe mais linhas, conforme indicado
 --pela variavel booleana v_employees_cursor%notfound
 exit when v_employees_cursor%NOTFOUND;
 -- usa DBMS_OUTPUT.PUT_LINE () para exibir as variaveis
 DBMS_OUTPUT.put_line(
 'v_employee_id = '||v_employee_id||',v_first_name = '||v_first_name||',v_hire_date = '||v_hire_date||',v_salary = '||v_salary);
 end loop;
 --passo 5: fechar o cursor
 close v_employees_cursor;
 end;

Gerar Arquivo xml PL/SQL

create or replace procedure gerar_xml is

  v_file Utl_File.File_Type;
  v_xml  CLOB;

BEGIN
  DECLARE

    v_file Utl_File.File_Type;
    v_xml  CLOB;
    v_more BOOLEAN := TRUE;
    v_erro varchar2(100);
    v_conteudo_arquivo sys.xmltype;

  BEGIN
    -- Consulta na variavel V_XML
    V_XML := DBMS_XMLQUERY.getXML('select * from tabela');


    -- IMP é o directory do oracle, arquivo.XML
      V_FILE := UTL_FILE.fopen('IMP', 'arquivo.XML', 'w');
    WHILE V_MORE LOOP
      UTL_FILE.PUT(V_FILE, SUBSTR(V_XML, 1, 32767));
  
      IF LENGTH(V_XML) > 32767 THEN
        V_XML := SUBSTR(V_XML, 32768);
      ELSE
        V_MORE := FALSE;
      END IF;
    END LOOP;

    UTL_FILE.fclose(V_FILE);

  EXCEPTION
    WHEN OTHERS THEN
    v_erro := Substr(SQLERRM, 1, 255);
    --tabela log_temp é o local para gravar o erro gerado pelo exception
    insert into log_temp
    values (v_erro,sysdate);
commit;
      --DBMS_OUTPUT.PUT_LINE(Substr(SQLERRM, 1, 255));
      Utl_File.FClose(v_file);
  
  END;

END;

segunda-feira, 12 de maio de 2014

Envio Email PL/SQL

DECLARE
 v_FromAddr VARCHAR2(50) := 'endereço pessoa que esta enviando';
 v_ToAddr VARCHAR2(90) := 'endereco da pessoa que vai receber';
 v_Message VARCHAR2(200);
 v_MailHost VARCHAR2(50) := 'endereco servidor smtp';
 v_MailConnection UTL_SMTP.Connection;
 BEGIN
 v_Message :=
 'From: ' || v_FromAddr || CHR(10) ||
 'Subject: Hello from PL/SQL!' || CHR(10) ||
 'This message sent to you courtesy of the UTL_SMTP package.';
 v_MailConnection := UTL_SMTP.OPEN_CONNECTION(v_MailHost);
 UTL_SMTP.HELO(v_MailConnection, v_MailHost);
 UTL_SMTP.MAIL(v_MailConnection, v_FromAddr);
 UTL_SMTP.RCPT(v_MailConnection, v_ToAddr);
 UTL_SMTP.DATA(v_MailConnection, v_Message);
 UTL_SMTP.QUIT(v_MailConnection);
 END;

Exemplo Interação com usuário:
impressão saída texto
SQL> SET SERVEROUTPUT ON
SQL> begin
 DBMS_OUTPUT.PUT_LINE('Teste de pl/sql!!!');
 end;
 /
Teste de pl/sql!!!
PL/SQL procedure successfully completed.

Procedimento Inclusão Localizaçao

create or replace procedure GERENCIA_LOCATION(
var_location_id in LOCATIONS.LOCATION_ID%TYPE,
var_street_address in LOCATIONS.STREET_ADDRESS%TYPE,
var_postal_code in LOCATIONS.POSTAL_CODE%TYPE,
var_city in LOCATIONS.CITY%TYPE,
var_state_providence in LOCATIONS.STATE_PROVINCE%TYPE,
var_country_id in LOCATIONS.COUNTRY_ID%TYPE,
var_operacao char)
is
var_exception exception;
v_newrowid rowid;

begin

 if (var_operacao ='I')THEN
 insert into locations values (var_location_id,var_street_address,var_postal_code,var_city,var_state_providence,var_country_id)
 returning rowid into v_newrowid;
 dbms_output.put_line('Registros inseridos' || v_newrowid);
 commit;
 else if (var_operacao ='A')THEN
 UPDATE LOCATIONS
 SET CITY = var_city
 WHERE LOCATION_ID = var_location_id;
 dbms_output.put_line('Registros Atualizados');
 else if (var_operacao ='D')THEN
 DELETE FROM LOCATIONS WHERE LOCATION_ID = var_location_id;
 commit;
 dbms_output.put_line('Registros DELETADOS');
 ELSE
 RAISE var_exception;
 END IF;
 END IF;
 END IF;
 EXCEPTION
    WHEN var_exception then
    RAISE_APPLICATION_ERROR(-20999,'Atenção!ESCOLHA:I,D OU A!',FALSE);
    when OTHERS THEN
    dbms_output.put_line('Atenção codigo'||sqlcode);
    dbms_output.put_line('Atenção texto'||SUBSTR(SQLERRM, 1, 200));
 end GERENCIA_LOCATION;

Trigger Log Tabela

create or replace trigger GAT_AUMENTO_SALARIO
before update of salary
on employees
for each row
DECLARE
V_USERNAME varchar2(60);
begin
--seleciona o usuario logado do banco
select user into v_username from dual;
 insert into log_salario_employees values (:old.employee_id,:new.salary,:old.salary,SYSDATE,v_username);
 end;

Exception de Usuário

declare
v_codigo cidade.codigo%type;
v_descricao cidade.descricao%type;
v_uf cidade.uf%type;
v_contador number(2);
debug_cidade exception;
begin
selecT count(codigo)
into v_contador
from cidade;
if v_contador > 5 then
raise debug_cidade;
 else
 insert into cidade values (6,'SANTO EXPEDITO','RS');
 dbms_output.put_line('Registros inseridos'||v_contador);
 end if;
 exception
   when debug_cidade then
   dbms_output.put_line('NÃO FOI POSSIVEL ADICIONAR CIDADE: TABELA CHEIA '|| v_contador);
   END;