国开电大《Oracle数据库编程》形考任务1-6辅导资料_第1页
国开电大《Oracle数据库编程》形考任务1-6辅导资料_第2页
国开电大《Oracle数据库编程》形考任务1-6辅导资料_第3页
国开电大《Oracle数据库编程》形考任务1-6辅导资料_第4页
国开电大《Oracle数据库编程》形考任务1-6辅导资料_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

2021年国家开放大学电大Oracle数据库编程形考任务1-6答案形考任务1教学实践1参照教材中PL/SQL代码编写程序,检测视图clu$是否存在,并给出提示信息。PL/SQLDeveloper是一个集成开发环境,专门开发面向Oracle数据库的应用。PL/SQL也是一种程序语言,叫做过程化SQL语言(ProceduralLanguage/SQL)。PL/SQL是Oracle数据库对SQL语句的扩展。在普通SQL语句的使用上增加了编程语言的特点,所以PL/SQL把数据操作和查询语句组织在PL/SQL代码的过程性单元中,通过逻辑判断、循环等操作实现复杂的功能或者计算。PL/SQL只有Oracle数据库有。MySQL目前不支持PL/SQL的。

1视图介绍

视图是一个逻辑表,也是一个非常重要的方案对象。实际上,视图是查看表的一种方式。视图是对根据预定义的选择标准由一个或多个行的集合建立起来的动态表的静态定义。视图可以用来定义来自一个或多个表的行和列的多种连接。通过视图,可以查看到表中的数据。

视图是查看数据库表中的数据的一种方法。视图提供了存储预定义的查询语句作为数据库中的对象以备以后使用的能力。视图只是一种逻辑对象,是一种虚拟表,并不是物理对象,因为视图不占物理存储空间。在视图中被查询的表称为视图的基表。

通常通过它就像使用表一样访问数据。要记住通过视图引用的数据通常来自它后面的基表。视图应该使用一致的命名约定。例如,给所有的视图增加一个前缀,如每一个视图都以v_、view_或vw_开头。这样,可以使用户在看到名称时就立即知道它代表的对象是视图。2视图好处

使用视图的优点,如集中用户使用的数据、掩码数据的复杂性、简化权限管理以及为向其他应用程序输出而重新组织数据等。

集中用户使用的数据:视图创建了一种可以控制的环境,即表中的一部分数据允许访问,而另外一部分数据则不允许访问。那些没有必要的,敏感的或不适合的数据都从视图中排除掉了。

掩盖数据库的复杂性:视图把数据库设计的复杂性与用户屏蔽分开。这样就为数据库开发人员提供了一种改变数据库的设计而不影响用户使用的能力。用户只需要查询视图就可以得到所需的数据,而不用编写复杂的查询语句或者执行脚本。

简化用户权限的管理:

数据库所有者可以把视图的权限授予需要查询的用户,而不必将基表中某些列的查询权限授予用户。3视图创建

可以使用3种方法创建视图,一种方法是使用createview语句,另一种方法是使用DBAstudio图形工具,还可以使用创建视图向导来创建。

使用createview语句创建视图

create[orreplace][force|noforce]view[user.]viewName

(column[,column2]...)

asquery

[withcheckoption[Constraintconstraint]]

[withreadonly]

orreplace表示如果同名的视图存在,则使用新视图替代已有的视图。

force强制创建视图,不考虑基表是否存在,是否具有使用基表数据的权限。

noforce只有基表存在且具有权限,才可以创建视图。

user

表示创建视图的用户名。

viewName

表示将要在数据库上创建的视图名称。

column

指定视图中的列名。

query表示生成视图的select语句。

withcheckoption指定强制检查通过视图修改数据的操作。

constraint

表示指定的约束名称。

withreadonly:表示创建的视图只能检索数据,不能修改数据。

形考任务2教学实践2备份user_tables.table_name到表tab1,备份dba_tables.table_name到表tab2,使用一条select语句查询表tab1和tab2,其中tab1的数据全部输出,tab2数据仅输出和tab1重复部分。数据导出:

1将数据库orcl完全导出,用户名system密码manager导出到D:\daochu.dmp中expsystem/manager@orclfile=d:\daochu.dmpfull=y

