jak zrobić pętlę w sql?

jak zrobić pętlę w sql?
TU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 66
0

Witam
Mam taką pętlę w programie, muszą ją całą przelecieć i coś tam obliczyć pozmieniać, zależnie od warunków. Jak ją przekształcić na kod sql, bo chciałbym to umieścić w procedurze bazy a nie w kodzie programu. Napisałem tu kod w skrócie.
Nie wiem np. składnia dla eof i składnia next.

Kopiuj
DB->Query1->Add("SELECT * FROM ZEST");
  
   while (!DB->Query1->Eof) {
      
       DB->Query2->SQL->Add("UPDATE ZEST SET RENT=:RENT WHERE IDIK=:IDIK")

   DB->Query1->Next();
   }
Patryk27
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 13042
1

UPDATE ... SET ... WHERE idik IN (SELECT ...) ew. UPDATE ... JOIN.

hauleth
  • Rejestracja: dni
  • Ostatnio: dni
2

No nie rozpisałeś się za bardzo co rozumiesz przez "coś obliczyć" ani co jaka składnia SQL, ale wyglądać będzie to mniej więcej tak.

Kopiuj
UPDATE zest new SET rent = <new rent> FROM zest old WHERE new.id = old.id
TU
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 66
0

Wielkie dzięki za podpowiedź, ale zagubiłem się. Jest tabela i muszę updetować jedno pole w zależności od warunku.

Kopiuj
    CREATE PROCEDURE LICZ_RENTOWNOSC (
    IDIK Integer,
    RENT Numeric(7,2))
AS
BEGIN
UPDATE ZEST SET RENT=:RENT WHERE IDIK IN (SELECT IDIK,NETTOF,NETTOK FROM ZEST INTO IDIK,NETTOF,NETTOK);
i jeszcze to jest potrzebne w tej pętli, tylko nie mam pojęcia jak to tam wcisnąć
if (NETTOF>0 && NETTOK>0) then
 RENT=NETTF/NETTOK;
 else 
 RENT=0;
END^
Marcin.Miga
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 2794
5
Kopiuj
UPDATE zest SET rent=CASE WHEN nettof>0 AND nettok>0 THEN 1.*nettf/nettok ELSE 0 END

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.