Oracle中定義變數

2021-10-12 04:23:13 字數 4404 閱讀 4043

關鍵字:declare

1、定義變數:

例如:declare i int :=1;

其中:=是賦值運算子

declare

i int :=0;

s int :=0;

begin

loop

i:=i+1;

s:=s+i;

exit

when i=

100;

--這裡不是賦值用「=」

endloop

; dbms_output.put_line(s)

;end

;

2、定義陣列變數(長度不可變的):

declare

type type_array is varray(3)

ofint

; a type_array:=type_array(1,

2,3)

;--此處不能是:a type_array

begin

--然後如此: a:=(1,2,3) 先定義再賦值會報錯

for i in

1..a.count

loop

dbms_output.put_line(a(i));

endloop

;end

;

其中type_array可以隨便取名

3、%type:

為了是乙個變數的型別與另乙個已經定義的變數的型別一致,oracle提供了%type

-- 建立test2

create

table test2

( id number(8)

primary

keynot

null

, name char(8

)not

null

, age number(8)

null

, *** char(2

)null

, hobby varchar2(

200)

null);

insert

into test2 values(1

,'齊天大聖',12

,'男'

,'打妖怪');

insert

into test2 values(2

,'豬八戒',45

,'男'

,'吃貨');

insert

into test2 values(5

,'紫霞仙子',22

,'女'

,'至尊寶');

insert

into test2 values(6

,'哇哈哈',34

,'女'

,'睡覺'

);

例如:

declare 

a test2.name%

type

;-- a是定義的新的變數,型別與表test2的name列的型別一致

begin

select name into a from test2 where id=2;

-- select 列名 into 變數名 from

dbms_output.put_line(a)

;end

;

4、%rowtype

如果乙個表有較多的列,使用%rowtype來定義乙個表示表中一行記錄的變數,比分別使用%type來定義表示表中各個列的變數要簡潔得多,並且不容易遺漏、出錯。這樣會增加程式的可維護性。

declare 

a test2%rowtype;

begin

select

*into a from test2 where id=2;

--其中查詢的是全部的列,否則會報錯

dbms_output.put_line(a.id)

;dbms_output.put_line(a.name)

;dbms_output.put_line(a.age)

;dbms_output.put_line(a.***)

;dbms_output.put_line(a.hobby)

;end

;

5、輸出函式:

declare 

a number(

2) :=6;

begin

dbms_output.put_line(a)

;-- begin開始,end結束,注意加分號

end;

6、exception異常處理:

declare 

a test2.age%

type

;begin

select age into a from test2 where id=10;

--這裡沒有id=10的資料,輸出「id號不存在」字樣

if a>

100then

--滿足條件就更新對應的值

update test2 set age=

10where id=10;

endif

; exception

when no_data_found then

--when...then

dbms_output.put_line(

'id號不存在');

end;

declare

cursor a is

select

*from test2;

b a%rowtype;

begin

open a;

--迴圈之前先開啟游標

loop

fetch a into b;

--游標的值賦給定義的變數

exit

when a%notfound;

dbms_output.put_line(b.id||

','||b.name||

','||b.age||

','||b.***)

;end

loop

;close a;

--結束迴圈,關閉游標

end;

declare 

a test2.name%

type

; b test2.id%

type

; c number(2)

;begin

b:=&x;select name into a from test2 where id=b;

if a=

'齊天大聖'

then c:=1;

elsif a=

'豬八戒'

then c:=3;

--這裡是elsif,不是elseif,或者else if

else c:=10;

endif

;update test2 set age=age+c where id=b;

exception

when no_data_found then

dbms_output.put_line(

'輸入的id不存在');

9、上面的if可以換為case,會更簡潔:

declare 

a test2.name%

type

; b test2.id%

type

; c number(2)

;begin

b:=&x;select name into a from test2 where id=b;

case a

when

'齊天大聖'

then c:=1;

when

'豬八戒'

then c:=3;

else c:=10;

endcase

;update test2 set age=age+c where id=b;

exception

when no_data_found then

dbms_output.put_line(

'輸入的id不存在');

end;

ORACLE 變數定義

1 declare 2 v productid productinfo.productid type 3 v productname varchar2 20 4 v productprice number 8,2 5 v quantity number 10 6 v desperation cons...

oracle游標中可以定義變數

2008 03 07 skate 游標中可以定義變數,下面是乙個例子,關於我更新欄目排序的procedure create or replace procedure test as v id varchar2 v num number v x number i number 10,0 1 v id ...

Oracle定義常量和變數

1.定義變數 變數指的就是可變化的量,程式執行過程中可以隨時改變其資料儲存結構 標準語法格式 變數名 資料型別 長度 初始值 示例 declare v name varchar2 100 jack 定義的乙個name變數,並且賦予初始值 begin v name 張三 dbms output.put...