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

2021-09-25 20:37:43 字數 2883 閱讀 5670

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

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

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

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種方式。

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種使用場景:賦值、邏輯判斷、算術運算;

說明:不能用作查詢列

--錯誤呼叫

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);

Oracle儲存過程給變數賦值的方法

截止到目前我發現有三種方法可以在儲存過程中給變數進行賦值 1 直接法 如 v flag 0 2 select into 如 假設變數名為v flag,select count into v flag from students 3 execute immediate 變數名 一般是sql的selec...

Oracle的儲存過程。

近日,因為工作需要,時間投入到寫儲存過程的中。下面貼上儲存過程。進行分析,以便自己記憶,和朋友分享儲存過程的寫法。曾幾何時,認為儲存過程很難,現在看來也並非如此。此儲存過程乃是我們用到遞迴刪除。宣告乙個帶引數的儲存過程,引數都是varchar型,如果帶有輸出引數的話,引數後面跟的型別必須有個out ...

oracle的儲存過程

以前一直對oracle的儲存過程概念很模糊,今天來複習一下 第一步 開啟輸出 set serveroutput on 第二步 建立表空間 create tablespace test data logging datafile d test.dbf size 50m autoextend on ne...