[firebase-br] Criar procedure generica para update

Washington Tavares washingtontavares em gmail.com
Sáb Fev 10 23:05:04 -03 2007


Walter,

Eu nunca tive problemas, mas já que mencionou seria bom eu rever com
base na sua observação.

Obrigado pela dica.

Washington Tavares

Em 10/02/07, Walter Cruz<walter.php em gmail.com> escreveu:
> só uma coisa washington: esse tipo de consulta não traz problemas de
> concorrência?
>
> []'s
> - Walter
>
> On 2/9/07, Washington Tavares <washingtontavares em gmail.com> wrote:
> > Rodrigo,
> >
> > Eu criei essa procedure para me retornar uma chave primária, veja se
> > através dela lhe dar alguma luz.
> >
> > CREATE PROCEDURE SP_GERAR_ID (
> >     tabela varchar(30),
> >     chave varchar(30))
> > returns (
> >     codigo integer)
> > as
> > declare variable xsql varchar(200);
> > begin
> >   XSQL='SELECT MAX('||:CHAVE||') FROM '||:TABELA;
> >   EXECUTE STATEMENT XSQL INTO :CODIGO;
> >   IF (:codigo>1)
> >      Then codigo=:codigo+1;
> >      Else codigo=1;
> >   SUSPEND;
> > end^
> >
> > Washington
> >
> > Em 09/02/07, Rodrigo Teodoro<rodrigo_teodoro em hotmail.com> escreveu:
> > > Boa tarde,Preciso criar uma procedure para update genérico que  busca os registros numa tabela temporária e atualiza a tabela principal.Alguém sabe uma boa forma de fazer isto? Até criei uma procedure que funciona!!! Mas.... para cada campo ela faz um select, e isto não e bom, principalmente pelo tamanho da carga que estimo vir.Uma forma que penso pra resolver é num único select trazer o nome do campo e o conteúdo, mas... como pegar o nome do campo? rs....Abaixo o que já fiz pra terem a noção da POG atual (mas funciona... rs...) !BEGIN    V_DDL_TEMP = 'SELECT COD' || UPPER(:P_TABELA)  || ' FROM TMP_' || UPPER(:P_TABELA)  || ' WHERE FLAGUPDATE=1';    V_CHAVEPRIMARIA = 0;    FOR        EXECUTE STATEMENT V_DDL_TEMP        INTO            V_CHAVEPRIMARIA    DO BEGIN        V_DDL = '';        V_DDL = 'UPDATE ' || UPPER(:P_TABELA) || ' T SET';        FOR            SELECT                TRIM(UPPER(O_CAMPO)),                TRIM(UPPER(O_INDICE))            FROM                BUSCADESCRICAO(UPPER(:P_TABELA))            INTO                V_CAMPO,                V_INDICE        DO BEGIN            IF (UPPER(V_INDICE) = 'PRIMARY KEY') THEN                V_PK = V_CAMPO;            ELSE BEGIN                V_DDL = V_DDL           ||                        ' T.'           || UPPER(V_CAMPO)   || ' ='     ||                        ' (SELECT TMP.' || UPPER(V_CAMPO)   ||                        ' FROM TMP_'    || UPPER(:P_TABELA) || ' TMP'   ||                        ' WHERE TMP.'   || UPPER(V_PK)      || ' = '    ||                        V_CHAVEPRIMARIA || ')'              || ',';            END        END        --RETIRA A ULTIMA VIRGULA        V_DDL = SUBSTRING(V_DDL FROM 1 FOR (CHAR_LENGTH(V_DDL) - 1));        V_DDL = V_DDL || ' WHERE COD' || UPPER(:P_TABELA) || ' = ' || V_CHAVEPRIMARIA;        EXECUTE STATEMENT V_DDL;        V_CHAVEPRIMARIA = 0;    ENDEND Obrigado,
> > >
> > >
> > >
> > > Rodrigo Teodoro
> > > _________________________________________________________________
> > > Descubra e experimente alguns novos serviços online no Windows Live Ideas
> > > http://ideas.live.com
> > > ______________________________________________
> > > FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> > > Para editar sua configuração na lista, use o endereço http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> > > Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> > >
> >
> >
> > --
> > Washington Tavares
> >
> > ______________________________________________
> > FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> > Para editar sua configuração na lista, use o endereço http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> > Para consultar mensagens antigas: http://firebase.com.br/pesquisa
> >
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para editar sua configuração na lista, use o endereço http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>


-- 
Washington Tavares




Mais detalhes sobre a lista de discussão lista