![]() |
Datenbank: firebird 1.5 • Zugriff über: ibx, ibexpert
sp lässt sich nicht erstellen
Liste der Anhänge anzeigen (Anzahl: 1)
hallo!
ich wollte gerade wieder eine sp erstellen und auf einmal bekomm ich irgendeine meldung, dass ich irgendeinen unique index doppelt belegen will...ist mir unerklärlich..blickt ihr das? (db ist im anhang)
SQL-Code:
SET TERM ^ ;
create PROCEDURE GET_NEXT_20_DICENTRIES_BY_ID ( ID BIGINT) RETURNS ( DATUM DATE, AUT VARCHAR(3) CHARACTER SET WIN1252, ZSDEF BLOB SUB_TYPE 1 SEGMENT SIZE 4096 CHARACTER SET WIN1252, ZSSEM VARCHAR(80) CHARACTER SET WIN1252, UPDAUT VARCHAR(3) CHARACTER SET WIN1252, ZSQCODE VARCHAR(15) CHARACTER SET WIN1252, ZSPRGM VARCHAR(20) CHARACTER SET WIN1252, ASQCODE VARCHAR(15) CHARACTER SET WIN1252, ZSVERW VARCHAR(80) CHARACTER SET WIN1252, ZSABK VARCHAR(10) CHARACTER SET WIN1252, UPDDATUM DATE, ZSAUDIO VARCHAR(20) CHARACTER SET WIN1252, ASVERW VARCHAR(80) CHARACTER SET WIN1252, ZSTERM VARCHAR(80) CHARACTER SET WIN1252, ZSVIDEO VARCHAR(20) CHARACTER SET WIN1252, ZSABBILDUNG VARCHAR(20) CHARACTER SET WIN1252, ASVIDEO VARCHAR(20) CHARACTER SET WIN1252, ASABBILDUNG VARCHAR(20) CHARACTER SET WIN1252, PROJ VARCHAR(20) CHARACTER SET WIN1252, ASDEF BLOB SUB_TYPE 1 SEGMENT SIZE 4096 CHARACTER SET WIN1252, ASAUDIO VARCHAR(20) CHARACTER SET WIN1252, REV VARCHAR(1) CHARACTER SET WIN1252, ASSEM VARCHAR(80) CHARACTER SET WIN1252, ASPRGM VARCHAR(20) CHARACTER SET WIN1252, ASABK VARCHAR(10) CHARACTER SET WIN1252, ASTERM VARCHAR(80) CHARACTER SET WIN1252, ID BIGINT) AS begin for select first 20 d.id, d.asterm, d.asabk, d.asprgm, d.assem, d.zsterm, d.zsabk, d.zsprgm, d.zssem, d.datum, d.proj, d.rev, d.upddatum, d.asdef, d.zsdef, d.asaudio, d.asvideo, d.asabbildung, d.zsabbildung, d.zsaudio, d.zsvideo, asmain.asterm, zsmain.zsterm, a.aut, ua.aut, aslit.qcode, zslit.qcode from dicentries d left join dicentries asmain on d.asverw = asmain.id left join dicentries zsmain on d.zsverw = zsmain.id left join aut a on d.aut = a.id left join aut ua on d.updaut = ua.id left join lit aslit on d.asqcode = aslit.id left join lit zslit on d.zsqcode = zslit.id where d.id > :id order by d.id into :id, :asterm, :asabk, :asprgm, :assem, :zsterm, :zsabk, :zsprgm, :zssem, :datum, :proj, :rev, :upddatum, :asdef, :zsdef, :asaudio, :asvideo, :asabbildung, :zsabbildung, :zsaudio, :zsvideo, :asverw, :zsverw, :aut, :updaut, :asqcode, :zsqcode do suspend; end ^ SET TERM ; ^ |
Re: sp lässt sich nicht erstellen
Du hast 2 parameter mit dem selben Namen. Bennene mal den ID-Eibgabeparameter z.B. in IDein um. Dann gehts.
|
Re: sp lässt sich nicht erstellen
ah, ok, danke ...
und jetz schon das nächste problem: kann es sein, dass ich "union" in einer sp nicht verwenden kann? jedenfalls funktioniert keins der beiden:
SQL-Code:
SET TERM ^ ;
CREATE PROCEDURE GET_NEXT_20_DICENTRIES_BY_ID ( IDINPUT BIGINT) RETURNS ( DATUM DATE, AUT VARCHAR(3), ZSDEF BLOB SUB_TYPE 1 SEGMENT SIZE 4096, ZSSEM VARCHAR(80), UPDAUT VARCHAR(3), ZSQCODE VARCHAR(15), ZSPRGM VARCHAR(20), ASQCODE VARCHAR(15), ZSVERW VARCHAR(80), ZSABK VARCHAR(10), UPDDATUM DATE, ZSAUDIO VARCHAR(20), ASVERW VARCHAR(80), ZSTERM VARCHAR(80), ZSVIDEO VARCHAR(20), ZSABBILDUNG VARCHAR(20), ASVIDEO VARCHAR(20), ASABBILDUNG VARCHAR(20), PROJ VARCHAR(20), ASDEF BLOB SUB_TYPE 1 SEGMENT SIZE 4096, ASAUDIO VARCHAR(20), REV VARCHAR(1), ASSEM VARCHAR(80), ASPRGM VARCHAR(20), ASABK VARCHAR(10), ASTERM VARCHAR(80), ID BIGINT) AS begin for select first 20 d.id, d.asterm, d.asabk, d.asprgm, d.assem, d.zsterm, d.zsabk, d.zsprgm, d.zssem, d.datum, d.proj, d.rev, d.upddatum, d.asdef, d.zsdef, d.asaudio, d.asvideo, d.asabbildung, d.zsabbildung, d.zsaudio, d.zsvideo, asmain.asterm, zsmain.zsterm, a.aut, ua.aut, aslit.qcode, zslit.qcode from dicentries d left join dicentries asmain on d.asverw = asmain.id left join dicentries zsmain on d.zsverw = zsmain.id left join aut a on d.aut = a.id left join aut ua on d.updaut = ua.id left join lit aslit on d.asqcode = aslit.id left join lit zslit on d.zsqcode = zslit.id where d.id > :idinput order by d.id into :id, :asterm, :asabk, :asprgm, :assem, :zsterm, :zsabk, :zsprgm, :zssem, :datum, :proj, :rev, :upddatum, :asdef, :zsdef, :asaudio, :asvideo, :asabbildung, :zsabbildung, :zsaudio, :zsvideo, :asverw, :zsverw, :aut, :updaut, :asqcode, :zsqcode union select first 20 d.id, d.asterm, d.asabk, d.asprgm, d.assem, d.zsterm, d.zsabk, d.zsprgm, d.zssem, d.datum, d.proj, d.rev, d.upddatum, d.asdef, d.zsdef, d.asaudio, d.asvideo, d.asabbildung, d.zsabbildung, d.zsaudio, d.zsvideo, asmain.asterm, zsmain.zsterm, a.aut, ua.aut, aslit.qcode, zslit.qcode from dicentries d left join dicentries asmain on d.asverw = asmain.id left join dicentries zsmain on d.zsverw = zsmain.id left join aut a on d.aut = a.id left join aut ua on d.updaut = ua.id left join lit aslit on d.asqcode = aslit.id left join lit zslit on d.zsqcode = zslit.id where d.id < :idinput order by d.id into :id, :asterm, :asabk, :asprgm, :assem, :zsterm, :zsabk, :zsprgm, :zssem, :datum, :proj, :rev, :upddatum, :asdef, :zsdef, :asaudio, :asvideo, :asabbildung, :zsabbildung, :zsaudio, :zsvideo, :asverw, :zsverw, :aut, :updaut, :asqcode, :zsqcode do suspend; end^ SET TERM ; ^ GRANT EXECUTE ON PROCEDURE GET_NEXT_20_DICENTRIES_BY_ID TO SYSDBA; SET TERM ^ ;
SQL-Code:
CREATE PROCEDURE GET_NEXT_20_DICENTRIES_BY_ID (
IDINPUT BIGINT) RETURNS ( DATUM DATE, AUT VARCHAR(3), ZSDEF BLOB SUB_TYPE 1 SEGMENT SIZE 4096, ZSSEM VARCHAR(80), UPDAUT VARCHAR(3), ZSQCODE VARCHAR(15), ZSPRGM VARCHAR(20), ASQCODE VARCHAR(15), ZSVERW VARCHAR(80), ZSABK VARCHAR(10), UPDDATUM DATE, ZSAUDIO VARCHAR(20), ASVERW VARCHAR(80), ZSTERM VARCHAR(80), ZSVIDEO VARCHAR(20), ZSABBILDUNG VARCHAR(20), ASVIDEO VARCHAR(20), ASABBILDUNG VARCHAR(20), PROJ VARCHAR(20), ASDEF BLOB SUB_TYPE 1 SEGMENT SIZE 4096, ASAUDIO VARCHAR(20), REV VARCHAR(1), ASSEM VARCHAR(80), ASPRGM VARCHAR(20), ASABK VARCHAR(10), ASTERM VARCHAR(80), ID BIGINT) AS begin for select first 20 d.id, d.asterm, d.asabk, d.asprgm, d.assem, d.zsterm, d.zsabk, d.zsprgm, d.zssem, d.datum, d.proj, d.rev, d.upddatum, d.asdef, d.zsdef, d.asaudio, d.asvideo, d.asabbildung, d.zsabbildung, d.zsaudio, d.zsvideo, asmain.asterm, zsmain.zsterm, a.aut, ua.aut, aslit.qcode, zslit.qcode from dicentries d left join dicentries asmain on d.asverw = asmain.id left join dicentries zsmain on d.zsverw = zsmain.id left join aut a on d.aut = a.id left join aut ua on d.updaut = ua.id left join lit aslit on d.asqcode = aslit.id left join lit zslit on d.zsqcode = zslit.id where d.id > :idinput order by d.id union select first 20 d.id, d.asterm, d.asabk, d.asprgm, d.assem, d.zsterm, d.zsabk, d.zsprgm, d.zssem, d.datum, d.proj, d.rev, d.upddatum, d.asdef, d.zsdef, d.asaudio, d.asvideo, d.asabbildung, d.zsabbildung, d.zsaudio, d.zsvideo, asmain.asterm, zsmain.zsterm, a.aut, ua.aut, aslit.qcode, zslit.qcode from dicentries d left join dicentries asmain on d.asverw = asmain.id left join dicentries zsmain on d.zsverw = zsmain.id left join aut a on d.aut = a.id left join aut ua on d.updaut = ua.id left join lit aslit on d.asqcode = aslit.id left join lit zslit on d.zsqcode = zslit.id where d.id < :idinput order by d.id into :id, :asterm, :asabk, :asprgm, :assem, :zsterm, :zsabk, :zsprgm, :zssem, :datum, :proj, :rev, :upddatum, :asdef, :zsdef, :asaudio, :asvideo, :asabbildung, :zsabbildung, :zsaudio, :zsvideo, :asverw, :zsverw, :aut, :updaut, :asqcode, :zsqcode do suspend; end^ SET TERM ; ^ GRANT EXECUTE ON PROCEDURE GET_NEXT_20_DICENTRIES_BY_ID TO SYSDBA; |
Re: sp lässt sich nicht erstellen
ja dumme frage, sorry...das order by id kommt erst zum schluss, sorry!
|
Re: sp lässt sich nicht erstellen
Ersetze die UNION einfach durch 2 Abfragen in Folge
|
Re: sp lässt sich nicht erstellen
hmmm...jetz bin ich durcheinander
merk grad, dass es zwar kompiliert, aber nicht das gewünschte ergebnis bringt das mit den zwei abfragen in folge: geht das? ich meine, am ende will ich ja die vereinigung der beiden mengen in meinem tibdataset haben..und zwar gleichzeitig.. |
Re: sp lässt sich nicht erstellen
Ja, man kann in einer SP einfach mehrere Abfragen in Folge mäachen.
SQL-Code:
For select ... into do
begin ... supend; end For select ... into do begin ... supend; end |
Re: sp lässt sich nicht erstellen
du meinst so?
SQL-Code:
korrektur: da bekomm ich tatsächlich 40 datensätze...aber wie kann ich dem klar machen, dass ich die vereinigung auf jeden fall nach d.id aufsteigend sortiert will...passiert zwar standardmäßig aber man kann ja nie wissen, oder?
begin
for select first 20 d.id, d.asterm, d.asabk, d.asprgm, d.assem, d.zsterm, d.zsabk, d.zsprgm, d.zssem, d.datum, d.proj, d.rev, d.upddatum, d.asdef, d.zsdef, d.asaudio, d.asvideo, d.asabbildung, d.zsabbildung, d.zsaudio, d.zsvideo, asmain.asterm, zsmain.zsterm, a.aut, ua.aut, aslit.qcode, zslit.qcode from dicentries d left join dicentries asmain on d.asverw = asmain.id left join dicentries zsmain on d.zsverw = zsmain.id left join aut a on d.aut = a.id left join aut ua on d.updaut = ua.id left join lit aslit on d.asqcode = aslit.id left join lit zslit on d.zsqcode = zslit.id where d.id > :idinput order by d.id ascending into :id, :asterm, :asabk, :asprgm, :assem, :zsterm, :zsabk, :zsprgm, :zssem, :datum, :proj, :rev, :upddatum, :asdef, :zsdef, :asaudio, :asvideo, :asabbildung, :zsabbildung, :zsaudio, :zsvideo, :asverw, :zsverw, :aut, :updaut, :asqcode, :zsqcode do suspend; for select first 20 d.id, d.asterm, d.asabk, d.asprgm, d.assem, d.zsterm, d.zsabk, d.zsprgm, d.zssem, d.datum, d.proj, d.rev, d.upddatum, d.asdef, d.zsdef, d.asaudio, d.asvideo, d.asabbildung, d.zsabbildung, d.zsaudio, d.zsvideo, asmain.asterm, zsmain.zsterm, a.aut, ua.aut, aslit.qcode, zslit.qcode from dicentries d left join dicentries asmain on d.asverw = asmain.id left join dicentries zsmain on d.zsverw = zsmain.id left join aut a on d.aut = a.id left join aut ua on d.updaut = ua.id left join lit aslit on d.asqcode = aslit.id left join lit zslit on d.zsqcode = zslit.id where d.id < :idinput order by d.id descending into :id, :asterm, :asabk, :asprgm, :assem, :zsterm, :zsabk, :zsprgm, :zssem, :datum, :proj, :rev, :upddatum, :asdef, :zsdef, :asaudio, :asvideo, :asabbildung, :zsabbildung, :zsaudio, :zsvideo, :asverw, :zsverw, :aut, :updaut, :asqcode, :zsqcode do suspend; end |
Re: sp lässt sich nicht erstellen
Zitat:
Bei jedem suspend wird der aktuelle Inhalt der (Ausgabe-)Variabeln in die Ergebnismenge geschrieben. Zitat:
|
Re: sp lässt sich nicht erstellen
ahhh, verstehe, danke!
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:56 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