關鍵字: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...