[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