[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