仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 711|回复: 8
打印 上一主题 下一主题

[学习教程] MYSQL网页设计Oracle PL/SQL言语基本

[复制链接]
小魔女 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 22:39:37 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
你可以配置MySQL运行在微小的嵌入式应用程序中,处理的数据可能不足1Mb??而你也可以用它来处理数Tb的数据。MySQL获得这种可扩展性的路径之一是通过一个人们所熟知的存储过程,这是一个运行在程序之外的微型、预编译程序。oracle|sql言语OraclePL/SQL言语基本
2002-8-23
OraclePL/SQL言语基本


PL/SQL是ORACLE对尺度数据库言语的扩大,ORACLE公司已将PL/SQL整合到ORACLE服务器和其他工具中了,近几年中更多的开辟职员和DBA入手下手利用PL/SQL,本文将报告PL/SQL基本语法,布局和组件、和怎样计划并实行一个PL/SQL程序。

PL/SQL的长处

从版本6入手下手PL/SQL就被牢靠的整合到ORACLE中了,一旦把握PL/SQL的长处和其独占的数据办理的便当性,那末你很难设想ORACLE缺了PL/SQL的情况。PL/SQL不是一个自力的产物,他是一个整合到ORACLE服务器和ORACLE工具中的手艺,能够把PL/SQL看做ORACLE服务器内的一个引擎,sql语句实行者处置单个的sql语句,PL/SQL引擎处置PL/SQL程序块。当PL/SQL程序块在PL/SQL引擎处置时,ORACLE服务器中的SQL语句实行器处置pl/sql程序块中的SQL语句。

PL/SQL的长处以下:

.PL/SQL是一种高功能的基于事件处置的言语,能运转在任何ORACLE情况中,撑持一切数据处置命令。经由过程利用PL/SQL程序单位处置SQL的数据界说和数据把持元素。

.PL/SQL撑持一切SQL数据范例和一切SQL函数,同时撑持一切ORACLE工具范例

.PL/SQL块能够被定名和存储在ORACLE服务器中,同时也能被其他的PL/SQL程序或SQL命令挪用,任何客户/服务器工具都能会见PL/SQL程序,具有很好的可重用性。

.可使用ORACLE数据工具办理存储在服务器中的PL/SQL程序的平安性。能够受权或打消数据库其他用户会见PL/SQL程序的才能。

.PL/SQL代码可使用任何ASCII文本编纂器编写,以是对任何ORACLE可以运转的操纵体系都长短常便当的

.关于SQL,ORACLE必需在统一工夫处置每条SQL语句,在收集情况下这就意味作每个自力的挪用都必需被oracle服务器处置,这就占用大批的服务器工夫,同时招致收集拥堵。而PL/SQL是以全部语句块发给服务器,这就下降了收集拥堵。

PL/SQL块布局

PL/SQL是一种块布局的言语,构成PL/SQL程序的单位是逻辑块,一个PL/SQL程序包括了一个或多个逻辑块,每一个块都能够分别为三个部分。与其他言语不异,变量在利用之前必需声明,PL/SQL供应了自力的专门用于处置非常的部分,上面形貌了PL/SQL块的分歧部分:

声明部分(Declarationsection)

声明部分包括了变量和常量的数据范例和初始值。这个部分是由关头字DECLARE入手下手,假如不必要声明变量或常量,那末能够疏忽这一部分;必要申明的是游标的声明也在这一部分。

实行部分(Executablesection)

实行部分是PL/SQL块中的指令部分,由关头字BEGIN入手下手,一切的可实行语句都放在这一部分,其他的PL/SQL块也能够放在这一部分。

非常处置部分(Exceptionsection)

这一部分是可选的,在这一部分中处置非常或毛病,对非常处置的具体会商我们在前面举行。

PL/SQL块语法

[DECLARE]

---declarationstatements

BEGIN

---executablestatements

[EXCEPTION]

---exceptionstatements

END

PL/SQL块中的每条语句都必需以分号停止,SQL语句可使多行的,但分号暗示该语句的停止。一行中能够有多条SQL语句,他们之间以分号分开。每个PL/SQL块由BEGIN或DECLARE入手下手,以END停止。正文由--标示。

PL/SQL块的定名和匿名

PL/SQL程序块能够是一个定名的程序块也能够是一个匿名程序块。匿名程序块能够用在服务器端也能够用在客户端。

定名程序块能够呈现在其他PL/SQL程序块的声明部分,这方面对照分明的是子程序,子程序能够在实行部分援用,也能够在非常处置部分援用。

PL/SQL程序块可背自力编译并存储在数据库中,任何与数据库相毗连的使用程序都能够会见这些存储的PL/SQL程序块。ORACLE供应了四品种型的可存储的程序:

.函数

.历程

.包

