Envio de sentenças SQL via DataServer

Escrito por Marcos Kirchner em 12 de março de 2009, 08:05h

Em posts anteriores o Eloi e eu demonstramos como utilizar Stored Procedures (SPs) com DataServer Oracle e SPs com DataServer SQL Server para ler ou alterar dados. Em algumas situações, porém, não é possível ou desejável criar uma SP.

O DataServer oferece suporte ao envio de sentenças SQL diretamente a partir do código 4GL / ABL. A sintáxe básica é:

DEF VAR ttH AS HANDLE NO-UNDO.
ASSIGN ttH = TEMP-TABLE ttResult:HANDLE.
RUN STORED-PROCEDURE send-sql-statement
    LOAD-RESULT-INTO ttH
    ("Comandos SQL").

Neste exemplo, ttResult é uma temp-table previamente definida. Pode ser utilizada qualquer sentença aceita pelo banco de dados em questão. O DataServer irá repassar os comandos ao banco de dados na íntegra, sem nenhuma interferência.

É importante notar que este código não compila para um banco de dados Progress. Será gerado um erro indicando que a procedure SEND-SQL-STATEMENT não existe. Quando o programa precisa ser portável para vários bancos de dados (como é o caso dos programas Datasul), pode-se utilizar um pré-processador com a função DBTYPE, conforme exemplo abaixo:

DEFINE NEW SHARED TEMP-TABLE ttResult NO-UNDO
    FIELD Categoria AS CHAR FORMAT "x(20)"
    FIELD Subcategoria AS CHAR FORMAT "x(20)"
    FIELD ValorTotal AS DECIMAL FORMAT ">,>>>,>>>,>>9.99".

DEF VAR pH AS HANDLE NO-UNDO.

&IF DBTYPE('aw') = 'MSS' &THEN
    RUN sendsql.p PERSISTENT SET pH.
&ELSE
    RUN abl.p PERSISTENT SET pH.
&ENDIF

RUN ProductSales IN pH.
DELETE PROCEDURE pH.

FOR EACH ttResult:
    DISP ttResult.
END.

Durante a compilação, o pré-processador irá verificar o tipo do banco de dados e chamar o programa correspondente. Ambos os programas lêem o banco de dados e populam a temp-table ttResult, de formas completamente diferentes.

Abaixo você pode baixar os fontes dos exemplos sendsql.p e abl.p, e também um diagrama com a definição das tabelas do exemplo. O objetivos destes programas é produzir uma listagem com o total de vendas por categoria e subcategoria de produtos.

sendsql.p (1,06 kb)

abl.p (1,30 kb)

diagrama.png (64,25 kb)

Categorias: DataServer | Oracle | Programação | SQL Server

Tags: ,

Comentar




biuquote
  • Comentário
  • Pré-visualização
Loading


Acesso LogMeIn

Informe o código PIN: