[firebase-br] PROCEDURE Nome da Tabela como passagem deparametro.

//---- Kelsie.Z.Marshall ----// kelsie.z.marshall em gmail.com
Qui Set 3 16:17:59 -03 2009


Grande Sandro

Matador, valeu a solução.

Só pra facilitar a solução final ficou assim.

Ou seja uma procedure onde eu passo 3 parâmetros Nome da tablea o campo da 
tabela e um string que desejo alterar.

Sensasional vai me ajudar muito.

No momento estou remando mas o firebird tem se mostrado muito bom nas 
soluções.

Abraço e Obrigado

Kelsie


-------------------- solução final ----------------------
SET TERM ^ ;

CREATE OR ALTER PROCEDURE TESTE (
    string_a_anular varchar(254),
    campo varchar(254),
    table_name varchar(254))
as
declare variable resultado varchar(10000);
begin
  for execute statement
  'select ' || CAMPO  || ' from ' || TABLE_NAME into :RESULTADO
  do
  begin
     EXECUTE STATEMENT 'UPDATE ' || TABLE_NAME || ' SET ' || CAMPO || '=NULL 
WHERE ' || CAMPO || ' = ''' || STRING_A_ANULAR || '''';
  end
  suspend;
end^

SET TERM ; ^

GRANT EXECUTE ON PROCEDURE TESTE TO SYSDBA;









------------------------------
"Sandro Souza" <escovadordebits em gmail.com> 
wrote in message 
news:64d5939a0909031030v7df02220m2a502f3b73182762 em mail.gmail.com...
Bom dia/tarde Kelsie.

Grande Kelsie, refaça apenas aquela parte do UPDATE, pois o FOR..DO serve
apenas para o SELECT, além de ter alguns erros de sintaxe nesse UPDATE, ou
seja, onde era:

FOR EXECUTE STATEMENT 'UPDATE ' || TABLE_NAME || ' SET ' || TABLE_NAME ||
'.' || T_CAMPO || ' =NULL' || 'WHERE ' || TABLE_NAME || '.' || T_CAMPO || '=
:' || T_CAMPO || ';'
DO

Tente:

EXECUTE STATEMENT 'UPDATE ' || TABLE_NAME || ' SET ' || CAMPO || '=NULL
WHERE ' || CAMPO || ' = ''' || T_CAMPO || '''';

E nesse caso específico dessa sua stored procedure, eu ainda cortaria fora
todo o laço e executaria apenas o seguinte:

EXECUTE STATEMENT 'UPDATE ' || TABLE_NAME || ' SET ' || CAMPO || '=NULL
WHERE ' || CAMPO || ' = ''' || TEXTO || '''';

Onde TEXTO seria mais um parâmetro contendo o texto a ser pesquisado e
substituido por NULL.

Espero ter ajudado mais que atrapalhado. :D

2009/9/2 //---- Kelsie.Z.Marshall ----// 
<kelsie.z.marshall em gmail.com>

> Até consegui algo em uma consulta simples
>
> -----------------------
> declare variable cmds varchar(249);
> begin
>
> cmds = 'select * from ' || TABLE_NAME;
> for execute statement :cmds into :var1 do
>   suspend;
> end
> --------------------------
>
>
> Mas complica quando quero fazer na procedure...não consigo colocar o 
> update
>
> FIXA
>
> DECLARE VARIABLE T_CAMPO INTEGER;
>
> begin
>  for
>   select TAB.NUMERO
>   from TAB
>   into :T_CAMPO
>  do
>  begin
>   if( T_CAMPO = 'N.I.' ) then
>   begin
>     update TAB
>     set  TAB.NUMERO = NULL
>     where TAB.NUMERO = :T_CAMPO;
>   end
>  end
> end
>
> --------------------------
>
>
>
>
>
>
>
>
> GENERICA com psaagem de parametro no nome da tabela
>
>
>
>
> Este código abaixo não funciona
> DECLARE VARIABLE T_CAMPO varchar(1000);
> begin
>
> for execute statement
> 'select ' || CAMPO  || ' from ' || TABLE_NAME into :T_CAMPO
> do
> begin
>    if( T_CAMPO = 'N.I.' ) then
>    begin
>      for execute statement
>       'update ' || TABLE_NAME || ' set ' || TABLE_NAME || '.' || T_CAMPO 
> ||
> ' =NULL' || 'WHERE ' || TABLE_NAME || '.' || T_CAMPO || '= :' || T_CAMPO 
> ||
> ';'
>      do
>    end
> end
> suspend;
>
> end
>
>
> --------------------------
>
>
>
>
>
> "//---- Kelsie.Z.Marshall ----//" 
> <kelsie.z.marshall em gmail.com> wrote in
> message news:h7mmib$mrg$1 em ger.gmane.org...
>
> Já li no language reference e em vários exemplos  na internet tudo pareçe
> correto mas está dando erro.
>
> Quero fazer uma simples procedure onde passo o nome da tabela como
> parametro.
>
> SET TERM  ^^ ;
> CREATE PROCEDURE TESTE (
>  TABLE_NAME VarChar(254))
> AS
> begin
>
>  execute STATEMENT 'SELECT * FROM ' || TABLE_NAME ;
>
> end
> ^^
> SET TERM ;  ^^
>
>
>
>
>
>
>
> ISC ERROR CODE:335544569
>
> ISC ERROR MESSAGE:
> Dynamic SQL Error
> SQL error code = -902
> Wrong request type in EXECUTE STATEMENT 'SELECT * FROM A_TAB1'
> At procedure 'TESTE' line: 5, col: 3
>
>
>
> ______________________________________________
> 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
>
>
>
> ______________________________________________
> 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
>
______________________________________________
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






Mais detalhes sobre a lista de discussão lista