AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

SQL Variable

Ein Thema von Hansa · begonnen am 2. Dez 2003 · letzter Beitrag vom 2. Dez 2003
Antwort Antwort
Hansa

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

SQL Variable

  Alt 2. Dez 2003, 10:33
Hi,

wie definiere ich in SQL eine Variable ? Vielleicht gehts aber auch anders, ich will einen aus einem Trigger erhaltenen Wert an einen anderen Trigger oder SP übergeben.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#2

Re: SQL Variable

  Alt 2. Dez 2003, 10:45
Hallo Hansa,

nur mal ein beispiel, wie wir das in Informix machen:
SQL-Code:
create procedure pi_rvv(new_rvv_kumul INTEGER,
                        new_rvv_zuord_datu INTEGER,
                        new_rvv_art INTEGER)
    define errno integer;
    define errmsg char(255);
    define numrows integer;
...

-- Insert trigger "ti_rvv" for table "rvv"
create trigger ti_rvv insert on rvv
referencing new as new_ins
   for each row (execute procedure pi_rvv(new_ins.rvv_kumul,
                                          new_ins.rvv_zuord_datum_id,
                                          new_ins.rvv_art));
Ich werde mal versuchen, ob PowerDesigner mir auch etwas vernünftiges für Interbase auswirft.
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#3

Re: SQL Variable

  Alt 2. Dez 2003, 10:54
Für Interbase 6 kommt so'n Mischmasch aus Trigger und Stored procedure heraus:
SQL-Code:
set term /;
create trigger ti_rvv for tabelle1
before insert as
declare variable numrows integer;
begin
    /*  Parent "tabelle2" must exist when inserting a child in "tabelle1" */
    if (new.spalte is not null) then
    begin
       select count(*)
       from tabelle2
       where tabelle2.spalte= new.spalte
       into :numrows;
       
       if (numrows = 0) then
       begin
          exception sdp_icpe;
       end
    end
...
end
end;/
set term ;/
  Mit Zitat antworten Zitat
Hansa

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

Re: SQL Variable

  Alt 2. Dez 2003, 11:16
Habe das ganze etwas einfacher gemacht:

SQL-Code:
CREATE TRIGGER ART_BU0 FOR ART
ACTIVE BEFORE UPDATE POSITION 0
AS
  DECLARE VARIABLE ANR INTEGER;
BEGIN
  SELECT ID FROM ART INTO :ANR; /* Trigger text */
end
Fehler kommt keiner, aber die Variable gilt offensichtlich nur in dem Trigger. Ich brauche den Wert aber noch woanders.
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#5

Re: SQL Variable

  Alt 2. Dez 2003, 11:21
Hallo Hansa,

Mein Beispiel ist ein Insert-Trigger im Rahmen von RI-Vorgaben. Wo und wofür brauchst Du die Variable? In einem Delphi-Programm? In einer andern SP?
  Mit Zitat antworten Zitat
Hansa

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

Re: SQL Variable

  Alt 2. Dez 2003, 11:32
Habe mich kurzerhand entschlossen, doch eine SP zu verwenden 8)

SQL-Code:
ALTER PROCEDURE TEST_PROCEDURE
RETURNS (
    ANR INTEGER)
AS
BEGIN
 SELECT ID FROM ART INTO :ANR;
 SUSPEND;
END
Jetzt bin ich aber wieder fast am Anfang: wie kann ich das jetzt weiterverarbeiten ? Den Wert von ANR bräuchte ich in einem INSERT als value. Ich kann ja nicht schreiben :

INSERT INTO TABLE2 (ID_FREMD,FELD1) VALUES (SELECT ANR FROM TEST_PROCEDURE,NEW.FELD1);
Gruß
Hansa
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#7

Re: SQL Variable

  Alt 2. Dez 2003, 11:40
Warum nicht? in der OH von Interbase steht:
SQL-Code:
INSERT [TRANSACTION transaction] INTO <object> [(col [, col …])]
   {VALUES (<val> [, <val> …]) | <select_expr>};

<object> = tablename | viewname

<val> = {:variable | <constant> | <expr>
   | <function> | udf ([<val> [, <val> …]])
   | NULL | USER | RDB$DB_KEY | ?

} [COLLATE collation]
...
expr   A valid SQL expression that results in a single column value
  Mit Zitat antworten Zitat
Hansa

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

Re: SQL Variable

  Alt 2. Dez 2003, 20:54
Habe jetzt folgenden BI-Trigger:

SQL-Code:
AS
DECLARE VARIABLE ARTNR INTEGER;
begin
  SELECT ANR FROM TEST_PROCEDURE INTO :ARTNR;
  post_event ('ÖÄÖÄÖÄ'); /* INTO :ARTNR; */
  INSERT INTO LAGER (ID_ART,BESTAND) VALUES (:ARTNR,NEW.BESTAND);
end
Und diese SP hier:

SQL-Code:
BEGIN
  SELECT ID FROM ART8 INTO :ANR;
 SUSPEND;
END
jetzt kommt : "multiple rows in singleton select". Was sagt uns das ?Ist der Ansatz überhaupt sinnvoll ? Das Select einfach so als value zu verwenden hat zumindest auf Anhieb nicht funktioniert, deshalb dieser "Umweg". Und noch kurze zwischenfrage : was ist mit dem Post_Event ? Wollte mal sehen, ob da überhaupt was passiert, aber davon seh ich nichts. 8)
Gruß
Hansa
  Mit Zitat antworten Zitat
Antwort Antwort


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 02:54 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