Oracle-Sql-Developer
在 SQL 查詢中包含 SQL 文件
在 Oracle SQL Developer 中,有沒有辦法在 SQL 查詢中包含 SQL 文件?就像
\include{myfile.tex}
LaTeX 中的命令一樣。例子:
file1.sql
包含FROM my_table;
file2.sql
包含SELECT * \include{file1.sql}
從 Oracle SQL Developer執行
file2.sql
應該等同於執行SELECT * FROM my_table;
.
您可以使用 sqlplus(可能還有 SqlDeveloper)的一些功能來模仿您想要的行為。
這是開始命令
和變數替換功能。
我們要執行
SQLPLUS> select * 2 from dual;
這導致
D - X
我們現在通過以下方式實現請求的文件
文件 1.sql:
@file2.sql select * &FROM_CLAUSE /
文件2.sql
define FROM_CLAUSE='from dual'
這給出了 sqlplus 輸出
SQLPLUS> @file1 old 2: &FROM_CLAUSE new 2: from dual D - X
sqlplus 顯示變數及其值。您可以通過將屬性 VERIFY 設置為 OFF 來抑制它
SQLPLUS> set VERIFY OFF SQLPLUS> @file1.sql D - X
您可以重新定義 FROM_CLAUSE 變數並使用它,如 file3.sql 所示
set verify off @file2.sql select * &FROM_CLAUSE / @file4.sql select * &FROM_CLAUSE /
文件 4.sql
define FROM_CLAUSE='from dual , - dual b'
define 子句可以通過以減號“-”字元結束每一行來分佈在多於一行。但是 sqlplus 會將它加入一行。我現在無法將多行塊分配給變數。
這導致
SQLPLUS> @file3 D - X D D - - X X
這是另一個例子
文件 5.sql
@file6.sql select &TABLE_ALIAS..dummy &FROM_CLAUSE &WHERE_CLAUSE &GROUP_CLAUSE &ORDER_CLAUSE /
文件6.sql
define TABLE_ALIAS=a define FROM_CLAUSE='from dual a, - dual b' define WHERE_CLAUSE=' ' define GROUP_CLAUSE=' ' define ORDER_CLAUSE='order by 1'
這給了
SQLPLUS> @file5 D - X
在這裡您可以看到後綴“.sql”在 sqlplus 中可以省略。如果表示一行的變數不應該包含任何值,它應該至少是一個空白,空字元串將在 sql 語句中引發錯誤
SQLPLUS> define ORDER_BY='' SQLPLUS> select * 2 from dual 3 &ORDER_BY; SP2-0341: line overflow during variable substitution (>3000 characters at line 3)
一個點字元 ‘.’ 終止一個變數名,所以如果你想在變數名後面加一個點,你必須添加一個額外的點。
這也適用於 SQL Developer,只是要注意相對目錄和絕對目錄之間的區別。