程式包:程式包規範、主體兩部分組成
程式包規範
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...