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;
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
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;
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;
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;
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;
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;
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;
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;
Assinar:
Postagens (Atom)