Procedure Language主要是oracle對語言能力的增加,讓if語言有了條件判斷,和for循環的處理能力,
文法 :主要分為倆部分,聲明部分,邏輯部分
declare
//這是聲明部分
begin
//這是邏輯部分
end; //結束,
下面我們就來輸出一句話, ‘hello word’
declare
str varchar2() := 'hello world' //聲明一個字元串變量,并且指派
begin
dbms_output.put_line(str);
end;
輸出結果如下
學習玩輸出語句後,我們做一個小練習
-- 輸出7369的工資
declare
--聲明一個變量
str emp.sal%type; --類型的話,這樣寫類型就跟表中的sal類型一緻了
begin
select sal into str from emp where empno = ;
dbms_output.put_line(str);
end;
– 輸出7369的部門和姓名
declare
str emp%rowtype; --這樣寫就相當于是一個對象類型
begin
select * into str from emp where empno = ;
dbms_output.put_line(str.empno||' '||str.ename);
-- '||' 符号主要是用來拼接字元串的
end;
輸出結果如下
if條件判斷
文法
if 條件 than
elsif 條件 than
else
– 根據不同年齡輸出資訊
declare
age number := &aaa; --這樣寫的意思相當是 scanner,值是使用者輸入的
begin
if age > then
dbms_output.put_ling('未成年人');
elsif age > then
dbms_output.put_line('中年人');
else
dbms_output.put_line('長輩');
end if;
end;
運作結果如下
輸出結果如下, 想必大家猜到我輸入的是什麼了,永遠十八歲,
三種循環
- while循環
- for循環
- loop循環
while循環示範
declare
i number := ;
begin
while i <= loop
dbms_output.out_line(i);
i := i + ;
end loop;
end;
運作結果如下
for循環
文法
for 變量名 in 起始值..結束值 loop
end loop;
使用for我們不用聲明變量,因為底層會幫我們聲明
declare
begin
for i in loop
dbms_output.put_line(i);
end loop;
end;
運作結果如下
loop循環
文法
loop
輸出語句
--根據條件來退出循環
exit when 條件
end loop;
代碼示範
declare
n number := ;
begin
loop
dbms_output.put_line('pipixia :'||n);
exit when n>;
n := n+;
end loop;
end;
輸出結果 如下
遊标
相當是對結果集的封裝, 相當于是jdbc中的ResultSet
文法:
聲明 遊标
cursor 遊标名 is 查詢語句
cursor 遊标名(參數名 參數類型) is 查詢語句 where empno=參數名
demo
declare
--聲明遊标
cursor demo is select * from emp;
--聲明變量
vrow emp%rowtype;
begin
--打開遊标
open demo;
loop
fetch demo into vrow;
exit when demo%notfound;
dbms_output.put_line(vrow.ename);
end loop;
--關閉遊标
close demo;
end;
查詢結果如下
需求
– 輸出指定部門的員工資訊
declare
--聲明遊标
cursor demo(v_deptno number ) is select * from emp where deptno = v_deptno;
--聲明常量
v_row emp%rowtype;
begin
--開啟角标
open demo();
--開啟循環
loop
--移動角标
fetch demo into v_row;
--如果沒有查詢到,就退出循環
exit when demo%notfound;
--輸出列印
dbms_output.put_line(v_row.ename);
end loop; --循環末尾
--關閉角标
close demo;
end;
輸出結果如下
遊标練習
– 按照職位漲工資,總裁漲1000 , 經理漲800 , 其他人漲400
declare
--聲明遊标
cursor demo is select * from emp;
--聲明常量
v_row emp%rowtype;
begin
--開啟遊标
open demo;
loop
--移動角标
fetch demo into v_row;
--如果沒有發現就退出循環
exit when demo%notfound;
--如果工作是 漲800
if v_row.job = 'MANAGER' then
update emp set sal = sal + where empno = v_row.empno;
--如果工作是boss 漲1000
elsif v_row.job = 'PRESIDENT' then
update emp set sal = sal + where empno = v_row.empno;
else
--漲400
update emp set sal = sal + where empno = v_row.empno;
end if;
end loop;
--關閉遊标
close demo;
--送出事務
commit;
end;
擴充: 使用for循環周遊遊标
declare
--聲明遊标
cursor demo is select * from emp;
begin
--周遊遊标
for v_row in demo loop;
dbms_output.put_line(v_row.ename);
end loop;
以上就是一些簡單的知識,多敲敲就會了,,每個語言剛開始都是痛苦的,,,