PDA

View Full Version : Aus welcher Bibliothek wird gelesen



Seiten : [1] 2

mk
23-11-17, 14:05
Hallo zusammen,

in einem SQLRPGLE müsste ich an einer Stelle wissen aus welcher Bibliothek die Daten kommen.

Das SQL sieht bspw. so aus :

select xxx from table

Wenn aus Bibliothek A gelesen wird, dann soll eine Weiterverarbeitung stattfinden
Wenn nicht dann etwas anderes.

Das Register current Schema liefert mir nur *LIBL

exec sql
values current_schema into :avar;

In der SCLCA sieht man im Feld SQLERM die Bibliothek

SQLERM OF SQLCA = ....5...10...15...20...25...30...35...40...45...50 ...55...60 1 ' SQLDATA SYTBLH01V MKLIB

Gibt es dafür auch ein Register ?

Gruß
Michael

Fuerchau
23-11-17, 15:19
SQL-technisch ist das nicht vorgesehen, da hilft nur ein CLP/CLLE mit dem guten halten RTVOBJD ... RTNLIB(&Lib).
Allerdings solltest du dann keine OVRDBF's verwenden;-).

Robi
23-11-17, 15:58
Kannst du die datei nicht in der F-Karte definieren und bei
if *in99 and not *in99 im pgm lesen?

Die File infDs sagt dir die Lib, das sollte auch die sein, die SQL verwendet

Robi

Fuerchau
23-11-17, 16:42
"In der SCLCA sieht man im Feld SQLERM die Bibliothek"
Was brauchst du da denn noch mehr?

Robi
23-11-17, 16:50
OK, das hatte ich überlesen und habs noch nie gebraucht

Fuerchau
23-11-17, 17:00
Ich auch nicht und ich hatte es auch übersehen.
Ich weiß auch nicht, ob dann alle Libs eines Joins aus mehreren Libs drinstehen.
So groß ist das Feld ja nicht.

B.Hauser
23-11-17, 17:09
Ich gehe davon aus, dass Du mit System-Naming arbeitest und deshalb die Bibliotheksliste durchsuchen musst. (Bei SQL-Naming sollte das Current_Schema über GET DIAGNOSITICS ermittelt werden können)

Hier 2 Ansätze für System-Naming:
1. API QDBRTVSN (Retrieve Short System Name)
Das API ermittelt den System-Namen der Datei/Tabelle/View, sowie die erste Bibliothek in der das Objekt gefunden wird.

2. Wenn Du den Datei/Tabellen/View-Namen kennst, dann durchsuch' einfach die Bibliotheksliste, etwa so:

Select Schema_Name
from Library_List_Info join SysTables on Schema_Name = Table_Schema
Where Table_Name = 'YOURTABLE'
Order By Ordinal_Position
Fetch First Row Only;

Birgitta

mk
24-11-17, 07:17
Hallo zusamen,

danke für die Tipps.

Ich habe es jetzt so gelöst:

exec sql
SELECT ORDINAL_POSITION into :posTestLibrary
FROM QSYS2/LIBRARY_LIST_INFO
where SYSTEM_SCHEMA_NAME = 'dieLib';

Damit bekomme ich die Position der Bibliothek in der *LIBL.
Somit kann ich in diesem Fall festellen ob zuerst die Testlib oder die Prodlib
in der *LIBL steht.

Für diesen Fall ist es ausreichend.

Schönes WE an alle
Gruß
Michael

Fuerchau
24-11-17, 07:43
Steht da auch die Current Library drin?
Die liegt noch vor der Liste und könnte die Testlib sein.

mk
24-11-17, 08:19
Hi,

die Current Library steht von der Position her vor den User Bibliotheken.
Somit kann auch die Testlib die Current Lib sein.