AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi kontrollstrukturen in sql
Thema durchsuchen
Ansicht
Themen-Optionen

kontrollstrukturen in sql

Ein Thema von sancho1980 · begonnen am 8. Mai 2006 · letzter Beitrag vom 8. Mai 2006
Antwort Antwort
sancho1980

Registriert seit: 7. Feb 2006
429 Beiträge
 
#1

kontrollstrukturen in sql

  Alt 8. Mai 2006, 11:04
Datenbank: firebird • Zugriff über: ibx, ibexpert
hallo
ich versuche grad einen sql-query mit bedingung zu schreiben, weiß aber gar nicht, ob das überhaupt geht. nutze firebird als server.
der versuch den ich gestartet hab sieht so aus:

SQL-Code:
if (count (*) from (select * from tabelle) > 10) then
    select * from tabelle rows 10
else
    select * from tabelle
ibexpert druckt zwar 'if' und 'then' automatisch fett, was ja darauf schließen lassen 'sollte', dass es eine bedeutung in sql hat, aber beim versuch es auszuführen, sagt der:
Zitat:
Invalid token.
Dynamic SQL Error.
SQL error code = -104.
Token unknown - line 1, column 1.
if.
weiß da einer weiter?

danke,
martin

ps: ich weiß, das selbe könnte man auch erreichen mit select * from tabelle rows 10 aber das ist nur ein beispiel, weil ich eigentlich was anderes machen will, wo ich wirklich sowas wie ne kontrollstruktur brauche!
Um Rekursion zu verstehen, muss man zunächst Rekursion verstehen.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#2

Re: kontrollstrukturen in sql

  Alt 8. Mai 2006, 11:06
Hallo Martin,

die Sprachelemente zur Flußsteuerung gehören zur Procedure Language und werden natürlich nur in einer Stored Procedure akzeptiert.

Grüße vom marabu
  Mit Zitat antworten Zitat
sancho1980

Registriert seit: 7. Feb 2006
429 Beiträge
 
#3

Re: kontrollstrukturen in sql

  Alt 8. Mai 2006, 11:07
hmm, das heißt ich hab keine chance?
Um Rekursion zu verstehen, muss man zunächst Rekursion verstehen.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#4

Re: kontrollstrukturen in sql

  Alt 8. Mai 2006, 11:09
Deine Chance ist gegeben - schreibe eine Select Procedure.

marabu
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: kontrollstrukturen in sql

  Alt 8. Mai 2006, 11:12
Kontrollstrukturen sind nur innerhalb einer SP möglich oder als Code-Block welcher aber erst ab der bald erscheindenen Version 2.0 möglich sein wird.
Markus Kinzler
  Mit Zitat antworten Zitat
sancho1980

Registriert seit: 7. Feb 2006
429 Beiträge
 
#6

Re: kontrollstrukturen in sql

  Alt 8. Mai 2006, 12:06
hallo
ich versuche das gerade mit einer sp
aber da hab ich ein paar anfängerschwierigkeiten; könnt ihr mir beispielsweise sagen, was hieran falsch ist (ibexpert beschwert sich eigenartigerweise über das 'from' nach dem 'count'):

SQL-Code:
SET TERM ^ ;

ALTER PROCEDURE GETASTERM (
    NUMBER INTEGER,
    LOOKUP VARCHAR(80))
RETURNS (
    ASABK VARCHAR(10),
    ID INTEGER,
    ZSVIDEO VARCHAR(20),
    ZSAUDIO VARCHAR(20),
    ZSABBILDUNG VARCHAR(20),
    UPDAUT INTEGER,
    AUT INTEGER,
    ZSQCODE INTEGER,
    ASQCODE INTEGER,
    ASABBILDUNG VARCHAR(20),
    ASVIDEO VARCHAR(20),
    ASAUDIO VARCHAR(20),
    ZSDEF BLOB SUB_TYPE 1 SEGMENT SIZE 4096,
    ASDEF BLOB SUB_TYPE 1 SEGMENT SIZE 4096,
    ZSVERW INTEGER,
    ASVERW INTEGER,
    UPDDATUM DATE,
    REV VARCHAR(1),
    PROJ VARCHAR(20),
    DATUM DATE,
    ZSSEM VARCHAR(80),
    ZSPRGM VARCHAR(20),
    ZSABK VARCHAR(10),
    ZSTERM VARCHAR(80),
    ASSEM VARCHAR(80),
    ASPRGM VARCHAR(20),
    ASTERM VARCHAR(80))
