大型数据库技术实验71Word格式文档下载.docx

上传人:b****4 文档编号:17837717 上传时间:2022-12-11 格式:DOCX 页数:22 大小:190.23KB
下载 相关 举报
大型数据库技术实验71Word格式文档下载.docx_第1页
第1页 / 共22页
大型数据库技术实验71Word格式文档下载.docx_第2页
第2页 / 共22页
大型数据库技术实验71Word格式文档下载.docx_第3页
第3页 / 共22页
大型数据库技术实验71Word格式文档下载.docx_第4页
第4页 / 共22页
大型数据库技术实验71Word格式文档下载.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

大型数据库技术实验71Word格式文档下载.docx

《大型数据库技术实验71Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《大型数据库技术实验71Word格式文档下载.docx(22页珍藏版)》请在冰豆网上搜索。

大型数据库技术实验71Word格式文档下载.docx

Begin

ForiIn1..maxrecordsLoop

InsertIntohqf.testtable(recordnumber,currentdate)--hqf为模式名,应改动

Values(i,Sysdate);

dbms_output.put_line('

现在输入的内容是:

'

||i||'

'

||Sysdate);

Commit;

--这里切记要commit否则将不会将数据提交到表中

EndLoop;

记录已经按照计划全部插入,请查看!

);

End;

//注:

hqf为登录用户名,需根据情况改动,如:

实验中一般用scott.

(3).查询表中数据,给出查询结果截图:

2.导入教材实验数据

(1).创建用户school,并赋于相应的权限:

CREATEUSERvendition

identifiedbyvendition;

GRANTCREATESESSION,RESOURCE,DBA

TOvendition;

CREATEUSERSCHOOL

identifiedbySCHOOL;

TOSCHOOL;

(2).将文件夹“TestTableBak”中的备份文件school.DMP和vendition.DMP复制到某一目录下(例如E盘根目)。

(3).然后启动CMD命令提示窗口,运行如下的还原命令。

impuserid=school/schoolignore=yfromuser=schooltouser=schoolfile=e:

\school.DMP

impuserid=vendition/venditionignore=yfromuser=venditiontouser=venditionfile=e:

\vendition.DMP

(4).验证确认。

以用户名School登录系统,查看相应的表,看是否有数据。

7.2.最简单的PL/SQL程序

1.输出"

Hello,World"

/***************************************

第一个例子:

输出"

***************************************/

setserverouton--设置SQL*Plus将服务器所返回的写出来

begin--块开始

DBMS_OUTPUT.put_line('

Hello,World'

--在控制台输出信息,类似C语言的Printf或者java语言中的System.out.print

end;

--块结束

运行结果为:

1.接收数据并输出

在此基础上,完成Hello,某某,某某从客户端得到

declare

v_namevarchar2(20);

v_name:

='

&

姓名'

;

--与“客户端”交互,类似C语言的scanf语句

Hello,'

||v_name);

7.3.简单变量的使用

1.变量的声明与引用

setserveroutputon;

--PL/SQL变量之简单类型

v_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;

begin

v_dept_id:

=2222;

dbms_output.put_line(v_dept_id);

/

2.Into子句的使用:

Declare

   V_deptnonumber

(2);

   v_locvarchar2(15);

   begin

    selectdeptno,loc

     intov_deptno,v_loc

     fromdept

     wheredname='

SALES'

   DBMS_OUTPUT.PUT_LINE(V_deptno||'

and'

||v_loc);

  end;

实验练习:

编写一PL/SQL程序,实现依次从客户端接收各字段的值,并放于变量中,输完一条记录的所有字段值后,将值写到数据库表Emp中。

请给出程序源码:

v_EMPNONUMBER(4);

v_ENAMEVARCHAR2(10);

v_JOBVARCHAR2(9);

v_MGRNUMBER(4);

v_HIREDATEDATE;

v_SALNUMBER(7,2);

v_COMMNUMBER(7,2);

v_DEPTNONUMBER

(2);

begin

v_EMPNO:

EMPNO'

v_ENAME:

ENAME'

v_JOB:

JOB'

v_MGR:

MGR'

v_HIREDATE:

HIREDATE'

v_SAL:

SAL'

v_COMM:

COMM'

v_DEPTNO:

DEPTNO'

insertintoemp

values(v_EMPNO,v_ENAME,v_JOB,v_MGR,v_HIREDATE,v_SAL,v_COMM,v_DEPTNO);

给出测试结果:

3.变量作用域:

阅读以下程序,熟悉变量的斌值方法,理解变量的作用,给出运行结果。

--嵌套块中的变量赋值和作用域

DECLARE

v_weightNUMBER(3):

=100;

v_messageVARCHAR2(255):

OuterValue'

