![]() |
SQL Variable
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. |
Re: SQL Variable
Hallo Hansa,
nur mal ein beispiel, wie wir das in Informix machen:
SQL-Code:
Ich werde mal versuchen, ob PowerDesigner mir auch etwas vernünftiges für Interbase auswirft.
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)); |
Re: SQL Variable
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 ;/ |
Re: SQL Variable
Habe das ganze etwas einfacher gemacht:
SQL-Code:
Fehler kommt keiner, aber die Variable gilt offensichtlich nur in dem Trigger. Ich brauche den Wert aber noch woanders.
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 |
Re: SQL Variable
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? |
Re: SQL Variable
Habe mich kurzerhand entschlossen, doch eine SP zu verwenden 8)
SQL-Code:
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 :
ALTER PROCEDURE TEST_PROCEDURE
RETURNS ( ANR INTEGER) AS BEGIN SELECT ID FROM ART INTO :ANR; SUSPEND; END
SQL-Code:
INSERT INTO TABLE2 (ID_FREMD,FELD1) VALUES (SELECT ANR FROM TEST_PROCEDURE,NEW.FELD1);
|
Re: SQL Variable
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 |
Re: SQL Variable
Habe jetzt folgenden BI-Trigger:
SQL-Code:
Und diese SP hier:
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
SQL-Code:
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)
BEGIN
SELECT ID FROM ART8 INTO :ANR; SUSPEND; END |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:47 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