.触发器

函数

函数是定名了的、存储在数据库中的PL/SQL程序块。函数承受零个或多个输出参数,有一个前往值,前往值的数据范例在创立函数时界说。界说函数的语法以下:

FUNCTIONname[{parameter[,parameter,...])]RETURNdatatypesIS

[localdeclarations]

BEGIN

executestatements

[EXCEPTION

exceptionhandlers]

END[name]

历程

存储历程是一个PL/SQL程序块,承受零个或多个参数作为输出(INPUT)或输入(OUTPUT)、或既作输出又作输入(INOUT),与函数分歧,存储历程没有前往值,存储历程不克不及由SQL语句间接利用,只能经由过程EXECUT命令或PL/SQL程序块外部挪用,界说存储历程的语法以下:

PROCEDUREname[(parameter[,parameter,...])]IS

[localdeclarations]

BEGIN

executestatements

[EXCEPTION

exceptionhandlers]

END[name]

包(package)

包实在就是被组合在一同的相干工具的汇合,当包中任何函数或存储历程被挪用,包就被加载进内存中,包中的任何函数或存储历程的子程序会见速率将年夜年夜加速。

包由两个部分构成:标准和包主体(body),标准形貌变量、常量、游标、和子程序,包体完整界说子程序和游标。

触发器(trigger)

触发器与一个表或数据库事务接洽在一同的,当一个触发器事务产生时,界说在表上的触发器被触发。

变量和常量

变量寄存在内存中以取得值,能被PL/SQL块援用。你能够把变量设想成一个可蕴藏器材的容器,容器内的器材是能够改动的。

声明变量

变量一样平常都在PL/SQL块的声明部分声明,PL/SQL是一种健壮的范例言语,这就是说在援用变量前必需起首声明,要在实行或非常处置部分利用变量,那末变量必需起首在声明部分举行声明。

声明变量的语法以下:

Variable_name[CONSTANT]databyte[NOTNULL][:=|DEFAULTexpression]

注重:能够在声明变量的同时给变量强迫性的加上NOTNULL束缚前提,此时变量在初始化时必需赋值。

给变量赋值

给变量赋值有两种体例:

.间接给变量赋值

X:=200;

Y=Y+(X*20);

.经由过程SQLSELECTINTO或FETCHINTO给变量赋值

SELECTSUM(SALARY),SUM(SALARY*0.1)

INTOTOTAL_SALARY,TATAL_COMMISSION

FROMEMPLOYEE

WHEREDEPT=10;

常量

常量与变量类似,但常量的值在程序外部不克不及改动,常量的值在界说时付与,,他的声明体例与变量类似,但必需包含关头字CONSTANT。常量和变量都可被界说为SQL和用户界说的数据范例。

ZERO_VALUECONSTANTNUMBER:=0;

这个语句定了一个名叫ZERO_VALUE、数据范例是NUMBER、值为0的常量。

标量(scalar)数据范例

标量(scalar)数据范例没有外部组件,他们大抵可分为以下四类:

.number

.character

.date/time

.boolean

表1显现了数字数据范例;表2显现了字符数据范例;表3显现了日期和布尔数据范例。

表1ScalarTypes:Numeric




表2字符数据范例



表3DATE和BOOLEAN



LOB数据范例

LOB(年夜工具,Largeobject)数据范例用于存储相似图象,声响如许的年夜型数据工具,LOB数据工具能够是二进制数据也能够是字符数据,其最年夜长度不凌驾4G。LOB数据范例撑持恣意会见体例,LONG只撑持按次会见体例。LOB存储在一个独自的地位上,同时一个LOB定位符(LOBlocator)存储在原始的表中,该定位符是一个指向实践数据的指针。在PL/SQL中操纵LOB数据工具利用ORACLE供应的包DBMS_LOB.LOB数据范例可分为以下四类:

.BFILE

.BLOB

.CLOB

.NCLOB

操纵符

与其他程序计划言语不异,PL/SQL有一系列操纵符。操纵符分为上面几类:

.算术操纵符

.干系操纵符

.对照操纵符

.逻辑操纵符

算术操纵符如表4所示



干系操纵符次要用于前提判别语句或用于where子串中,干系操纵符反省前提和了局是不是为true或false,表5是PL/SQL中的干系操纵符



表6显现的是对照操纵符



表7.8显现的是逻辑操纵符

[[TheNo.8Picture.]]

实行部分

实行部分包括了一切的语句和表达式,实行部分以关头字BEGIN入手下手,以关头字EXCEPTION停止,假如EXCEPTION不存在,那末将以关头字END停止。分号分开每条语句,利用赋值操纵符:=或SELECTINTO或FETCHINTO给每一个变量赋值,实行部分的毛病将在非常处置部分化决,在实行部分中可使用另外一个PL/SQL程序块,这类程序块被称为嵌套块