2将数据库中system用户与sys用户的表导出expsystem/manager@orclfile=d:\daochu.dmpowner=(system,sys)

3将数据库中的表table1、table2导出expsystem/manager@orclfile=d:\daochu.dmptables=(table1,table2)

4将数据库中的表table1中的字段filed1以"00"打头的数据导出expsystem/manager@orclfile=d:\daochu.dmptables=(table1)query=\"wherefiled1like'00%'\"

上面是常用的导出,对于压缩我不太在意,用winzip把dmp文件可以很好的压缩。

不过在上面命令后面加上compress=y就可以了

数据的导入

1将D:\daochu.dmp中的数据导入orcl数据库中。impsystem/manager@orclfile=d:\daochu.dmp

上面可能有点问题,因为有的表已经存在,然后它就报错,对该表就不进行导入。

在后面加上ignore=y就可以了。

2将d:\daochu.dmp中的表table1导入impsystem/manager@orclfile=d:\daochu.dmptables=(table1)

基本上上面的导入导出够用了。不少情况我是将表彻底删除,然后导入。

注意:

你要有足够的权限,权限不够它会提示你。

数据库时可以连上的。可以用tnspingorcl来获得数据库orcl能否连上

附录一:

给用户增加导入数据权限的操作

第一,启动sql*puls

第二,以system/manager登陆

第三,createuser用户名IDENTIFIEDBY密码(如果已经创建过用户,这步可以省略)

第四,GRANTCREATEUSER,DROPUSER,ALTERUSER,CREATEANYVIEW,

DROPANYVIEW,EXP_FULL_DATABASE,IMP_FULL_DATABASE,

DBA,CONNECT,RESOURCE,CREATESESSIONTO用户名字

第五,运行-cmd-进入dmp文件所在的目录,

impuserid=system/managerfull=yfile=*.dmp

或者impuserid=system/managerfull=yfile=filename.dmp形考任务3阶段性测验1试题1以下选项中,不属于PL/SQL异常的是()。该题参考选项为:系统异常试题2Oracle数据库的管理员是()。该题参考选项为:SYS试题3“altertabletab1dropcolumncol1;”的作用是()。该题参考选项为:删除了数据表tab1的字段col1试题4“altertabletab1modify(namechar(32));”的作用是()。该题参考选项为:修改了字段name的大小试题5count()的作用是()。该题参考选项为:数据统计试题6desc的作用是()。该题参考选项为:查看表/视图的结构试题7count()属于()。该题参考选项为:分组函数试题8substr()函数的作用是()。该题参考选项为:取字符串子串试题9JOIN…ON子句的作用是()。该题参考选项为:指定一个可以消除笛卡儿积的关联条件试题10“fromuser_tablesu”中的u是()。该题参考选项为:user_tables的别名试题11DBMS目前采用的数据模型中最常用的是()模型。该题参考选项为:关系试题12netca命令作用是()该题参考选项为:配置网络组件试题13oracle数据库中的bin_to_num函数的作用是?()该题参考选项为:把二进制数值转换为对应的十进制数值试题14oracle数据库中的lower函数的作用是?()该题参考选项为:将字符转换成小写试题15oracle数据库中的last_day函数的作用是?()该题参考选项为:返回指定日期的当前月份的最后一天日期试题16orderby中desc的作用是(  )该题参考选项为:降序试题17sqlplus/nolog指令的意思是?()该题参考选项为:sqlplus登录时不进行日志记载试题18下列哪种不是DML语句是()。该题参考选项为:alter试题19下面选项中有关连接描述错误的是()该题参考选项为:outerjion外连接试题20不属于单行函数的特征的是:(  )该题参考选项为:单行函数不可以嵌套试题21删除表使用的语句是()。该题参考选项为:droptable试题22哪个是按照一定的数据模型组织的、长期存储在计算机内,可为多个用户共享的数据的集合。()该题参考选项为:数据库试题23数据库系统的基础是()。该题参考选项为:数据模型试题24默认用户名scott的口令是()该题参考选项为:tiger试题25系统中有权利启动和关闭数据库的用户是:()。该题参考选项为:system试题26DML实现对数据的增、删、改、查等操作。该题参考选项为:“对”。试题27DML是数据定义语言。该题参考选项为:“错”。试题28数据表名可以修改。该题参考选项为:“对”。试题29数据表是一个二维的数据结构,由字段和对应数据构成数据存储的结构。该题参考选项为:“对”。试题30OracleSQL对标准SQL做了实现及扩展。该题参考选项为:“对”。试题31orderby默认情况下按升序排序。该题参考选项为:“对”。试题32sysdate()函数可以得到系统的当前时间。该题参考选项为:“对”。试题33to_char(x[,f])函数把字符串或时间类型x按格式f进行格式化转换为字符串类型。该题参考选项为:“对”。试题34SQL语句中有多个数据表时SQL引擎会按照自左向右的顺序处理from子句后面的数据表。该题参考选项为:“错”。试题35INITCAP(列名|表达式):将每个单词的第一个字母转换成大写该题参考选项为:“对”。试题36多个数据表时from子句后面表名顺序无所谓。该题参考选项为:“错”。试题37LAST_DAY:返回指定日期每年最后一天的日期该题参考选项为:“错”。试题38MONTHS_BETWEEN:返回两个日期类型数据之间间隔的整月数该题参考选项为:“错”。试题39Oracle支持5种类型的约束:notnull、unique、check、primarykey、foreignkey该题参考选项为:“对”。试题40Oracle数据库中可以对约束进行禁用,禁用约束可以在执行一些特殊操作时候保证操作能正常进行该题参考选项为:“错”。试题41Oracle数据库中字符串和日期必须使用双引号标识该题参考选项为:“错”。试题42oracle数据库系统中,启动数据库的第一步是启动一个数据库实例该题参考选项为:“对”。试题43SUM和AVG函数分别返回每组的总和及平均值_____该题参考选项为:“对”。试题44为了节省存储空间,定义表时应该将可能包含NULL值的字段放在字段列表的末尾该题参考选项为:“对”。试题45修改表时,可以指定新添加列的位置该题参考选项为:“错”。试题46创建表时,default修饰的列,指定在插入或更新数据时,列的默认值该题参考选项为:“对”。试题47单行函数对单行操作,每行返回一个或多个结果该题参考选项为:“错”。试题48在连接操作中,如果左表和右表中不满足连接条件的数据都出现在结果中,那么这种连接是全外连接_____自然连接是根据两个表中同名的列而进行连接的,当列不同名时,自然连接将失去意义{TRUE#回答错误#回答正确}该题参考选项为:“对”。试题49数据处理的经过4个阶段,即:人工管理阶段、文件系统阶段、数据库系统阶段、大数据系统阶段该题参考选项为:“错”。试题50空值在升序排列中排在最开始,在降序排列中排在最后该题参考选项为:“错”。形考任务4教学实践3创建一个存储过程,实现在user_tables查询参数给出的表名是否存在,并从存储过程中返回结果。创建一个名称为sch的数据表,表结构如表1所示,将表2中的数据插入sch表中。字段名\o"数据类型"数据类型主键外键非空唯一自增idint(10)是否是是否namevarchar(50)否否是否否glassvarchar(50)否否是否否表2:idnameglass1xiaomingglass12xiaojunglass2第一步:创建一个sch表,并向sch表中插入表2中的数据,代码如下:mysql>createtablesch->(->idint(10),->namevarchar(50),->glassvarchar(50)->);QueryOK,0rowsaffected(0.11sec)mysql>insertintoschvalue(1,'xiaoming','glass1'),->(2,'xiaojun','glass2');QueryOK,2rowsaffected(0.05sec)Records:2Duplicates:0Warnings:0mysql>descsch;+-------+-------------+------+-----+---------+-------+|Field|Type|Null|Key|Default|Extra|+-------+-------------+------+-----+---------+-------+|id|int(10)|YES||NULL|||name|varchar(50)|YES||NULL|||glass|varchar(50)|YES||NULL||+-------+-------------+------+-----+---------+-------+3rowsinset(0.00sec)12345678910111213141516171819202122通过select*fromsch来查看插入表格的内容,SQL语句如下:idnameglass1xiaomingglass12xiaojunglass2第二步:创建一个存储函数用来统计表sch中的记录数。mysql>createfunctioncount_sch()->returnsint->return(selectcount(*)fromsch);QueryOK,0rowsaffected(0.05sec)mysql>selectcount_sch();+-------------+|count_sch()|+-------------+|2|+-------------+1rowinset(0.00sec)123456789101112创建的存储函数名称为count_sch,通过selectcount_sch()查看函数执行的情况,这个表中只有两条记录,得到的结果也是两条记录,说明函数成功执行。第三步:创建一个存储过程,通过调用存储函数的方法来获取表sch中的记录数和sch表中id的和。创建一个存储过程add_id,同时使用前面创建的存储函数返回表sch中的记录数,计算出表中所有的id之和。代码如下:mysql>delimiter//mysql>createprocedureadd_id(outcountint)->begin->declareitmpint;->declarecur_idcursorforselectidfromsch;->declareexithandlerfornotfoundclosecur_id;->selectcount_sch()intocount;->set@sum=0;->opencur_id;->repeat->fetchcur_idintoitmp;->ifitmp<10->thenset@sum=@sum+itmp;->endif;->until0endrepeat;->closecur_id;->end//QueryOK,0rowsaffected(0.06sec)mysql>select@a,@sum//+------+------+|@a|@sum|+------+------+|NULL|NULL|+------+------+1rowinset(0.00sec)mysql>delimiter;12345678910111213141516171819202122232425262728表sch中只有两条记录,所有id的和为3,和预想的执行结果完全相同。这个存储过程创建了一个cur_id的光标,使用这个光标来获取每条记录的id,使用repeat循环语句来实现所有id号相加。几个小问题:1、MySQL存储过程和存储函数有什么区别?本质上都是存储程序。函数只能通过return语句返回单个值或表对象;存储过程不允许执行return,但可以通过out参数返回多个值。函数限制比较多,不能用临时表,只能用表变量,还有一些函数都不可用。存储过程的限制相对就比较少。函数可以嵌入sql语句中使用,可以在select语句中作为查询语句中的一个部分调用,而存储过程一般是作为一个独立的部分来执行。2.存储过程中的代码可以改变吗?MySQL还不提供对已存在的存储过程代码的修改。如果必须修改存储过程,就必须使用drop语句删除之后再重新编写,或者创建一个新的存储过程。3.存储过程中可以调用其他存储过程吗?存储过程包含用户定义的sql语句集合,可以使用call语句调用存储过程,当然在存储过程中也可以使用call语句调用其他存储程序,但是不能使用drop语句删除其他存储过程。4.存储过程的参数不能与数据表中的字段名相同。在定义存储过程参数列表时,应注意把参数名与数据库表中的字段名区别开,否则将出现无法预期的结果。5.存储过程的参数可以使用中文吗?一般情况下,可能会出现存储过程中传入中文参数的情况,例如,某个存储过程根据用户的名字查找该用户的信息,传入的参数值可能是中文。这时需要在定义存储过程的时候,在后面加上charactersetgbk,不然调用存储过程中使用中文参数会出错,比如定义userInfo存储过程,代码如下:createprocedureuseInfo(Inu_namevarchar(50)charactersetgbk,outu_ageint)形考任务5阶段性测验2试题1使用()子句可以筛选分组后的各组数据。该题参考选项为:having试题2“select*fromdba_data_fileswherebytes=max(bytes);”出错原因是()。该题参考选项为:分组函数不能使用在where子句中试题3子查询不能使用()语句。该题参考选项为:orderby试题4删除存储过程sp_clu的语法是()。该题参考选项为:dropproceduresp_clu;试题5“updatetab1setname='1234'whereid=1;”修改了()条记录。该题参考选项为:不确定试题6建立数据表的同时使用“check(id=10)”的作用是()。该题参考选项为:建立了检查约束试题7数据库约束状态默认是()。该题参考选项为:enablevalidate试题8事务中触发回滚后()操作会失效。该题参考选项为:以上皆是试题9INTERSECT是()该题参考选项为:交集试题10MINUS是()该题参考选项为:补集试题11完全联合运算默认情况下输出()。该题参考选项为:不排序试题12UNION是()该题参考选项为:并集不重复试题13下列不属于Oracle数据库中的约束条件的是()。该题参考选项为:INDEX试题14下列关于提交事务的叙述哪一项是正确的?()该题参考选项为:事务提交后,它对数据库所做的修改将永久保存到数据库中试题15关于ROWNUM的描述,下列正确的是(   )该题参考选项为:ROWNUM经常用来做为分页查询。试题16函数avg的作用是()该题参考选项为:返回平均值试题17哪个不是多行子查询的运算符()该题参考选项为:>试题18在ORACLE数据库中创建一个表,对其主键叙述正确的是(   )该题参考选项为:主键必须唯一且不能为空试题19在ORACLE中,TRUNCATE命令的作用是(   )该题参考选项为:删除表中全部数据试题20在oracle中获取前10条的关键字是()该题参考选项为:rownum试题21下列哪个约束只能定义在列级定义上(   )该题参考选项为:NOTNULL试题22在Oracle数据库中,删除一个表,那么对建立在该表上的索引产生的结果是( )该题参考选项为:索引同时被删除;试题23函数sum的作用是()该题参考选项为:返回总和试题24如下描述正确的是()该题参考选项为:子查询返回记录的条数可以是一条或多条试题25对表数据的什么操作不对操作的数据添加锁(   )该题参考选项为:SELECT试题26groupby子句减少了重复访问同一个数据块的次数。该题参考选项为:“对”。试题27groupby子句用于配合分组函数,根据一列或多列对结果集进行分组。该题参考选项为:“对”。试题28子查询可以在select、insert、update和delete语句中使用。该题参考选项为:“对”。试题29子查询可以直接用在分组函数中。该题参考选项为:“错”。试题30使用集合运算时列的数据类型、列数可以不一致。该题参考选项为:“错”。试题31查询语句会先逐条处理然后进行集合运算。该题参考选项为:“对”。试题32insert语句可以不写列名。该题参考选项为:“对”。试题33insert语句可以把查询到的数据插入数据库。该题参考选项为:“对”。试题34非空约束的列在插入数据时必须有值。该题参考选项为:“错”。试题35PL/SQL支持过程控制。该题参考选项为:“对”。试题36GROUPBY所指定的列必须出现在SELECT列表中该题参考选项为:“错”。试题37INTERSECT相交运算返回多个查询结果集的公有行该题参考选项为:“对”。试题38truncate是DDL操作,不能rollback该题参考选项为:“对”。试题39UNIONALL完全联合运算,返回由任一查询结果集包含的行,并且包含重复行,默认情况下对结果集进行升序排序该题参考选项为:“错”。试题40使用DELETE语句删除表中的行记录,不能rollback该题参考选项为:“错”。试题41列级约束只能在一列上起作用该题参考选项为:“对”。试题42多行子查询需要使用多行操作符,多行操作符包括:IN、ANY、ALL该题参考选项为:“对”。试题43多行注释以“/*”开始,以“*/”结束该题参考选项为:“对”。试题44如果在查询中使用了组函数,任何不在组函数中的列或表达式都必须包含在GROUPBY子句中该题参考选项为:“对”。试题45数据库约束状态有两类该题参考选项为:“对”。试题46显式游标的游标属性的前缀是游标名该题参考选项为:“对”。试题47游标分为显式游标和隐式游标该题参考选项为:“对”。试题48视图本身不包含任何业务数据该题参考选项为:“对”。试题49隐式游标由PL/SQL维护,当执行查询时自动打开和关闭该题参考选项为:“对”。试题50隐式游标的游标属性前缀是SQL该题参考选项为:“对”。形考任务6作业简述什么是PL/SQL及其主要特性。认识PL/SQL

***PL/SQL的使用几乎贯穿于整个Oracle的学习过程,也是作为一个初级开发人员必须掌握的重要知识点。

***\o"结构化查询语言"结构化查询语言(SQL)是用来访问和操作关系型数据库的一种标准通用语言,它属于第四代语言(4GL),

简单易学,使用它可以很方便地调用相应的语句来取得结果。该语言的特点就是非过程化。也就是说,使用

的时候不用指明执行的具体方法和途径,即不用关注任何的实现细节。但这种语言也有一个问题,就是在某

些情况下满足不了复杂业务流程的需求,这就是第四代语言的不足之处。

Oracle中的PL/SQL语言正是为了解决这一问题,PL/SQL属于第三代的语言(3GL),也就是过程化的语言,

同Java

、C#一样可以关注细节,用它可以实现复杂的业务逻辑,是数据库开发人员的利器。

***PL/SQL是Oracle公司在标准SQL语言基础上进行扩展而形成的一种可以在数据库上进行设计变成的语言,

通过Oracle的PL/SQL引擎执行。PL/SQL完全可以像Java语言一样实现逻辑判断、条件循环以及异常处理

等,这是标准的SQL很难办到的事情。由于它的基础是标准的SQL语句,这就使得数据库开发人员能快速地

掌握并运用,相信这也是Oracle开发人员喜欢它的另一个重要原因。总的来说,PL/SQL有以下几个特点:

》》支持事务控制和SQL数据操作命令。

》》它支持SQL的所有数据类型,并且在此基础上扩展了新的数据类型,也支持SQL的函数以及

运算符

》》PL/SQL可以存储在Oracle服务器中

》》服务器上的PL/SQL程序可以使用权限进行控制

》》Oracle有自己的DBMS包,可以处理数据的控制和定义命令---PL/SQL的优势

***由于PL/SQL语言是从SQL语言扩展而来,所以PL/SQL除了支持SQL数据类型和函数外,同时也支持

Oracle对象类型。除此之外,同传统的SQL语言相比PL/SQL有以下几个优点:

(1)、可以提高程序的运行性能

标准的SQL被执行时,只能一条一条地向Oracle服务器发送。假如完成一个业务逻辑需要几条

甚至几十条SQL语句,那么在这个过程中,客户端会几十次地连接数据库服务器,而连接数据库本身

是一个很耗费资源的过程,当这个业务被完成时,会浪费大量的资源在网络连接上。

如果此时换用PL/SQL语句,结果则不一样了。PL/SQL的语句块可以包含多条SQL语句,而语句

块可以嵌套在程序中,甚至可以存储到Oracle服务器上。这样用户只需要连接一次数据库就可以把

需要的参数传递过去,其他的部分将在Oracle

服务器内部执行完成,然后返回最终的结果。这样就

大大地节省了网络资源的开销。

(2)、可以使程序模块化

在程序块中可以实现一个或几个功能。例如,当想把一个动物的模型存到数据库里时,

可能涉及几张表,如果使用标准的SQL完成该功能需要多条语句,而如果使用块,则可以把

对多张表的操作都放到一个块内,而对外只提供一个调用方式和需要传入的参数。这对于

编程开发人员是一个福音,他们不需要再写过多的SQL语句,只需要给出参数并调用一次

PL/SQL的程序块就好。这种操作的优势在介绍存储过程后显得尤其明显。

使用块也可以把数据库数据同客户程序隔离开来,使得数据库表结构发生变化时,对

调用者的影响减小到最低程度。

(3)、可以采用逻辑控制语句来控制程序结构

如果一个PL/SQL程序块中只能顺序地执行基本的SQL语句,那么它的意义实在有限。

而实际当中PL/SQL可以利用条件或循环语句来控制程序的流程,这么做就大大地增加了

PL/SQL的实用性,我们可以利用逻辑控制语句完成复杂的普通的SQL语句完成不了的业务。

例如,实现如下的功能:产品很多种类,而在产品表中,产品的类型需要使用产品类型编码

替代,而不是名称,这样当输入记录的时候就需要把产品名称转换成产品编码,在PL/SQL

块中就可以利用CASE语句完成判断分类,并把产品名称转换成产品编码。而这些在标准的

SQL中很难实现,即便实现了也不是动态的数据。

(4)、利用处理运行时的错误信息

标准的SQL在遇到错误时会提示异常。例如增加数据,一旦有异常就会终止,但是调用者却

很难快速地发现错误点在哪儿,即使发现出问题的地方也只能是告诉开发人员该语句程序本身

有问题,而不是逻辑上有问题。

例如:在产品表里增加数据时,数量只能是要求数值型,并没有更细的要求。假如增加的数据

中该字段部分是一个负数,正常来说是可以进入数据库的,但这在逻辑上是不允许的,因为

没有数量为负的产品。而利用PL/SQL就可以完全避免类似的问题,我们可以利用流程拒绝这

部分记录进入数据库。

利用PL/SQL还可以成功处理一些程序上的异常,不至于因终止SQL操作,而造成调用SQL

的展示页面出现生硬的错误提示。

(5)、良好的可移植性

PL/SQL可以成功地运行到不同的服务器中。例如,从windows的数据库服务器下移植到Linux

的数据库服务器下。也可把PL/SQL从一个Oracle版本移植到其他版本的Oracle中。

---PL/SQL的结构

PL/SQL程序的基本单位是块(block),而PL/SQL块很明确地分三部分,其中包括声明部分、执行

部分和异常处理部分。其中声明部分以DECLARE作为开始标志,执行部分用BEGIN作为开始部分,

而异常处理部分以EXCEPTION为开始标志。其中的执行部分是必需的,而其余的两个部分则可选下面

的一段文字描述了PL/SQL块的三部分:

------------------------------------------------------------------------------------------------------------------------------------

[DECLARE]

--声明开始关键字

/*

这里是声明部分,包括PL/SQL中的变量、常量以及类型等

*/

BEGIN

--执行部分开始的标志

/*

这里是执行部分,是整个PL/SQL块的主体部分,该部分在

该部分在PL/SQL块中必须存在,可以是SQL语句或者程序流程

控制语句等

*/

[EXCEPTION]

--异常开始部分的关键字

/*

这里是异常处理部分,当出现异常时程序流程可以进入此处

*/

END;

--执行结束标志

--------------------------------------------------------------------------------------------------------------------------------------

需要记住:无论PL/SQL程序段的代码量有多少,它的基本结构只是这三部分组成。下面将以3个示例

演示PL/SQL语句块的3种情况。

【示例1】只有执行体部分的结构

该示例只有执行体部分,也就是只有“BEGIN...END;”部分,该语句块中将输出一句话,脚本如下:

《执行效果》

打开SQL*Plus执行,执行结果如上图。

从上图中可以看到“

SETSERVEROUTPUTON”这么一行脚本,利用该脚本可以打开SQL*Plus

的输出功能,否则会看不到输出的语句。

【示例2】包含声明和执行体两部分的结构

该示例除了执行体外还有声明部分,具体操作是声明一个变量,然后为变量赋值,最后输出该

变量的值。脚本如下:

《执行效果》

打开SQL*Plus并执行,执行结果如上。

通常在PL/SQL编程中,变量都是存储动态得到的数据,这种情况在下一个示例中将演示。

【示例3】包含声明部分、执行体和异常部分的结构

SELECT...INTO...语句是PL/SQL特有的赋值语句,该语句表示的意思是SELECT后面列出要

查询的字段列表,INTO后面是变量名称,它表示把查询出来的值存储到变量中。这里有两个问题

需要注意,就是

SELECT列名顺序和INTO后面的变量名顺序要一一对应,还有就是该类型语句每

次只能返回一条记录,如果返回记录超过一条或没有返回记录都会引发异常。---PL/SQL的基本规则

PL/SQL中有一些基本的规范读者应该了解,在了解这些基础之后就可以学习更加严格的编程规范,

这样才能写出高质量的代码,其他开发人员阅读起来也会有一个积极开朗的心态。下面列出初学者需

要注意的规则:

(1)、PL/SQL中允许出现的字符集

》》字母,包括大写和小写

》》数字,即0~9

》》空格、回车符以及制表符

》》符号包括+、-、*

/

、<

>

、=

、!

~

^

;

、:

、.

、'

、@、

%

、,

"

#

$

&

_

、|

、(

、)

、[

、]

、{

、}

、?

(2)、下面列出一些PL/SQL必须遵守的要求:

》》标识符不区分大小写。例如,TEST同Test、test是一样的。所有的名称在存储时都被

修改成大写,这一点读者需要注意。

》》标识符中允许字母、数字、下划线,并且以字母开头

》》标识符最多30个字符

》》不能使用保留字。如与保留字同名必须使用双引号括起来

》》语句使用分号结束。即使多条语句在同一行,只要它们都正常结束,那么就没有问题。

而且在语句块的结束标志END后面同样需要使用分号

》》语句的关键词、标识符、字段的名称以及表的名称等都需要

温馨提示

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

评论

0/150

提交评论