Oracle常用命令10(程式包)

2022-08-05 02:18:19 字數 3456 閱讀 6250

程式包:程式包規範、主體兩部分組成

程式包規範

create [or replace] package package_name

is|as

[public item declarations]

[subprogram specification]

end [package_name];

程式包主體

create [or replace] package body package_name is|as

[private item declarations]

[subprogram bodies]

[begin

initialization]

end [package_name];例1

:--使用者註冊(使用者名稱不能重複)、登陸、所有使用者資訊的程式包

--程式包的宣告

create or replace package package_user

is--

宣告乙個引用游標

type t_cursor is ref cursor;

--返回所有使用者資訊

procedure proc_userget(curuser out t_cursor);

--註冊

procedure proc_useradd(p_name varchar2,p_realyname varchar2, p_password varchar2,p_tel varchar2, p_email varchar2,p_address varchar2, issuccess out number);

--登入

procedure proc_login(p_name varchar2,p_password varchar2, issuccess out number);

end package_user;

程式包的主體:

create or replace package body package_user

is--

返回所有使用者資訊

procedure proc_userget(curuser out t_cursor)

isbegin

open curuser for select * from usertab;

end;

--註冊使用者

procedure proc_useradd(p_name varchar2,p_realyname varchar2, p_password varchar2,p_tel varchar2, p_email varchar2,p_address varchar2, issuccess out number)

iscount_add number(4);

begin

//判斷使用者是否存在

select count(*) into count_add from usertab where u_name=p_name;

if count_add<1 then

insert into usertab values(seq_user.nextval,p_name,p_realyname,p_password,p_tel, p_email,p_address);

issuccess := 1;

dbms_output.put_line('

註冊成功

');else

issuccess := 0;

dbms_output.put_line('

使用者名稱已存在,請重新註冊!

');end if;

exception

when others then

dbms_output.put_line('

錯誤!');

end;

--登入

procedure proc_login(p_name varchar2,p_password varchar2, issuccess out number)

is count_add number(4);

begin

select count(*) into count_add from usertab where u_name=p_name and u_password=p_password;

if count_add<1 then

issuccess := 0;

dbms_output.put_line('

你的使用者或密碼不正確

,請重新登入!

');else

issuccess := 1;

dbms_output.put_line('

登入成功

!');

end if;

exception

when others then

dbms_output.put_line('

錯誤!');

end;

end;

程式包的測試:

--測試:註冊

declare

issuccess number(4);

begin

package_user.proc_useradd('zhongzi2','

周姿','zhongzi','2526294','[email protected]','

湖南省湘潭

', issuccess) ;

dbms_output.put_line( issuccess );

end;

--測試:登陸

declare

issuccess number(4);

begin

package_user.proc_login('zhongzi2','zhongzi', issuccess) ;

dbms_output.put_line( issuccess );

end;

--測試:得到所有使用者資訊

declare

type user_curtype is ref cursor;

curuser user_curtype;

rowuser usertab%rowtype;

begin

package_user.proc_userget(curuser) ;

loop

fetch curuser into rowuser;

dbms_output.put_line('

編號:' || rowuser.u_id || '

使用者名稱:

' ||rowuser.u_name);

exit when curuser%notfound;

end loop;

end;

顯示建立的子程式和程式包的資訊

select * from user_objects;

顯示儲存子程式和程式包的源**

select line, text from user_sourc where name='

過程名';

Oracle常用命令10 oracle例外處理

例外傳遞 如果不處理例外我們看看會出現什麼情況 案例,編寫乙個過程,可接收雇員的編號,並顯示該雇員的姓名。問題是,如果輸入的雇員編號不存在,怎樣去處理呢?例外案例 declare 定義 v ename emp.ename type begin 執行 select ename into v ename...

Oracle常用命令10 oracle例外處理

例外傳遞 如果不處理例外我們看看會出現什麼情況 案例,編寫乙個過程,可接收雇員的編號,並顯示該雇員的姓名。問題是,如果輸入的雇員編號不存在,怎樣去處理呢?例外案例 declare 定義 v ename emp.ename type begin 執行 select ename into v ename...

Oracle 常用命令

1 檢視當前所有物件 sql select from tab 2 建乙個和a表結構一樣的空表 sql create table b as select from a where 1 2 sql create table b b1,b2,b3 as select a1,a2,a3 from a whe...