[firebase-br] RESULTADO FINAL

//---- Kelsie.Z.Marshall ----// kelsie.z.marshall em gmail.com
Sex Set 4 14:34:38 -03 2009


Ae pessoal só para atualizar e deixar o assunto fechado eu e o Snadro 
estavamos nos comunicando por e-mail e ele deu uma sujestão a SP QUOTEDSTR 
que "arruma" a string que eu passar para alterar no DB duplicando o char ', 
ficou azeitado ai vai o resultado para compartilhar com todos, testado e 
funcionando.


-----------------------------------------
SET TERM ^ ;

CREATE OR ALTER PROCEDURE ANULADOR_DE_CAMPO (
    string_a_anular varchar(254),
    campo varchar(254),
    table_name varchar(254))
as
declare variable texto_tratado varchar(254);
begin
  SELECT RESULTADO FROM QUOTEDSTR(:STRING_A_ANULAR) INTO :TEXTO_TRATADO;
  EXECUTE STATEMENT 'UPDATE ' || TABLE_NAME || ' SET ' || CAMPO || '=NULL 
WHERE ' || CAMPO || ' = ' || TEXTO_TRATADO ;
end^

SET TERM ; ^

GRANT EXECUTE ON PROCEDURE QUOTEDSTR TO PROCEDURE ANULADOR_DE_CAMPO;

GRANT EXECUTE ON PROCEDURE ANULADOR_DE_CAMPO TO SYSDBA;


-----------------------------------------


SET TERM ^ ;

CREATE OR ALTER PROCEDURE QUOTEDSTR (
    texto varchar(1024))
returns (
    resultado varchar(2048))
as
declare variable indice integer;
begin
  -- Não informou um texto?
  IF (TEXTO IS NULL) THEN
    -- Também retorna NULL.
    RESULTADO = NULL;
  ELSE
  BEGIN
    -- Inicializa o resultado.
    RESULTADO = TEXTO;
    -- Inicializa o índice do laco.
    INDICE = CHAR_LENGTH(RESULTADO);
    -- Laço de conversão.
    WHILE (INDICE > 0) DO
    BEGIN
      -- O caracter atual é uma aspa simples?
      IF (SUBSTRING(RESULTADO FROM INDICE FOR 1) = '''') THEN
      BEGIN
        -- Está no início do texto?
        IF (INDICE = 1) THEN
          -- Insere mais uma aspa simples na posição atual.
          RESULTADO = '''' || RESULTADO;
        ELSE
          -- Está no fim do texto?
          IF (INDICE = CHAR_LENGTH(RESULTADO)) THEN
            -- Insere mais uma aspa simples na posição atual.
            RESULTADO = RESULTADO || '''';
          ELSE
            -- Insere mais uma aspa simples na posição atual.
            RESULTADO = SUBSTRING(RESULTADO FROM 1 FOR INDICE) || '''' ||
                        SUBSTRING(RESULTADO FROM (INDICE + 1) FOR 
(CHAR_LENGTH(RESULTADO) - INDICE));
      END -- IF
      -- Avança mais uma posição para o início do texto.
      INDICE = INDICE - 1;
    END -- WHILE
    -- Acrescenta mais uma aspa simples no início e no final do texto.
    RESULTADO = '''' || RESULTADO || '''';
  END -- ELSE
  -- Retorna o resultado.
  SUSPEND;
end^

SET TERM ; ^

GRANT EXECUTE ON PROCEDURE QUOTEDSTR TO SYSDBA;

Um abraço e Sandro muito obrigado denovo.

Kelsie 






Mais detalhes sobre a lista de discussão lista