版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第7章
过程、函数和程序包
7.1子程序
7.2程序包
7.3小结
习题七
上机实验七
7.1子程序
以前我们写的PL/SQL语句程序都是瞬时的,都没有命名。其缺点是:在每次执行的时候都要被编译,并且不能被存储在数据库中,其他PL/SQL块也无法调用它们。现在我们把命名的PL/SQL块叫做子程序,它们存储在数据库中,可以为它们指定参数,可以在数据库客户端和应用程序中调用。命名的PL/SQL程序包括存储过程和函数。程序包是存储过程和函数的集合。
子程序结构与PL/SQL匿名块的相同点在于都由声明、执行、异常三大部分构成,不同之处在于,PL/SQL匿名块的声明可选,而子程序的声明则是必需的。子程序的优点如下:
(1)模块化:通过子程序可以将程序分解为可管理的、明确的逻辑模块。
(2)可重用性:子程序在创建并执行后,就可以在任何应用程序中使用。
(3)可维护性:子程序可以简化维护操作。
(4)安全性:用户可以设置权限,保护子程序中的数据,只能让用户提供的过程和函数访问数据。这不仅可以让数据更加安全,同时可保证正确性。
子程序有两种类型:过程和函数。其中,过程用于执行某项操作;函数用于执行某项操作并返回值。
7.1.1过程
1.过程的创建和执行
过程可使用createprocedure语句创建,语法如下:
createorreplaceprocedure[<方案名>.]<存储过程名>
[parameterlist]
{Is|as}
[local_declarations];
Begin
executablestatements
[exception]
[Exception_handlers]
End[procedure_name];
保留字Is前面的过程定义称为过程头。
过程头包括过程名和具有数据类型的参数列表。过程体包括声明部分、执行部分和异常处理部分。过程体从保留字Is之后开始。其中,声明部分和异常处理部分是可选的;
执行部分至少包含一条语句。这里的Is|as就相当于declare声明部分,除了拥有前面的一个过程声明语句外,其他和以前的匿名PL/SQL块一样。其中,replace表示在创建存储过程中,如果已经存在同名的存储过程,则重新创建;如果没有此关键词,则当数据库中有同名的过程时会报错“ORA-00955号错误:名称已被现有对象占用”。必须将同名的过程删除后才能创建。
1)创建不带参数的过程。
【例7.1】
创建一个过程multiplication,用来实现九九乘法表。
SQL>createorreplaceproceduremultiplication
2as
3iinteger;
4jinteger;
5begin
6dbms_output.put_line('printmultiplication');
7foriin1..9loop
8forjin1..9loop
9ifi>=jthen
10dbms_output.put(to_char(j)||'*'||
11to_char(i)||'='||to_char(i*j)||'');
12endif;
13endloop;
14dbms_output.put_line('');
15endloop;
16end;
17/
过程已创建。
出现编译错误的时候可以用showerror或者descuser_errors来调试。
2)执行过程
创建过程的时候并不会执行过程,必须在这之后调用过程来执行。执行过程的方法有两种:一种是在SQL提示符下,使用execute语句来执行过程;另一种是在匿名块中调用。
execute执行过程的语法如下:
executeprocedure_name(parameters_list);【例7.2】
执行multiplication过程。
SQL>setserverouton--将SQL*Plus的输出打开
SQL>executemultiplication--执行过程multiplication用execute命令。
printmultiplication
1*1=1
1*2=22*2=4
1*3=32*3=63*3=9
1*4=42*4=83*4=124*4=16
1*5=52*5=103*5=154*5=205*5=25
1*6=62*6=123*6=184*6=245*6=306*6=36
1*7=72*7=143*7=214*7=285*7=356*7=427*7=49
1*8=82*8=163*8=244*8=325*8=406*8=487*8=568*8=64
1*9=92*9=183*9=274*9=365*9=456*9=547*9=638*9=729*9=81
PL/SQL过程已成功完成。
【例7.3】
在匿名块中调用过程multiplication。
SQL>begin
2multiplication;
3end;
4/
程序运行结果同上。
2.创建建带参参数的的过程程调用程程序通通过参参数可可向被被调用用子程程序传传递值值。在在上述述语法法[parameterlist]中,参参数的的具体体形式式如下下:<参数数1,[方式1]<数据据类型型1>,<参数数2,[方式2]<数据据类型型2>,…参数方方式有有以下下三种种:(1)IN表示接接受值值为默默认值值。(2)OUT表示将值返返回给子程程序的调用用程序。(3)INOUT表示接受值值并返回已已更新的值值。参数的书写写格式为::[(参数1IN| OUT |INOUT参数类型,参数2
IN| OUT |INOUT参数类型,,…)]。参数IN模式是默认认模式。如如果未指定定参数的模模式,则认认为该参数数是IN参数。对于于OUT和INOUT参数,必须须明确指定定,并且这这两种类型型的参数在在返回到调调用环境之之前必须先先赋值。IN参数可以在在调用时赋赋默认值,,而OUT参数和INOUT参数不可以以。1)创建带带IN模式参参数的过程【例7.4】创建一个过程程,以雇员号号为参数查询询雇员的姓名名和职位。SQL>createorreplaceprocedurequeryEmpName(sFindNoemp.EmpNo%type)2as3sNameemp.ename%type;4sJobemp.job%type;5begin6selectename,jobintosName,sJobfromemp7whereempno=sFindNo;8dbms_output.put_line('IDis'||sFindNo||'dezhigongnameis'||9sName||'gongzuois'||sJob);10exception11whenno_data_foundthen12dbms_output.put_line('nodata');13whentoo_many_rowsthen14dbms_output.put_line('toomanydata');15whenothersthen16dbms_output.put_line('error');17end;18/过程已创建。。【例7.5】执行queryEmpName过程。SQL>execqueryEmpName('7900');IDis7900dezhigongnameisJAMESgongzuoisCLERK同样,也可通通过匿名块调调用过程queryEmpName。SQL>Begin2queryEmpName('7900');3end;4/2)创创建带OUT模模式参数数的过程程【例7.6】创建一个个过程,,以雇员员号查询询雇员的的薪水。。SQL>createorreplaceprocedurequeryEmpSal(sFindNoemp.EmpNo%type,v_saloutemp.sal%type)2as3begin4selectsalintov_salfromemp5whereempno=sFindNo;6dbms_output.put_line('Thesalaryof'||sFindNo||'is:'||v_sal);7exception8whenno_data_foundthen9dbms_output.put_line('nodata');10whentoo_many_rowsthen11dbms_output.put_line('toomanydata');12whenothersthen13dbms_output.put_line('error');14end;/过程已创建建。此过程带有有一个输入入参数sFindNo和输出参数数v_sal,程序根据据输入参数数到表中查查询记录,,以返回该该员工的薪薪水值。【例7.7】执行queryEmpSal过程。可以声明一一个变量,,用如下的的方式调用用该过程。。SQL>varsalarynumber;SQL>execqueryEmpSal('7900',:salary);Thesalaryof7900is:950PL/SQL过程已成功功完成。另外,也可可以从一个个匿名的PL/SQL程序中执行行上述过程程,以显示示sal_out变量的输出出结果。以以下代码可可以显示queryEmpSal过程的返回回值。Declarevaluenumber;BeginqueryEmpSal(7934,value);DBMS_OUTPUT.PUT_LINE('VALUE的值为'||to_char(value));End;/3)创建建带INOUT模模式参数的的过程【例7.8】创建两个数数进行交换换的过程。。SQL>createorreplaceprocedureswap(p1INOUTnumber,p2INOUTnumber)2as3tempnumber;4begin5temp:=p1;6p1:=p2;7p2:=temp;8end;9/SQL>/过程已创建。。【例7.9】执行swap过程。SQL>Declare2N1number:=10;3N2number:=20;4Begin5swap(N1,N2);6DBMS_OUTPUT.PUT_LINE('N1的值是'||N1);7DBMS_OUTPUT.PUT_LINE('N2的值是'||N2);8End;9/N1的值是20N2的值是10PL/SQL过程已成功完完成。3.过程的授权权只有创建过程程的用户和管管理员才有使使用过程的权权限,如以上上示例,创建建的过程就像像创建的表一一样,属于当当前操作的用用户,其他用用户如果要调调用过程,则则需要得到该该过程的EXECUTE权限,,然后后通过过点标标记(dotnotation)(即“用用户名名.过程名名”)来调用用过程程(数据字字典是是user_source)。以下下演示示如何何授权权:SQL>GRANTEXECUTEONswapTOJohn;SQL>GRANTEXECUTEONqueryEmpNameTOPUBLIC;前者者将将swap过程程的的执执行行权权限限授授予予John用户户,,后后者者将将queryEmpName的执执行行权权限限授授予予所所有有数数据据库库用用户户。。4.删删除除过过程程删除除存存储储过过程程的的命命令令的的一一般般格格式式如如下下::DROPPROCEDURE[<方案案名名>.]<存储过程程名>;【例7.10】删除过程程multiplication。SQL>DROPPROCEDUREmultiplication过程已丢丢弃。7.1.2函数函数与过过程相似似,也是是数据库库中存储储的已命命名PL/SQL程序块。。与过程程不同的的是,函函数除了了完成一一定的功功能外,,还必须须返回一一个值。。1.创建函函数创建函数数是指通通过RETURN子句指定定函数返返回值的的数据类类型。在在函数体体的任何何地方,,用户都都可以通通过RETURNexpression语句从函函数返回回。定义函数数的语法法如下::CREATE[ORREPLACE]FUNCTION[<方案名>.]<函数名>[parameterslist]RETURN<返回值类类型>IS|AS[local_declarations];Beginexecutablestatements[exception][Exception_handlers]End;其中,FUNCTION为PL/SQL函数的关关键字。。【例7.11】创建一个个函数,,以雇员员号查询询雇员的的姓名。。SQL>createorreplacefunctiongetName(snovarchar2)2returnvarchar3is4namevarchar(12);5begin6selectenameintonamefromemp7whereempno=sno;8returnname;9exception10whentoo_many_rowsthen11dbms_output.put_line('toomanydata');12whenothersthen13dbms_output.put_line('error');14end;15/函数已已创建建。2.执行行函数数及授授权1)在在匿匿名块块中调调用函数调调用与与过程程调用用很相相似,,在匿匿名过过程中中通过过函数数名(或参数数)可以调调用一一个函函数。。因为为过程程没有有显式式的RETURN语句,,所以以过程程调用用可以以是一一条单单独的的语句句,写写在单单独的的行中中。而而函数数则必必须有有一个个返回回值,,所以以函数数调用用要借借助于于可执执行语语句来来完成成,例例如赋赋值语语句、、选择择语句句和输输出语语句。。下面面的例例子通通过匿匿名过过程调调用getname函数,将雇雇员号作为为参数,此此函数将雇雇员姓名传传给调用块块,然后显显示雇员姓姓名。【例7.12】通过匿名过过程调用getname函数。SQL>declare2namevarchar(12);3begin4name:=getname('7902');5dbms_output.put_line(name);6end;7/FORDPL/SQL过程已成功功完成。2)在SQL语句句中调用除了在匿名名块中调用用外,也可可以在SQL语句中调用用函数。【例7.13】在SQL语句中调用用getname,显示雇员员号为“7369”的雇员姓姓名。SQL>selectgetname('7369')fromdual;GETNAME('7369')------------------------SMITH【例7.14】从雇员表表中查找找雇员号号为“7369”的雇员员信息。。SQL>Select*fromempwhereename=getname(‘7369’’);EMPNOENAMEJOBMGRHIREDATESALCOMMDEPTNO--------------------------------------------------7369SMITHCLERK790217-12月-80800203.函数的的授权与过程一一样,只只有创建建函数的的用户和和管理员员才有权权使用函函数,其其他用户户如果要要调用函函数,则则需要得得到该函函数的EXECUTE权限。【例7.15】将getname函数的执执行权限限授予John用户。SQL>GRANTEXECUTEONgetnameTOJohn;4.删除函函数删除函数数的命令令的一般般格式如如下:DROPFUNCTION[<方案名>.]<函数名>;【例7.16】删除函数数getname。SQL>DROPFUNCTIONgetname;7.1.3过程和函函数的比比较表7-1过程和函函数的比比较7.2程序包7.2.1程序包概概述程序包是是数据库库中的一一个实体体,包含含一系列列公共常常量、变变量、数数据类型型、游标标、过程程及函数数的定义义。使用用包更加加体现了了模块化化编程的的优点,,使得开开发工作作能灵活活自如地地进行。。程序包包包括两两个部分分:程序序包规范范说明部部分和程程序包主主体部分分。1.程序包包规范说说明部分分该部分相相当于一一个包的的头,类类似于接接口,可可以对包包的部件件作简单单说明。。其中的的过程、、函数、、变量、、常量和和游标都都是公共共的,可可在应用用程序中中访问。。(1)使用createpackage进行创建建。(2)包含公用用对象和和类型。。(3)声明类型型、变量量、常量量、异常常、游标标和子程程序。(4)可以在没没有程序序包主体体部分的的情况下下存在。。2.程序包包主体部部分(1)使用createpackagebody进行创建建。(2)包含子程程序和游游标的定定义。(3)包含私有有声明。。(4)不能在没没有程序序包规格格说明的的情况下下存在。。7.2.2创建程序序包程序包包包括两部部分:规规范和主主体。规规范是程程序包的的公共接接口;主主体是规规范的实实现,以以及私有有例程、、数据和和变量。。1.创建程程序包规规范CREATEORREPLACEPACKAGEpackage_nameIS|AS公用类型型或变量量常量的的声明;;公用过程程或函数数的声明明;ENDpackage_name;/2.创建程程序包主主体CREATEORREPLACEPACKAGEBODYpackage_nameIS|AS私有类型型或变量量常量的的声明;;公用过程程或函数数的实现现;ENDpackage_name规范是程程序包的的接口,,规范中中定义的的所有内内容都可可以由调调用者使使用(当然需要要具有EXECUTE特权),比如规规范中定定义的过过程函数数可以被被执行,,类型可可以被访访问,变变量可以以被引用用。【例7.17】使用两个个过程print_ename()和print_sal(),定义名名为employee_pkg的程序包包。SQL>CREATEORREPLACE2PACKAGEemployee_pkgas3Procedureprint_ename(p_empnonumber);4Procedureprint_sal(p_empnonumber);5End;6/程序包包已创创建。。此时并并没有有为过过程提提供代代码,,只是是定义义了名名称和和参数数。这个时时候如如果试试图使使用这这个包包,则则会报报错。。SQL>execemployee_pkg.print_ename(1234);ERROR位于第第1行:ORA-04068:已丢弃弃程序序包的的当前前状态态ORA-04067:未执行行,packagebody"SCOTT.EMPLOYEE_PKG"不存在在ORA-06508:PL/SQL:无法在在调用用之前前找到到程序序单元元ORA-06512:在line1程序包包是过过程函函数的的具体体实现现部分分,实实现规规范中中定义义的接接口。。SQL>CREATEORREPLACE2PACKAGEBODYemployee_pkgas3Procedureprint_ename(p_empnonumber)is4L_enameemp.ename%type;5Begin6Selectenameintol_enamefromempwhereempno=p_empno;7Dbms_output.put_line(l_ename);8Exception9Whenno_data_foundthen10Dbms_output.put_line('Invalidemployeenumber');11Endprint_ename;12Procedureprint_sal(p_empnonumber)is13L_salemp.sal%type;14Begin15Selectsalintol_salfromempwhereempno=p_empno;16Dbms_output.put_line(l_sal);17Exception18WhenNO_DATA_FOUNDthen19Dbms_output.put_line('Invalidemployeenumber');20Endprint_sal;21Endemployee_pkg;22/程序包主体体已创建。。7.2.3执行行程程序序包包执行行程程序序包包中中的的过过程程可可以以使使用用如如下下语语句句::EXECUTE包名名.过程程名名【例7.18】执行行employee_pkg包里里的的print_ename过程程。。SQL>setserveroutputonSQL>execemployee_pkg.print_ename(7782);运行行结结果果如如下下::CLARKPL/SQL过程已成功完完成。SQL>execemployee_pkg.print_sal(7782);运行结果如下下:2450PL/SQL过程已成功完完成。执行程序包中中的函数可以以通过一段代代码块来实现现。7.2.4程序包中的游游标程序包中可以以定义和使用用游标。游标标的定义分为为游标规范和和游标主体两两部分。在游游标规范说明明部分必须通通过RETURN语句指定游标标的返回类型型。RETURN语句指定游标标获取和返回回的数据元素素由select语句确定。select语句只出现在在主体定义中中,而不出现现在规范说明明中。【例7.19】下面使用程序序包中的游标标。student_package程序包中包含含4个过程和1个函数。其中中,select_student过程中中使用用了游游标。。详细细过程程如下下:(1)首先创创建student表结构构。SQL>createtablestudent(stuidvarchar2(4),stunamevarchar2(10),sechar(1));表已创创建。。(2)定义声声明。。SQL>createorreplacepackagestudent_packageis2typestudent_curisrefcursorreturnstudent%rowtype;3procedureinsert_student(stuinstudent%rowtype);4procedureupdate_student(stustudent%rowtype);5proceduredelete_student(snostudent.stuid%type);6procedureselect_student(stucurinoutstudent_cur);7functiongetStudentCountreturnnumber;8endstudent_package;9/程序包已创创建。(3)定义主体。。SQL>createorreplacepackagebodystudent_packageis2procedureinsert_student(stustudent%rowtype)is3icountint;4begin5selectcount(*)intoicountfromstudentwherestuid=stu.stuid;6ificount>0then7dbms_output.put_line('insertdataisalreadyexsist');8else9insertintostudentvalues(stu.stuid,stu.stuname,stu.se);10commit;11endif;12exception13whentoo_many_rowsthen14dbms_output.put_line('insertdataisalreadyexsist');15endinsert_student;16procedureupdate_student(stustudent%rowtype)is17icountint;18begin19selectcount(*)intoicountfromstudentwherestuid=stu.stuid;20ificount>0then21updatestudentsetstuname=stu.stuname,se=stu.sewherestuid=stu.stuid;22commit;23else24dbms_output.put_line('updatedatanotexist!');25endif;26endupdate_student;27proceduredelete_student(snostudent.stuid%type)is28icountint;29begin30ificount>0then31deletefromstudentwherestuid=sno;32commit;33else34dbms_output.put_line('deletedatanotexist');35endif;36enddelete_student;37procedureselect_student(stucurinoutstudent_cur)is38begin39openstucurforselect*fromstudent;40endselect_student;41functiongetStudentCountreturnnumberis42icountint;43begin44selectcount(*)intoicountfromstudent;45returnicount;46endgetStudentCount;47endstudent_package;48/程序包主体体已创建。。(4)调用程序包包插入一行行数据。SQL>declare2stustudent%rowtype;3begin4stu.stuid:=1009;5stu.stuname:='tonglei';6stu.se:='f';7student_package.insert_student(stu);8end;9/PL/SQL过程已成功功完成。(5)调用程序包包中的过程程select_student显示数据。。SQL>varssrefcursor--定义游标变变量SQL>execstudent_package.select_student(:ss);PL/SQL过程已成功功完成。显示游标变变量内容如如下:SQL>printssSTUISTUNAMES-----------------1009tongleif7.2.5程序包的优优点程序包的优优点如下::(1)模块化。包包可以使逻逻辑上相关关联的类型型、项目和和子程序等等封装进一一个命名PL/SQL块中。每个个包划分功功能清晰,,包的接口口简单、明明了。(2)可重用性。。一旦命名名并保存在在数据库中中,任何应应用都可以以使用。(3)简单的应用用程序设计计。当设计计应用程序序时,只需需知道包的的接口部分分的信息,,可以只创创建并编译译包的规范范而不创建建包体。同同样可以在在程序中引引用包,等等整个应用用程序完成成后再来定定义具体的的包体。(4)抽象和数据据隐藏。可可以指定公公有信息和和私有信息息。只有公公有信息才才可以被外外部应用程程序访问。。(5)更好的执行效效能。包里的的子程序第一一次被调用时时,整个包被被调到内存中中,以后的调调用就可以直直接从内存中中读取。这样样可以减少不不必要的重新新编译。7.2.6有关子程序和和程序包的信信息子程序和程序序包是数据库库中存储的对对象,Oracle会在数据字典典中存储所有有对象的信息息。通过查询询数据字典可可以获得它们们的信息。通通过查询USER_OBJECTS数据字典视图图可以获取有有关在会话中中创建的字程程序和程序包包的信息。【例7.20】获取程序包中中子程序和程程序包的信息息。SQL>COLUMNOBJECT_NAMEFORMATA18SQL>SELECTOBJECT_NAME,OBJECT_TYPEFROMUSER_OBJECTSWHEREOBJECT_TYPEIN('PROCEDURE','FUNCTION','PACKAGE','PACKAGEBODY');OBJECT_NAMEOBJECT_TYPE---------------------------EMPLOYEE_PKGPACKAGEEMPLOYEE_PKGPACKAGEBODYQUERYEMPNAMEPROCEDUREQUERYEMPSALPROCEDURESWAPPROCEDURE【例7.21】要获取取存储储子程程序的的文本本,可可以查查询USER_SOURCE。SQL>COLUMNLINEFORMAT9999SQL>COLUMNTEXTFORA50SQL>SELECTLINE,TEXTFROMUSER_SOURCEWHERENAME=’SWAP’’;LINETEXT-------------------------------------------1procedureswap(p1INOUTnumber,p2INOUTnumber)2as3tempnumber;4begin5temp:=p1;6p1:=p2;7p2:=temp;8end;【例7.22】获得程序序包中子子程序规规范employee_pkg信息。SQL>DESCemployee_pkg;PROCEDUREPRINT_ENAME7.3小结过程、函函数和子子程序都都可以用用于执行行对数据据库的操操作,可可以带上上用户自自定义的的参数。。它们封封装了数数据类型型定义、、变量说说明、游游标、异异常等,,方便了了用户管管理操纵纵数据库库数据。。习题七一、选择择题1.执行特特定任务务的子程程序是()。A.函数B.过程C.程序包D.游标2.子程序序的()模式参数数可以在在调用子子程序时时指定一一个常量量。A.INB.OUTC.INOUT3.如果存储储过程的的参数类类型为OUT,那么调调用时传传递的参参数应该该为()。A.常量B.表达式C.变量D.都可以4.下列有有关存储储过程的的特点,,说法错错误的是是()。A.存储过程程不能将将值传回回调用的的主程序序B.存储过程程是一个个命名的的模块C.编译的存存储过程程存放在在数据库库中D.一个存储储过程可可以调用用另一个个存储过过程5.包中不不能包含含的元素素为()。A.存储过程程B.存储函数数C.游标D.表6.下列有有关包的的使用,,说法错错误的是是()。A.在不同的的包内模模块可以以重名B.包的私有有过程不不能被外外部程序序调用C.包体中的的过程和和函数必必须在包包头部分分说明D.必须先创创建包头头,然后后创建包包体二、编程程题1.编写程程序包,,此程序序包有两两个过程程和一个个函数,,第一个个过程根根据职员员编号打打印职员员姓名,,第二个个过程根根据职员员编号打打印职员员的部门门编号。。函数根根据职员员编号返返回职员员的薪水水。提示:使使用scott用户的emp表作为数数据源。。2.编写函函数接受受学生的的学号,,并计算算该学生生3门课程的的总分。。3.编写一一个过程程,将10号部门员员工薪水水上涨10%,20号部门员员工薪水水上涨20%,其他部部门员工工薪水保保持不变变。上机实验七七实验1过程目的和要求求:1.掌握编写写过程的方方法。2.掌握调用用过程的方方法。实验内容::编写一个过过程,要求求根据用户户输入的员员工号(emp_no)查询EMP表,返回员员工的姓名名和工作职职位(empName和empJob)。并编写一一个匿名块块调用此过过程(使用SCOTT用户的EMP表)。SQL>createorreplaceprocedurepro_emp(emp_nonumber)2as3empNamevarchar2(20);4empJobvarchar2(20);5begin6selectename,jobintoempName,empJobfromempwhereempno=emp_no;7DBMS_OUTPUT.PUT_LINE('雇员的姓名名是:'||empName);8DBMS_OUTPUT.PUT_LINE('雇员的职位位是:'||empJob);9EXCEPTION10whenNO_DATA_FOUNDthen11DBMS_OUTPUT.PUT_LINE('雇员编号未未找到!');12endpro_emp;13/过程已创建建。SQL>setserveroutputon;SQL>executepro_emp(7369);雇员的姓名名是:SMITH雇员的职位位是:CLERKPL/SQL过程已成功功完成。实验2函数目的和要求求:1.掌握编编写函数数的方法法。2.掌握调调用函数数的方法法。实验内容:1.编写函数以以接受学生的的学号,并计计算此学生3门课程的平均均分。SQL>createorreplacefunctionfun_score(student_nonumber)2returnfloat3as4s1float(10);5s2float(10);6s3float(10);7score_avgfloat(10);8begin9selectoracle,java,csharpintos1,s2,s3fromscorewherestuID=student_no;10score_avg:=(s1+s2+s3)/3.0;11returnscore_avg;12EXCEPTI
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 活动策划 -白酒新品发布会 -2024第七届释心大讲堂暨新品发布会主题活动策划案
- 企业常见涉税疑难问题处理和风险规避技巧课件
- 2024至2030年中国多维营养粉行业投资前景及策略咨询研究报告
- 2024年蝇蚴病防治药项目评价分析报告
- 2024至2030年中国酒花行业投资前景及策略咨询研究报告
- 2024年自动数字空中三角测量系统项目评价分析报告
- 2024至2030年中国自动补水设备数据监测研究报告
- 2024至2030年中国脱色精制炭数据监测研究报告
- 2024至2030年中国竹纤维运动巾数据监测研究报告
- 2024至2030年中国电脑温控尿道微波治疗仪数据监测研究报告
- 生物丨金太阳(25-69C)广东省2025届高三10月大联考生物试卷及答案
- 期中测试卷(试题)2024-2025学年人教版数学三年级上册
- 冷库保洁服务方案
- 中国戏曲 昆曲学习通超星期末考试答案章节答案2024年
- 2024-2030年中国移动云行业市场发展趋势与前景展望战略研究报告
- 高中政治必修四哲学与文化知识点总结
- 移动数字金融与电子商务反欺诈白皮书
- 医学课件血管性痴呆
- 中国高血压防治指南(2024年修订版)解读(总)
- 2024年眼镜验光员(技师)技能鉴定考试题库(含答案)
- 二年级体育下册 各种各样的跑 春种秋收教案
评论
0/150
提交评论