Erstellen eines Oracle-Benutzers, wenn dieser noch nicht existiert

8

Ich versuche, ein Skript zu erstellen, das Benutzer erstellt, wenn sie nicht bereits vorhanden sind .

%Vor%

Der folgende Fehler wird angezeigt:

  

SQL-Fehler: ORA-00922: fehlende oder ungültige Option

Ich konnte dies in SQL Server 2008 mithilfe von

tun %Vor%

Gibt es eine ähnliche Vorgehensweise in Oracle, um zu überprüfen, ob ein Benutzer bereits existiert, bevor Sie versuchen, einen neuen Benutzer zu erstellen?

    
Kyle Williamson 08.06.2015, 13:53
quelle

3 Antworten

11

Die in SQL Server verfügbare IF NOT EXISTS -Syntax ist in Oracle nicht verfügbar.

Im Allgemeinen führen Oracle-Skripte einfach die CREATE -Anweisung aus, und wenn das Objekt bereits existiert, erhalten Sie einen Fehler, der darauf hinweist, dass Sie dies ignorieren können. Dies ist alles, was alle Oracle-Bereitstellungsskripts tun.

Wenn Sie jedoch wirklich auf Existenz prüfen möchten und nur ausführen, wenn das Objekt nicht existiert, vermeiden Sie den Fehler. Sie können also ein PL/SQL codieren. Block. Schreibe ein SQL , das nach dem Vorhandensein des Benutzers sucht, und wenn es nicht existiert, benutze EXECUTE IMMEDIATE , um CREATE USER vom PL/SQL Block zu machen.

Ein Beispiel für einen solchen PL / SQL-Block könnte sein:

%Vor%

Ich hoffe, das hilft.

    
Mark J. Bobak 08.06.2015, 14:19
quelle
3

Sie müssen einen PL / SQL-Block schreiben. Siehe ein Beispiel hier

Sie können prüfen, ob der Benutzer in der all_users-Tabelle existiert, indem Sie einen pl / sql-Code wie:

verwenden %Vor%

und verwenden Sie dann v_count_user in einer IF-Bedingung, um die create user-Anweisung bedingt auszuführen.

    
6ton 08.06.2015 14:10
quelle
1

Aus den vorherigen Antworten geht hervor, dass if not exists in Oracle nicht unterstützt wird. Um zu klären, welche Fehler von Oracle ausgelöst werden, wenn versucht wird, einen bereits vorhandenen Benutzer zu erstellen (und als Bonus, wenn ein nicht existierender Benutzer gelöscht werden soll):

%Vor%

Die obigen Anweisungen wurden auf Oracle Database 11g Enterprise Edition Version 11.2.0.1.0 - 64-Bit-Produktion

ausgeführt     
Emil G 25.11.2016 09:47
quelle

Tags und Links