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

Sandro Souza escovadordebits em gmail.com
Qui Set 3 14:30:19 -03 2009


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
>



Mais detalhes sobre a lista de discussão lista