Oracle-Sql-Developer

在 SQL 查詢中包含 SQL 文件

  • February 27, 2022

在 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*Plus 中,使用 @filename ( http://docs.oracle.com/cd/E11882_01/server.112/e16604/ch_five.htm#i1210918 )執行外部腳本。

這也適用於 SQL Developer,只是要注意相對目錄和絕對目錄之間的區別。

引用自:https://dba.stackexchange.com/questions/117790