一切的SQL数据操纵语句都能够用于实行部分,PL/SQL块不克不及再屏幕上显现SELECT语句的输入。SELECT语句必需包含一个INTO子串大概是游标的一部分,实行部分利用的变量和常量必需起首在声明部分声明,实行部分必需最少包含一条可实行语句,NULL是一条正当的可实行语句,事物把持语句COMMIT和ROLLBACK能够在实行部分利用,数据界说言语(DataDefinitionlanguage)不克不及在实行部分中利用,DDL语句与EXECUTEIMMEDIATE一同利用大概是DBMS_SQL挪用。

实行一个PL/SQL块

SQL*PLUS中匿名的PL/SQL块的实行是在PL/SQL块后输出/来实行,以下面的例子所示:

declare

v_comm_percentconstantnumber:=10;

begin

updateemp

setcomm=sal*v_comm_percent

wheredeptno=10;

end

SQL>/

PL/SQLproceduresuccessfullycompleted.

SQL>

定名的程序与匿名程序的实行分歧,实行定名的程序块必需利用execute关头字:

createorreplaceprocedureupdate_commission

(v_deptinnumber,v_perventinnumberdefault10)is

begin

updateemp

setcomm=sal*v_percent

wheredeptno=v_dept;

end

SQL>/

Procedurecreated

SQL>executeupdate_commission(10,15);

PL/SQLproceduresuccessfullycompleted.

SQL>

假如在另外一个定名程序块或匿名程序块中实行这个程序,那末就不必要EXECUTE关进字。

declare

v_deptnumber;

begin

selecta.deptno

intov_dept

fromempa

wherejob=PRESIDENT

update_commission(v_dept);

end

SQL>/

PL/SQLproceduresuccessfullycompleted

SQL>

把持布局

把持布局把持PL/SQL程序流程的代码行,PL/SQL撑持前提把持和轮回把持布局。

语法和用处

IF..THEN

语法:

IFconditionTHEN

Statements1;

Statements2;

 ....

ENDIF

IF语句判别前提condition是不是为TRUE,假如是,则实行THEN前面的语句,假如condition为false或NULL则跳过THEN到ENDIF之间的语句,实行ENDIF前面的语句。

IF..THEN...ELSE

语法:

IFconditionTHEN

Statements1;

Statements2;

 ....

ELSE

Statements1;

Statements2;

 ....

ENDIF

假如前提condition为TRUE,则实行THEN到ELSE之间的语句,不然实行ELSE到ENDIF之间的语句。

IF能够嵌套,能够在IF或IF..ELSE语句中利用IF或IF..ELSE语句。

if(a>b)and(a>c)then

g:=a;

else

g:=b;

ifc>gthen

g:=c;

endif

endif

IF..THEN..ELSIF

语法:

IFcondition1THEN

statement1;

ELSIFcondition2THEN

statement2;

ELSIFcondition3THEN

statement3;

ELSE

statement4;

ENDIF;

statement5;

假如前提condition1为TRUE则实行statement1,然后实行statement5,不然判别condition2是不是为TRUE,若为TRUE则实行statement2,然后实行statement5,关于condition3也是不异的,假如condition1,condition2,condition3都不建立,那末将实行statement4,然后实行statement5。

轮回把持

轮回把持的基础情势是LOOP语句,LOOP和ENDLOOP之间的语句将无穷次的实行。LOOP语句的语法以下:

LOOP

statements;

ENDLOOP

LOOP和ENDLOOP之间的语句无穷次的实行明显是不可的,那末在利用LOOP语句时必需利用EXIT语句,强迫轮回停止,比方:

X:=100;

LOOP

X:=X+10;

IFX>1000THEN

EXIT;

ENDIF

ENDLOOP;

Y:=X;

此时Y的值是1010.

EXITWHEN语句将停止轮回,假如前提为TRUE,则停止轮回。

X:=100;

LOOP

X:=X+10;

EXITWHENX>1000;

X:=X+10;

ENDLOOP;

Y:=X;

WHILE..LOOP

WHILE..LOOP有一个前提与轮回相接洽,假如前提为TRUE,则实行轮回体内的语句,假如了局为FALSE,则停止轮回。

X:=100;

WHILEX<=1000LOOP

X:=X+10;

ENDLOOP;

Y=X;

FOR...LOOP

语法:

FORcounterIN[REVERSE]start_range....end_rangeLOOP

statements;

ENDLOOP;

LOOP和WHILE轮回的轮回次数都是不断定的,FOR轮回的轮回次数是流动的,counter是一个隐式声明的变量,他的初始值是start_range,第二个值是start_range+1,直到end_range,假如start_range即是end_range,那末轮回将实行一次。假如利用了REVERSE关头字,那末局限将是一个降序。

