So,
das ganze unter IBExpert.
-
DB registrieren
- dann bei Procedures Rechts-Klick New(Neu)
- auf der rechten Seite in der Toolbar "LazyMode aus"
(das ist links vom Compile, also dem Blitz)
- alles aus dem Editor rauslöschen
- jetzt gaaanz nach oben , ALLES raus
(der Cursor steht nicht in der 1. Zeile)
- Folgendes von Hand eintippen
Schlaue Leute Copy&Paste *fg*
SQL-Code:
Create Procedure SP_GETROLESONUSER (
THEUSERNAME VarChar(31))
Returns (
THEROLES VarChar(31))
As
Begin
For Select
rdb$user_privileges.rdb$relation_name as RoleName
From
rdb$user_privileges
Where
(rdb$user_privileges.rdb$user=:TheUserName) and
(rdb$user_privileges.rdb$object_type=13) into :TheRoles do
Begin
Suspend;
End
End
- Compile (der Blitz)
- die Meldung bestätigen
- F12 (
Query-Editor)
select * from SP_GETROLESONUSER('KLU');
- F9
Ergebnis sind die Roles (auch mehrere).
Diese "selectable stored procedure" wird also wie eine
Query benutzt,
die allerdings einen Parameter hat.
Kurze Erklärung:
- THEUSERNAME ist der Input-Parameter
es wird Groß-Buchstaben verlangt
sonst muesste man in der SP ein
(rdb$user_privileges.rdb$user=:TheUserName)
schreiben.
- THEROLES ist Ausgabeparameter
- Das "For Select Into" erzeugt einen Cursor
- das Suspend wartet solange, bis der Client den Datensatz abholt (fetch)
UND WOZU DAS ALLES ?
1.
Der Code kann von verschiedenen Programmen benutzt werden.
2.
Die gleiche SP, allerdings mit einem anderen Code intern,
kann man für mehrere Datenbanken (Oracle) schreiben
Heiko
PS:
Die SP hat nichts mit der Role-Zuweisung zu tun,
dafür gibt es GRANT.