Announcement

Collapse
No announcement yet.

SELECT- Abfrage mit StoredProc ?

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

  • SELECT- Abfrage mit StoredProc ?

    Hallo,<BR><BR>
    ich wollte eine einfache SELECT- Abfrage mit StoredProc unter Firebird 1.5 realisieren, kriege aber nur Fehlermeldungen.
    Kann mir da jemand helfen? Mein Qeuelltext sieht so aus:<B><BR><BR>
    CREATE PROCEDURE P_GEHALT<BR>
    RETURNS (VNAME VarChar(20))<BR>
    AS<BR>
    BEGIN<BR>
    FOR EXECUTE STATEMENT<BR>
    'SELECT ' || VORNAME || ' FROM ' || TESTADR INTO :VNAME<BR>
    DO<BR>
    END<BR><BR></B>
    Die Abfrage sollte <BR>
    <B> select vorname from testadr</B> bewirken.
    <BR><BR>Dank im Vorauß<BR>Mfg Dennis

  • #2
    Hallo Dennis,<br><br>
    Du brauchst dazu das neue EXECUTE STATEMENT nicht, sondern es reicht ein FOR SELECT ... DO.
    <pre>
    CREATE PROCEDURE P_GEHALT RETURNS (VNAME VarChar(20))
    AS
    BEGIN
    FOR SELECT VORNAME FROM TESTADR INTO :VNAME DO BEGIN
    SUSPEND;
    END
    END
    </pre>
    Thoma
    Thomas Steinmaurer

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

    Comment


    • #3
      Und wenn Du es unbedingt mit EXECUTE STATEMENT (Achtung! Langsamer und das enthaltene SQL kann NICHT validiert werden, d.h. es kann zur Laufzeit einen Fehler auslösen) machen möchtest (wobei EXECUTE STAEMENT NUR eingesetzt werden soll, wenn es keine praktische Alternative (die Dir Thomas aber schon aufgezeigt hat) gibt, dann muss es heißen:

      <PRE>
      CREATE PROCEDURE P_GEHALT
      RETURNS (VNAME VarChar(20))
      AS
      BEGIN
      FOR EXECUTE STATEMENT
      'SELECT VORNAME FROM TESTADR' INTO :VNAME
      DO BEGIN
      SUSPEND;
      END
      END
      </PRE>
      <br><br>
      Luc

      Comment


      • #4
        Hallo Leute, <BR><BR>
        ich danke euch für die schnelle Hilfe. Beide Vorschläge haben funktioniert. <BR> Bringt es Vorteile an der Geschwindigkeit, wenn ich in der Anwendung häufig benutzten Abfragen beim DB- Server ablege? Der Zugriff soll übers Netzwerk erfolgen. Wenn ja, soll ich Views oder StoredProc verwenden?<BR><BR>
        MfG Denni

        Comment


        • #5
          Ein View ist nicht schneller als eine normale Abfrage SELECT xxx FROM yyy.<br>
          Eine (selectable) StoredProc ist vor allem dann sinnvoll, wenn man datensatzabhängige Zusatzauswertungen / Bedingungen hat (d.h. dass man irgendwelche IF .. THEN abhängig von den aktuellen Werten einbauen kann).<br>
          Aber schneller wird die auch nicht sein ;-)
          <p>
          Luc

          Comment


          • #6
            Hallo,

            falls das Ergebnis der SP ausserhalb der SP sortiert werden soll kann IB/FB keinen Index verwenden und ist dementsprechend i.d.R. langsamer.

            Gruß

            Torste

            Comment


            • #7
              Hallo, <BR><BR>
              ich will die Ergebnisse einer SELECT- Abfrage die StoredProc zurückliefern soll in TDBGrid anzeigen lassen. Wenn ich die StoredProc direkt am DB- Server ausführe, läuft das ohne Probleme. In C++Builder kommt aber immer die Fehlermeldung:<BR><BR><B>
              Im Projekt1.exe ist eine Exeption der Klasse ENoResultSet aufgetreten.<BR>
              Meldung: 'Fehler beim Erstellen des Cursor-Handle'.<BR>
              Prozeß wurde angehalten.<BR><BR></B>
              Es passiert sobald ich <B>StoredProc->Active</B> auf <B>true</B> setze oder die Procedur mit <B>StoredProc->Open()</B> ausführe. Bei <B>StoredProc->ExecProc()</B> kommt keine Fehlermeldung, aber die Daten werden nicht angezeigt.
              Weißt jemand woran es liegen könnte?
              <BR><BR>MfG Denni

              Comment


              • #8
                Hallo Sita,

                verwende eine Query mit dem SQL-Statement "select * from Myproc".

                Gruß

                Torste

                Comment


                • #9
                  Hallo Torsten,<BR><BR>
                  danke für den Vorschlag, es hat funktioniert.
                  <BR><BR>
                  MfG Denni

                  Comment

                  Working...
                  X