X:=100;

FORv_counterin1..10loop

x:=x+10;

endloop

y:=x;

假如要加入for轮回可使用EXIT语句。

标签

用户可使用标签使程序取得更好的可读性。程序块或轮回都能够被标志。标签的情势是。

标志程序块



[DECLARE]

.........

BEGIN

........

[EXCEPTION]

.......

ENDlabel_name

标志轮回



LOOP

.........



loop

..........



loop

....

EXITouter_loopWHENv_condition=0;

endloopinnermost_loop;

..........

ENDLOOPinner_loop;

ENDLOOPouter_loop;

GOTO语句

语法:

GOTOLABEL;

实行GOTO语句时,把持会当即转到由标签标志的语句。PL/SQL中对GOTO语句有一些限定,关于块、轮回、IF语句而言,从外层跳转到内层长短法的。

X:=100;

FORV_COUNTERIN1..10LOOP

IFV_COUNTER=4THEN

GOTOend_of_loop

ENDIF

X:=X+10;



NULL

ENDLOOP

Y:=X;

注重:NULL是一个正当的可实行语句。

嵌套

程序块的外部能够有另外一个程序块这类情形称为嵌套。嵌套要注重的是变量,界说在最内部程序块中的变量能够在一切子块中利用,假如在子块中界说了与内部程序块变量不异的变量名,在实行子块时将利用子块中界说的变量。子块中界说的变量不克不及被父块援用。一样GOTO语句不克不及由父块跳转道子块中,反之则是正当的。

《OUTERBLOCK》

DECLARE

A_NUMBERINTEGER;

B_NUMBERINTEGER;

BEGIN

--A_NUMBERandB_NUMBERareavailablehere



DECLARE

C_NUMBERINTEGER

B_NUMBERNUMBER(20)

BEGIN

C_NUMBER:=A_NUMBER;

C_NUMBER=OUTER_BLOCK.B_NUMBER;

ENDSUB_BLOCK;

ENDOUT_BLOCK;

小结

我们在这篇文章中先容了PL/SQL的基本语法和怎样利用PL/SQL言语计划和运转PL/SQL程序块,并将PL/SQL程序整合到Oracle服务器中,固然PL/SQL程序作为功效块嵌进Oracle数据库中,但PL/SQL与ORACLE数据库的严密分离使得愈来愈多的Oracle数据库办理员和开辟职员入手下手利用PL/SQL。

原蓝普IT认证综合站

不可否认,MySQL也是一个很好的关系型数据库,或许在技术上它与其他领先的关系数据库相差并不大,或不具有劣势。但是,对于一些企业环境来说,MySQL显然不具有优势。
只想知道 该用户已被删除
沙发
发表于 2015-1-19 20:50:46 | 只看该作者
where子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行。
不帅 该用户已被删除
板凳
发表于 2015-1-27 17:03:50 | 只看该作者
光写几个SQL实在叫无知。
小女巫 该用户已被删除
地板
发表于 2015-2-5 09:42:19 | 只看该作者
SP4包括用于以下SQLServer2000组件的程序包:Database组件(下载文件:SQL2000-KB884525-SP4-x86.EXE)更新SQLServer2000的32位Database组件,包括数据库引擎、复制、客户端连接组件及工具。有关其他信息,请参阅ReadmeSql2k32Sp4.htm。AnalysisServices组件(下载文件:SQL2000.AS-KB884525-SP4-x86.EXE)更新SQLServer2000的32位AnalysisServices。
小魔女 该用户已被删除
5#
 楼主| 发表于 2015-2-11 08:41:04 | 只看该作者
如果,某一版本可以提供强大的并发响应,但是没有Oracle的相应版本稳定,或者价格较贵,那么,它就是不适合的。
兰色精灵 该用户已被删除
6#
发表于 2015-3-2 04:53:42 | 只看该作者
至于淘汰的问题,只能说在你的项目周期之内,微软应该都不会倒闭。
灵魂腐蚀 该用户已被删除
7#
发表于 2015-3-11 02:15:45 | 只看该作者
XML字段类型更好的解决了XML数据的操作。XQuery确实不错,但是个人对其没好感。(CSDN的开发者应该是相当的熟了!)
精灵巫婆 该用户已被删除
8#
发表于 2015-3-17 19:08:30 | 只看该作者
而写到本地,我又考虑到效率问题.大家来讨论讨论吧,分数不打紧,就给10分,十全十美,没啥对错,各抒己见,但是要有说服力的哦~
第二个灵魂 该用户已被删除
9#
发表于 2015-3-24 20:58:49 | 只看该作者
如果你是从“学习某一种数据库应用软件,从而获得应聘的资本和工作机会”的角度来问的话。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-4 04:23

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表