Announcement

Collapse
No announcement yet.

Generator auf bestimmten Wert setzen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Generator auf bestimmten Wert setzen

    Hallo allesamt,

    ich habe folgende Probleme,

    1: Firebird Neuling

    2: ich muss einen Generator Automatisiert neu setzen. Beispiel:

    set Generator <GEN_NAME> to (select max(id) from <TABLE_NAME>);

    Ich weis, das macht man nicht. aber ich brauch es trozdem und Brech mir die Ohren Dabei. Hatte überlegt das eventuell mit ner Bind Varaiablen zu machen. Weiss aber nicht mehr wie das geht. Mein PL/SQL Kurs ist 4 Jahre her.

    Vielen Dank im Vorraus

  • #2
    Hallo,

    der TO Abschnitt erwartet eine Konstante und keinen Ausdruck. In PSQL (Stored Procedure oder via EXECUTE BLOCK) könntest du dir das MAX in einer Variable merken und dann das SET GENERATOR via EXECUTE STATEMENT ... ausführen.

    lg,
    Thomas
    Thomas Steinmaurer

    Firebird Foundation Committee Member
    Upscene Productions - Database Tools for Developers
    Mein Blog

    Comment


    • #3
      Ich würde hier aber eher dafür sorgen, dass alle Werte per Generator gesetzt werden ( z.B. keine NULL Prüfung im Trigger)

      Comment


      • #4
        Hallo,

        ja natürlich.

        Vielleicht braucht er ja diese Sache nur sehr sporadisch um irgendwelche Generatorwerte "nachzuziehen".

        lg,
        Thomas
        Thomas Steinmaurer

        Firebird Foundation Committee Member
        Upscene Productions - Database Tools for Developers
        Mein Blog

        Comment


        • #5
          Automatisiert hört sich eher nach regelmässig an

          Comment


          • #6
            Originally posted by Thomas Steinmaurer View Post
            Hallo,

            ja natürlich.

            Vielleicht braucht er ja diese Sache nur sehr sporadisch um irgendwelche Generatorwerte "nachzuziehen".

            lg,
            Thomas
            Jap, genau dafür

            hat jemand nen codeschnippsel für mich? ich tu mich da im moment etwas Schwer mit.

            Comment


            • #7
              PSQL (Z.B. als SP):
              [highlight=Sql]
              select max(id)+1 from :Table into :maxid;

              execute block 'set Generator :name to ' + :maxid + ',';

              [/highlight]

              Comment


              • #8
                Originally posted by Markus Kinzler View Post
                PSQL (Z.B. als SP):
                [highlight=Sql]
                select max(id)+1 from :Table into :maxid;

                execute block 'set Generator :name to ' + :maxid + ',';

                [/highlight]
                klasse, danke dir

                Comment


                • #9
                  Fehler:

                  ISC ERROR CODE:335544569

                  ISC ERROR MESSAGE:
                  Dynamic SQL Error
                  SQL error code = -104
                  Token unknown - line 1, column 29
                  INTO

                  Statement: SELECT max(id)+1 FROM karte INTO :maxid


                  Liegt das Eventuell an der IBOConsole?

                  Comment


                  • #10
                    Ja, ist ja wie gesagt ein PSQL. Geht so nur innerhalb einer SP oder einem code block

                    Comment


                    • #11
                      gibt es eine Referenz für dir PL segmente von Firebird? sowas wie firebird prozeduren für Dummies?

                      Comment


                      • #12
                        ahhh es heist psql bei firebird

                        Comment


                        • #13
                          http://www.ibphoenix.com/main.nfs?a=...e=ibp_document
                          http://www.firebirdsql.org/index.php?op=doc

                          Comment


                          • #14
                            würde folgendes gehen?

                            create procedure set_gen_karte
                            DECLARE VARIABLE VAR_ID INTEGER;
                            begin
                            SELECT max(ID)+1 FROM karte
                            INTO :VAR_ID;
                            set generator GEN_KARTE to :VAR_ID
                            end

                            wie compiliere ich das in der IBO Console?

                            Comment


                            • #15
                              Hallo,

                              nein.

                              1. Wenn du etwas mehr machen willst, dann hol dir einen gescheiten Ersatz zur IBOConsole. So zum Beispiel die kostenlose Lite Variante von Database Workbench (http://www.upscene.com/downloads.php#dbwlite) oder von IBExpert etc.

                              2. Du kannst in PSQL kein DDL (SET GENERATOR ist von dieser Kategorie) direkt ausführen, sondern musst dazu EXECUTE STATEMENT verwenden.

                              Beispiel einer Stored Procedure könnte sein (in meiner DB ausführbar, d.h. du musst die Namen ändern):

                              [highlight=sql]
                              SET TERM ^^ ;
                              CREATE PROCEDURE P_SET_GENERATOR returns (
                              RGENVALUE BigInt)
                              AS
                              begin
                              select max(t3_id) from t3 into :RGENVALUE;
                              execute statement 'set generator t3_gen to ' || rgenvalue;
                              end ^^
                              SET TERM ; ^^
                              [/highlight]

                              MAX(...) + 1 ist eigentlich nicht notwendig, da der Generatorwert auf den höchsten ID-Wert gesetzt werden soll, da ja ein GEN_ID(..., 1) den nächsten liefert.

                              lg,
                              Thomas
                              Thomas Steinmaurer

                              Firebird Foundation Committee Member
                              Upscene Productions - Database Tools for Developers
                              Mein Blog

                              Comment

                              Working...
                              X