儲存過程練習

2022-08-01 03:12:11 字數 2876 閱讀 6238

--游標為輸出引數

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 as

a 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...