Parameter automatisch befüllen

Gast20180

Benutzer
Beiträge
7
Hallo allerseits,

ich kämpfe lange damit mit einem Problem und ich komme einfach nicht weiter.
Vielleicht könnt ihr mir helfen?

6n9tQ2b

Also wie im Bild zu sehen ist, muss ich das System so befähigen, dass der Parameter_Feld, das unten links zu sehen ist, automatisch mit dem RES_X befüllt wird, sobald die Rechnung oben passiert. Ich brauche dieses Parameter-Feld, denn er wo anders benutzt wird und wegen verscheidene Filter, kann das System auf das linke Seite nicht zugreifen und das einzige Möglichkeit war ein Parameter ausserhalb zu bauen. Jetzt befüllen wir das händisch, ist aber sehr ineffizient, da wir mehrere Felder haben als nur RES_X, viel verschiedene Daten haben und die Felder immer wieder neu befüllen müssen, deshalb wäre es sehr praktisch, wenn das automatisch passiert.

Klingt wie möglich, ist es aber überhaupt sowas möglich?

Im Hintergrund läuft eine Oracle DB und ich kann/darf nur Felder selectieren und die einfachste Schlüsselwörter wie WHERE, AND,OR, CONTAINS, etc benutzen, aber ein UPDATE oder so ähnliches nicht.

Hat jemand eine Idee zu meinem Problem?

Vielen Dank im Voraus!

Viele Grüße :)
 

Anhänge

  • ziel.PNG
    ziel.PNG
    11,5 KB · Aufrufe: 22
Zuletzt bearbeitet:
Werbung:
Minimalbeispiel:

Code:
test=# create table t1(x int);
CREATE TABLE
test=*# create table t2(x int);
CREATE TABLE
test=*# create table parameter (name text, value int);
CREATE TABLE
test=*# insert into parameter (name) values ('res_x');
INSERT 0 1
test=*# insert into parameter (name) values ('res_y');
INSERT 0 1
test=*# insert into parameter (name) values ('res_z');
INSERT 0 1
test=*# commit;
COMMIT
test=#
test=*# create or replace function trg_x() returns trigger as $$begin update parameter set value = (select sum(x) from t1) where name = 'res_x'; return new; end;$$language plpgsql;
CREATE FUNCTION
test=*# create trigger trg1 after insert or update on t1 for each statement execute procedure trg_x();
CREATE TRIGGER
test=*# select * from t1;
 x
---
(0 rows)

test=*# select * from t2;
 x
---
(0 rows)

test=*# select * from parameter ;
 name  | value
-------+-------
 res_x |     
 res_y |     
 res_z |     
(3 rows)

test=*# insert into t1 values (5);
INSERT 0 1
test=*# select * from parameter ;
 name  | value
-------+-------
 res_y |     
 res_z |     
 res_x |     5
(3 rows)

test=*# insert into t1 values (15);
INSERT 0 1
test=*# select * from parameter ;
 name  | value
-------+-------
 res_y |     
 res_z |     
 res_x |    20
(3 rows)

test=*#

Jetzt noch einen TRIGGER für T2 zu schreiben überlasse ich Dir freundlicherweise zur Übung.

PS.: ich verwende PostgreSQL, Syntax in Ora mag anders sein.
 
Vielen Dank für die Antwort.

Ich habe ehrlich gesagt gar keine Ahnung, was da steht. :D
Ich muss mir alles genauer anschauen und schreibe dann wieder.
An alle ein wunderschönen Tag noch :)

LG
 
Ich versteh' das nicht. Wo kommt denn der Wert für RES_X her? Wird der in die Tabelle geschrieben? Ist das ein Parameter für die SQL Abfrage?

Willst Du das beim Ausführen einer SQL Abfrage ersetzen?
Und was bedeutet "sobald die Rechnung oben passiert"? Wie wird die Rechnung denn ausgeführt? Wer oder was führt die Rechnung denn aus?

Es wäre einfacher, wenn Du die Tabellendefinitionen als CREATE TABLE Statements zeigen könntest zusammen mit ein paar INSERT Statements für Beispieldaten und dem Ergebnis was Du erwartest.
 
