Oracle实验代码文档格式.doc
《Oracle实验代码文档格式.doc》由会员分享,可在线阅读,更多相关《Oracle实验代码文档格式.doc(10页珍藏版)》请在冰豆网上搜索。
DECLARE
V_snos.sno%TYPE:
='
&
sno'
;
V_sqtys.sqty%TYPE;
V_snames.sname%TYPE;
BEGIN
V_sqty:
=cx(V_sno,V_sname);
dbms_output.put_line(V_sname||'
供应商'
||V_sno||'
所供应的零件总数为:
'
||V_sqty);
3、定义一个函数:
对于给定的供应商号,判断是否存在,若存在返回0,否则返回-1。
写一段程序调用此函数,若供应商号存在则在spj插入一元组。
CREATEORREPLACEFUNCTIONCZ(cx_snoINs.sno%TYPE)
RETURNNUMBER
IS
jg_snoNUMBER;
SELECTCOUNT(*)INTOjg_snoFROMsWHEREs.sno=cx_sno;
IFjg_sno=0
THEN
RETURN(-1);
ELSE
RETURN0;
endIF;
END;
DECLARE
C_snos.sno%TYPE:
hfNUMBER;
BEGIN
hf:
=CZ(C_sno);
IFhf=0
THEN
dbms_output.put_line(C_sno||'
存在'
);
--INSERTINTOspjVALUES(C_sno,'
ELSE
dbms_output.put_line(C_sno||'
不存在'
ENDIF;
4、定义、调用一个类似于SUM功能的函数:
计算指定供应商编号的供应零件总数量。
CREATEORREPLACEFUNCTIONfun_sum(v_snoINs.sno%TYPE)
RETURNNUMBER
CURSORcur_qtyISSELECTqtyFROMspjWHEREsno=v_sno;
v_sqtyNUMBER:
=0;
tempNUMBER;
FORtempINcur_qtyLOOP
v_sqty:
=v_sqty+temp.qty;
returnv_sqty;
v_snos.sno%TYPE:
v_sqtys.sqty%TYPE;
v_sqty:
=fun_sum(v_sno);
dbms_output.put_line('
供应商号'
||v_sno||'
||v_sqty);
5、将题2中函数改用包定义。
CREATEORREPLACEPACKAGEpkage_spj
FUNCTIONfun_sno(s_snoINs.sno%TYPE,s_snameOUTs.sname%TYPE)
RETURNNUMBER;
endpkage_spj;
CREATEORREPLACEPACKAGEBODYpkage_spj
RETURNNUMBER
AS
v_sqtyNUMBER;
BEGIN
SELECTsname,SUM(qty)INTOs_sname,v_sqtyFROMs,spjWHEREs.sno=spj.snoGROUPBYspj.sno,s.snameHAVINGspj.sno=s_sno;
RETURNv_sqty;
END;
v_snos.sno%TYPE:
='
S1'
v_snames.sname%TYPE;
v_sqtyspj.qty%TYPE;
=pkage_spj.fun_sno(v_sno,v_sname);
dbms_output.put_line(v_sname||'
存储过程的使用
1、定义、调用简单存储过程:
计算所有供应商供应零件总数量并修改供应商相关列sqty。
CREATEORREPLACEPROCEDUREp1
AS
cursorcur_1
is
selectsno,sum(qty)assumqtyfromspjgroupbysno;
forcurincur_1loop
updatessetsqty=cur.sumqtywheres.sno=cur.sno;
endloop;
begin
p1;
end;
2、定义、调用参数存储过程:
查询返回指定供应商的供应零件总数量。
比较与函数不同。
CREATEORREPLACEprocedurep2(sno_snoINs.sno%type,s_snameOUTs.sname%type,v_sqtyouts.sqty%type)
SELECTsname,SUM(qty)INTOs_sname,v_sqtyFROMs,spjWHEREs.sno=spj.snoGROUPBYspj.sno,s.snameHAVINGspj.sno=sno_sno;
v_snames.sname%TYPE;
pro2(v_sno,v_sname,v_sqty);
3、定义、调用存储过程:
插入一个供应商信息(所有信息由参数提供)。
createorreplaceprocedurep3
(s_snoins.sno%type,s_snameins.sname%type,s_statusins.status%type,s_cityins.city%type)
is
v_countnumber;
selectcount(sno)intov_countfromswheres.sno=s_sno;
if(v_count>
0)then
插入的供应商存在'
else
insertintos(sno,sname,status,city)values(s_sno,s_sname,s_status,s_city);
endif;
end;
declare
v_snos.sno%type:
S6'
v_snames.sname%type:
科院'
v_statuss.status%type:
=50;
v_citys.city%type:
十堰'
begin
pro3(v_sno,v_sname,v_status,v_city);
4、定义、调用存储过程:
删除指定代码的零件信息,并给出删除元组数。
CREATEORREPLACEPROCEDUREproc4(p_pnop.pno%type,p_countoutnumber)
deletefromspjwherespj.pno=p_pno;
deletefrompwherepno=p_pno;
v_count:
=sql%rowcount;
p_count:
=v_count;
declare
v_pnop.pno%type:
pno'
proc4(v_pno,v_count);
dbms_output.put_line('
删除元组的数目为:
||v_count);
5、定义、调用存储过程:
修改指定代码项目的其它信息(所有信息由参数提供)。
CREATEORREPLACEPROCEDUREproc5(p_pnop.pno%type,p_pnamep.pname%type,p_colorp.color%type,p_weightp.weight%type)
v_countnumber:
selectcount(p_pno)intov_countfrompwherep.pno=p_pno;
if(v_count=0)
then
dbms_output.put_line('
你所要修改的零件号不存在...'
updatepsetpname=p_pname,color=p_color,weight=p_weightwherep.pno=p_pno;
endif;
v_pnop.pno%type:
v_pnamep.pname%type:
螺丝刀'
v_colorp.color%type:
红'
v_weightp.weight%type:
=15;