[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