AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Ein paar SQL Fragen ( stored procedure )
Thema durchsuchen
Ansicht
Themen-Optionen

Ein paar SQL Fragen ( stored procedure )

Ein Thema von Sven Janssen · begonnen am 20. Jun 2005 · letzter Beitrag vom 22. Jun 2005
Antwort Antwort
Seite 2 von 2     12   
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#11

Re: Ein paar SQL Fragen ( stored procedure )

  Alt 21. Jun 2005, 18:46
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 !
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von Sven Janssen
Sven Janssen

Registriert seit: 22. Jun 2004
Ort: Mayen
187 Beiträge
 
Delphi 4 Professional
 
#12

Re: Ein paar SQL Fragen ( stored procedure )

  Alt 21. Jun 2005, 19:07
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:
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
Bitte nicht über den Sinn diskutieren ;-) einfach so hinnehmen

Sven
:wq /dev/null
He who fights with monsters might take care lest he thereby become a monster - Nietzsche
  Mit Zitat antworten Zitat
marabu

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

Re: Ein paar SQL Fragen ( stored procedure )

  Alt 21. Jun 2005, 19:52
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:
lBound = :sb * 100 + 1
uBound = :sb * 100 + 98
Anschließend kannst du einen Cursor definieren für:

SQL-Code:
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
)
Dieser Cursor listet dir alle freien Nummern im Range ...01 bis ...99, aber du kannst eventuell den result set auf ein singleton limitieren.

Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von Sven Janssen
Sven Janssen

Registriert seit: 22. Jun 2004
Ort: Mayen
187 Beiträge
 
Delphi 4 Professional
 
#14

Re: Ein paar SQL Fragen ( stored procedure )

  Alt 21. Jun 2005, 19:58
das schaut nett und viel versprechend aus.
Werde ich morgen früh direkt man austesten.

Danke :-)

Sven
:wq /dev/null
He who fights with monsters might take care lest he thereby become a monster - Nietzsche
  Mit Zitat antworten Zitat
Benutzerbild von Sven Janssen
Sven Janssen

Registriert seit: 22. Jun 2004
Ort: Mayen
187 Beiträge
 
Delphi 4 Professional
 
#15

Re: Ein paar SQL Fragen ( stored procedure )

  Alt 22. Jun 2005, 13:20
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
:wq /dev/null
He who fights with monsters might take care lest he thereby become a monster - Nietzsche
  Mit Zitat antworten Zitat
marabu

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

Re: Ein paar SQL Fragen ( stored procedure )

  Alt 22. Jun 2005, 14:11
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:
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;
Sieht doch gar nicht so schlimm aus...

marabu
  Mit Zitat antworten Zitat
Benutzerbild von Sven Janssen
Sven Janssen

Registriert seit: 22. Jun 2004
Ort: Mayen
187 Beiträge
 
Delphi 4 Professional
 
#17

Re: Ein paar SQL Fragen ( stored procedure )

  Alt 22. Jun 2005, 14:36
Das funktioniert tatsächlich.
Aber laut Informix SQL Guide und Informix SQL Referenz sollte das eher so

Delphi-Quellcode:
declare c_master cursor with hold for
select customer_num from customer where city = 'Pittsburgh';
oder
Delphi-Quellcode:
prepare st_1 from
    'select order_date from orders where customer_num = ? for update';
declare c_detail cursor for st_1;
so ausschauen.

Und beide Varianten gehen mittel dbaccess nicht.

Sven
:wq /dev/null
He who fights with monsters might take care lest he thereby become a monster - Nietzsche
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


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 13:48 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