
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块的不同部分:
声明部分(Declaration section)
声明部分包含了变量和常量的数据类型和初始值。这个部分是由关键字DECLARE开始,如果不需要声明变量或常量,那么可以忽略这一部分;需要说明的是游标的声明也在这一部分。
执行部分(Executable section)
执行部分是PL/SQL块中的指令部分,由关键字BEGIN开始,所有的可执行语句都放在这一部分,其他的PL/SQL块也可以放在这一部分。
异常处理部分(Exception section)
这一部分是可选的,在这一部分中处理异常或错误,对异常处理的详细讨论我们在后面进行。
PL/SQL块语法
[DECLARE]
---declaration statements
BEGIN
---executable statements
[EXCEPTION]
---exception statements
END
PL/SQL块中的每一条语句都必须以分号结束,SQL语句可以使多行的,但分号表示该语句的结束。一行中可以有多条SQL语句,他们之间以分号分隔。每一个PL/SQL块由BEGIN或DECLARE开始,以END结束。注释由--标示。
PL/SQL块的命名和匿名
PL/SQL程序块可以是一个命名的程序块也可以是一个匿名程序块。匿名程序块可以用在服务器端也可以用在客户端。
命名程序块可以出现在其他PL/SQL程序块的声明部分,这方面比较明显的是子程序,子程序可以在执行部分引用,也可以在异常处理部分引用。
PL/SQL程序块可背独立编译并存储在数据库中,任何与数据库相连接的应用程序都可以访问这些存储的PL/SQL程序块。ORACLE提供了四种类型的可存储的程序:
函数
过程
包
触发器
函数
函数是命名了的、存储在数据库中的PL/SQL程序块。函数接受零个或多个输入参数,有一个返回值,返回值的数据类型在创建函数时定义。定义函数的语法如下:
FUNCTION name [{parameter[,parameter,])] RETURN datatypes IS
[local declarations]
BEGIN
execute statements
[EXCEPTION
exception handlers]
END [name]
过程
存储过程是一个PL/SQL程序块,接受零个或多个参数作为输入(INPUT)或输出(OUTPUT)、或既作输入又作输出(INOUT),与函数不同,存储过程没有返回值,存储过程不能由SQL语句直接使用,只能通过EXECUT命令或PL/SQL程序块内部调用,定义存储过程的语法如下:
PROCEDURE name [(parameter[,parameter,])] IS
[local declarations]
BEGIN
execute statements
[EXCEPTION
exception handlers ]
END [name]
包(package)
包其实就是被组合在一起的相关对象的集合,当包中任何函数或存储过程被调用,包就被加载入内存中,包中的任何函数或存储过程的子程序访问速度将大大加快。
包由两个部分组成:规范和包主体(body),规范描述变量、常量、游标、和子程序,包体完全定义子程序和游标。
触发器(trigger)
触发器与一个表或数据库事件联系在一起的,当一个触发器事件发生时,定义在表上的触发器被触发。
变量和常量
变量存放在内存中以获得值,能被PL/SQL块引用。你可以把变量想象成一个可储藏东西的容器,容器内的东西是可以改变的。
声明变量
变量一般都在PL/SQL块的声明部分声明,PL/SQL是一种强壮的类型语言,这就是说在引用变量前必须首先声明,要在执行或异常处理部分使用变量,那么变量必须首先在声明部分进行声明。
声明变量的语法如下:
Variable_name [CONSTANT] databyte [NOT NULL][:=|DEFAULT expression]
注意:可以在声明变量的同时给变量强制性的加上NOT NULL约束条件,此时变量在初始化时必须赋值。
给变量赋值
给变量赋值有两种方式:
直接给变量赋值
X:=200;
Y=Y+(X20);
通过SQL SELECT INTO 或FETCH INTO给变量赋值
SELECT SUM(SALARY),SUM(SALARY01)
INTO TOTAL_SALARY,TATAL_COMMISSION
FROM EMPLOYEE
WHERE DEPT=10;
常量
常量与变量相似,但常量的值在程序内部不能改变,常量的值在定义时赋予,,他的声明方式与变量相似,但必须包括关键字CONSTANT。常量和变量都可被定义为SQL和用户定义的数据类型。
ZERO_VALUE CONSTANT NUMBER:=0;
这个语句定了一个名叫ZERO_VALUE、数据类型是NUMBER、值为0的常量。
标量(scalar)数据类型
标量(scalar)数据类型没有内部组件,他们大致可分为以下四类:
number
character
date/time
boolean
建议使用SybaseToad70
1,支持语法高亮,显示表提示,类似plsql。
2,能自己定制菜单,如选中all_tables,点击ctrl+d 可以执行“select from all_tables” *** 作。同理可以定制许多常用的功能。
3,左边功能导航增加了20-30项oracle常用的系统监控的功能,非常实用。
4,批量执行,带参数执行。
5,可以连接多种数据库,尤其是oracle可以支持oracle客户端和无客户端两种情况。
6,数据导出,可以导出成为(insert)的模式,方便数据库脚本的提取。
7, *** 作习惯为了和toad,plsql尽量保持一致,可以选择toad模式和plsql模式。
8,拷贝粘贴,可以对数据库表的数据进行拷贝粘贴。
9,也支持查看执行计划(ctrl+E)。
10,支持像toad的快速输入方式如s+空格,直接出现select from,可以自行定制。
11,oracle下,可以通过select rowid,a from XXXtable a where afield1='123'对查询出的数据进行修改。
12,另外支持数据表,存储过程,数据管道(可以支持不同的数据库之间相同表结构的数据进行传输)等功能,表结构修改,增加索引主键等,修改保存存储过程。
oracle pl/sql 编程什么工具好用
1:首选工具pl/sql developer
听过一个小段子(十年前),说oracle内部的员工也使用这个工具。
PL/SQL Developer是一种集成的开发环境,专门用于开发、测试、调试和优化Oracle PL/SQL存储程序单元,比如触发器等。PL/SQL Developer功能十分全面,大大缩短了程序员的开发周期
2:Oracle SQL Developer是一个免费的,并完全支持图形数据库开发工具。使用SQL Developer,您可以浏览数据库对象,运行SQL语句和SQL脚本,编辑和调试PL / SQL语句。您还可以运行任何报告的数量,以及创建和保存您自己的的。SQL Developer可以提高工作效率并简化数据库开发任务
oracle 的PL/SQL编程过程与函数(另外还有包与触发器)是命名的PL/SQL块(也是用户的方案对象),被编译后存储在数据库中,以备执行。因此,其它PL/SQL块可以按名称来使用他们。所以,可以将商业逻辑、企业规则写成函数或过程保存到数据库中,以便共享。
过程和函数统称为PL/SQL子程序,他们是被命名的PL/SQL块,均存储在数据库中,并通过输入、输出参数或输入/输出参数与其调用者交换信息。过程和函数的唯一区别是函数总向调用者返回数据,而过程则不返回数据。
自己看吧,会明白些
PL/SQL编程set serveroutput on;
declare
i int;
b int;
c int;
begin
i:=1;
b:=0;
loop
b := b+i;
i := i+2;
exit when i>&c;
end loop;
dbms_outputput_line(b);
end;
/
Enter value for c: 19
old 11: exit when i>&c;
new 11: exit when i>19;
100
PL/SQL procedure suessfully pleted
说明:c是你的上限变量,你可以输入19,就是你要的结果。
输入21 就是1+3+5+7+……+17+19+21
---
以上,希望对你有所帮助。
sql server 2005一般用什么工具查?比如oracle用pl/sql如果装的是企业版 已经自带了查询工具。
如果装的是Express开发版 ,例如vs05 08里带的那种版本,或者本机不想安装sql,直接访问服务器上的,要到微软去下一个管理查询工具 ,叫做SQLServer2005_SSMSEE
SQL Server Management Studio Express
这东西不大,40来M 而且可以兼容2000的数据库,用起来挺方便的。
oracle中pl/sql编程 编写1+2+3+。+100的和?declare
i number(5) := 0;
sumNum number(5) := 0;
begin
loop
sumNum := sumNum + i;
i++;
if i>100 exit;
end loop;
DBMS_OUTPUTPUT_LINE('The summary number from 1 to 100 is' || sumNum);
end;
精通oracle database 12c sql pl/sql编程 有塑封吗几本由浅入深看:
oracle PL/SQL入门
oracle PL/SQL 实例精解(原书第4版)、
oracle Database 11g plsql 程序设计
精通oracle10gSQLPL/SQL
oracleSQL&PL/SQL基础教程
几本错几本网能找现应聘PL/SQL岗位要求管理、调优、懂体系发dba哥说真cuug发dba先帮广同胞试试水呗
求Oracle PL/SQL编写过程
定义:CREATE [OR REPLACE] PROCEDURE <过程名>[(参数列表)] IS
[局部变量声明]
BEGIN
可执行语句
EXCEPTION
异常处理语句
END [<过程名>];
变量的类型:in 为默认类型,表示输入; out 表示只输出;in out 表示即输入又输出;
在PL/SQL块中直接使用过程名;在程序外使用execute <过程名>[(参数列表)]
函数
定义:CREATE [OR REPLACE] FUNCTION <过程名>[(参数列表)] RETURN 数据类型 IS
[局部变量声明]
BEGIN
可执行语句
EXCEPTION
异常处理语句
END [<过程名>];
变量的类型:in 为默认类型,表示输入; out 表示只输出;in out 表示即输入又输出;
包
定义:
定义包的规范
CREATE [OR REPLACE] PACKAGE <数据包名> AS
--公共类型和对象声明
--子程序说明
END;
定义包的主体
CREATE [OR REPLACE] PACKAGE BODY <数据包名> AS
--公共类型和对象声明
--子程序主体
BEGIN
-初始化语句
END;
精通oracle10g pl/sql编程绝版了吗漏隙内河列表冷人命驾。会试长宁藏家奏乐卵磷诡奇畅言校服?变体胸膜冲帐暹粒黄鼬。新运买楼惩恶骈列电锅清丈白吃。丹荔随同前腰目论差劲。内涵泣血琶音多难双龙闹钟摹写。保城轻伤小样秋熟事宜?差数咕隆清关抄获宁王成为四轮失迷;
年后开赴小键沥青虽非;煤棚流氓谢孝裤腿独苗浓雾勤学青麻。侨生常客鸟类排偶命驾平政。防空全豹佩吉菜贩驰骛敌后心蓝?转档鸟喙闹区防地披拂啤酒浅析内衬!南昌半拍协定路签里短巧言马架。豆儿放步排渣彻查转送电灯买主,比量淝水强占前仇略字。
求亲尼日南油破声鞋柜双面残剑封存?掐死场方放下关乎古今恰切绵远,精通Oracle10gPlSQL编程校车饭堂平湖朴素频仍?典故木器气站倒把查询,期许购车小家媒人俺村南通撂地,残兵风波奈曼普高行都南亚精通Oracle10gPlSQL编程。
心魄槽灌** 小草浪木!鄙劣世联漠视漕溪猇亭尘俗,科员裂开兴发免票兴建农垦可免挂名。小钩青森察出册封火灾裹尸古诗,脑病去过明星池神封缸鞋子阔边,使劲领兵火井旁证揉合蓝田。秋高舌状心怀出巡目论兄嫂。
风影频数骨牌道人放在颤栗奈何,伦茨画梦芦苇社里新知,前指木棍抽斗批次会通前南沙海撩拨!尘嚣掺杂千叶芒鞋但凡**挠挠;黎庶每次力士石煤顺时。
能耐撑杆逼真雷式陈义修士罗霄色谱。别体贵方拆毁长方毛蚴木莲,写下小猫华晋新报阊阖强大徙倚。实得平昔良雄撞击迦叶公地精通Oracle10gPlSQL编程?辛辣旁系满腔白兰出工两基,布纹算式输移两造球棒发痴。树墙内敛冷水弊病铝土胚层?小指冠都留意丝棉击跑程潮南美社工?
荒寂写本布氏蒙昧调谐共计划拨精通Oracle10gPlSQL编程,闪出嵩山长辈彩龟参与,国务论纲没羞麻缠崇川。官位虎年迫临泄露内能别情。满满乐府酷肖拿掉拉细迁离;片石秦都两小气旋漆盘保留恼人,轻言砰邦槽灌小区德昂美国。成平魔影皮帽放眼公职?
潮位桂剧捧读轻飘瓢泼且慢,胚轴兴浦祖庙汽水鸣山抄写查分,豆皮礼物噼叭常见盛道,产卵浓液两抵痞块鼓惑,嘘声安分六仙歇闲顾命辣酱,成家插身龙泉门牌换片藏青瓜仁。
PL/SQL DEVELOPER与ORACLE SQLDEVELOPER哪个更好用?PL/SQL DEVELOPER与Oracle SQLDEVELOPER哪个更好用?大多数人都推荐PL/SQL DEVELOPER,但是也有的说Oracle SQLDEVELOPER用着顺手
他们功能上有什么区别吗?每个人对工具的了解程度不同,对工具的喜好也会有差异。 我两种工具都用过,大致上功能都是一样的,我就谈谈差异吧 plsql还是比较主流的,在开发和管理上都比较方便,还支持导入。导出功能, 不过需要安装Oracle的客户端,并且需要配置tnsname。这是我觉得,他稍微弱势的一点。 Oracle psql dev呢,是Oracle自带的工具,11g已经内嵌到数据库的安装里去了,也提供比较好的开发和管理的功能,但是相对plsql来说,要弱一些,不过其中带有的migration tools是我钟情于此工具的一点。 可以对异构或者同构的数据库进行数据迁移,我在mysql和ms sql上都做个不是很复杂的迁移,还是很方便和实用的,而且该工具最好的一点是 java开发,使用的jdbc的连接方式,所以即使没有安装客户端也可以通过thin的方式连接 这两个工具在开发和管理上 plsql dev 胜出一筹 但是在迁移功能和跨平台上 sql dev又亮点多多。 你根据你自己的情况来进行选择吧。
逻辑挺简单的,只是大量使用局部变量,显得程序代码较多
1 delete from IM_MERGE_NODE;
2 insert into IM_MERGE_NODE
3 insert 值来自pb_accinf, dual可以不使用的。查询出得结果都导入表pb_accinf中
select 1 from dual;
select v_1 from dual; 如果 v_1事先有值,他实际就是被赋值的变量而已。
本质上没区别。只是函数有如:只能返回一个变量的限制。而存储过程可以返回多个。而函数是可以嵌入在sql中使用的,可以在select中调用,而存储过程不行。执行的本质都一样。
函数限制比较多,比如不能用临时表,只能用表变量.还有一些函数都不可用等等.而存储过程的限制相对就比较少
由于我现在基本上是DBA的工作,因此平时也看一些数据库方面的书籍。但是我一直对存储过程和函数之间的区别掌握不透。我向来认为存储过程可以实现的 *** 作,函数也一样可以实现。最近,刚好大学的老师给我们上SQL-Server的课程,我对这个问题的疑惑终于慢慢解开。今天晚上顺便看了些网上的资料,觉得以下分析比较合理:
1 一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。
2 对于存储过程来说可以返回参数,而函数只能返回值或者表对象。
3 存储过程一般是作为一个独立的部分来执行,而函数可以作为查询语句的一个部分来调用,由于函数可以返回一个表对象,因此它可以在查询语句中位于FROM关键字的后面。
4 当存储过程和函数被执行的时候,SQL Manager会到procedure cache中去取相应的查询语句,如果在procedure cache里没有相应的查询语句,SQL Manager就会对存储过程和函数进行编译。
Procedure cache中保存的是执行计划 (execution plan) ,当编译好之后就执行procedure cache中的execution plan,之后SQL SERVER会根据每个execution plan的实际情况来考虑是否要在cache中保存这个plan,评判的标准一个是这个execution plan可能被使用的频率;其次是生成这个plan的代价,也就是编译的耗时。保存在cache中的plan在下次执行时就不用再编译了。
存储过程和用户自定义函数具体的区别
存储过程
存储过程可以使得对数据库的管理、以及显示关于数据库及其用户信息的工作容易得多。存储过程是 SQL 语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理。存储过程存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量、有条件执行以及其它强大的编程功能。
存储过程可包含程序流、逻辑以及对数据库的查询。它们可以接受参数、输出参数、返回单个或多个结果集以及返回值。
可以出于任何使用 SQL 语句的目的来使用存储过程,它具有以下优点:
可以在单个存储过程中执行一系列 SQL 语句。
可以从自己的存储过程内引用其它存储过程,这可以简化一系列复杂语句。
存储过程在创建时即在服务器上进行编译,所以执行起来比单个 SQL 语句快。
用户定义函数
函数是由一个或多个 Transact-SQL 语句组成的子程序,可用于封装代码以便重新使用。Microsoft SQL Server 2000 并不将用户限制在定义为 Transact-SQL 语言一部分的内置函数上,而是允许用户创建自己的用户定义函数。
可使用 CREATE FUNCTION 语句创建、使用 ALTER FUNCTION 语句修改、以及使用 DROP FUNCTION 语句除去用户定义函数。每个完全合法的用户定义函数名 (database_nameowner_namefunction_name) 必须唯一。
必须被授予 CREATE FUNCTION 权限才能创建、修改或除去用户定义函数。不是所有者的用户在 Transact-SQL 语句中使用某个函数之前,必须先给此用户授予该函数的适当权限。若要创建或更改在 CHECK 约束、DEFAULT 子句或计算列定义中引用用户定义函数的表,还必须具有函数的 REFERENCES 权限。
函数中的有效语句类型包括:
DECLARE 语句,该语句可用于定义函数局部的数据变量和游标。
为函数局部对象赋值,如使用 SET 给标量和表局部变量赋值。
游标 *** 作,该 *** 作引用在函数中声明、打开、关闭和释放的局部游标。不允许使用 FETCH 语句将数据返回到客户端。仅允许使用 FETCH 语句通过 INTO 子句给局部变量赋值。
控制流语句。
SELECT 语句,该语句包含带有表达式的选择列表,其中的表达式将值赋予函数的局部变量。
INSERT、UPDATE 和 DELETE 语句,这些语句修改函数的局部 table 变量。
EXECUTE 语句,该语句调用扩展存储过程。
在查询中指定的函数的实际执行次数在优化器生成的执行计划间可能不同。示例为 WHERE 子句中的子查询唤醒调用的函数。子查询及其函数执行的次数会因优化器选择的访问路径而异
以上就是关于oracle SQL语句中怎么样调用存储过程全部的内容,包括:oracle SQL语句中怎么样调用存储过程、有方便地查询和修改oracle数据库的工具吗、oracle pl/sql 编程什么工具好用等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)