1. 程式人生 > 其它 >oracle 儲存過程 變數的宣告和賦值的3種方式

oracle 儲存過程 變數的宣告和賦值的3種方式

oracle 儲存過程 變數的宣告和賦值的3種方式

Created by Marydon on 2018-08-31 19:05

1.宣告變數的3種方式

  按照資料型別的宣告方式進行區分

  方式一:直接宣告資料型別

  格式:變數名 資料型別(大小)

1 2 V_START_DATE VARCHAR2(19); v_num number;

  說明:

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

  變數的宣告必須在"begin"關鍵字之前進行。

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

  方式二:使用%TYPE宣告

  格式:變數名 表名.欄位名%TYPE

  含義:該變數的資料型別與指定表的指定欄位的資料型別一致

1 V_ORGSEQ BASE_ORG_INFO.ORGSEQ%TYPE;

  方式三:使用%ROWTYPE宣告

  格式:變數名 表名%ROWTYPE

  含義:該變數的資料型別與指定表的指定行記錄(所有欄位)的資料型別一致

1 2 --VIRTUAL_CARD表整行資料 V_ROW_VIRTUAL_CARD VIRTUAL_CARD%ROWTYPE; 

  小結:

  在儲存過程中,宣告變數時,不需要使用關鍵字"DECLARE";

 

  變數不區分大小寫;

  變數在使用前必須宣告。

2.變數賦值的3種方式

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

  使用條件:適用於宣告變數的前2種方式。

1 V_ORGID := '110';  

  說明:

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

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

  變數的宣告和賦值可以一塊進行。

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

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

  變形一:查詢指定表的一個指定欄位

  使用條件:適用於宣告變數的前2種方式可以使用

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

  變形二:查詢指定表的所有欄位

  使用條件:只適用於宣告變數的第3種方式

1 2 --將id=5120的VIRTUAL_CARD表資料賦值給變數V_ROW_VIRTUAL_CARD SELECT * INTO V_ROW_VIRTUAL_CARD FROM VIRTUAL_CARD T where t.id = 5120;

  說明:

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

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

  錯誤舉例:

1 2 3 4 --錯誤舉例一:查詢的是所有表記錄 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 變數

1 2 3 4 5 6 7 8 9 10 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種使用場景:賦值、邏輯判斷、算術運算;

  說明:不能用作查詢列

1 2 --錯誤呼叫 select V_ORGSEQ from dual;

  使用%ROWTYPE宣告的變數如何呼叫?

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

1 2 3 4 --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);  
好的程式碼像粥一樣,都是用時間熬出來的