[declare]
--宣告變數
begin
-- 程式體
[exception]
--例外;異常
end;
--declare和exception部分可以沒有,但是begin部分和end必須要有。
--定義變數
declare
--變數的賦值
--方式一:使用:=進行賦值;
--普通的變數
i number(10) := 1;
begin
--輸出i的值到控制檯中
dbms_output.put_line('i的值:'||i);
-- 對i加1 輸出
i := i+1;
dbms_output.put_line('i+1的值:'||i);
end;
--定義變數
declare
--記錄型變數:行型別
pemp emp%rowtype;
begin
--給行型別的變數賦值: 使用關鍵字 into
--方式二:使用select..into子句進行賦值;
select * into pemp from emp where empno=7369;--輸出行型別變數到控制檯中
dbms_output.put_line(pemp.ename||'============='||pemp.job);
end;--使用select...into子句進行賦值時,變數的資料型別要與表中欄位的資料型別一致.--變數的特殊型別:--%rowtype:指定該變數與某個表的結構相同。--該型別的變數可以用來儲存表的一行資料;
--定義變數
declare
--引用型變數:引用某張表的某列的型別
pname emp.ename%type;
--pname varchar2(1); --普通begin
--賦值:給引用型變數賦值
select ename into pname from emp where empno=7788;--輸出
dbms_output.put_line(pname);
end;--變數的特殊型別:--%type:指定該變數的型別與表的某列的資料型別相同;
運算子
-- := 賦值運算子--普通的變數
i number(10) := 1;
-- .. 範圍運算子--我插入100萬條資料到person表createtable person(
id number(10) primarykey,
name varchar2(200),
gender number(1) default1
);--plsql去插入一百萬條資料到person表中--介紹oracle的uuid的方法select sys_guid() from dual;--建立序列create sequence seq_test;--新增100W條記錄
declare
pname varchar2(200);
beginfor i in1..1000000 loop
select sys_guid() into pname from dual;insertinto person values(seq_test.nextval,pname,1);end loop;commit;end;
while迴圈:
while 條件 loop--迴圈體endloop;
loop迴圈:
loopexitwhen 退出條件;
--迴圈體endloop;
for迴圈:
for 變數 in [reverse] 開始值..結束值
loop--迴圈體endloop;
--&val 即為控制檯輸入
--求1到&val的和
declare
i number(10) :=1;
val number(10):=&val;
sums number(10):=0;
beginwhile i<=val loop
sums:= sums+i;
i :=i+1;
end loop;
dbms_output.put_line(sums);
end;
declare
i number(10):=1;
val number(10):=&val;
sums number(10):=0;
begin
loop
exit when i>val;
sums:=sums+i;
i:=i+1;
end loop;
dbms_output.put_line(sums);
end;
declare
val number(10):=&val;
sums number(10):=0;
beginfor i in1..val loop
sums:=sums+i;
end loop;
dbms_output.put_line(sums);
end;
declare
i number(10);
--行型別
pemp emp%rowtype;
begin
--給i賦值
--i := 1/0;
--i := 'abc';
--模擬異常:找多條資料給行型別賦值會出現異常
select * into pemp from emp;
exception
when zero_divide then
dbms_output.put_line('分母不能為零');when value_error then
dbms_output.put_line('型別轉換異常');when too_many_rows then
dbms_output.put_line('期望一條資料,但是返回多條');when others then
dbms_output.put_line('親,有異常要處理');end;