[firebase-br] Criar procedure generica para update
Washington Tavares
washingtontavares em gmail.com
Sex Fev 9 14:51:19 -03 2007
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
Mais detalhes sobre a lista de discussão lista