[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