res_x scheint die Summe aller Werte in einer der Tabellen (Tabelle_1) zu sein. Zumindest interpretiere ich das so. Und das will er (so vermute ich) wieder woanders in einer Tabelle stehen haben. Damit er diesen Wert und einen weiteren berechenbaren Wert einer anderen Tabelle verknüpfen kann. Alles etwas krude ...
 
Hallo,

also ich versuche es noch einmal genauer zu erklären :)

Ich füge wieder ein Bild ein hoch.
Also ich habe 2 Tabellen. In der Tabelle 1 werden die Summen der einzelne Werte ausgegeben (genau wie auf dem Bild zu sehen ist). Diese SUM-Ergebnisse brauche ich aber in eine zweite Tabelle (Tabelle 2). Da ich kein direkten Zugriff von der zweiten auf die Daten der erste Tabelle habe, musste ich mir noch Parameter bauen, wo die Ergebnisse der erste Tabelle manuell eintrage. Erst dann kann die Subtraktion in der Tabelle 2 passieren.

Was ist gerne wollte ist, dass die Parameter-Felder (SUM_X und SUM_Y) nicht manuell, sondern automatisch mit dem Ergebnis-Daten von Tabelle 1 (SUM(x1,x2,x3) und SUM(y1,y2,y3) also die 4 und die 7,6) ausfüllen, da dadurch Zeit gespart wird.

Ich habe die Felder Summe, Maximum und Subtraktion gebaut. Es sind ganz simple Felder. Der Rest ist vorgegeben und hole mir von dem Datenbank. Und wie gesagt die Parameter-Felder sind freie Textfelder so zusagen, wo man was manuell einträgt und erst dann kann die Subtraktion in der Tabelle 2 passieren.

Es gibt sicherlich auch andere Lösungen, die ohne Parameter zu benutzen funktionieren würde, ich konnte es aber einfach nicht anderes lösen und habe Parameter gebaut. Und damit es effizienter ist versuche ich die automatisch befüllen zu lassen.

Ich hoffe ich konnte es diesmal etwas deutlicher erklären. :)

Viele Grüße
 

Anhänge

  • forum.PNG
    forum.PNG
    44,8 KB · Aufrufe: 9
Das klingt alles abenteuerlich - weil alles via SQL abfragbar ist. Im Grunde genommen reicht eine VIEW.

Was willst Du uns mit "Da ich kein direkten Zugriff von der zweiten auf die Daten der erste Tabelle habe," eigentlich sagen?
 
Code:
test=*# select * from t1;
 bezeichnung | wert
-------------+------
 x1          |    2
 x2          |    3
 x3          |   -1
 y1          |    5
 y2          |  0.1
 y3          |  2.5
(6 rows)

test=*# select * from t2;
 bezeichnung | wert
-------------+------
 z1          |    1
 z2          |    2
 z3          |    3
(3 rows)

test=*# create view parameter as select 'sum_4' as bezeichner, sum(wert) as wert from t1 where bezeichnung ~ 'x' union select 'sum_y', sum(wert) from t1 where bezeichnung ~ 'y' union select 'max_z', max(wert) from t2;
CREATE VIEW
test=*# select * from parameter ;
 bezeichner | wert
------------+------
 sum_4      |    4
 max_z      |    3
 sum_y      |  7.6
(3 rows)

test=*#
 
Ja ich brauche auch alles in eine VIEW :)

Also Ich brauche ja die SUM-Felder von Tabelle 1 in die Tabelle 2, damit die Subtraktion passieren kann. Die beide Tabellen haben verschiedene Daten. In Tabelle1 sind die Daten von Tabelle2 rausgefiltert und in die Tabelle 2 sind die Daten von Tabelle 1 gefiltert. Das hat auch seinen Sinn für andere Daten, die ich in die Tabellen nicht gezeigt habe.

LG
 
Werbung:
mal als Anregung...

Code:
test=*# select * from parameter;
 bezeichner | wert
------------+------
 sum_x      |    4
 max_z      |    3
 sum_y      |  7.6
(3 rows)

test=*# select * from parameter union select 'sum_x - max_z', ((select wert from parameter where bezeichner = 'sum_x') - (select wert from parameter where bezeichner = 'max_z'));
  bezeichner   | wert
---------------+------
 sum_x         |    4
 max_z         |    3
 sum_y         |  7.6
 sum_x - max_z |    1
(4 rows)

test=*#

und nun gibt Dir mal etwas Mühe ...
 
Zurück
Oben