sql >> Databáze >  >> RDS >> Oracle

Spusťte SCRIPT z PL/SQL Block

Je 2012 2017. Skripty jsou neohrabaná a křehká kocovina z minulého tisíciletí. Oracle má fantastickou škálu funkcí, které můžeme provádět v PL/SQL, plus jsou zde uložené procedury Java a plánování spouštění úloh. Kromě spouštění DDL k vytváření nebo úpravě schémat nejsou v databázovém prostředí Oracle téměř žádné potřeba skripty; dokonce i skripty DDL by měly být spouštěny z externího klienta, pravděpodobně z nástroje pro vytváření, jako je TeamCity.

Za architektonické selhání bych považoval zejména pokus o spuštění SQL skriptu z programu PL/SQL. Co děláte se skriptem, co nemůžete dělat s uloženou procedurou?

Pokud jde o předávání vstupu do uložené procedury, k tomu slouží parametry. PL/SQL není interaktivní, potřebujeme klienta, aby zadal hodnoty. V závislosti na scénáři to lze provést asynchronně (hodnoty v souboru nebo tabulce) nebo synchronně (volání uložené procedury z SQL*Plus, SQL Developer nebo zakázkového frontendu).

Po tom všem, v reálném světě pracujeme s chaotickými architekturami se vzájemnými závislostmi mezi databází a externím OS. Co tedy můžeme dělat?

  1. Můžeme napsat Java Stored Procedure pro provádění příkazů shellu. Toto je úctyhodné řešení, které existuje již od Oracle 8i. Zjistěte více.
  2. V 10g Oracle nahraďte DBMS_JOB za DBMS_SCHEDULER. Jedním z vylepšení tohoto nástroje je jeho schopnost spouštět externí úlohy, tj. skripty shellu. Zjistěte více.
  3. Vzhledem k tomu, že externí tabulky Oracle 11g R1 podporují předprocesorové skripty, které spouštějí příkazy shellu před dotazem na tabulku. Zjistěte více.

Všimněte si, že všechny tyto možnosti vyžadují zvýšený přístup (udělení pro objekty DIRECTORY, bezpečnostní pověření atd.). Ty mohou udělovat pouze privilegovaní uživatelé (tj. DBA). Pokud naše databáze nemá úžasně laxní konfiguraci zabezpečení, neexistuje způsob, jak spustit libovolný shell skript z PL/SQL.

Konečně není jasné, jaký přínos očekáváte od spuštění SQL skriptu v PL/SQL. Pamatujte, že PL/SQL běží na databázovém serveru, takže nevidí skripty na klientském počítači . To se zdá být relevantní ve světle požadavku na přijetí uživatelského vstupu.

Snad nejjednodušším řešením je překonfigurování původního skriptu. Rozdělte potřebné volání PL/SQL do bloku a pak už jen zavolejte pojmenovaný skript:

begin
   proc(para1,para2);
end;
/   
@prompt1.sql


  1. Jak najít položku seznamu na zadané pozici v SQL Server

  2. Jak naformátovat číslo jako měnu v Oracle

  3. Nejlepší úložiště dat pro miliardy řádků

  4. MSDTC na serveru „server není k dispozici“