Databáze > Firebird a Interbase

Udate tabuľky

(1/3) > >>

Stanislav Hruška:
Chcem jednorazovo prečíslovať byty. Jedná sa o 4 500 záznamov. Rád by som to urobil v DB manažéri, ale neviem ako.
Viem to urobiť v D.

* Spustím "SELECT"
* v cykle prechádzam DataSet
* postupne vykonám UPDATE
--- Kód: ---UPDATE FLATS SET FLATNUMBER = NEWNUMBER Zo SELECT
.
SELECT ... , ... ,
  CASE
    WHEN SUBSTRING(E.TITLE FROM 1 FOR 3) = 'V02' THEN F.FLATNUMBER + 75
    WHEN SUBSTRING(E.TITLE FROM 1 FOR 3) = 'V03' THEN F.FLATNUMBER + 150
    WHEN SUBSTRING(E.TITLE FROM 1 FOR 3) = 'V04' THEN F.FLATNUMBER + 225
    ELSE F.FLATNUMBER
  END AS NEWNUMBER
FROM FLATS F
  INNER JOIN ENTRIES E ON F.FKENTRY = E.IDENTRIES
  INNER JOIN FOCS FO ON E.FKFOCS = FO.IDFOCS
--- Konec kódu ---
Ak to nepôjde ináč, tak si to jedno tlačidlo hodím na hlavný formulár.

vandrovnik:
V SQL se na to hodí EXECUTE BLOCK
https://firebirdsql.org/file/documentation/chunk/en/refdocs/fblangref40/fblangref40-dml-execblock.html

Jan Fiala:
Muzes primo v Update pouzit CASE a udelat to najednou bez prochazeni.

--- Kód: ---UPDATE F SET FLATNUMBER =
  CASE
    WHEN SUBSTRING(E.TITLE FROM 1 FOR 3) = 'V02' THEN F.FLATNUMBER + 75
    WHEN SUBSTRING(E.TITLE FROM 1 FOR 3) = 'V03' THEN F.FLATNUMBER + 150
    WHEN SUBSTRING(E.TITLE FROM 1 FOR 3) = 'V04' THEN F.FLATNUMBER + 225
    ELSE F.FLATNUMBER
  END
FROM FLATS F
  INNER JOIN ENTRIES E ON F.FKENTRY = E.IDENTRIES
  INNER JOIN FOCS FO ON E.FKFOCS = FO.IDFOCS

--- Konec kódu ---

vandrovnik:
A tuhle syntaxi Firebird umí?

Stanislav Hruška:

--- Citace: vandrovnik  19-12-2022, 08:54:23 ---A tuhle syntaxi Firebird umí?

--- Konce citace ---
Ja som presvedčený, že nie. Preto som to ani neskúsil. V minulosti som skúsil niečo jednoduchšie a nepochodil som.
Tak som to vyskúšal. Padne to na FROM.

Navigace

[0] Seznam témat

[#] Další strana

Přejít na plnou verzi