Autor Téma: Nastavení hodnoty generátoru v uložené proceduře  (Přečteno 471 krát)

Offline Jirka

  • Hrdina
  • ****
  • Příspěvků: 496
  • Karma: 9
    • Verze Delphi: XE2
Ahoj.
Je nějaký způsob jak nastavit stávající generátor na 0  přímo v stored procedure ?
SET GENERATOR GeneratorName TO 0

Offline Stanislav Hruška

  • Padawan
  • ******
  • Příspěvků: 7384
  • Karma: 44
    • Verze Delphi: W11 + D11.3.1
Re:Nastavení hodnoty generátoru v uložené proceduře
« Odpověď #1 kdy: 09-05-2023, 12:19:03 »
Nie je to odpoveď na Tvoju otázku, no možno Ti to pomôže. Ja totiž SP nepoužívam.
Kód: [Vybrat]
class procedure TSQLTexts.ResetGenerator(const AGeneratorName: string);
begin
  var GeneratorName := Trim(AGeneratorName);
  Assert(GeneratorName <> '', '  ResetGenerator: GeneratorName is empty  ');
  var FQry := TFDFunction.NewQry;
  FQry.Name := 'ResetGenerator';
  FQry.SQL.Text := 'SELECT MAX(UNITS.IDUNITS), GEN_ID(' + AGeneratorName + ', -(GEN_ID(' + AGeneratorName + ', 0)))'+
  ' FROM UNITS';
  try
    TFDFunction.QryOpen(FQry);
  finally
    TFDFunction.FreeAndNilQry(FQry);
  end;
end;
Mám na mysli spôsob nastavenia samotnej hodnoty. Je to z internetu a funguje to.
Win11 64b, Delphi 11.3.1, FireBird 4.01
Expert na kladenie nejasne formulovaných otázok.

Offline Palino

  • Nováček
  • *
  • Příspěvků: 17
  • Karma: 0
    • Verze Delphi: 7, XE, Seattle
Re:Nastavení hodnoty generátoru v uložené proceduře
« Odpověď #2 kdy: 09-05-2023, 13:19:12 »
Toto mne funguje.

create or alter procedure AAA
as
declare variable SQL varchar(500);
begin
  sql = 'ALTER SEQUENCE GEN_AA_ID RESTART WITH 279580';

  execute statement :sql;

end^

Offline vandrovnik

  • Padawan
  • ******
  • Příspěvků: 1567
  • Karma: 52
    • Verze Delphi: 11.3
Re:Nastavení hodnoty generátoru v uložené proceduře
« Odpověď #3 kdy: 09-05-2023, 15:14:48 »
GEN_ID má jako druhý parametr, o kolik se má hodnota změnit, to se dá využít i pro nastavení nové hodnoty, když si nejprve zjistím stávající.

Offline Jirka

  • Hrdina
  • ****
  • Příspěvků: 496
  • Karma: 9
    • Verze Delphi: XE2
Re:Nastavení hodnoty generátoru v uložené proceduře
« Odpověď #4 kdy: 09-05-2023, 15:59:44 »
Toto mne funguje.
  sql = 'ALTER SEQUENCE GEN_AA_ID RESTART WITH 279580';
  execute statement :sql;

Firebird 2.5
Funguje i u mne. Díky.

Offline Jirka

  • Hrdina
  • ****
  • Příspěvků: 496
  • Karma: 9
    • Verze Delphi: XE2
Re:Nastavení hodnoty generátoru v uložené proceduře
« Odpověď #5 kdy: 09-05-2023, 16:03:13 »
GEN_ID má jako druhý parametr, o kolik se má hodnota změnit, to se dá využít i pro nastavení nové hodnoty, když si nejprve zjistím stávající.

I tak se dá, pokud člověk nemůže (nechce)  používat execute statement

Offline vandrovnik

  • Padawan
  • ******
  • Příspěvků: 1567
  • Karma: 52
    • Verze Delphi: 11.3
Re:Nastavení hodnoty generátoru v uložené proceduře
« Odpověď #6 kdy: 09-05-2023, 16:11:57 »
I tak se dá, pokud člověk nemůže (nechce)  používat execute statement

Já se tomu EXECUTE STATEMENT snažím vyhýbat, protože jsem radši, když vidím vzájemné závislosti databázových objektů.

Offline Palino

  • Nováček
  • *
  • Příspěvků: 17
  • Karma: 0
    • Verze Delphi: 7, XE, Seattle
Re:Nastavení hodnoty generátoru v uložené proceduře
« Odpověď #7 kdy: 09-05-2023, 17:42:10 »
select gen_id (GEN_AA_ID, -1*gen_id (GEN_AA_ID, 0)) from rdb$database