![]() |
Datenbank: firebird • Zugriff über: ibx, ibexpert
kontrollstrukturen in sql
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:
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:
if (count (*) from (select * from tabelle) > 10) then
select * from tabelle rows 10 else select * from tabelle Zitat:
danke, martin ps: ich weiß, das selbe könnte man auch erreichen mit
SQL-Code:
aber das ist nur ein beispiel, weil ich eigentlich was anderes machen will, wo ich wirklich sowas wie ne kontrollstruktur brauche!
select * from tabelle rows 10
|
Re: kontrollstrukturen in sql
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 |
Re: kontrollstrukturen in sql
hmm, das heißt ich hab keine chance?
|
Re: kontrollstrukturen in sql
Deine Chance ist gegeben - schreibe eine Select Procedure.
marabu |
Re: kontrollstrukturen in sql
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.
|
Re: kontrollstrukturen in sql
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? |
Re: kontrollstrukturen in sql
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 |
Re: kontrollstrukturen in sql
Hi !
Also ich würde das mit
SQL-Code:
lösen. :)
Select TOP 10 ... from ... order BY ...
|
Re: kontrollstrukturen in sql
also:
hier beschwert sich zwar der sql-parser nicht mehr, aber das ergebnis ist leider nicht das gewünschte:
SQL-Code:
wenn beispielsweise :number = 3 bekomm ich trotzdem alle datensätze zurück ?!
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 Zitat:
|
Re: kontrollstrukturen in sql
Sorry es muß auch
SQL-Code:
heißen
for select count(id) from dicentries into :cnt do
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:44 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz