Kennen Sie eigentlich die Pseudospalten von Oracle? Zuerst wird man sich fragen, was sind eigentlich Pseudospalten?
Pseudospalten sind "Spalten", die es in keiner Tabelle wirklich gibt. Sie geben z. B. die aktuelle Zeilennummer der Ausgabe oder die aktuelle IP-Adresse an. Da jede Ausgabe ein SELECT-Statement voraussetzt, muss auch die aktuelle Zeitausgabe in einem SELECT geschrieben werden. In diesem Zusammenhang wird meist die Dual-Tabelle für die Ausgabe benutzt, da diese nur eine Zeile besitzt und damit die Ausgabe auch nur einmal erscheint.
Beispiele:
Wie lautet der aktuelle Benutzer:
SELECT user FROM dual;
USER
------------------
MARCO
Aktuelle Uhrzeit:
SELECT sysdate FROM dual;
SYSDATE
-------------------
30.07.2003 15:02:54
Ist der aktuelle Benutzer als SYSDBA angemeldet ?
SELECT userenv('ISDBA') as SYSDBA from dual;
SYSDBA
------
FALSE
Aktuelles Terminal von dem man arbeitet?
SELECT userenv('TERMINAL') as "Term" from dual;
Term
---------
GOOFY
Aktuelle Einstellung der NLS-Parameter
SELECT userenv('LANGUAGE') as "NLS" from dual;
NLS
------------------------------------------
GERMAN_GERMANY.WE8ISO8859P1
Ab Version 8i wurde userenv durch eine weitere Funktion ergänzt: sys_context
Auswahl der möglichen Parameter (vollständige Liste im Handbuch SQL Reference)
CLIENT_INFO
Gibt 64 Byte über die Usersession zurück, die eine Applikation im Package DBMS_APPLICATION_INFO abgelegt hat.
CURRENT_USER
Aktueller Benutzer der Session
CURRENT_USERID
Aktuelle Benutzer-ID der Session
CURRENT_SCHEMA
Aktuell eingestelltes Schema. Dies kann z. B. durch ALTER SESSION SET CURRENT_SCHEMA=<schema>; eingeschalten werden
CURRENT_SCHEMAID
Id-Nummer des aktuell eingestellten Schemas
DB_DOMAIN
Domain Name der Datenbank die im init.ora Parameter DB_DOMAIN eingetragen wurde
DB_NAME
Datenbank Name der im init.ora Parameter DB_NAME eingetragen wurde
BG_JOB_ID
Job Nummer der aktuellen Session, wenn Sie durch einen Oracle Hintergrundprozess erzeugt wurde. NULL wenn dies nicht der Fall ist
FG_JOB_ID
Job Nummer der aktuellen Session, wenn Sie durch einen Client Prozeß erzeugt wurde. NULL wenn dies nicht der Fall ist
HOST
Rechnername des Clients
INSTANCE
Instanznummer der aktuellen Instanz (meist 1)
IP_ADDRESS
IP Adresse des Clients
ISDBA
TRUE wenn der aktuelle Benutzer die SYSDBA Rolle besitzt. FALSE falls nicht. Fehler in Doku: Hier steht die DBA Rolle!
LANGUAGE
Sprache, Territorum und Zeichensatz der aktuellen Session in der Form: language_territory.characterset
LANG
Länderkürzel (für uns "D")
NETWORK_PROTOCOL
benutztes Netzwerkprotokoll
NLS_TERRITORY
Territorum der aktuellen Session
NLS_CURRENCY
Währung der aktuellen Session
NLS_CALENDAR
Kalender der aktuellen Session
NLS_DATE_FORMAT
Datumsformat der aktuellen Session
NLS_SORT
Sortierreihenfolge der aktuellen Session
SESSION_USER
Benutzer der aktuellen Session, wie er authentifiziert wurde
SESSION_USERID
Benutzer-ID der aktuellen Session, wie er authentifiziert wurde
OS_USER
Betriebsystemuser der die Verbindung zur DB aufgebaut hat
SESSIONID
Session ID für Auditing
TERMINAL
Terminal Name für aktuelle Session
SELECT SYS_CONTEXT('USERENV','LANG') from dual;
SYS_CONTEXT('USERENV','LANG')
-----------------------------------
D
SELECT SYS_CONTEXT('USERENV','OS_USER') from dual;
SYS_CONTEXT('USERENV','OS_USER')
-------------------------------------------------------
marco
Bitte nehmen Sie mich in den Verteiler der monatlichen Tipps & Tricks auf.