quarta-feira, 18 de janeiro de 2012

Stored-procedure em um programa Progress


Hoje precisei desenvolver e utilizar uma stored-procedure Oracle em um programa Progress. E então resolvi compartilhar isto com vocês...

Primeiramente deve-se criar a stored-procedure no Oracle, através do utilitário SQL*Plus, por exemplo. A seguir apresento o código de uma stored-procedure bem simples:

CREATE PROCEDURE createBanco (bancoId IN NUMBER, bancoNome IN VARCHAR2) AS
BEGIN
INSERT INTO banco (cod_banco, nome_abrev, u##nome_abrev, nome_banco, ag_padrao, convenio, cod_resp, usa_cob_esc, cod_febraban) VALUES(bancoId, bancoNome, UPPER(bancoNome), bancoNome, ' ', 0, ' ', 0, 0);
END;

Após a criação deve-se atualizar o Schema Holder Progress para conter a stored-procedure recém criada, pois para programas Progress ela é vista como uma tabela (sua assinatura é verificada em tempo de compilação). Para fazer esta atualização, deve-se utilizar o utilitário Data Administration.

Os passos para atualização* são os seguintes:

Executar o Data Administration;
Selecionar o banco Oracle (não o Schema Holder) que contém a stored-procedure;
Selecionar o menu DataServer + ORACLE Utilities + Update/Add Table Definitions;
Informar os dados de login do usuário proprietário da stored-procedure no banco Oracle;
Informar o nome da stored-procedure no campo object name;
Schema Holder atualizado.

Depois disso, basta utilizar a stored-procedure nos programas Progress, através do comando RUN STORED-PROCEDURE. A seguir apresento um exemplo:

DEFINE VARIABLE iStoredProc AS INTEGER.

RUN STORED-PROCEDURE mgadm.create-banco
    iStoredProc = PROC-HANDLE NO-ERROR
    (INPUT 1009, INPUT "1009").

FOR EACH mgadm.proc-text-buffer
    WHERE PROC-HANDLE = iStoredProc:
    DISPLAY mgadm.proc-text-buffer.proc-text.
END.

CLOSE STORED-PROCEDURE mgadm.create-banco
    WHERE PROC-HANDLE = iStoredProc.

Nenhum comentário: