Announcement

Collapse
No announcement yet.

pSQL Tip Bitte :(

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

  • pSQL Tip Bitte :(

    Hi,

    habe folgenden Annonymen Block gebastellt. Muss dazu sagen, das ich PLSQL verwendet habe. In der Hoffnung, das das ähnlich ist. Ich befürchte, das da noch mehr Fehler drin sind. bin für jeden Tip Dankbar.

    DECLARE
    P_ID INTEGER = 1433;
    V_KDNR INTEGER = 1599;
    P_PFAND DECIMAL(15,2) = 5,00;
    V_KUNNR INTEGER = 7;
    counter INTEGER = 1600;
    BEGIN

    LOOP
    P_ID := P_ID +1;
    V_KDNR := V_KDNR +1;

    INSERT INTO KARTE (ID, ID_KUNDE, KARTENTYP_ID, KARTENNUMMER, FOLGENUMMER, KFZ, TARIFGRP_ID, ZEITGRP_ID, BERECHTIGUNG, DURCHFAHRT, BEGINN, ENDE, FLAG, STATUS, EINFAHRTEN, AUSFAHRTEN, VORGAENGE, PARKZEIT, GUTHABEN, BETRAG, PFAND, BELEGGRUPPE, EIN, ZWI, BEZ, PARKPREIS, INTGR)
    VALUES (P_ID, 1, V_KUNNR , V_KDNR , V_KDNR , null, 0, 255, 0, 65535, '2010-09-02 00:00:00', '2011-06-15 00:00:00', 3, 15, 0, 0, 0, 0, 0, 0, P_PFAND, 0, '2010-08-26 16:23:28', NULL, NULL, NULL, 0);

    EXIT WHEN P_ID = counter;
    END LOOP;
    END;


    Fehler in der IBOCONSOLE:

    ISC ERROR CODE:335544569

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

    Statement: DECLARE
    P_ID INTEGER = 1433

  • #2
    Ach ja, zum Verständnis

    Ich möchte eine Schleife, die mir z.b. 1500 Datensätze einfügt. Im moment, bastel ich imir im Ultraedit 1500 INSERT ZEILEN und das 3-4x am Tag. das Nervt ungemein

    Comment


    • #3
      [highlight=SQL"]
      ...
      AS
      DECLARE VARIABLE P_ID INTEGER = 1433;
      DECLARE VARIABLE V_KDNR INTEGER = 1599;
      DECLARE VARIABLE P_PFAND DECIMAL(15,2) = 5,00;
      DECLARE VARIABLE V_KUNNR INTEGER = 7;
      DECLARE VARIABLE counter INTEGER = 1600;
      BEGIN

      WHILE ( P_ID <> counter) do
      P_ID := P_ID +1;
      V_KDNR := V_KDNR +1;

      INSERT INTO KARTE (ID, ID_KUNDE, KARTENTYP_ID, KARTENNUMMER,
      FOLGENUMMER, KFZ, TARIFGRP_ID, ZEITGRP_ID, BERECHTIGUNG,
      DURCHFAHRT, BEGINN, ENDE, FLAG, STATUS, EINFAHRTEN,
      AUSFAHRTEN,
      VORGAENGE, PARKZEIT, GUTHABEN, BETRAG, PFAND, BELEGGRUPPE,
      EIN, ZWI, BEZ, PARKPREIS, INTGR)
      VALUES (P_ID, 1, V_KUNNR , V_KDNR , V_KDNR , null, 0, 255, 0, 65535,
      '2010-09-02 00:00:00', '2011-06-15 00:00:00', 3, 15, 0, 0, 0, 0, 0, 0,
      P_PFAND, 0, '2010-08-26 16:23:28', NULL, NULL, NULL, 0);
      END;
      [/highlight]
      Getippt aber nicht getestet

      Comment


      • #4
        Originally posted by Markus Kinzler View Post
        [highlight=SQL"]
        ...
        AS
        DECLARE VARIABLE P_ID INTEGER = 1433;
        DECLARE VARIABLE V_KDNR INTEGER = 1599;
        DECLARE VARIABLE P_PFAND DECIMAL(15,2) = 5,00;
        DECLARE VARIABLE V_KUNNR INTEGER = 7;
        DECLARE VARIABLE counter INTEGER = 1600;
        BEGIN

        WHILE ( P_ID <> counter) do
        P_ID := P_ID +1;
        V_KDNR := V_KDNR +1;

        INSERT INTO KARTE (ID, ID_KUNDE, KARTENTYP_ID, KARTENNUMMER,
        FOLGENUMMER, KFZ, TARIFGRP_ID, ZEITGRP_ID, BERECHTIGUNG,
        DURCHFAHRT, BEGINN, ENDE, FLAG, STATUS, EINFAHRTEN,
        AUSFAHRTEN,
        VORGAENGE, PARKZEIT, GUTHABEN, BETRAG, PFAND, BELEGGRUPPE,
        EIN, ZWI, BEZ, PARKPREIS, INTGR)
        VALUES (P_ID, 1, V_KUNNR , V_KDNR , V_KDNR , null, 0, 255, 0, 65535,
        '2010-09-02 00:00:00', '2011-06-15 00:00:00', 3, 15, 0, 0, 0, 0, 0, 0,
        P_PFAND, 0, '2010-08-26 16:23:28', NULL, NULL, NULL, 0);
        END;
        [/highlight]
        Getippt aber nicht getestet
        also declare durch AS ersetzt? (ich vergkeich noch den rest danke dir für die schnelle Antwort)

        Comment


        • #5
          Nein, AS trennt den Kopf der SP/des execution Blocks von seinem Körper

          Create or alter procedure <Proc> ( <Inputparameter>) returns ( <Ausgabeparameter> as ...

          Comment


          • #6
            Originally posted by Markus Kinzler View Post
            Nein, AS trennt den Kopf der SP/des execution Blocks von seinem Körper

            Create or alter procedure <Proc> ( <Inputparameter>) returns ( <Ausgabeparameter> as ...
            also gibt es keinen wirklich Annonymen Block in Firebird?

            Comment


            • #7
              Wenn du einen PL/SQL Block innerhalb einer Abfrage meinst doch
              Ein solcher wird aber genauso wie eine SP deklariert/aufgerufen:

              [highlight=sql]execute block ( <Inputparameter>) returns (<Outputparameter>) as ...
              [/highlight]

              Comment


              • #8
                ähhm, kann es sein, das das ende der schleife nicht definiert ist?

                aber "end loop" findet er nicht Gut, ist ihm zu 'oracle'erisch. was muss ich denn da rein packen? der mach mir keine n Inserts sondern nur eins mit dem höchsten wert. hier nochmal der Block


                CREATE PROCEDURE TEST_KARTE
                AS
                DECLARE VARIABLE P_ID INTEGER;

                DECLARE VARIABLE V_KDNR INTEGER;

                DECLARE VARIABLE P_PFAND DECIMAL(15,2);

                DECLARE VARIABLE V_KUNNR INTEGER;

                DECLARE VARIABLE counter INTEGER;
                BEGIN
                P_ID = 1434;
                V_KDNR = 1599;
                P_PFAND = 5.00;
                V_KUNNR = 7;
                counter = 1600;
                WHILE ( :P_ID <> counter) do

                P_ID = P_ID + 1;

                V_KDNR = V_KDNR + 1;

                INSERT INTO KARTE (ID, ID_KUNDE, KARTENTYP_ID, KARTENNUMMER,
                FOLGENUMMER, KFZ, TARIFGRP_ID, ZEITGRP_ID, BERECHTIGUNG,
                DURCHFAHRT, BEGINN, ENDE, FLAG, STATUS, EINFAHRTEN,
                AUSFAHRTEN,
                VORGAENGE, PARKZEIT, GUTHABEN, BETRAG, PFAND, BELEGGRUPPE,
                EIN, ZWI, BEZ, PARKPREIS, INTGR)

                VALUES (:P_ID, :V_KUNNR, 3 , :V_KDNR , :V_KDNR , null, 0, 255, 0, 65535,
                '2010-09-02 00:00:00', '2011-06-15 00:00:00', 3, 15, 0, 0, 0, 0, 0, 0,
                :P_PFAND, 0, '2010-08-26 16:23:28', NULL, NULL, NULL, 0);
                END;

                Comment


                • #9
                  Ja. Habe ein END vergessen

                  [highlight=SQL]
                  EXECUTE BLOCK
                  AS
                  DECLARE VARIABLE P_ID INTEGER = 1433;
                  DECLARE VARIABLE V_KDNR INTEGER = 1599;
                  DECLARE VARIABLE P_PFAND DECIMAL(15,2) = 5,00;
                  DECLARE VARIABLE V_KUNNR INTEGER = 7;
                  DECLARE VARIABLE counter INTEGER = 1600;
                  BEGIN

                  WHILE ( P_ID <> counter) do
                  BEGIN
                  P_ID := P_ID +1;
                  V_KDNR := V_KDNR +1;

                  INSERT INTO KARTE (ID, ID_KUNDE, KARTENTYP_ID, KARTENNUMMER,
                  FOLGENUMMER, KFZ, TARIFGRP_ID, ZEITGRP_ID, BERECHTIGUNG,
                  DURCHFAHRT, BEGINN, ENDE, FLAG, STATUS, EINFAHRTEN,
                  AUSFAHRTEN,
                  VORGAENGE, PARKZEIT, GUTHABEN, BETRAG, PFAND, BELEGGRUPPE,
                  EIN, ZWI, BEZ, PARKPREIS, INTGR)
                  VALUES (P_ID, 1, V_KUNNR , V_KDNR , V_KDNR , null, 0, 255, 0, 65535,
                  '2010-09-02 00:00:00', '2011-06-15 00:00:00', 3, 15, 0, 0, 0, 0, 0, 0,
                  P_PFAND, 0, '2010-08-26 16:23:28', NULL, NULL, NULL, 0);
                  END;
                  END;
                  [/highlight]

                  Comment


                  • #10
                    Ein Teil JUHU. nu läufts, vielen vielen Dank!!

                    nu kommt das aber. im SQL Manager läuft das ohne mucken.

                    in der IBO Console bekomm ich das nicht mal compiliert. Und nur die ist bei den Kunden drauf. ich könnt heulen.

                    der sagt,

                    ISC ERROR CODE:335544569

                    ISC ERROR MESSAGE:
                    Dynamic SQL Error
                    SQL error code = -104
                    Unexpected end of command - line 3, column 31

                    Statement: CREATE or alter PROCEDURE TEST_KARTE
                    as
                    DECLARE VARIABLE P_ID INTEGER

                    is doch zum Schreien oder?

                    Comment


                    • #11
                      Das könnte am Terminierungssymbol liegen:


                      [highlight=SQL]set term !! ;

                      EXECUTE Block ...
                      !!

                      set term ; !!

                      [/highlight]

                      Comment

                      Working...
                      X