--游標為輸出引數create or replace procedure pro_emp_select(empsal out sys_refcursor)as
begin
open empsal for select empno,sal from emp ;
end pro_emp_select;
--呼叫
declare
v_no emp.empno%type;
v_sal emp.sal%type;
emp_sal sys_refcursor;
begin
pro_emp_select(emp_sal);
loop
fetch emp_sal into v_no,v_sal;
exit when emp_sal%notfound;
dbms_output.put_line('編號
'||v_no||'
薪水'||v_sal);
end loop;
close emp_sal;
end;
--游標為輸入引數create or replace procedure pro_emp_in(empsal in sys_refcursor)as
v_no emp.empno%type;
v_sal emp.sal%type;
begin
loop
fetch empsal into v_no,v_sal;
exit when empsal%notfound;
dbms_output.put_line('編號
'||v_no||'
薪水'||v_sal);
end loop;
end pro_emp_in;
declare
emp_sal sys_refcursor;
begin
open emp_sal for select empno,sal from emp;
pro_emp_in(emp_sal);
close emp_sal;
end;
自主事務處理:
自主事務:是由零乙個事務啟動的獨立事務處理。自主事務處理可以暫停主事務處理,也就是處理自己儲存過程內部的事務,當自主事務處理完之後會恢復主事務處理。
pragma autonomous_transaction; --定義為自主事務,不受其他事務提交,回滾的影響
例:
--儲存過程和事務的用法(主事務)create or replace procedure pro_emp1 as
b varchar(
50);
begin
update employees e set e.name='
白貓警長
'where e.id='0'
; pro_emp2();
select ee.name into b from employees ee
where ee.id='0'
; dbms_output.put_line(b);
end;
create or replace procedure pro_emp2 asa varchar2(
50);
pragma autonomous_transaction;--定義為自主事務處理
begin
select e.name into a from employees e
where e.id='0'
; dbms_output.put_line(a);
rollback;
end;
--呼叫begin
pro_emp1();
end;
函式
--無引數模式create or replace function func_datetime return varchar2 is
begin
return to_char(sysdate,
'yyyy"年"mm"月"dd"日"hh24"時"mi"分"ss"秒"');
end func_datetime;
--呼叫
begin
dbms_output.put_line(func_datetime);
end;
--判斷是否是星期六日(輸入型別引數in)--呼叫create or replace function func_isholiday(p_date date) return integer is
v_weekday integer := -1; --儲存今天是星期幾
begin
select to_char(p_date, 'd
') into v_weekday from dual; --自動進行型別轉換
if v_weekday
< 2 or v_weekday > 6
then
return 1;
else
return 0;
end if;
end func_isholiday;
declare
vdate date:=date'2012-12-1';--宣告乙個日期型的變數
begin
dbms_output.put_line(func_isholiday(vdate));
end;
儲存過程練習
insert into person values 1 zdw zdw test1 insert into person values 2 test test test2 insert into person values 3 admin admin admin3 在儲存過程中使用子查詢 creat...
小練習 分頁儲存過程
create database dbtest use dbtest if exists select from sysobjects where name pagetest drop table pagetest go 建立測試表 create table pagetest id int ident...
Oracle 儲存過程練習小樣例
建立更新的儲存過程,輸錯訂單號顯示訂單不存在 create or replace procedure upd shipdate orderid number,shipdate date ise no row exception begin update ord set v shipdate ship...