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 1 von 2  1 2      
Benutzerbild von Sven Janssen
Sven Janssen

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

Ein paar SQL Fragen ( stored procedure )

  Alt 20. Jun 2005, 17:36
Datenbank: Informix • Version: 7SE • Zugriff über: Luxena
Moin,

1. Wie schreibe ich am elegantesten eine Abfrage in einer stored procedure, ob select etwas zurück geliefert hat. z.b die Anzahl der Reihen?
Mir geht es darum eine Weich in einer SP zu programmieren die entscheidet ob der Datensatz aktualisiert werden soll, oder neu hinzugefügt werden muss.

2. Wie kann ich einen String aufbereiten? Vergleichbar mit format() oder sprintf(). Mir geht es hier darum das ich aus der Zahl 1 den String "01" bekomme.

3. Wie wandel ich Zeichen in eine Zahl. Wie z.b unter C mit atoi()?

Sorry sind sicherlich stupide fragen, aber bin absoluter SQL Neuling. Hab hier zig Bücher um mich herumliegen und komme eigentlich ganz gut klar, aber an einigen Kleinigkeiten hängt es dann.

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

Registriert seit: 4. Mai 2003
Ort: Berlin
458 Beiträge
 
Delphi 7 Professional
 
#2

Re: Ein paar SQL Fragen ( stored procedure )

  Alt 21. Jun 2005, 10:13
Hallo,

zu 1.)

Ich löse das immer so, dass ich die Datensätze über die ID identifiziere. Beim Speichern übergebe ich die ID an die SP, wenn die ID > 0 ist, dann wird ein Update durchgeführt und wenn eben ID = 0 ist, dann wird ein neuer DS angelegt.

SQL-Code:
(if ID = 0 Then)
begin
  Insert into .....

  select Gen_ID(DB_Gen_ID,1) From RDB$database
  Into :ID
end
else
begin
  Update DB Set ....
  WHERE ID = ID
end;
Gruß

Albi
  Mit Zitat antworten Zitat
Benutzerbild von Sven Janssen
Sven Janssen

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

Re: Ein paar SQL Fragen ( stored procedure )

  Alt 21. Jun 2005, 12:06
Wenn ich ehrlich bin verstehe ich das nicht ganz.
Was ist ID? Du meinst den eindeutigen Schlüssen in der Tabelle oder?
Sprich ich mach ein Select auf einen Datensatz wo ich mir nur den Eindeutigen Schlüssen zurückgeben lasse und frage diesen ab.
Muss ich mal antesten.

Übrigens ich spreche nur von SQL Code, nicht von Abfragen in Pascal.
Dein Code schaut mir sehr Pascal lastig mit begin und end im if Zweig aus.

Vielen dank für die Antwort.

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

Registriert seit: 4. Mai 2003
Ort: Berlin
458 Beiträge
 
Delphi 7 Professional
 
#4

Re: Ein paar SQL Fragen ( stored procedure )

  Alt 21. Jun 2005, 12:31
Hallo,

ich kann mich jetzt auch irren aber ich glaube Du hast mich nicht verstanden.

Wenn Du dein Prog startest ist die ID (Primarykey aus der DB) = 0, da ja noch kein Datensatz ausgewählt wurde. Wenn Du nun eine Datensatz auswählst, übergibst Du auch den die ID (PK). Somit weist Du schonmal ob der Datensatz neu ist oder schon bereits existiert.

Die If-Abfrage ist das einzigste was mit Pascal zutun hat, der Rest ist doch reines SQL, oder nicht?

Wenn Du keine If-Abfrage haben willst, dann must Du vorher ein Select abschicken und das Ergebnis auswerten. Aber ich habe mich damit mal angeschmiert und bevorzuge daher diese Variante. Aber das ist ja jedem selber überlassen wie man regelt. Es gib bestimmt auch noch andere Wege, als die beiden hier zur Auswahl stehenden Varianten.
Gruß

Albi
  Mit Zitat antworten Zitat
Hansa

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

Re: Ein paar SQL Fragen ( stored procedure )

  Alt 21. Jun 2005, 12:35
Die ID wird verwendet zur Identifizierung eines Records, ohne hierfür ein eventuell sogar vom User veränderbares Feld zu nehmen, z.B. die Art.Nr. Das führt aber jetzt zu weit. Was Albi da schreibt ist aber grober Unfug !! Der Wert des Generators enthält nie und nimmer die Anzahl der Reihen einer Table sofern auch nur ein Datensatz gelöscht wird ! Um es mal ganz klar zu sagen. Der Generatorwert ist völlig uninteressant, um Information damit zu verwalten. Gerade bei der ID geht es genau darum, es nicht so zu machen. Das Pascal-ähnliche ist aber doch auch gut so oder nicht ? Das Albi-Beispiel kommt mir übrigens sehr bekannt vor. Hatte mal irgendwann gepostet, wie man die DB automatisch entscheiden läßt, ob Insert oder Update gemacht werden muß. Allerdings, dafür eine Systabelle zu benutzen ?
Gruß
Hansa
  Mit Zitat antworten Zitat
Albi

Registriert seit: 4. Mai 2003
Ort: Berlin
458 Beiträge
 
Delphi 7 Professional
 
#6

Re: Ein paar SQL Fragen ( stored procedure )

  Alt 21. Jun 2005, 12:46
Hallo Hansa,

Das was ich hier beschrieben habe bezieht sich auf das hier

Zitat von Sven Janssen:
Mir geht es darum eine Weich in einer SP zu programmieren die entscheidet ob der Datensatz aktualisiert werden soll, oder neu hinzugefügt werden muss.
Das man so nicht die Reihen bekommt ist mir auch schon bewusst.
Gruß

Albi
  Mit Zitat antworten Zitat
Hansa

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

Re: Ein paar SQL Fragen ( stored procedure )

  Alt 21. Jun 2005, 13:00
Ah ja, habe ich vor Entsetzen gar nicht gesehen. Trotzdem : Finger weg von den Systemtabellen wenn es anders auch geht ! Genau das werden nämlich die Programme, die bei einem Wechsel der Datenbank-Version plötzlich nicht mehr gehen. Das ist ähnlich zu sehen, wie die beliebten Programme, die direkt auf die WinApi zugreifen.
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
 
#8

Re: Ein paar SQL Fragen ( stored procedure )

  Alt 21. Jun 2005, 13:32
Ne moment. Mein Programm soll darauf gar keine Berücksichtigung finden.
D.h das soll alles komplett losgelöst von der Applikation sein.
Ich möchte der Stored Procedure auch nicht mitgeben ob es ein insert oder update fahren soll, sondern das soll ganz alleine die SP entscheiden.

Was ich eigentlich nur benötige ist, das ich in der SP durch ein select oder sonst etwas heraus bekommen wieviele Datensätze (rows) das select gefunden hat.
Dadurch soll entschieden werden ob ein insert oder update ausgeführt werden soll.

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

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

Re: Ein paar SQL Fragen ( stored procedure )

  Alt 21. Jun 2005, 13:56
Zitat von Sven Janssen:
Ne moment. Mein Programm soll darauf gar keine Berücksichtigung finden.
So solls auch sein.

Zitat von Sven Janssen:
Dadurch soll entschieden werden ob ein insert oder update ausgeführt werden soll.
Der Ansatz ist richtig, aber der Denkfehler ist der, daß du versuchst die Anzahl der Records zu ermitteln, anstatt ob gerade der betreffende Record schon da ist ! Dabei spielen jetzt allerdings die IDs eine entscheidende Rolle.

Sofern jeder DS eine eindeutige Nr. hat, dann brauchst Du nur...

Beispiel ist besser:

SQL-Code:
CREATE PROCEDURE PREISSP (
    ID_KUNDE INTEGER,
    VP DECIMAL(15,2),
    ID_ART INTEGER)
AS
DECLARE VARIABLE AENDERN INTEGER;
begin
  AENDERN = -1;
  select ID from PREIS where (ID_KUNDE= :ID_KUNDE) and
                             (ID_ART= :ID_ART)
  into :AENDERN;
  if (AENDERN < 0) then begin
    insert into PREIS (ID_KUNDE,ID_ART,VP)
           values (:ID_KUNDE,:ID_ART,:VP);
  end
  else begin
    update PREIS set VP=:VP
    where (ID_ART= :ID_ART) and (ID_KUNDE= :ID_KUNDE);
  end
  suspend;
end
Es geht um eine Kunden-Preistable. Hat ein Kunde für einen Artikel einen Preis, so ist die ID <> 0 => Update. Ist keiner da, dann bleibt Aendern auf -1 stehen und es wird ein Insert gemacht. Bingo !
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
 
#10

Re: Ein paar SQL Fragen ( stored procedure )

  Alt 21. Jun 2005, 15:16
das ist mal ne Antwort :-)
Das ganze muss also mit INTO stattfinden.
Ich dachte eher an :
let c = (select * from x where y = z); Aber knapp vorbei ist auch daneben.

Was mich eben etwas verwirrt hat war das if ... then begin ... end
In meiner schlauen Informix SQL Guide steht etwas von if then ... end if

Zu meinen zwei anderen Fragen hast aber keine Antwort parat oder?

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 1 von 2  1 2      


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 18:50 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