先申明我不是牛x,所有有錯的地方,希望廣大讀友能提醒俺一下!
1.兩個常用異常處理
declare
v_empno emp.empno%type;
v_ename emp.ename%type;
begin
v_empno:=&請輸入工號
select ename into v_ename
from emp e where e.empno!=v_empno;
dbms_output.put_line(v_ename);
exception
when no_data_found then
dbms_output.put_line('沒有資料!');
when too_many_rows then
dbms_output.put_line('行太多!');
end;
2.return使用,隱式游標。自動,用於返回單行結果集
注意:經俺親手測試,boolean不能列印輸出!
3.獲取指定員工資訊(是通過先做判斷資料是否存在,後在查詢)
declare
v_empno emp.empno%type;
v_row emp%rowtype;
v_count number(1);
begin
v_empno:=&請輸入工號;
select count(*) into v_count
from emp where empno=v_empno;
if(v_count=1)then --先判斷
select * into v_row from emp e
where e.empno=v_empno;
dbms_output.put_line(v_row.ename||','||v_row.sal);
else
null;
end if;
end;
4.游標for迴圈(重點)需要對查詢中的每條記錄逐一處理時
例子:輸出員工不為7566的資訊
begin
for s in (select * from emp where empno!=7566)
loop
dbms_output.put_line(s.empno||','||s.ename||','||s.sal);
end loop;
end;
5.顯示游標,使用cursor游標物件
技巧:dofw [declare-open-fetch-while] (重點)
1)使用cursor游標物件步驟:
①定義游標 declare cursor游標物件名 is (sql); •
②定義行變數 行變數游標物件名%rowtype;
③開啟游標 open游標物件名;
④迴圈游標 fetch 游標物件名 into 行變數;
while(游標物件名%found)
loop...end loop;
⑤關閉游標 close;
2)示例:列印各部門資訊
declare
cursor my_cur is (select * from dept);
my_row my_cur%rowtype;
begin
open my_cur;
fetch my_cur into my_row; --先獲取資料後游標下移
while(my_cur%found)
loop
dbms_output.put_line(my_row.deptno||','||my_row.dname);
fetch my_cur into my_row;
end loop;
close my_cur;
end;
6.在pl/sql裡執行字串操作
1)execute語句 execute immediate'ddl語句'/ 'select語句'into變數
示例:建立一張表t_53
declare
v_sql varchar2(4000); --在pl/sql操作列時,數值的長度<=4000byte
begin
v_sql:='create table t_53 (t_id number(2))';
execute immediate v_sql;
end;
2)執行多行查詢(open..for)
①游標變數(游標變數也是變數)
②變數需要定義型別
③型別需要自定義
示例:查詢工資大於3000的所有員工編號與名字
declare
type my_cur_type is ref cursor; --型別需要自定義,這裡的型別是引用游標
my_cur_var my_cur_type; --變數需要型別
my_row emp%rowtype;
begin
open my_cur_var for 'select * from emp where sal>=3000'; --游標變數也是變數
fetch my_cur_var into my_row; --後面與顯示游標相同
while(my_cur_var%found)
loop
dbms_output.put_line(my_row.empno||','||my_row.ename);
fetch my_cur_var into my_row;
end loop;
close my_cur_var;
end;
PL SQL 動態SQL 游標
1.使用動態sql可以在依賴物件不存在時建立子程式 2.動態sql主要利用execute immediate語句執行dml ddl dcl等語句操作 3.如果使用了繫結變數,則必須在execute immediate中使用using字句設定所需要的繫結變數 4.使用returning或return語...
PL SQL 游標使用
set serveroutput on declare 定義游標,預設輸入引數值為4000 cursor cur emp var sal in varchar2 4000 is select empno,ename,job from emp where sal var sal 定義record變數,...
避免在 PL SQL 中使用巢狀游標查詢
考慮下面的 pl sql 這段 生成乙個 xml 格式的矩陣樣式的報表 declare l count integer begin dbms output.put line generate matrix of parts by country forpart in select id,descri...