![]() |
Re: Ein paar SQL Fragen ( stored procedure )
Ne, keine Antwort. 8) Du wirst doch wohl wissen, ob das Programm eine Zahl oder einen string aus der DB erwartet ? Und das mußt du der auch mitteilen !
|
Re: Ein paar SQL Fragen ( stored procedure )
Was?
Bitte nicht hinterfragen, ich denke mir schon meinen Teil dabei ;-) Es geht nicht um Werte die ich aus oder in die SQL Tabelle schreibe, sondern um Schlüssel die ich in den Stored Procedures aufbereiten muss. Ich habe SQL in a Nutshell von o'reilly. Ich kann Sinus, Cosinus und sonstwas in einigen SQL Datenbanksystemen aufbereiten. Aber simple Dinge finde ich nicht. Die Datenstruktur auf die ich Zugreife ist Asbach Uralt. Aber diese kann nicht erneuert werden, da sonst über 100 Programme mit Millionen Zeilen von Code geändert werden müssen. Nun soll von _aussen_ Windows Programme über Informix auf die Daten zugreifen. Auch alles kein Problem. Aber die Datenstrukturen sind nicht wirklich SQL tauglich. ( die Stammen noch aus Altos Zeiten ;-) falls dir das was sagt *hehe*) Ich muss in der SP also Schlüssel aufbereiten nach dem System "nummer+laufende Positon" . z.b 1000001 bis 1000099 Aber wie soll ich das ohne sprintf/format elegant lösen? Ich könnte das zwar alles im Programmcode lösen, aber dann verursache ich unnötigen Traffic den ich vermeiden möchte, da die Programme nachher über <1MBit Standleitungen laufen sollen. So pervers das nun anzuschauen sein soll müsste ich so etwas in der Art lösen ( code so aus dem Kopf geschrieben )
Delphi-Quellcode:
Bitte nicht über den Sinn diskutieren ;-) einfach so hinnehmen
found = -1;
for i = 0 to 99 do key = format('%s%.02d',[suche,i]); -- das suche ich in SQL select nummer from table where nummer = key into erg if erg <= 0 then found = i; exit for; end if end for if found > 0 then -- Luecke gefunden nun neuen Datensatz in luecke einfuegen end if Sven |
Re: Ein paar SQL Fragen ( stored procedure )
Hallo Sven,
ich habe keine Ahnung was Informix kann, aber ich würde etwa so vorgehen: Du übergibst neben den Feldwerten noch deinen Suchbereich sb an deine Stored Procedure. In deinem Beispiel wäre sb = 10000. In deiner SP würdest du als erstes die Grenzen deines Suchbereiches festlegen:
SQL-Code:
Anschließend kannst du einen Cursor definieren für:
lBound = :sb * 100 + 1
uBound = :sb * 100 + 98
SQL-Code:
Dieser Cursor listet dir alle freien Nummern im Range ...01 bis ...99, aber du kannst eventuell den result set auf ein singleton limitieren.
DECLARE c CURSOR FOR
SELECT nummer + 1 AS freienummer FROM tabelle o WHERE o.nummer between lBound and uBound AND NOT EXISTS ( SELECT i.nummer FROM tabelle i WHERE i.nummer = o.nummer + 1 ) Grüße vom marabu |
Re: Ein paar SQL Fragen ( stored procedure )
das schaut nett und viel versprechend aus.
Werde ich morgen früh direkt man austesten. Danke :-) Sven |
Re: Ein paar SQL Fragen ( stored procedure )
Toll. Informix 7 SE bekommt es nicht hin Cursors zu benutzen.
So wie das ausschaut geht das nur über ESQL und dieses wird nur über direkte Zugriffe über deren eigenen Schnittstellen gelöst :-( Zumindestens lösen DECLARE PREPARE usw nur Syntax Erros aus. Sven |
Re: Ein paar SQL Fragen ( stored procedure )
Hallo Sven,
ist es nicht so, dass du eine stored procedure in Informix SPL erstellen musst? Aus einem Handbuch habe ich das hier:
SQL-Code:
Sieht doch gar nicht so schlimm aus...
CREATE_PROCEDURE increase_by_pct( pct INTEGER )
DEFINE s INTEGER; FOREACH sal_cursor FOR SELECT salary INTO s FROM employee WHERE salary > 35000 LET s = s + s * ( pct/100 ); UPDATE employee SET salary = s WHERE CURRENT OF sal_cursor; END FOREACH END PROCEDURE; marabu |
Re: Ein paar SQL Fragen ( stored procedure )
Das funktioniert tatsächlich.
Aber laut Informix SQL Guide und Informix SQL Referenz sollte das eher so
Delphi-Quellcode:
oder
declare c_master cursor with hold for
select customer_num from customer where city = 'Pittsburgh';
Delphi-Quellcode:
so ausschauen.
prepare st_1 from
'select order_date from orders where customer_num = ? for update'; declare c_detail cursor for st_1; Und beide Varianten gehen mittel dbaccess nicht. Sven |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:15 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 by Thomas Breitkreuz