日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

SQL*Plus中替换变量与定义变量

發布時間:2024/6/18 数据库 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL*Plus中替换变量与定义变量 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

替換變量

SQL*Plus中的替換變量又叫替代變量,它一般用來臨時存儲相關數據;在SQL語句之間傳遞值。一般使用&或&&前綴來指定替換變量. 關于使用替換變量,一般是利用其創建通用的腳本或達到和用戶交換目的。如下所示:

例如,我需要查看表的相關信息,如果不使用替換變量,每次查詢我都要修改腳本。非常不便,如果使用替換變量,我們可以將下面腳本存放在tab.sql腳本中,每次運行時,只需要輸入替換變量的值就可以了。

COL LOGGING FOR A7;?COL OWNER FOR A12;?COL TABLE_NAME FOR A30?COL TABLESPACE_NAME FOR A30?SELECT OWNER, TABLE_NAME, TABLESPACE_NAME, STATUS, COMPRESSION, LOGGING, PARTITIONED, NUM_ROWS, TO_CHAR(LAST_ANALYZED,'YY-MM-DD HH24:MI:SS') LAST_ANALYZED?FROM DBA_TABLES ? WHERE TABLE_NAME LIKE '&table_name_like%'? ORDER BY TABLE_NAME;?

?

epps> @tab.sqlEnter value for table_name_like: EMPold 4: WHERE TABLE_NAME LIKE '&table_name_like%'new 4: WHERE TABLE_NAME LIKE 'EMP%'?OWNER TABLE_NAME TABLESPACE_NAME STATUS COMPRESS LOGGING PAR NUM_ROWS LAST_ANALYZED------- --------------- ---------------------- -------- -------- ------- --- ---------- -----------------SCOTT EMP USERS VALID DISABLED YES NO 14 09-07-20 22:00:12WIPOWNER EMPLOYEE_MASTER WIPOWNER_DATA VALID DISABLED YES NO 12084 14-09-07 14:08:22?epps> @tab.sqlEnter value for table_name_like: DEPTold 4: WHERE TABLE_NAME LIKE '&table_name_like%'new 4: WHERE TABLE_NAME LIKE 'DEPT%'?OWNER TABLE_NAME TABLESPACE_NAME STATUS COMPRESS LOGGING PAR NUM_ROWS LAST_ANALYZED------- -------------- ------------------ -------- -------- ------- --- ---------- -----------------SCOTT DEPT USERS VALID DISABLED YES NO 4 09-07-20 22:00:12?epps>

如果替換變量為數字類型,那么可以直接是&+變量名稱,如下所示&DEPTNO,

SQL> SELECT deptno, dname, loc 2 FROM SCOTT.DEPT 3 WHERE DEPTNO= &DEPTNO;Enter value for deptno: 10old 3: WHERE DEPTNO= &DEPTNOnew 3: WHERE DEPTNO= 10? DEPTNO DNAME LOC---------- -------------- ------------- 10 ACCOUNTING NEW YORK

如果是字符串類型或日期類型,最好使用單引號將其包裹起來,否則在輸入變量值時則必須加上單引號,不那樣做就會報錯,如下所示。

SQL> SELECT deptno, dname, loc 2 FROM SCOTT.DEPT 3 WHERE DNAME= &DNAME;Enter value for dname: SALESold 3: WHERE DNAME= &DNAMEnew 3: WHERE DNAME= SALESWHERE DNAME= SALES *ERROR at line 3:ORA-00904: "SALES": invalid identifier?SQL> SELECT deptno, dname, loc 2 FROM SCOTT.DEPT 3 WHERE DNAME= &DNAME;Enter value for dname: 'SALES'old 3: WHERE DNAME= &DNAMEnew 3: WHERE DNAME= 'SALES'? DEPTNO DNAME LOC---------- -------------- ------------- 30 SALES CHICAGO

?

關于替換變量中&與&&的區別,兩者區別在于作用范圍不一樣,&引用的替換變量只在當前SQL有效,而&&引用的替換變量則在當前會話有效。下面以人們經常引用的例子來說明

SQL> SELECT 2+&NUM FROM DUAL;Enter value for num: 2old 1: SELECT 2+&NUM FROM DUALnew 1: SELECT 2+2 FROM DUAL? 2+2---------- 4?SQL> SELECT 3+&NUM FROM DUAL;Enter value for num: 3old 1: SELECT 3+&NUM FROM DUALnew 1: SELECT 3+3 FROM DUAL? 3+3---------- 6?SQL> SELECT 2+&&NUM FROM DUAL;Enter value for num: 2old 1: SELECT 2+&&NUM FROM DUALnew 1: SELECT 2+2 FROM DUAL? 2+2---------- 4?SQL> SELECT 3+&&NUM FROM DUAL;old 1: SELECT 3+&&NUM FROM DUALnew 1: SELECT 3+2 FROM DUAL? 3+2---------- 5

?

小知識1:在存儲過程或包體里面,經常有在字符串中使用&的情況,執行腳本時,經常會將這些字符串視為替換變量,要求輸入值,這樣煩不甚煩,其實只需要設置一下SQL*PLUS的環境變量即可避免這種情況。通常通過SET DEFINE OFF

小知識2:如果要顯示SQL*Plus使用替換值替換后的腳本文件,可以使用SET VERIFY ON/OFF 命令

?

SQL> SET VERIFY OFFSQL> SELECT 2+&NUM FROM DUAL;? 2+2---------- 4?SQL> SET VERIFY ONSQL> SELECT 2+&NUM FROM DUAL;old 1: SELECT 2+&NUM FROM DUALnew 1: SELECT 2+2 FROM DUAL? 2+2---------- 4?

?

用戶定義變量

使用DEFINE定義了的變量(或許我們可以叫其定義常量,和C/C++中的DEFINE非常類似),可以使用&引用聲明的變量。其作用范圍或生命周期通常是整個會話。如果定義了變量后,需要清除變量,則可以使用UNDEFINE清除變量,使用DEFINE VARIABLE來查看變量

SQL> DEFINE NUM=2; --定義變量SQL> DEFINE NUM --查看變量DEFINE NUM = "2" (CHAR)SQL> SELECT 2+&NUM FROM DUAL; --引用變量old 1: SELECT 2+&NUM FROM DUALnew 1: SELECT 2+2 FROM DUAL? 2+2---------- 4?SQL> UNDEFINE NUM; --清除變量SQL> SELECT 2+&NUM FROM DUAL; --清除變量后,&NUM變成替換變量了。需要輸入值Enter value for num:

?

小知識點:查看當前會話下,SQL*Plus下定義的變量

SQL> define

DEFINE _DATE = "11-SEP-14" (CHAR)

DEFINE _CONNECT_IDENTIFIER = "epps" (CHAR)

DEFINE _USER = "SYS" (CHAR)

DEFINE _PRIVILEGE = "AS SYSDBA" (CHAR)

DEFINE _SQLPLUS_RELEASE = "1002000400" (CHAR)

DEFINE _EDITOR = "ed" (CHAR)

DEFINE _O_VERSION = "Oracle Database 10g Release 10.2.0.4.0 - Production" (CHAR)

DEFINE _O_RELEASE = "1002000400" (CHAR)

?

?

VARIABLE變量和DEFINE變量不同的是其需要指定變量類型,類似編程語言中的強類型和弱類型變量。前者用于綁定變量,后者是用于&或&&進行變量替換

?

SQL> VAR NUM NUMBER;

SQL> EXEC :NUM :=10;

PL/SQL procedure successfully completed.

SQL> PRINT NUM;

NUM

----------

10

?

DECLARE定義變量則一般用于PL/SQL中。一般大家也用得比較多。在此不做說明。

參考資料:

http://www.doc88.com/p-783671200732.html

http://blog.itpub.net/9933980/viewspace-627702/

http://blog.csdn.net/haiross/article/details/15340489

轉載于:https://www.cnblogs.com/kerrycode/p/3967275.html

總結

以上是生活随笔為你收集整理的SQL*Plus中替换变量与定义变量的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。