[firebase-br] Ref. Executar SQL

Sandro Souza escovadordebits em gmail.com
Ter Jun 2 09:01:11 -03 2009


Bom dia/tarde Omar.

Grande Omar, talvez eu não tenha entendido o que você perguntou.

Se o que você quer saber é como executar um comando de criação de stored
procedure e/ou trigger de dentro do Delphi, por exemplo, então você deve
executar cada comando de criação separadamente.

Por exemplo, se temos o seguinte script:

SET TERM ^ ;

CREATE OR ALTER PROCEDURE ROTINA_A (...) RETURNING (...) AS
BEGIN
  ...
END^

CREATE OR ALTER PROCEDURE ROTINA_B (...) RETURNING (...) AS
BEGIN
  ...
END^

CREATE OR ALTER PROCEDURE ROTINA_C (...) RETURNING (...) AS
BEGIN
  ...
END^

SET TERM ; ^

E desejamos executá-lo de dentro do Delphi, então devemos executar cada
comando de criação/alteração separadamente.

Vamos supor q

2009/5/29 Omar Haddad <omarhaddadm em gmail.com>

> Ops. Sandro não entendi.
>
> Como poderia rodar todo este script (que tem inúmeras procedures), de uma
> vez só. ?
>
> Não entendi.
>
> Abraço.
>
> --------------------------------------------
>    CREATE PROCEDURE FU_DECODE_DATE(
>    WDAT DATE)
>    RETURNS (
>    RDIA SMALLINT,
>    RMES SMALLINT,
>    RANO SMALLINT)
>    AS
>    begin
>    /*
>    Igual ao Delphi
>    */
>    rdia = extract(day   from :wdat);
>    rmes = extract(month from :wdat);
>    rano = extract(year  from :wdat);
>
> suspend;
>    end
>
> --------------------------------------------
>    CREATE PROCEDURE FU_DECODE_DATE_TIME(
>    WDAT TIMESTAMP)
>    RETURNS (
>    RDIA SMALLINT,
>    RMES SMALLINT,
>    RANO SMALLINT,
>    RHOR SMALLINT,
>    RMIN SMALLINT,
>    RSEG DECIMAL(6,4),
>    WEEK SMALLINT,
>    YDIA SMALLINT)
>    AS
>    declare variable trab varchar(24);
>    begin
>    /*
>    Igual ao Delphi
>    */
>    trab = cast(:wdat as varchar(24));
>
> rdia = extract(day   from :wdat);
>    rmes = extract(month from :wdat);
>    rano = extract(year  from :wdat);
>
> if (substring(:trab from 12 for 13) = '00:00:00.0000') then
>    begin
>    rhor = 0;
>    rmin = 0;
>    rseg = 0.0000;
>    end
>    else begin
>    rhor = extract(hour   from :wdat);
>    rmin = extract(minute from :wdat);
>    rseg = extract(second from :wdat);
>    end
>
> week = extract(weekday from :wdat);
>    ydia = extract(yearday from :wdat);
>
> suspend;
>    end
>
>
>
> --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
>
>
> 2009/5/29 Sandro Souza <escovadordebits em gmail.com>
>
>> Bom dia/tarde Omar.
>>
>> Grande Omar, foi besteira minha aquela "dica" do meu email anterior.
>>
>> Essa stored procedure FU_ALLTRIM remove TODOS os espaços.
>>
>> Desculpe a bobagem. :D
>>
>> 2009/5/29 Sandro Souza <escovadordebits em gmail.com>
>>
>> Bom dia/tarde Omar.
>>>
>>> Grande Omar, só é necessário colocar os dois pontos antes dos nomes das
>>> variáveis nos comandos SQLs.
>>>
>>> Vamos refazer essas duas stored procedures:
>>>
>>>
>>> SET TERM ^ ;
>>>
>>> CREATE OR ALTER PROCEDURE FU_ABS(
>>>   WVAR DOUBLE PRECISION)
>>>   RETURNS (
>>>   R_ABS DOUBLE PRECISION)
>>>   AS
>>>   begin
>>>   /*
>>>   devolve o valor Absoluto de um número.
>>>   -123,47 ou 123,47 devolve sempre 123,47
>>>   */
>>>   if (wvar is not null) then
>>>   begin
>>>     if (wvar < 0) then
>>>       r_abs = wvar * -1;
>>>     else
>>>       r_abs = :wvar;
>>>   end -- if
>>>   suspend;
>>> end^
>>>
>>> CREATE OR ALTER PROCEDURE FU_ALLTRIM(
>>>>   WVAR VARCHAR(8192))
>>>>   RETURNS (
>>>>   R_ALLTRIM VARCHAR(8192))
>>>>   AS
>>>>   DECLARE VARIABLE T SMALLINT;
>>>>   begin
>>>>   /*
>>>>   Devolve um string sem espaços
>>>>   */
>>>>   select r_Len from Fu_Len(:wvar) into :t;
>>>>
>>>       -- Você já tentou: "t = FU_Len(wvar);" ?
>>>
>>>>
>>>>   r_alltrim = '';
>>>>
>>>> while ((wvar is not null) and (t > 0)) do begin
>>>>   if (substring(wvar from 1 for 1) <> ' ') then
>>>>   r_alltrim = r_alltrim || substring(wvar from 1 for 1);
>>>>  wvar = substring(:wvar from 2 for 8191);
>>>>   t = t - 1;
>>>>   end -- while
>>>
>>> suspend;
>>>>   end^
>>>
>>>
>>> SET TERM ;  ^
>>>
>>> Só uma dica, essa stored procedure FU_ALLTRIM não está removendo os
>>> espaços excedentes após o final da string.
>>>
>>> Espero ter ajudado mais que atrapalhado. :D
>>>
>>>
>>> 2009/5/29 Omar Haddad <omarhaddadm em gmail.com>
>>>
>>> Salve srs(as).,
>>>>
>>>> Tenho um script com várias sentenças como a debaixo, tentei rodar no SQL
>>>> monitor ou no Script Executive e resultou em erro.
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> CREATE PROCEDURE FU_ABS(
>>>>   WVAR DOUBLE PRECISION)
>>>>   RETURNS (
>>>>   R_ABS DOUBLE PRECISION)
>>>>   AS
>>>>   begin
>>>>   /*
>>>>   devolve o valor Absoluto de um número.
>>>>   -123,47 ou 123,47 devolve sempre 123,47
>>>>   */
>>>>   if (:wvar is not null) then begin
>>>>   if (:wvar < 0.0000) then
>>>>   r_abs = :wvar * -1;
>>>>   else
>>>>   r_abs = :wvar;
>>>>   end
>>>>
>>>> suspend;
>>>>   end
>>>>
>>>> --===================================
>>>>   CREATE PROCEDURE FU_ALLTRIM(
>>>>   WVAR VARCHAR(8192))
>>>>   RETURNS (
>>>>   R_ALLTRIM VARCHAR(8192))
>>>>   AS
>>>>   DECLARE VARIABLE T SMALLINT;
>>>>   begin
>>>>   /*
>>>>   Devolve um string sem espaços
>>>>   */
>>>>   select r_Len from Fu_Len(:wvar) into :t;
>>>>   r_alltrim = '';
>>>>
>>>> while ((:wvar is not null) and (:t > 0)) do begin
>>>>   if (substring(:wvar from 1 for 1) <> ' ') then
>>>>   r_alltrim = :r_alltrim || substring(:wvar from 1 for 1);
>>>>
>>>>  wvar = substring(:wvar from 2 for 8191);
>>>>   t = :t - 1;
>>>>   end
>>>>
>>>> suspend;
>>>>   end
>>>>
>>>>
>>>> --
>>>> Att.
>>>> Omar Marques Haddad
>>>> Analista de Sistemas Sênior
>>>> ______________________________________________
>>>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>>>> Para saber como gerenciar/excluir seu cadastro na lista, use:
>>>> http://www.firebase.com.br/fb/artigo.php?id=1107
>>>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>>>>
>>>
>>>
>>
>
>
> --
> Att.
> Omar Marques Haddad
> Analista de Sistemas Sênior
>



Mais detalhes sobre a lista de discussão lista