AS
begin
  if (count(*) from (select * from dicentries where asterm = lookup) > 10) then
        FOR
            SELECT
                asabk, id, zsvideo, zsaudio, zsabbildung, updaut, aut, zsqcode,
                asqcode, asabbildung, asvideo, asaudio, zsdef, asdef, zsverw,
                asverw, upddatum, rev, proj, datum, zssem, zsprgm, zsabk,
                zsterm, assem, asprgm, asterm from dicentries into asabk, id,
                zsvideo, zsaudio, zsabbildung, updaut, aut, zsqcode, asqcode,
                asabbildung, asvideo, asaudio, zsdef, asdef, zsverw, asverw,
                upddatum, rev, proj, datum, zssem, zsprgm, zsabk, zsterm,
                assem, asprgm, asterm rows 10
        do
            SUSPEND;
  else
        FOR
            SELECT
                asabk, id, zsvideo, zsaudio, zsabbildung, updaut, aut, zsqcode,
                asqcode, asabbildung, asvideo, asaudio, zsdef, asdef, zsverw,
                asverw, upddatum, rev, proj, datum, zssem, zsprgm, zsabk,
                zsterm, assem, asprgm, asterm from dicentries into asabk, id,
                zsvideo, zsaudio, zsabbildung, updaut, aut, zsqcode, asqcode,
                asabbildung, asvideo, asaudio, zsdef, asdef, zsverw, asverw,
                upddatum, rev, proj, datum, zssem, zsprgm, zsabk, zsterm,
                assem, asprgm, asterm
        do
            SUSPEND;

end
^

SET TERM ; ^

thx,

martin

ps: gibt es auch eine einfachere variante, über eine sp ALLE felder einer tabelle auszulesen, als sie alle so mühselig zu deklarieren?
Um Rekursion zu verstehen, muss man zunächst Rekursion verstehen.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: kontrollstrukturen in sql

  Alt 8. Mai 2006, 12:39
Du mußt das Ergebnis erst einer lokalen Variable zuweisen, bevor du es für einen Vergelich heranziehen kannst
So oder ähnlich:
SQL-Code:
for select * from dicentries where asterm = lookup) into :cnt do
if (:cnt > 10 ) then
Markus Kinzler
  Mit Zitat antworten Zitat
Ferber

Registriert seit: 9. Mär 2005
Ort: Wien Umgebung
155 Beiträge
 
Delphi 2006 Architect
 
#8

Re: kontrollstrukturen in sql

  Alt 8. Mai 2006, 12:40
Hi !

Also ich würde das mit

Select TOP 10 ... from ... order BY ... lösen.
Otto
  Mit Zitat antworten Zitat
sancho1980

Registriert seit: 7. Feb 2006
429 Beiträge
 
#9

Re: kontrollstrukturen in sql

  Alt 8. Mai 2006, 13:16
also:
hier beschwert sich zwar der sql-parser nicht mehr, aber das ergebnis ist leider nicht das gewünschte:

SQL-Code:
begin
  for select id from dicentries into :cnt do
    if (:cnt > :number ) then
        FOR
            SELECT
                asabk, id, zsvideo, zsaudio, zsabbildung, updaut, aut, zsqcode,
                asqcode, asabbildung, asvideo, asaudio, zsdef, asdef, zsverw,
                asverw, upddatum, rev, proj, datum, zssem, zsprgm, zsabk,
                zsterm, assem, asprgm, asterm from dicentries rows :number into :asabk, :id,
                :zsvideo, :zsaudio, :zsabbildung, :updaut, :aut, :zsqcode, :asqcode,
                :asabbildung, :asvideo, :asaudio, :zsdef, :asdef, :zsverw, :asverw,
                :upddatum, :rev, :proj, :datum, :zssem, :zsprgm, :zsabk, :zsterm,
                :assem, :asprgm, :asterm
        do
            SUSPEND;

    else
        FOR
            SELECT
                asabk, id, zsvideo, zsaudio, zsabbildung, updaut, aut, zsqcode,
                asqcode, asabbildung, asvideo, asaudio, zsdef, asdef, zsverw,
                asverw, upddatum, rev, proj, datum, zssem, zsprgm, zsabk,
                zsterm, assem, asprgm, asterm from dicentries into :asabk, :id,
                :zsvideo, :zsaudio, :zsabbildung, :updaut, :aut, :zsqcode, :asqcode,
                :asabbildung, :asvideo, :asaudio, :zsdef, :asdef, :zsverw, :asverw,
                :upddatum, :rev, :proj, :datum, :zssem, :zsprgm, :zsabk, :zsterm,
                :assem, :asprgm, :asterm
        do
            SUSPEND;

end
wenn beispielsweise :number = 3 bekomm ich trotzdem alle datensätze zurück ?!
Zitat:
Also ich würde das mit ...
Ja ich weiß, aber das ist eine hypothetische Procedure; ich versuch mich nur langsam "heranzutasten" und herauszufinden, wie ich meine Procedure syntaktisch aufbauen muss...das is nur ein beispiel und nicht das eigentlich problem das ich lösen will
Um Rekursion zu verstehen, muss man zunächst Rekursion verstehen.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: kontrollstrukturen in sql

  Alt 8. Mai 2006, 13:37
Sorry es muß auch
for select count(id) from dicentries into :cnt do heißen
Markus Kinzler
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:49 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz