oracle 存儲過程 變量的聲明和賦值的3種方式


1.聲明變量的3種方式

  按照數據類型的聲明方式進行區分

  方式一:直接聲明數據類型

  格式:變量名 數據類型(大小)

V_START_DATE VARCHAR2(19);
v_num number;

  說明:

  設置為字符串類型時,需要指定大小,否則報錯;

  變量的聲明必須在"begin"關鍵字之前進行。

--錯誤用法
BEGIN
v_sql varchar2(100) := 'SELECT ORGSEQ FROM BASE_ORG_INFO where orgcode=to_char(410621101233)';

  方式二:使用%TYPE聲明

  格式:變量名 表名.字段名%TYPE

  含義:該變量的數據類型與指定表的指定字段的數據類型一致

V_ORGSEQ BASE_ORG_INFO.ORGSEQ%TYPE;

  方式三:使用%ROWTYPE聲明

  格式:變量名 表名%ROWTYPE

  含義:該變量的數據類型與指定表的指定行記錄(所有字段)的數據類型一致

--VIRTUAL_CARD表整行數據
V_ROW_VIRTUAL_CARD VIRTUAL_CARD%ROWTYPE; 

  小結:

  在存儲過程中,聲明變量時,不需要使用關鍵字"DECLARE"; 

  變量不區分大小寫;

  變量在使用前必須聲明。

2.變量賦值的3種方式

  方式一:直接賦值,使用":="

  使用條件:適用於聲明變量的前2種方式。

V_ORGID :=  '110';  

  說明:

  變量后面跟不能直接是sql語句,sql不會執行,可以參考方式三。

--錯誤用法
V_ORGSEQ := SELECT ORGSEQ INTO V_ORGSEQ FROM BASE_ORG_INFO;
--正確用法
V_ORGSEQ := 'SELECT ORGSEQ INTO V_ORGSEQ FROM BASE_ORG_INFO';

  變量的聲明和賦值可以一塊進行。

--正確用法
v_sql varchar2(100) := 'SELECT ORGSEQ FROM BASE_ORG_INFO where orgcode=to_char(410621101233)';
BEGIN
 /* 具體業務 */
END;

  方式二:select 表字段 into 變量 from 表

  變形一:查詢指定表的一個指定字段

  使用條件:適用於聲明變量的前2種方式可以使用

--根據醫療機構ID查詢對應的父機構的機構序列
SELECT ORGSEQ INTO V_ORGSEQ FROM BASE_ORG_INFO
 WHERE ORGID =
       (SELECT PARENTORGID FROM BASE_ORG_INFO WHERE ORGID = V_ORGID);

  變形二:查詢指定表的所有字段

  使用條件:只適用於聲明變量的第3種方式

--將id=5120的VIRTUAL_CARD表數據賦值給變量V_ROW_VIRTUAL_CARD
SELECT * INTO V_ROW_VIRTUAL_CARD FROM VIRTUAL_CARD T where t.id = 5120;

  說明:

  查詢結果只能返回一條記錄;

  查詢的表字段必須是該表的所有字段。

  錯誤舉例:

--錯誤舉例一:查詢的是所有表記錄
SELECT * INTO V_ROW_VIRTUAL_CARD FROM VIRTUAL_CARD T;
--錯誤舉例二:查詢的是該表的多個字段
SELECT t.id,t.name INTO V_ROW_VIRTUAL_CARD FROM VIRTUAL_CARD T;  

  方式三:execute immediate sql語句字符串 into 變量

declare/* 存儲過程,不需要聲明 */
  v_sql varchar2(100);
  V_ORGSEQ varchar2(100);
begin
  v_sql := 'SELECT ORGSEQ FROM BASE_ORG_INFO where orgcode=to_char(410621101233)';
  --V_ORGSEQ賦值
  execute immediate v_sql INTO V_ORGSEQ;
  --打印結果
  DBMS_OUTPUT.put_line(V_ORGSEQ);
END;

3.變量的調用

  一般來說,變量只有這3種使用場景:賦值、邏輯判斷、算術運算;

  說明:不能用作查詢列

--錯誤調用
select V_ORGSEQ from dual;

  使用%ROWTYPE聲明的變量如何調用?

  利用"變量名.表字段"的方式可以取到該表中指定行(返回行)的指定列(任意列)所代表的數據。

--V_ROW_VIRTUAL_CARD賦值
SELECT * INTO V_ROW_VIRTUAL_CARD FROM VIRTUAL_CARD T where t.id = 5120;
--調用
DBMS_OUTPUT.put_line(V_ROW_VIRTUAL_CARD.ID);  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM