Frage

Erstens bezieht sich diese Frage auf Oracle SQL Entwickler 3.2, nicht SQL * Plus oder iSQL usw.Ich habe viel gesucht, aber keine klare Antwort gefunden.

Ich habe mehrere Sammlungen von Skripten, die ich zu automatisieren versuche (und übrigens, meine SQL-Erfahrung ist ziemlich einfach und meistens MS-basiert).Das Problem, das ich habe, ist, sie über einen relativen Pfad auszuführen.nehmen Sie zum Beispiel dieses Setup an:

scripts/A/runAll.sql
       | /A1.sql
       | /A2.sql
       |
       /B/runAll.sql
         /B1.sql
         /B2.sql

Ich hätte gerne eine Datei scripts/runEverything.sql so etwas in der Art:

@@/A/runAll.sql
@@/B/runAll.sql

skripte/A/runAll.SQL:

@@/A1.sql
@@/A2.sql

wo "@@", Ich nehme an, bedeutet relativer Pfad in SQL * Plus.

Ich habe mit Variablen herumgespielt, aber ohne viel Glück.Ich konnte etwas Ähnliches tun mit '&1' und im Stammverzeichnis übergeben.Z.B.:skripte / runenalles.SQL:

@'&1/A/runAll.sql' '&1/A'
@'&1/B/runAll.sql' '&1/B'

und rufe es auf, indem du Folgendes ausführst:

@'c:/.../scripts/runEverything.sql' 'c:/.../scripts'

Aber das Problem hier war das B/runAll.sql wird mit dem Pfad aufgerufen: c:/.../scripts/A/B.

Also, ist es möglich mit SQL Developer verschachtelte Anrufe tätigen und wie?

War es hilfreich?

Lösung

Dieser Ansatz hat zwei Komponenten:

-set-up den Ordner Active SQL Developer Worksheet als Standardverzeichnis.

-Open Ein Treiberskript, z. runall.sql (die dann das Standardverzeichnis in Active Directory ändert) und verwenden Sie relative Pfade innerhalb des runall.sql-Skripts, um Geschwisterskripts aufzurufen.

    .
  1. Richten Sie den Standardordner des Scripts ein. Verwenden Sie in der SQL-Entwickler-Symbolleiste diese Navigation:

    Tools> Einstellungen

    Im Voreinstellungsdialogfeld navigieren Sie zu Datenbank> Arbeitsblatt> Wählen Sie den Standardpfad aus, um nach Skripts zu suchen.

    Geben Sie den Standardpfad ein, um Skripts als aktives Arbeitsverzeichnis zu suchen:

    "$ {file.dir}"

  2. Erstellen Sie eine Skriptdatei und legen Sie alle darin verbundenen Skripts:

    runall.sql

    a1.sql

    a2.sql

    Der Inhalt von runall.sql enthält:

    @ a1.sql;

    @ a2.sql;

  3. Um diesen Ansatz zu testen, klicken Sie in SQL-Entwickler auf Datei und navigieren und öffnen Sie die Datei Script \ runall.sql.

    Wählen Sie All (im Arbeitsblatt) und ausführen.

    Durch den Akt des Navigations- und Öffnens des Runall.SQL-Arbeitsblatts wird der Standard-Datei-Ordner "Skript".

Andere Tipps

Ich habe momentan keinen Zugriff auf SQL Developer, daher kann ich nicht mit den relativen Pfaden experimentieren, aber mit den Substitutionsvariablen glaube ich, dass das Problem, das Sie sehen, darin besteht, dass die Positionsvariablen (dh. &1) werden von jedem neu definiert start oder @.Also nach deinem ersten @runAll, sieht das übergeordnete Skript dasselbe &1 das hat das letzte Kind gesehen, das jetzt die enthält /A.

Sie können dies vermeiden, indem Sie im Masterskript eine eigene Variable definieren:

define path=&1
@'&path/A/runAll.sql' '&path/A'
@'&path/B/runAll.sql' '&path/B'

Solange runAll.sql, und alles, was läuft, nicht auch (neu definieren) path dies sollte funktionieren, und Sie müssen nur einen eindeutigen Namen wählen, wenn die Gefahr eines Konflikts besteht.

Auch hier kann ich das nicht überprüfen, aber ich bin mir sicher, dass ich genau das in der Vergangenheit getan habe...

Sie müssen den Pfad der Datei als Zeichenfolge angeben, den Patch in doppeltem Zitat geben, das funktioniert wird

**

zum Beispiel @ "C: \ Benutzer \ Arpan Saini \ Zions R2 \ Berichte Anweisungen und Notizen \ patch \ 08312017_patch_16.2.3.17 \ db skripts \ snsp.sql";

**

Dies ist kein absolutes oder relatives Pfad-Problem.Es ist das Problem von SQL Interpreter, in dem standardmäßig nach Dateien suchen, die die ASQL-Erweiterung haben.

Bitte stellen Sie sicher, dass der Dateiname in file_name.sql

geändert wird.

ex: Wenn der Arbeitsbereich einen Dateinamen namens "A" hat, verschieben Sie die Datei von A bis "A.SQL"

Ausführung von SQL

generasacodicetagpre.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top