[firebase-br] Criação de Procedure Recursiva, equivalencia a Row_Number() e Updates Complexos

Marcos Thomaz (Prog_CPD) thomazs em ufac.br
Qua Ago 31 14:13:42 -03 2005


Antes de tudo, desculpem o post ser tão longo, mas não encontrei forma
melhor de me expressar, que ficasse clara (pelo menos ao meu ver).

Dúvida 1 - Criação de Procedure Recursiva
------------------------------------------------
Pessoal, alguém saberia me dizer se eu poderia criar uma procedure que faça
referência a ela mesma??
Tipo assim:

CREATE PROCEDURE MVALOR( N INTEGER, MAXIMO INTEGER)
RETURNS ( VAL1 INTEGER)
AS
BEGIN
  VAL1 = N+1;
  IF (VAL1 <MAXIMO) THEN
    SELECT VAL1 FROM MVALOR( :N + 1 , :MAXIMO ) INTO VAL1
  SUSPEND;
END




Dúvida 2 - Equivalencia a Row_Number()
-------------------------------------------

Pessoal, no DB2, tenho a função Row_Number, que me traz o número da linha no
select, mediante a ordem natural do select, ou uma ordem a minha escolha.
Por exemplo:
Na tabela tenho os valores
Nome    Valor
José        100,00
Antonio   200,00

Então se eu colocasse:
Select Row_Number() Over() as Row_Number, Nome, Valor From Tabela    seria
retornado:
1 José       100,00
2 Antonio 200,00

Select Row_Number() Over(Order By Nome) as Row_Number, Nome, Valor From
Tabela    seria retornado:
2 José       100,00
1 Antonio 200,00

Existe algo equivalente no Firebird, ou alguma forma de ter esse número da
linha??



Dúvida 3 - Updates Complexos
----------------------------------------

No DB2 temos uma instrução do update do tipo:
UPDATE TABELA SET (CAMPO1,CAMPO2) = (SELECT CAMPOT1, CAMPOT2 FROM TABELA2
WHERE CAMPOT1> 50 )

Essa instrução atualiza o campo 1 e campo 2 da tabela, pegando
automaticamente os valores da tabela 2.

Ouvi dizer também a respeito da Utilização de Joins em Updates e Deletes
alguém poderia me informar como isso funciona????






Mais detalhes sobre a lista de discussão lista