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

Generování SQL*Plus skriptu pomocí SQL*Plus

Problém je v tom, že SQL*Plus interpretuje váš první ; jako terminátor příkazu. Možná jste si všimli, že pokud zapíšete příkazy do textového souboru a provedete jej (nebo jej upravíte v textovém editoru pomocí SQL*Plus), funguje to.

Aby to fungovalo s živým psaním, pokud to opravdu chcete udělat (zdá se to nepravděpodobné, pokud budou velmi dlouhé!), můžete vypnout automatickou detekci terminátoru pomocí SET SQLTERMINATOR off . Všimněte si, že budete muset říct SQL*Plus, že jste skončili a že by se měl spustit pomocí / instrukce jako druhý ; je také ignorováno.

SQL> SPOOL myscript.sql
SQL> SET SQLTERMINATOR off
SQL> SELECT q'[SPOOL log
  2  SELECT COUNT(*) FROM DUAL;
  3  PROMPT Done.
  4  ]' FROM DUAL
  5  /
SPOOL log
SELECT COUNT(*) FROM DUAL;
PROMPT Done.

Pokud je vytváříte z datového slovníku, další možností je použít PL/SQL k provádění dotazů a manipulací a dbms_output k vytvoření výstupu, který chcete zařadit, pokud konečná velikost souboru nepřekročí limity vyrovnávací paměti.



  1. Laravel Neznámý sloupec 'updated_at'

  2. PostgreSQL 11 - Procedury

  3. Potíže s levým spojováním tabulek panda (ValueError:Pokoušíte se sloučit sloupce object a int64.)

  4. Oracle Select * vrátí řádky, ale Select count(1) vrátí 0