APEX 19.1 Interactive Grid (IG) - zusätzliche Spalten
Mit Version 19.1. werden die IG in APEX noch besser benutzbar (Detail u.a. bei Carsten hier: https://blogs.oracle.com/apex/new-declarative-options-for-interactive-grid)
Ein Problem bleibt:
Wenn über der Tabelle myTAB1 das IG aufgesetzt wird funktioniert alles super.
Will man aus myTAB2 weitere Daten auch nur anzeigen wirds schwierig: APEX reklamiert fehlende Berechtigungen für myTAB2, obwohl es hier nur select-Rechte benötigt.
Also ein select für das Grid auf eine Tabelle ist kein Problem:
SELECT Col1_A
, Col1_B
, Col1_C
FROM myTAB1;
Soll aus myTAB2 z.B. eine Summe angezeigt werden, wirds spannender:
SELECT Col1_A
, Col1_B
, Col1_C
, D.Anz
FROM myTAB1
JOIN ( SELECT Col2_A, COUNT (*) Anz
FROM myTAB2
GROUP BY Col2_A) D
ON D.Col2_A = myTAB1.Col1_C;
Folgende ToDo's helfen:
Grid-Eigenschaften
1) Spalte auf "Query Only" setzen (Spalte -> Source / Query Only = Yes)
2) ggfs. Spalte auf "Display only" setzen (Spalte -> Identification / Type = Display only)
Prozess-Eigenschaften:
3) Row-Locking abschalten (Prozess -> Settings / Lock Row = No)
Hat APEX keine Schreibrechte auf myTAB2 (und soll/darf diese auch nicht bekommen) geht es so leider nicht. Meine Lösung:
Grid wieder auf "einfach SQL" setzen:
SELECT Col1_A
, Col1_B
, Col1_C
, col1_D
FROM myTAB1;
Dann zusätzlich eine Spalte anlegen (Create Column). Diese mit "Display only" und "Query only" erstellen. Als Source aber SQL Expression (statt Database Column) einstellen. Damit wird diese Spalte wirklich nur gelesen, weitere Rechte sind nicht nötig.
Als Column-SQL sowas eintragen:
(
WITH sel AS
(
SELECT Col2_A
, Col2_B
FROM myTAB2
)
SELECT sel.Col2_B
FROM sel
WHERE sel.Col2_A = Col1_C
)
Wobei Col1_C den "Link" zur Grid-Abfrage herstellt.
Das äußere Select darf nur eine Spalte zurückgeben.
Das Ganze muss in Klammern gesetzt sein, sonst ist es kein SQL Expression.
Evtl. geht das auch einfacher. Entsprechende Hinweise gern als Kommentar hinterlassen.
Damit klappts auch mit Zusatzspalten :-)
Ein Problem bleibt:
Wenn über der Tabelle myTAB1 das IG aufgesetzt wird funktioniert alles super.
Will man aus myTAB2 weitere Daten auch nur anzeigen wirds schwierig: APEX reklamiert fehlende Berechtigungen für myTAB2, obwohl es hier nur select-Rechte benötigt.
Also ein select für das Grid auf eine Tabelle ist kein Problem:
SELECT Col1_A
, Col1_B
, Col1_C
FROM myTAB1;
Soll aus myTAB2 z.B. eine Summe angezeigt werden, wirds spannender:
SELECT Col1_A
, Col1_B
, Col1_C
, D.Anz
FROM myTAB1
JOIN ( SELECT Col2_A, COUNT (*) Anz
FROM myTAB2
GROUP BY Col2_A) D
ON D.Col2_A = myTAB1.Col1_C;
Folgende ToDo's helfen:
Grid-Eigenschaften
1) Spalte auf "Query Only" setzen (Spalte -> Source / Query Only = Yes)
2) ggfs. Spalte auf "Display only" setzen (Spalte -> Identification / Type = Display only)
Prozess-Eigenschaften:
3) Row-Locking abschalten (Prozess -> Settings / Lock Row = No)
Hat APEX keine Schreibrechte auf myTAB2 (und soll/darf diese auch nicht bekommen) geht es so leider nicht. Meine Lösung:
Grid wieder auf "einfach SQL" setzen:
SELECT Col1_A
, Col1_B
, Col1_C
, col1_D
FROM myTAB1;
Dann zusätzlich eine Spalte anlegen (Create Column). Diese mit "Display only" und "Query only" erstellen. Als Source aber SQL Expression (statt Database Column) einstellen. Damit wird diese Spalte wirklich nur gelesen, weitere Rechte sind nicht nötig.
Als Column-SQL sowas eintragen:
(
WITH sel AS
(
SELECT Col2_A
, Col2_B
FROM myTAB2
)
SELECT sel.Col2_B
FROM sel
WHERE sel.Col2_A = Col1_C
)
Wobei Col1_C den "Link" zur Grid-Abfrage herstellt.
Das äußere Select darf nur eine Spalte zurückgeben.
Das Ganze muss in Klammern gesetzt sein, sonst ist es kein SQL Expression.
Evtl. geht das auch einfacher. Entsprechende Hinweise gern als Kommentar hinterlassen.
Damit klappts auch mit Zusatzspalten :-)
Kommentare
Kommentar veröffentlichen