首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 教學

Oracle SQL*Plus 變量使用詳解:DEFINE 與 ACCEPT 命令實戰

     編輯:Oracle 教學

Oracle SQL*Plus 變量使用詳解:DEFINE 與 ACCEPT 命令實戰

在 SQL*Plus 中,用戶變量可用於參數化查詢、腳本復用與交互式輸入。定義變量主要有 DEFINE 與 ACCEPT 兩種方式,刪除用 UNDEFINE。

一、DEFINE 命令

語法說明
DEFINE顯示所有已定義變量
DEFINE var_name顯示指定變量名、值、類型
DEFINE var_name = value創建 CHAR 類型變量並賦初值

示例


SQL> DEFINE temp = 20
SQL> DEFINE temp
DEFINE TEMP = "20" (CHAR)

SQL> SELECT * FROM dept WHERE deptno > &temp;
-- SQL*Plus 解析為:
SELECT * FROM dept WHERE deptno > 20;

結果:


DEPTNO DNAME          LOC
---------- -------------- -------------
30      SALES          CHICAGO
40      OPERATIONS     BOSTON

二、ACCEPT 命令(交互式輸入,支持類型/格式/掩碼)


ACCEPT variable [datatype] [format] [default] [prompt text | noprompt] [hide]
選項說明
datatypeNUMBER / CHAR / DATE / BINARY_FLOAT / BINARY_DOUBLE
format如 999、99.99、MM/DD/YYYY 等格式掩碼
default用戶直接回車時的預設值
prompt提示文本
hide隱藏輸入(密碼場景)
noprompt無提示直接讀取

示例:數字類型帶格式提示


SQL> ACCEPT test NUMBER FORMAT 999 PROMPT '請輸入一個數字: '
請輸入一個數字: 20

SQL> SELECT * FROM dept WHERE deptno > &test;
-- 解析為 deptno > 20

結果同前。

示例:密碼隱藏輸入


SQL> ACCEPT pwd CHAR PROMPT 'Enter password: ' HIDE
Enter password: 
-- 螢幕不回顯字符

三、變量引用規則

  • &var_name:替換變量值(掃描一次)
  • &&var_name:定義全局變量,首次提示輸入後複用,不再提示
  • SET DEFINE OFF:關閉變量替換(防止 & 被誤識別)
  • SET DEFINE ON:啟用(默認)
  • SET SCAN ON/OFF:同 DEFINE(舊版本語法)

四、UNDEFINE 刪除變量


UNDEFINE temp
UNDEFINE test

五、最佳實踐建議

  1. 腳本參數化優先用 ACCEPT + 類型檢查,避免注入風險。
  2. 敏感信息(密鑰、密碼)務必加 HIDE。
  3. 複雜腳本建議使用 BIND 變量 (VARIABLE) 而非替換變量,性能更優、類型更安全。
  4. 批量腳本執行前用 DEFINE 確認變量值,防止殘留值導致邏輯錯誤。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved