大型数据库技术实验_第1页
大型数据库技术实验_第2页
大型数据库技术实验_第3页
大型数据库技术实验_第4页
大型数据库技术实验_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、.实验7 PL/SQL编程基础姓名:学号:专业:班级:同组人:无实验日期:【实验目的与要求】n 掌握PL/SQL基本语法n 掌握PL/SQL简单存过程的编写【实验内容与步骤】7.0. 实验准备工作1. 测试用表的创建与数据添加(1)创建测试表Create Table TESTTABLE(       RECORDNUMBER number(4) Not Null,       CURRENTDATE Date Not Null    &

2、#160;  )      Tablespace "USER" ;-这里的表空间其实可以不去管,这样它就会在当前用户的表空间中创建一个表 (2)使用for语句在测试表中加入测试数据      Declare maxrecords Constant Int:=100;i Int:=1;  Begin         For i In 1.maxrecords

3、Loop            Insert Into hqf.testtable(recordnumber,currentdate) -hqf为模式名,应改动            Values(i,Sysdate);            dbms_output.p

4、ut_line('现在输入的内容是:'|i|'   '|Sysdate);            Commit;    -这里切记要commit否则将不会将数据提交到表中        End Loop;        dbms_output.put_lin

5、e('记录已经按照计划全部插入,请查看!');  End;/ 注:hqf为登录用户名,需根据情况改动,如:实验中一般用scott. (3)查询表中数据,给出查询结果截图:      2. 导入教材实验数据(1)创建用户school,并赋于相应的权限:CREATE USER venditionidentified by vendition;GRANT CREATE SESSION,RESOURCE,DBATO vendition;CREATE USER SCHOOLidentified by SCHO

6、OL;GRANT CREATE SESSION,RESOURCE,DBATO SCHOOL;(2)将文件夹“TestTableBak”中的备份文件school.DMP和vendition.DMP复制到某一目录下(例如E盘根目)。(3)然后启动CMD命令提示窗口,运行如下的还原命令。imp userid=school/school ignore=y fromuser=school touser=school file=e:school.DMPimp userid=vendition/vendition ignore=y fromuser=vendition touser=vendition fi

7、le=e:vendition.DMP(4)验证确认。以用户名School登录系统,查看相应的表,看是否有数据。7.1. 最简单的PL/SQL程序1. 输出"Hello,World"/* 第一个例子:输出"Hello,World"*/set serverout on -设置SQL*Plus将服务器所返回的写出来begin -块开始 DBMS_OUTPUT.put_line('Hello,World'); -在控制台输出信息,类似C语言的Printf或者java语言中的System.out.printend; -块结束运行结果为:1. 接收数

8、据并输出/* 在此基础上,完成Hello,某某,某某从客户端得到*/declare v_name varchar2(20);begin -块开始 v_name:='&姓名' -与“客户端”交互,类似C语言的scanf语句 DBMS_OUTPUT.put_line('Hello,'|v_name); end; -块结束运行结果为:7.2. 简单变量的使用1变量的声明与引用set serveroutput on;- PL/SQL变量之 简单类型declare v_dept_id number(5) := 1111; v_age binary_integer

9、:= 12; v_dept_name varchar2(20) := '人事部' v_rate constant number(4,2) := 22.12; v_valid boolean not null := TRUE; v_hire_date date not null := sysdate + 7;begin v_dept_id := 2222; dbms_output.put_line(v_dept_id); end;运行结果为:2Into子句的使用:DeclareV_deptno number (2);v_loc varchar2(15);begin select

10、deptno,locinto v_deptno,v_locfrom deptwhere dname='SALES'DBMS_OUTPUT.PUT_LINE (V_deptno |' and '|v_loc);end;运行结果为:实验练习:编写一PL/SQL程序,实现依次从客户端接收各字段的值,并放于变量中,输完一条记录的所有字段值后,将值写到数据库表Emp中。请给出程序源码: Declare V_EMPNO NUMBER(4); V_ENAME VARCHAR2(10); V_JOB VARCHAR2(9); V_MGR NUMBER(4); V_HIREDAT

11、E DATE; V_SAL NUMBER(7,2); V_COMM NUMBER(7,2); V_DEPTNO NUMBER(2); begin insert into emp values('&V_EMPNO','&V_ENAME','&V_JOB','&V_MGR','&V_HIREDATE', '&V_SAL','&V_COMM','&V_DEPTNO');end;给出测试结果:3变量作用域:阅读以

12、下程序,熟悉变量的斌值方法,理解变量的作用,给出运行结果。-嵌套块中的变量赋值和作用域DECLARE v_weight NUMBER(3) := 100; v_message VARCHAR2(255) := 'Outer Value'BEGIN DECLARE v_weight NUMBER(3) := 1; v_message VARCHAR2(255) :='Inner value' BEGINv_weight := v_weight + 1;v_message := 'Put'| v_message;DBMS_OUTPUT.PUT_LIN

13、E('inner block ' | to_char(v_weight) | v_message); END; v_weight := v_weight + 1; v_message := 'Put' | v_message; DBMS_OUTPUT.PUT_LINE('outter block ' | to_char(v_weight) | v_message);END;运行结果为:7.3. 使用%type和%rowtype变量1使用%type变量阅读以下程序,理解其功能,给出运行结果。(1)DROP TABLE EMPL;create tab

14、le EMPL( EMPLOYEE_ID NUMBER(5) not null, LAST_NAME VARCHAR2(20) not null, HIRE_DATE DATE, SALARY NUMBER(8,2), JOB_ID NUMBER(5), DEPARTMENT_ID NUMBER(5);set serveroutput on;- PL/SQL变量之%TYPE类型declare v_last_name employees.last_name%TYPE;- 用户hr v_hire_date employees.hire_date%TYPE; v_balance number(6,2

15、) ; v_min_balance v_balance%type;begin dbms_output.put_line('定义%type类型的变量');end;/运行结果为:(2)declarev_deptno dept.deptno%type;v_loc dept.loc%type;beginselect deptno,locinto v_deptno,v_locfrom deptwhere dname='SALES'DBMS_OUTPUT.PUT_LINE (V_deptno |' and '|v_loc);end;/运行结果为:2使用%Ro

16、wtype变量阅读以下程序,理解其功能,给出运行结果。(1)DROP TABLE EMPL;create table EMPL( EMPLOYEE_ID NUMBER(5) not null, LAST_NAME VARCHAR2(20) not null, HIRE_DATE DATE, SALARY NUMBER(8,2), JOB_ID NUMBER(5), DEPARTMENT_ID NUMBER(5);set serveroutput on;- PL/SQL变量之%ROWTYPE类型declare v_empl emp%rowtype;begin dbms_output.put_li

17、ne('定义%rowtype类型的变量');end;/运行结果为:(2)drop table stock;create table stock(symbol varchar2(50),price number(6,2);insert into stock values('IBM',188.88);insert into stock values('ORCL',100.88);DECLAREstock_info1 stock%ROWTYPE;stock_info2 stock%ROWTYPE;stock_info3 stock%ROWTYPE;BE

18、GIN-对应纪录直接取得相应字段的:Populate the specific fields in a recordSELECT symbol,priceINTO stock_info1.symbol,stock_info1.priceFROM stockWHERE symbol ='ORCL'-对应纪录直接 放入纪录中SELECT * INTO stock_info2 FROM stockWHERE symbol ='ORCL'stock_info3 := stock_info2;-记录间可以相互赋值stock_info3.symbol:='ORACL

19、E'-对纪录的各字段赋值。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

20、_info3.price);END;运行结果为:思考:如下所示:改变表结构。drop table stock;create table stock(symbol varchar2(50),price number(6,2),owner varchar2(10);对以上程序运行有影响吗?为什么?沒什麽影響。7.4. 条件判断语句的使用阅读并理解以下程序,调试并给出运行结果。1If语句:drop table employee;create table employee( empno number(4), name varchar2(30), salary number(8,2);insert in

21、to employee values(7900,'黄蓉',3000);commit;set serveroutput on;-执行结果如何呢?DECLARE -注意employee.salary%TYPE这一类型定义,定义v_SALARY为emp表的sal字段的类型 -这是plsql一种方便的定义类型方法。 v_salary employee.salary%type; v_comment varchar2(35);BEGIN /* 返回employee的salary */ SELECT salary INTO v_SALARY FROM employee WHERE name

22、= '黄蓉' -WHERE empno = 7900; dbms_output.put_line('薪水是:' | v_SALARY); - 条件判断语句 IF v_SALARY < 1000 THEN v_Comment := '比较低' ELSIF v_SALARY < 3000 THEN v_Comment := 'A little higher:凑和' ELSIF v_SALARY < 5000 THEN -ELSIF! 不是elseif v_Comment := 'high:比较高' E

23、LSE v_Comment := 'VERY HIGH:非常高!' END IF; dbms_output.put_line('The Employee: salary is ' | v_SALARY); dbms_output.put_line('his salary is ' | v_Comment);END;/给出运行结果:2Case语句:为了简化多个选择用if来做判断,这种case区别于编程语言中的case语句多用于多种情况的判断。          给出运行

24、结果:7.5. 循环语句的使用阅读并理解以下程序,调试并给出运行结果。0建立一个临时表-建立一个临时表,用于测试DROP TABLE temp_table;CREATE TABLE temp_table ( num_col NUMBER, char_col VARCHAR2(60);1LOOP语句   -LOOP语句DECLARE v_Counter NUMBER := 1;BEGIN LOOP - 以loop counter向temp_table Insert纪录 - . INSERT INTO temp_table VALUES (v_Counter, 'Loop index'); v_Counter := v_Counter + 1; - 循环终止条件 -

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论