課程
/數(shù)據(jù)庫
/Oracle
/Oracle數(shù)據(jù)庫開發(fā)必備利器之PL/SQL基礎
1.寫一個存儲過程? 輸入:員工編號? 輸出: 如果這個存在,則輸出部門編號,如果部門不存在,則輸出0? 部門存在,則顯示這個部門的所有的員工的信息
2017-03-28
源自:Oracle數(shù)據(jù)庫開發(fā)必備利器之PL/SQL基礎 3-2
正在回答
/*1.寫一個存儲過程? 輸入:員工編號? 輸出: 如果這個存在,則輸出部門編號,如果部門不存在,則輸出0? 部門存在,則顯示這個部門的所有的員工的信息SQL語句:select depno from emp where empno = ??;判斷存在一條記錄,或者不存在記錄,有兩種方式實現(xiàn)1. 通過系統(tǒng)例外NO_DATA_FOUND實現(xiàn)2. 通過游標屬性%notfound實現(xiàn)--這里選擇通過游標實現(xiàn)select * from emp;--集合-->游標-->循環(huán)-->退出條件:%notfound變量:初始值? 如何得到v_depno number :=0;v_empno number := &empno;*/set serveroutput onaccept empno prompt 'Please input empno:';declare --定義游標?? ?cursor c_emp(t_empno number) is select depno from emp where empno = t_empno;?? ?v_depno emp.depno%type; --所有員工信息的游標?? ?cursor c_all_emp is select * from emp;?? ?v_all_emp emp%rowtype;--定義輸入接收的變量?? ?v_empno number := &empno;begin?? ?--打開光標?? ?open c_emp(v_empno);?? ?--得到部門號?? ?fetch c_emp into v_depno;?? ?if c_emp%notfound then?? ??? ?dbms_output.put_line('0部門存在.');?? ??? ?--輸出所有員工信息?? ??? ?--打開所有員工游標?? ??? ?open c_all_emp;?? ??? ?loop?? ??? ??? ?--得到一個員工的信息?? ??? ??? ?fetch c_all_emp into v_all_emp;?? ??? ??? ?exit when c_all_emp%notfound;?? ??? ??? ?--打印一個員工的信息?? ??? ??? ?dbms_output.put_line(v_all.emp.empno||' '||v_all_empno.depno||'...');?? ??? ??? ??? ??? ?end loop;?? ??? ?--關閉所有員工游標?? ??? ?close c_all_emp;?? ?else?? ??? ?dbms_output.put_line('depno is '||v_depno);?? ?end if;--關閉光標?? ?close c_emp;end;/
qq__5778 提問者
舉報
Oracle數(shù)據(jù)庫高級開發(fā)必備的基礎,通過實例帶你熟練掌握
1 回答游標的問題
2 回答游標的使用
1 回答為什么要用游標呢?
1 回答游標遍歷后的數(shù)據(jù)是否還存在
2 回答光標的問題
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網(wǎng)安備11010802030151號
購課補貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動學習伙伴
掃描二維碼關注慕課網(wǎng)微信公眾號
2017-03-29
/*
1.寫一個存儲過程
? 輸入:員工編號
? 輸出: 如果這個存在,則輸出部門編號,如果部門不存在,則輸出0
? 部門存在,則顯示這個部門的所有的員工的信息
SQL語句:
select depno from emp where empno = ??;
判斷存在一條記錄,或者不存在記錄,有兩種方式實現(xiàn)
1. 通過系統(tǒng)例外NO_DATA_FOUND實現(xiàn)
2. 通過游標屬性%notfound實現(xiàn)
--這里選擇通過游標實現(xiàn)
select * from emp;
--集合-->游標-->循環(huán)-->退出條件:%notfound
變量:初始值? 如何得到
v_depno number :=0;
v_empno number := &empno;
*/
set serveroutput on
accept empno prompt 'Please input empno:';
declare
--定義游標
?? ?cursor c_emp(t_empno number) is select depno from emp where empno = t_empno;
?? ?v_depno emp.depno%type;
--所有員工信息的游標
?? ?cursor c_all_emp is select * from emp;
?? ?v_all_emp emp%rowtype;
--定義輸入接收的變量
?? ?v_empno number := &empno;
begin
?? ?--打開光標
?? ?open c_emp(v_empno);
?? ?--得到部門號
?? ?fetch c_emp into v_depno;
?? ?if c_emp%notfound then
?? ??? ?dbms_output.put_line('0部門存在.');
?? ??? ?--輸出所有員工信息
?? ??? ?--打開所有員工游標
?? ??? ?open c_all_emp;
?? ??? ?loop
?? ??? ??? ?--得到一個員工的信息
?? ??? ??? ?fetch c_all_emp into v_all_emp;
?? ??? ??? ?exit when c_all_emp%notfound;
?? ??? ??? ?--打印一個員工的信息
?? ??? ??? ?dbms_output.put_line(v_all.emp.empno||' '||v_all_empno.depno||'...');
?? ??? ??? ?
?? ??? ?end loop;
?? ??? ?--關閉所有員工游標
?? ??? ?close c_all_emp;
?? ?else
?? ??? ?dbms_output.put_line('depno is '||v_depno);
?? ?end if;
--關閉光標
?? ?close c_emp;
end;
/