BEGIN

DECLARE

v_weightNUMBER(3):

=1;

v_messageVARCHAR2(255):

Innervalue'

BEGIN

v_weight:

=v_weight+1;

v_message:

Put'

||v_message;

DBMS_OUTPUT.PUT_LINE('

innerblock'

||to_char(v_weight)||v_message);

END;

||v_message;

outterblock'

END;

7.4.使用%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)

--PL/SQL变量之%TYPE类型

v_last_nameemployees.last_name%TYPE;

----用户hr

v_hire_dateemployees.hire_date%TYPE;

v_balancenumber(6,2);

v_min_balancev_balance%type;

定义%type类型的变量'

(2)declare

    v_deptnodept.deptno%type;

    v_locdept.loc%type;

  begin

    selectdeptno,loc

      intov_deptno,v_loc

    fromdept

    wheredname='

  DBMS_OUTPUT.PUT_LINE(V_deptno||'

  /

2.使用%Rowtype变量

(1)  DROPTABLEEMPL;

--PL/SQL变量之%ROWTYPE类型

v_emplemp%rowtype;

定义%rowtype类型的变量'

(2) droptablestock;

createtablestock

symbolvarchar2(50),

pricenumber(6,2)

insertintostockvalues('

IBM'

188.88);

ORCL'

100.88);

stock_info1stock%ROWTYPE;

stock_info2stock%ROWTYPE;

stock_info3stock%ROWTYPE;

--对应纪录直接取得相应字段的:

Populatethespecificfieldsinarecord

SELECTsymbol,price

INTOstock_info1.symbol,stock_info1.price

FROMstock

WHEREsymbol='

--对应纪录直接放入纪录中

SELECT*INTOstock_info2FROMstock

stock_info3:

=stock_info2;

--记录间可以相互赋值

stock_info3.symbol:

ORACLE'

--对纪录的各字段赋值。

stock_info1:

||stock_info1.symbol||'

||stock_info1.price);

stock_info2:

||stock_info2.symbol||'

||stock_info2.price);

stock_info3:

||stock_info3.symbol||'

||stock_info3.price);

思考:

如下所示:

改变表结构。

droptablestock;

symbolvarchar2(50),

pricenumber(6,2),

ownervarchar2(10)

对以上程序运行有影响吗?

为什么?

没有影响,因为程序中没有使用到增加的那个字段.

7.5.条件判断语句的使用

阅读并理解以下程序,调试并给出运行结果。

1.If语句:

droptableemployee;

 

createtableemployee(

empnonumber(4),

namevarchar2(30),

salarynumber(8,2)

insertintoemployeevalues(7900,'

黄蓉'

3000);

commit;

--执行结果如何呢?

--注意employee.salary%TYPE这一类型定义,定义v_SALARY为emp表的sal字段的类型

--这是plsql一种方便的定义类型方法。

v_salaryemployee.salary%type;

v_commentvarchar2(35);

/*返回employee的salary*/

SELECTsalary

INTOv_SALARY

FROMemployee

WHEREname='

--WHEREempno=7900;

薪水是:

||v_SALARY);

--条件判断语句

IFv_SALARY<

1000THEN

v_Comment:

比较低'

ELSIFv_SALARY<

3000THEN

Alittlehigher:

凑和'

5000THEN--ELSIF!

不是elseif

high:

比较高'

ELSE

VERYHIGH:

非常高!

ENDIF;

TheEmployee:

salaryis'

hissalaryis'

||v_Comment);

给出运行结果:

2.Case语句:

为了简化多个选择用if来做判断,这种case区别于编程语言中的case语句多用于多种情况的判断。

 

7.6.循环语句的使用

0.建立一个临时表

--建立一个临时表,用于测试

DROPTABLEtemp_table;

CREATETABLEtemp_table(

num_colNUMBER,

char_colVARCHAR2(60)

1.LOOP语句

--LOOP语句

v_CounterNUMBER:

LOOP

--以loopcounter向temp_tableInsert纪录

--.

INSERTINTOtemp_table

VALUES(v_Counter,'

Loopindex'

v_Counter:

=v_Counter+1;

--循环终止条件-whentheloopcounter>

50

--跳出循环.

IFv_Counter>

10THEN

EXIT;

ENDLOOP;

2.FORLOOP语句

--FORLOOP语句

FORv_CounterIN1..10LOOP

v_Counteris'

||v_Counter);

--DBMS_OUTPUT.PUT_LINE(v_Counter);

--在for循环外不可以访问循环变量

3.whileLOOP语句

--whileLOOP语句

--v_Counter<

=10--循环.

WHILEv_Counter<

=50LOOP

4.while语句

--WHILE语句

=10LOOP

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 表格模板 > 书信模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1