您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > 实验7_SQL_PL编程基础(I)及答案
第1页共30页实验7PL/SQL编程基础(I)姓名:洪维坤学号:0807012215专业:计算机科学与技术班级:08计二同组人:无实验日期:2011-04-18【实验目的与要求】掌握PL/SQL基本语法掌握PL/SQL简单存过程的编写【实验内容与步骤】7.0.实验准备工作1.测试用表的创建与数据添加(1).创建测试表CreateTableTESTTABLE(RECORDNUMBERnumber(4)NotNull,CURRENTDATEDateNotNull)TablespaceUSERS;--这里的表空间其实可以不去管,这样它就会在当前用户的表空间中创建一个表(2).使用for语句在测试表中加入测试数据DeclaremaxrecordsConstantInt:=100;iInt:=1;第2页共30页BeginForiIn1..maxrecordsLoopInsertIntohqf.testtable(recordnumber,currentdate)--hqf为模式名,应改动Values(i,Sysdate);dbms_output.put_line('现在输入的内容是:'||i||''||Sysdate);Commit;--这里切记要commit否则将不会将数据提交到表中EndLoop;dbms_output.put_line('记录已经按照计划全部插入,请查看!');End;//注:hqf为登录用户名,需根据情况改动,如:实验中一般用scott.(3).查询表中数据,给出查询结果截图:2.导入教材实验数据(1).创建用户school,并赋于相应的权限:CREATEUSERvenditionidentifiedbyvendition;GRANTCREATESESSION,RESOURCE,DBATOvendition;CREATEUSERSCHOOLidentifiedbySCHOOL;第3页共30页GRANTCREATESESSION,RESOURCE,DBATOSCHOOL;(2).将文件夹“TestTableBak”中的备份文件school.DMP和vendition.DMP复制到某一目录下(例如E盘根目)。(3).然后启动CMD命令提示窗口,运行如下的还原命令。impuserid=school/schoolignore=yfromuser=schooltouser=schoolfile=c:\school.DMPimpuserid=vendition/venditionignore=yfromuser=venditiontouser=venditionfile=c:\vendition.DMP(4).验证确认。以用户名School登录系统,查看相应的表,看是否有数据。第4页共30页7.1.最简单的PL/SQL程序1.输出Hello,World/***************************************第一个例子:输出Hello,World***************************************/setserverouton--设置SQL*Plus将服务器所返回的写出来begin--块开始DBMS_OUTPUT.put_line('Hello,World');--在控制台输出信息,类似C语言的Printf或者java语言中的System.out.printend;--块结束运行结果为:1.接收数据并输出/***************************************在此基础上,完成Hello,某某,某某从客户端得到***************************************/declarev_namevarchar2(20);begin--块开始v_name:='&姓名';--与“客户端”交互,类似C语言的scanf语句DBMS_OUTPUT.put_line('Hello,'||v_name);第5页共30页end;--块结束运行结果为:7.2.简单变量的使用1.变量的声明与引用setserveroutputon;--PL/SQL变量之简单类型declarev_dept_idnumber(5):=1111;v_agebinary_integer:=12;v_dept_namevarchar2(20):='人事部';v_rateconstantnumber(4,2):=22.12;v_validbooleannotnull:=TRUE;v_hire_datedatenotnull:=sysdate+7;beginv_dept_id:=2222;dbms_output.put_line(v_dept_id);end;/运行结果为:第6页共30页2.Into子句的使用(scott模式下):declarev_deptnonumber(2);v_locvarchar2(15);beginselectdeptno,locintov_deptno,v_locfromdeptwheredname='SALES';DBMS_OUTPUT.PUT_LINE(V_deptno||'and'||v_loc);end;运行结果为:实验练习:编写一PL/SQL程序,实现依次从客户端接收各字段的值,并放于变量中,输完一条记录的所有字段值后,将值写到数据库表Emp中。第7页共30页请给出程序源码:declarev_EMPNONUMBER(4);v_ENAMEVARCHAR2(10);v_JOBVARCHAR2(9);v_MGRNUMBER(4);v_HIREDATEDATE;v_SALNUMBER(7,2);v_COMMNUMBER(7,2);v_DEPTNONUMBER(2);beginv_EMPNO:='&EMPNO';v_ENAME:='&ENAME';v_JOB:='&JOB';v_MGR:='&MGR';v_HIREDATE:='&HIREDATE';v_SAL:='&SAL';v_COMM:='&COMM';v_DEPTNO:='&DEPTNO';insertintoempvalues(v_EMPNO,v_ENAME,v_JOB,v_MGR,v_HIREDATE,v_SAL,v_COMM,v_DEPTNO);end;给出测试结果:第8页共30页3.变量作用域:阅读以下程序,熟悉变量的斌值方法,理解变量的作用,给出运行结果。--嵌套块中的变量赋值和作用域DECLAREv_weightNUMBER(3):=100;v_messageVARCHAR2(255):='OuterValue';BEGINDECLAREv_weightNUMBER(3):=1;v_messageVARCHAR2(255):='Innervalue';BEGINv_weight:=v_weight+1;v_message:='Put'||v_message;DBMS_OUTPUT.PUT_LINE('innerblock'||to_char(v_weight)||v_message);END;v_weight:=v_weight+1;v_message:='Put'||v_message;DBMS_OUTPUT.PUT_LINE('outterblock'||to_char(v_weight)||v_message);END;第9页共30页运行结果为:7.3.使用%type和%rowtype变量1.使用%type变量阅读以下程序,理解其功能,给出运行结果。(1)DROPTABLEEMPL;createtableEMPL(EMPLOYEE_IDNUMBER(5)notnull,LAST_NAMEVARCHAR2(20)notnull,HIRE_DATEDATE,SALARYNUMBER(8,2),JOB_IDNUMBER(5),DEPARTMENT_IDNUMBER(5));setserveroutputon;--PL/SQL变量之%TYPE类型declarev_last_nameeml.last_name%TYPE;v_hire_dateempl.hire_date%TYPE;v_balancenumber(6,2);v_min_balancev_balance%type;begindbms_output.put_line('定义%type类型的变量');第10页共30页end;/运行结果为:(2)declarev_deptnodept.deptno%type;v_locdept.loc%type;beginselectdeptno,locintov_deptno,v_locfromdeptwheredname='SALES';DBMS_OUTPUT.PUT_LINE(V_deptno||'and'||v_loc);end;/运行结果为:第11页共30页2.使用%Rowtype变量阅读以下程序,理解其功能,给出运行结果。(1)DROPTABLEEMPL;createtableEMPL(EMPLOYEE_IDNUMBER(5)notnull,LAST_NAMEVARCHAR2(20)notnull,HIRE_DATEDATE,SALARYNUMBER(8,2),JOB_IDNUMBER(5),DEPARTMENT_IDNUMBER(5));setserveroutputon;--PL/SQL变量之%ROWTYPE类型declarev_emplempl%rowtype;begindbms_output.put_line('定义%rowtype类型的变量');end;/运行结果为:第12页共30页(2)droptablestock;createtablestock(symbolvarchar2(50),pricenumber(6,2));insertintostockvalues('IBM',188.88);insertintostockvalues('ORCL',100.88);DECLAREstock_info1stock%ROWTYPE;stock_info2stock%ROWTYPE;stock_info3stock%ROWTYPE;BEGIN--对应纪录直接取得相应字段的:PopulatethespecificfieldsinarecordSELECTsymbol,priceINTOstock_info1.symbol,stock_info1.priceFROMstockWHEREsymbol='ORCL';第13页共30页--对应纪录直接放入纪录中SELECT*INTOstock_info2FROMstockWHEREsymbol='ORCL';stock_info3:=stock_info2;--记录间可以相互赋值stock_info3.symbol:='ORACLE';--对纪录的各字段赋值。DBMS_OUTPUT.PUT_LINE('stock_info1:'||stock_info1.symbol||''||stock_info1.price);DBMS_OUTPUT.PUT_LINE('stock_info2:'||stock_info2.symbol||''||stock_info2.price);DBMS_OUTPUT.PUT_LINE('stock_info3:'||stock_info3.symbol||''||stock_info3.price);END;运行结果为:第14页共30页7.4.使用复合变量1.记录类型阅读以下程序,理解其功能,给出运行结果。(1)setserveroutputon;--PL/SQL变量之RECORD类型1declaretypenamed_record_typeisrecord(last_namevarchar2(20),first_namevarchar2(20),birthdaydate,agenumber(3)
本文标题:实验7_SQL_PL编程基础(I)及答案
链接地址:https://www.777doc.com/doc-3197776 .html