实验5SQLPL编程基础课案文档格式.docx

上传人:b****5 文档编号:16346459 上传时间:2022-11-23 格式:DOCX 页数:26 大小:140.84KB
下载 相关 举报
实验5SQLPL编程基础课案文档格式.docx_第1页
第1页 / 共26页
实验5SQLPL编程基础课案文档格式.docx_第2页
第2页 / 共26页
实验5SQLPL编程基础课案文档格式.docx_第3页
第3页 / 共26页
实验5SQLPL编程基础课案文档格式.docx_第4页
第4页 / 共26页
实验5SQLPL编程基础课案文档格式.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

实验5SQLPL编程基础课案文档格式.docx

《实验5SQLPL编程基础课案文档格式.docx》由会员分享,可在线阅读,更多相关《实验5SQLPL编程基础课案文档格式.docx(26页珍藏版)》请在冰豆网上搜索。

实验5SQLPL编程基础课案文档格式.docx

End;

//注:

scott为登录用户名,需根据情况改动.

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

5.2.最简单的PL/SQL程序

1.输出"

Hello,World"

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

第一个例子:

输出"

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

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

begin--块开始

DBMS_OUTPUT.put_line('

Hello,World'

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

end;

--块结束

运行结果为:

2.接收数据并输出

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

declare

v_namevarchar2(20);

v_name:

='

&

v_name'

;

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

测试结果为:

Hello,'

||v_name);

5.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子句赋值的使用:

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中。

请给出程序源码:

 

给出测试结果:

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;

5.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_nameemp.last_name%TYPE;

v_hire_dateemp.hire_date%TYPE;

v_balancenumber(6,2);

v_min_balancev_balance%type;

定义%type类型的变量'

(2)declare

v_deptnodept.deptno%type;

v_locdept.loc%type;

/

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

思考:

如下所示:

改变表结构。

pricenumber(6,2),

ownervarchar2(10)

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

为什么?

会有影响,由于表的重建会导致程序找不到相关数据。

5.5.使用复合变量

1.记录类型

(1)setserveroutputon;

--PL/SQL变量之RECORD类型1

typenamed_record_typeisrecord(

last_namevarchar2(20),

first_namevarchar2(20),

birthdaydate,

agenumber(3)

);

v_record_1named_record_type;

v_record_2named_record_type;

v_record_1.last_name:

张'

v_record_1.first_name:

三丰'

v_record_1.birthday:

2-2月-1788'

v_record_1.age:

=432;

定义record类型的变量'

(2)--使用记录类型2:

DECLARE

TYPErempISRECORD(

v_empnonumber(10),

v_enameVARCHAR2(20),

v_salaryNUMBER(10,2)

rsm_empremp;

SELECTempno,ename,sal

INTOrsm_emp.v_empno,rsm_emp.v_ename,rsm_emp.v_salary

FROMemp

WHEREsal=(SELECTMAX(sal)FROMemp);

--求出工资最高的雇员

DBMS_OUTPUT.PUT_LINE('

HighestPaidEmployeeis'

||rsm_emp.v_ename);

Idis'

||rsm_emp.v_empno||'

Salary'

||to_char(rsm_emp.v_salary,'

999,999.99'

));

(3)--使用记录类型3:

INTOrsm_emp

2.记录表类型

--一维表类型(相当于基本数据类型元素组成的一维数组)

typetabletype1istableofvarchar2(4)indexbybinary_integer;

--typetabletype2istableofemployees.last_name%typeindexbybinary_integer;

table1tabletype1;

--table2tabletype2;

table1

(1):

大学'

table1

(2):

大专'

--table2

(1):

=88;

--table2

(2):

=55;

dbms_output.put_line(table1

(1)||table1

(2));

--dbms_output.put_line(table1

(2)||table2

(2));

/*

在定义好的表类型变量里,可以使用count、delete、first、last、next、exists和prior等属性进行操作,使用方法为“表变量名.属性”,返回的是数字。

*/

--使用表类型变量属性

SETSERVEROUTPUTON;

Declare

typetabletype1istableofvarchar2(9)indexbybinary_integer;

ibinary_integer:

=11;

成都市'

table1(5):

北京市'

table1(3):

青岛市'

table1(11):

总记录数:

||to_char(table1.count));

第一条记录:

||table1.first);

最后条记录:

||table1.last);

第3条的前一条记录:

||table1.prior(3));

第5条的后一条记录:

||table1.next(5));

if(table1.exists(i))then

dbms_output.put_line('

该条记录值为:

||table1(i));

else

该条记录不存在!

endif;

table1.delete(11);

--table1.delete(12);

5.6.复合变量的使用

1.完整定义一个记录类型的变量,了解其简单应用。

Declare

TypemyrecordIsRecord(

r_recordnumberNumber(4),

r_currentdateDate

v_myrecordmyrecord;

Begin

Select*

Intov_myrecord

Fromtesttable

Whererecordnumber=80;

用记录类型的变量取出来的值为:

||

v_myrecord.r_recordnumber||

v_myrecord.r_currentdate);

给出运行结果:

2.简单的%Rowtype定义变量的实例

v_myrowtesttable%Rowtype;

Intov_myrow

Whererecordnumber=90;

用rowtype查询的结果是:

||v_myrow.recordnumber||v_myrow.currentdate);

--dbms_output.put_line('

||v_myrow.recordnumber||v_myrow.currentdate||myrow.Rowid);

--上句操作说明了行类型的变量中不会把oracle表中的rowid的值带进来

End;

3.定义与使用一维表变量

--维表变量,这种变量看起来有些类似于C语言中的一维数组

Typemytbtype1IsTableOfVarchar2(4)IndexByBinary_Integer;

Typemytbtype2IsTableOftesttable.recordnumber%TypeIndexByBinary_Integer;

tb1mytbtype1;

tb2mytbtype2;

tb1

(1):

tb1

(2):

tb2

(1):

=90;

tb2

(2):

=70;

dbms_output.put_line(tb1

(1)||tb2

(1));

dbms_output.put_line(tb1

(2)||tb2

(2));

4.定义与使用多维表变量

定义一个多维表变量,这就像一个二维数组,当然这个二维的数组的下标就有些区别于在编程语言中熟悉的二维数组,可以理解为一维存储的列名,而另一维则是存储与一维列名相对应的数据。

(1)多维表变量简单应用

--这里区别于一维表变量的定义

TypemultbtypeIsTableOftesttable%RowtypeIndexByBinary_Integer;

multbmultbtype;

Select*Intomultb(12)

Fromtesttable

Whererecordnumber=88;

multb(12).recordnumber='

multb(12).recordnumber||

multb(12).currentedate'

multb(12).currentdate

(2)oracle中的‘数组’与其他编程语言中的数组的区别:

TypemytabletypeIsTableOfVarchar2(9)IndexByBinary_Integer;

tbmytabletype;

tb

(1):

tb

(2):

太原市'

tb(3):

记录总数:

||to_char(tb.Count));

第一条记录为:

||tb.First||'

其值为:

||tb(tb.First));

最后条记录为:

||tb.Last||'

||tb(tb.Last));

第二条的前一条记录为:

||tb.Prior

(2)||'

||tb(tb.Prior

(2)));

第二条的后一条记录为:

||tb.Next

(2)||'

||tb(tb.Nex

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

当前位置:首页 > 求职职场 > 自我管理与提升

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

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