oracle存储过程、函数、触发器和包

Oracle数据库(触发器、存储过程、函数、包) Oracle触发器、存储过程、函数、包 阅读详情
要点:
  • 存储过程的创建
  • 带参数的存储过程的使用
  • 存储过程的管理
  • 函数的创建和使用
  • 触发器的类型和作用
  • 程序包的创建和使用
存储过程
存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,它大大提高了SQL语句的功能和灵活性。存储过程编译后存储在数据库中,所以执行存储过程比执行存储过程中封装的SQL语句更有效率。
1、存储过程的创建
Oracle存储过程包含三部分:过程声明,执行过程部分,存储过程异常。创建存储过程需要使用CREATE PROCEDURE语句,具体语法如下:

CREATE [ OR REPLACE ] PROCEDURE procedure_name
[
( parameter [ IN | OUT | IN | IN OUT ] data_type )
[ , ...]
]
{ IS | AS }
[ declaration_section ; ]
BEGIN
procedure_body ;
END [ procedure_name ] ;
说明:
  • OR REPLACE:表示如果存储过程已经存在,则替换已有存储过程。
  • procedure_name:存储过程名称
  • parameter:参数,可以为存储过程设置多个参数,参数定义之间用(,)分隔。
  • IN | OUT | IN | IN OUT:指定参数的模式。IN表示输入参数,在调用存储过程时需要为输入参数返回值,而且其值不能在存储过程中修改;OUT表示输出参数,存储过程通过输出参数返回值;IN OUT则表示输入输出参数,这种类型的参数既要接受传递值也允许在过程体重修改其值,并可以返回。默认为IN,在使用IN参数时,还可以使用DEFAULT关键字为该参数设置默认值:
parameter [ IN ] data_type DEFAULT value ;
  • data_type:参数的数据类型,不能指定精确数据类型,例如只能使用NUMBER,不能使用NUMBER(2)等。
  • declaration_section:声明变量。在储存声明的变量不能使用DECLARE语句,这些变量只要用于过程体中。
  • procedure_body:过程体。
  • END [ procedure_name ] :END关键字后添加过程名,可以提高程序的阅读性,不是必须的。

2、调用存储过程
调用过程有两种形式,一种是使用CALL语句,另一种是使用EXECUTE语句,如下:
CALL procedure_name ( [ parameter [ , ...] ] ) ;
EXEC[UTE] procedure_name [ ( parameter [ , ...] ) ] ;
3、带参数的存储过程
a)、IN参数的使用
IN 参数是指输入参数,由存储过程中的调用者为其赋值(也可以使用默认值),如果不为参数制定模式,则其模式默认为IN。

例:创建带IN参数的存储过程,修改人员年龄:
CREATE PROCEDURE update_age
( age in NUMBER , user_name IN VARCHAR2 ) AS
BEGIN
UPDATE ts_user set user_age = age
WHERE usname = user_name ;
END update_age ;
调用时,需要对两个输入参数赋值,赋值有两种形式:
  • 不指定参数名
调用过程只提供参数值,不指定该值赋予那个参数,oracle会自动按照过程中的参数顺序为参数赋值,如果值的个数或者数据类型不匹配,则会返回错误。
EXEC update_age ( 15,'dong' )
  • 指定参数名
调用过程时不仅提供参数值,还指定所赋予的参数。此方式可不按照顺序赋值。指定参数名的赋值形式为:parameter_name => value。
EXEC update_age ( age => 15,user_name => 'dong' )

b)、OUT参数的使用
OUT参数是指输出参数,由存储过程中的语句为其赋值,并返回给用户。此模式参数必须在参数后添加OUT关键字。

例:创建存储过程select_user
CREATE PROCEDURE select_user
(age in NUMBER , user_name OUT VARCHAR2 ) AS
BEGIN
SELECT user_name INTO emp_name
FROM ts_user
WHERE user_age = age ;
END select_user ;


调用存储过程时,需要显示该过程中OUT参数的返回值,还需要实现使用VARIABLE语句声明对应的变量接受返回值,并在调用过程时绑定该变量,形式如下:
VARIABLE variable_name data_type ;
[ , ...]
EXEC[UTE] procedure_name ( :variable_name [ , ...] ) ;
注意:在EXECUTE中绑定变量时,需要在变量名前添加冒号(:)

例:调用select_user
VARIABLE emp1_name VARCHAR2(10) ;
EXECUTE select_user (15 ,:emp1_name ) ;
然后使用PRINT命令查看变量emp1_name 中的值,如下:
PRINT emp1_name ;
也可以使用SELECT语句查看变量emp1_name 中的值,如下:
SELECT :emp1_name FROM dual ;

c)、IN OUT参数的使用
IN OUT参数同时拥有IN与OUT参数的特性,它既接受用户的传值,又允许在过程体中修改其值,并可以将至返回。使用这种模式的参数需要在参数后加IN OUT关键字。IN OUT参数不接受常量值,只能使用变量为其传值。

例:创建存储过程exchange_value,交换两个变量值
CREATE PROCEDURE exchange_value
( value1 IN OUT NUMBER, value2 IN OUT NUMBER )
AS
temp1 NUMBER ;
temp2 NUMBER ;
BEGIN
temp1 := value1 ;
temp2 := value2 ;
value1 := temp2 ;
value2 := temp1 ;
END exchange_value ;
调用exchange_value过程,调用前声明为IN OUT参数赋值的变量,调用后使用SELECT语句输出交换值后的结果,如下:
VARIABLE value1 NUMBER ;
VARIABLE value2 NUMBER ;
EXEC :value1 := 111 ;
EXEC :value2 := 222 ;
EXEC exchange_value (:value1 , :value2) ;
SELECT :value1 , :value2 FROM dual ;
提示:使用EXEC[UTE]命令可以为变量赋值,并且变量名前也需要添加冒号(:)

4、修改与删除存储过程
修改是在 CREATE PROCEDURE添加 OR REPLACE为 CREATE OR REPLACE PROCEDURE,其本质是删除原有创建新的。
删除存储过程需要使用DROP PROCEDURE语句,形式为: DROP PROCEDURE procedure_name;
5、查询存储过程的定义信息
SELECT * FROM user_source WHERE name = 'exchange_value'
函数
1、定义
函数与存储过程的结构类似,但是函数必须有一个return子句,用于返回函数值。
创建函数使用CREATE FUNCTION语句,如下:
CREATE [ OR REPLACE ] FUNCTION function_name
[
( paramter [ IN | OUT | IN OUT ] data_type )
[ , ...]
]
RETURN data_type
{ IS | AS }
[ declaration_section ; ]
BEGIN
function_body ;
END [ function_name ] ;

例:创建函数,实现empno获取ename。
CREATE FUNCTION get_name (emp_num NUMBER)
RETURN VARCHAR2
AS
emp_name emp.ename%TYPE ;
BEGIN
SELECT ename INTO emp_name FROM emp WHERE empno = enm_num ;
END get_name;

2、存储过程与函数的区别与联系
相同点:1).创建语法结构相似,都可以携带多个传入参数和传出参数。
2).都是一次编译,多次执行。
不同点:1).存储过程定义关键字用procedure,函数定义用function。
2).存储过程中不能用return返回值,但函数中可以,而且函数中必须有return子句。procedur不叫返回值,叫带出,可以带出多个值;
3).执行方式略有不同,存储过程的执行方式有两种(1.使用execute2.使用begin和end),函数除了存储过程的两种方式外,还可以当做表达式使用,例如放在select中(select f1() form dual;)。
4).在sql数据操纵语句中只能调用函数而不能调用存储过程,
触发器
触发器是一种特殊的存储过程,触发器在数据库里以独立的对象存储,它与存储过程和函数不同的是,存储过程与函数需要用户显示调用才执行,而触发器是由一个事件来启动运行。即触发器是当某个事件发生时自动地隐式运行。并且,触发器不能接收参数。所以运行触发器就叫触发或点火(firing)。ORACLE事件指的是对数据库的表进行的INSERT、UPDATE及DELETE操作或对视图进行类似的操作。ORACLE将触发器的功能扩展到了触发ORACLE,如数据库的启动与关闭等。所以触发器常用来完成由数据库的完整性约束难以完成的复杂业务规则的约束,或用来监视对数据库的各种操作,实现审计的功能。 
1、触发器类型
主要有DML触发器、替代触发器、系统事件触发器和DDL触发器。
  • DML触发器:ORACLE可以在DML语句进行触发,可以在DML操作前(BEFORE触发器)或操作后(AFTER触发器)进行触发,并且可以对每个行或语句操作上进行触发(行级触发器和语句级触发器)。 
  • INSTEAD OF触发器:又称为替代触发器,用于执行一个替代操作来代替触发事件的操作, 由于在ORACLE里,不能直接对由两个以上的表建立的视图进行操作。所以给出了替代触发器。
  • 系统事件触发器:在发生如数据库启动或者关闭等系统事件时触发。
  • DDL触发器:由DDL语句触发,例如CREATE、ALTER和DROP语句。可分为BEFORE触发器和AFTER触发器。
2、创建触发器
使用CREATE TRIGGER语句,语法如下:

CREATE [ OR REPLACE ] TRIGGER trigger_name
{ BEFORE | AFTER | INSTEAD OF }
{ INSERT | DELETE | UPDATE [ OF column [, column … ] ] } #tigger_event
[ OR { INSERT | DELETE | UPDATE [OF column [, column … ] ] } ... ]
ON [ schema. ] table_name | [ schema.] view_name | [ DATAASE ]
[ REFERENCING  { OLD [ AS ] old | NEW [ AS ]  new | PARENT as parent } ]
[ FOR EACH ROW ]
[ WHEN trigger_condition ]
[ DECLARE declaration_statements ; ]
BEGIN
trigger_body ;
END [ trigger_name ]
PL/SQL_BLOCK | CALL procedure_name;
语法说明:
  • trigger_name:触发器名称。
  • BEFORE | AFTER | INSTEAD OF:BEFORE和AFTER表示触发器执行的时间在触发事件的前后,INSTEAD OF表示触发器中的事件代替触发事件执行。
  • tigger_event:激活触发器的事件,例如 INSERT、DELETE、UPDATE 。
  • ON [ schema. ] table_name | [ schema.] view_name | [ DATABASE ]:table_name为DML触发器所针对的表,如果是替代触发器则需要指定视图名称(view_name),如果是DDL触发器或者系统事件触发器,则使用ON DATABASE。
  • REFERENCING:说明相关名称,在行触发器的PL/SQL块和WHEN 子句中可以使用相关名称参照当前的新、旧列值,默认的相关名称分别为OLD和NEW。触发器的PL/SQL块中应用相关名称时,必须在它们之前加冒号(:),但在WHEN子句中则不能加冒号。
  • FOR EACH ROW:表示是行级触发器,如果未指定则为语句级触发器。
  • WHEN trigger_condition:为触发的运行指定限制条件。
  • trigger_body:触发器体,包含触发器的内容。

3、DML触发器
DML触发器由DML语句触发,对应的tigger_event为:
{ INSERT | DELEATE | UPDATE [ OF column [ , ... ] ] }
说明:
  • DML操作主要包括INSERT、DELETE和UPDATE操作,通过根据针对的事件,可分为INSERT触发器、DELETE触发器和UPDATE触发器。
  • 可以将DML操作细化到列,即针对某列进行DML操作时激活触发器。
  • 任何DML都可按照触发时间分为BEFORE和AFTER。
  • 在行级触发器中,为了获得某列在操作前后的数据,提供两种特殊标识符:OLD和:NEW,通过:OLD.column_name的形式可以获取该列的旧数据,而通过:NEW.colum_name可以获取该列的新数据,INSERT触发器只能用:NEW,DELETE触发器只能用:OLD,UPDATE触发器可以用:OLD和:NEW。
注意:如果创建时,不指定FOR EACH ROW,则为与语句级触发器,所有受影响的数据只处罚一次,因此无法使用:NEW和:OLD获取某列的新旧数据。
4、INSTEAD OF触发器
执行一个替代操作来代替触发事件的操作,而触发事件本身不会被执行。不过oracle中的INSTEAD OF触发器不能针对表,只能针对视图。
5、系统事件触发器
系统事件触发器是指由数据库系统事件触发的触发器,支持的系统事件如下:
系统事件
说明
LOGOFF
用户从数据库注销
LOGON
用户登录数据库
SERVERERROR
服务器发生错误
SHUTDOWN
关闭数据库实例
STARTUP
打开数据库实例
注:对于LOGOFF和SHUTDOWN事件只能创建BEFORE触发器,对于LOGON、SERVERERROR和STARTUP事件只能创建AFTER触发器。
创建系统触发器需要使用ON DATABASE子句,表示创建的触发器是数据库级触发器。创建系统事件触发器需要用户具有DBA权限。
6、DDL触发器
DDL触发器由DDL语句触发,可分为:BEFORE触发器和AFTER触发器,针对事件包含CREATE、ALTER、DROP、ANALYZE、GRANT、COMMENT、REVOKE、RENAME、TRUNCATE、AUDIT、NOTAUDIT、ASSOCIATE STATISTICS和DISASSOCIATE STATISTICS。
创建DDL触发器需要用户具有DBA权限。
7、禁用与启用触发器
创建时使用ENABLE与DISABLE关键字制定触发器初始装填为启用或禁用,默认为ENABLE。需要时也可使用ALTER TRIGGER语句修改触发器的状态,如下:
ALTER TRIGGER trigger_name ENABLE | DISABLE ;
如果修改某个表上所有触发器的状态,可用如下形式:
ALTER TABLE table_name ENABLE | DISABLE ALL TRIGGERS ;
8、修改与删除触发器
修改删除触发器只需要在 CREATE TRIGGER语句中添加OR REPLACE关键字。
删除触发器需要使用DROP TRIGGER语句,具体如下:
DROP TRIGGER trigger_name;
包
1、创建包
程序包是对相关过程、函数、变量、游标和异常等对象的封装,程序包由规范和主体两部分组成,程序包规范:声明类型、变量、常量、异常、游标和子程序等元素条目(不包含这些元素的实际代码);程序包主体:用于实现在程序包规范中定义的游标、子程序(包含了元素的实际代码)。包规范中的条目为共有项目,可供所有的数据库用户访问;而包体中创建的规范中没有提到的项目,属于私有项目,只能在包体中使用。
1)、创建包规范
创建包规范使用CREATE PACKAGE语句,如下:
CREATE [ OR REPLACE ] PACKAGE package_name
{ IS | AS }
package_specification ;
END package_name;
说明:
  • package_name:创建的包名
  • package_specification:用于列出用户可以使用的公共存储过程、函数、类型和对象。
2)、创建包体
创建包体需要使用CREATE PACKAGE BODY语句,并且在创建的时候需要指定已创建的包,如下:
CREATE [ OR REPLACE ] PACKAGE BOODY package_name
{ IS | AS }
package_body ;
END package_name ;
2、调用包
调用程序包中的元素时,采用如下形式:
package_name.[ element_name ] ;
  • element_name:表示元素名称,可以使存储过程名、函数名、变量名和常量名等。
注:程序包中可以定义公有常量和变量,使用的DBMS_OUTPUT.PUT_LINE输出结果语句,DBMS_OUTPUT是系统定义的包,PUT_LINE是该包的存储过程。
3、删除包
使用DEOP PACKAGE语句,如果程序包被删除,则包体也被自动删除。如下:
DROP PACKAGE package_name ;
存储过程、存储函数和包的相关知识与实例 本文的实例全部经过实际操作验证,欢迎下载学习! 立即下载

相关推荐

C语言面试,8道一定会遇到的----关于指针的笔试题详解

C语言面试,8道一定会遇到的----关于指针的笔试题详解

m0_55322924的博客 462

Oracle存储过程和程序包

一、为什么要用存储过程? 如果在应用程序中经常需要执行特定的操作,可以基于这些操作简历一个特定的过程。通过使用过程可以简化客户端程序的开发和维护,而且还能提高客户端程序的运行性能。 二、过程的优点? 1、预编译:存储过程预先编译好放在数据库内,减少编译语句所花的时间。 2、缓存:预编译的存储过程会进入缓存,所以对于经常执行的存储过程,除了第一次执行外,其它次数的执行速度会明显提高。 3、...

心态决定一切 481

手把手教你用UC3842搭建12V/5A反激电源(附PSIM仿真文件)

本文详细介绍了基于UC3842的12V/5A反激电源设计与PSIM仿真实践。从UC3842芯片选型、高频变压器计算到PSIM仿真模型搭建,提供完整的开关电源设计流程。特别包含PCB布局要点和实测优化建议,帮助工程师快速掌握反激电源开发技巧。

u6v7w8x的博客 1201

oracle数据库函数/存储过程/包区别

函数:用于返回特定数据,函数可以直接在SQL语句中执行,包含return 用来进行数据操作,并返回一个单独的函数值存储过程:用于完成一个具体任务(程序的业务)相同点:1、创建的语法结构相似,都可以传入和传出多个参数2、一次编译多次运行不同点:存储过程的关键字procedure,函数定义关键字function2、存储过程中不能用return返回值,函数可以,而且函数必须有return3、执行方式,存...

weixin_30872671的博客 897

手把手教你用HarmBench数据集测试大模型安全性(含多模态案例)

本文详细介绍了如何使用HarmBench数据集测试大模型的安全性,包括文本和多模态越狱指令的实战案例。通过环境配置、数据集获取、测试流程及结果分析,帮助开发者全面评估和提升大模型的安全防护能力,特别关注多模态攻击的防御策略。

weixin_26642481的博客 319

【C++】auto关键字(C++11,超详细解析,小白必看系列)

本文详细解析了C++中的“auto”关键字,介绍了其定义、基本用法、限制和高级用法,特别是与范围for循环和Lambda表达式结合的应用。

m0_73494049的博客 6万+

ORACLE 过程、函数、包的区别与联系

<br />一、过程与函数区别<br />1.过程可以有0~N个返回参数,通过OUT or IN OUT参数返回;函数有且仅有1个返回值,通过return语句返回。<br />2.调用过程时,可做为单独的语句执行;调用函数时,函数必须把返回结果赋值给一个变量。<br />3.在SQL语句中,可以不能调用过程;在SQL语句中,可以直接调用函数。<br /> <br />二、过程与函数<br />过程[procedure]及函数[function]这两种方案对象均由 SQL 语句及 PL/SQL 语言构件组合而

kechengtan的专栏 6105

EtherCAT-7 从站代码移植-SPI

STM32F103 + AX58100,从站代码移植。

tianya_xuan的博客 3565

一文搞懂oracle存储过程、函数、触发器和程序包

文章目录一、存储过程1、简介2、创建存储过程 最近在公司用到orale数据库,以前都是用的mysql。相较于oracle,mysql的存储过程就显得比较鸡肋了,所以系统的学习了一下,写下本文记录一下,以后也可以翻看学习,本文所用到的例子均来自oracle11g自带的scott模式,话不多说,直接开始! 一、存储过程 1、简介 存储过程是一种命名的PL/SQL块 可以没有参数,也可以有若干个输入、输出函数,通常没有返回值 保存在数据库中,不可以被SQL语句直接调用 调用存储过程 execut(exec)

JF的博客 3488

SAR动目标检测三剑客:DPCA/ATI/STAP技术选型指南(含2023最新实验数据对比)

本文深入对比了SAR动目标检测三大主流技术DPCA、ATI与STAP的核心原理与性能差异。基于2023年最新实验数据,分析了它们在最小可检测速度、测速精度、计算复杂度及对通道失配敏感度等方面的优劣,并结合海洋监视与城市交通监控等典型场景,提供了具体的技术选型指南与工程落地考量。

m5n6o7的博客 292

关于三维全波电磁场仿真软件CST的安装和问题解决

百度网盘链接:https://pan.baidu.com/s/1RgWr8Qau1EzSOlh29SewFQ提取码:fzza这里是2023版本的CST,需要其他版本的uu们可以去官网或者其他人的网盘下载。

weixin_60728441的博客 3600

学习笔记

函数和存储过程区别定义   函数是命名了的、存储在数据库中的PL/SQL程序块。函数接受零个或多个输入参数,有一个返回值,返回值的数据类型在创建函数时定义。定义函数的语法如下:FUNCTION name [(parameter[,parameter,...])] RETURN datatypes IS    [local declarations]   BEGIN   exec...

技术大杂烩 125

伺服系统控制原理深度解析

摘要:本文系统阐述了伺服系统的控制原理与应用。首先介绍了伺服系统的定义、组成及其在工业自动化中的重要性;然后详细分析了反馈控制机制、稳定性判据和性能指标;重点推导了传递函数和状态空间两种数学模型,并通过LaTeX公式展示了二阶系统建模过程;进而对比了PID控制、状态反馈及自适应控制等方法的优缺点;最后结合数控机床等案例,验证了理论方法的有效性,并展望了伺服系统智能化发展趋势。全文兼顾理论深度与实践指导性,为控制工程领域提供了系统的技术参考。

技术工作者 1263

Oracle 匿名块和命名块 存储过程 函数 包 触发器

  PL/SQL块分类(匿名块、命名块、子程序、触发器) 2016年07月28日 11:34:15 王涛WantTao 阅读数:2512更多 个人分类: ORACLE | PL/SQL 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.youkuaiyun.com/wangtao510/article/details/52053599     -匿名块 ...

许恒的博客 4971

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Oracle索引、视图、存储过程、触发器、序列、函数和包

索引   目地:更快地检索数据。   特点:读取数据速度快,但添加数据速度慢.。   语法:   create index idx_stu_email on stu (email) ;   drop index idx_stu_email ;   select index_name from user_indexs ; ==============================...

Appleseses的博客 743

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

oracle pl/sql基础,存储过程,函数,触发器和包

知识点: 异常: others捕获所有异常。 异常分很多种类,如NO_FOUND。others处本应该写异常名称,如果不想把异常分得那麼细,可以笼统一点用others来捕获,即所有异常均用others来捕获。 raise抛出异常: 比如下面一个订单输入的例子,若当订单小于库存数量,则抛出异常,并且捕获该异常,处理异常    DECLARE  inventory_too...

远行的博客 770

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

oracle的学习Ⅵ(存储过程、函数、包、触发器、简单的用户管理和权限管理)

命名块(存储过程、函数、包、触发器),而PL/SQL是未命名的不利于重复利用;而且命名块可以运行在服务器端,而PL/SQL块只能运行在客服端 一、存储过程 创建格式 要注意下面存储过程的定义里面数据类型不能有长度 create or replace procedure procedure_name[(参数1 参数类型1 数据类型1, ...)] is|as # 不可省略 变量声明; begin 过程主要功能的实现; exception end; 如: create or repla

胡图图不糊涂的博客 440

oracle学习总结2(pl/sql 游标 异常的处理 存储过程和函数 包 触发器)

pl/sql的学习 给sql添加了逻辑判断与流程控制的功能 语法: declare begin exception end; 运算符 重要的就是赋值运算符了:= 连接 || ** 平方 常用的数据类型 也就是oracle常用的数据类型 constanct常量的声明 引用 constanct nubmer:=1; pl/sql操作数据 ...

weixin_30279671的博客 276

oracle触发器函数,oracle 存储过程、函数和触发器用法实例详解

本文实例讲述了oracle 存储过程、函数和触发器用法。分享给大家供大家参考,具体如下:一、存储过程和存储函数指存储在数据库中供所有用户程序调用的子程序叫存储过程、存储函数。创建存储过程用CREATE PROCEDURE命令建立存储过程。语法:create [or replace] procedure 过程名(参数列表)asPLSQL子程序体;--给指定员工涨工资create procedure ...

weixin_33584549的博客 240

Oracle_存储过程、函数、触发器、包

存储过程 语法: CREATE [OR REPLACE] PROCEDURE 存储过程名[(参数[IN|OUT|IN OUT] 数据类型...)] {AS|IS} [说明部分] BEGIN 可执行部分 [EXCEPTION 错误处理部分] END [过程名]; 简单例子 create or replace procedure pro_hello is begin dbms_outpu...

Chill Lyn 459

Oracle 存储过程、函数与触发器

本文介绍了Oracle数据库开发中的核心PL/SQL组件,包括存储过程、函数、触发器和包。存储过程支持IN/OUT参数,函数可返回值并处理异常,触发器用于自动执行DML操作前后的逻辑,包则封装多个过程和函数提升模块化。文章提供了各组件完整的示例代码,涵盖创建、调试和调用方法,适用于初学者学习和中级开发者进阶。通过掌握这些技能,可以有效构建复杂业务逻辑,提高系统性能,实现数据一致性。

BUG糕手的博客 864

ORACLE PL/SQ入门 存储过程

ORACLE PL/SQ入门(六-九、存储过程、函数、触发器、包)ORACLE PL/SQ入门 六、存储过程1.命令格式  存储过程是一个PL/SQL程序块,接受零个或多个参数作为输入(INPUT)或输出(OUTPUT)、或既作输入又作输出(INOUT),与函数不同, 存储过程没有返回值,存储过程不能由SQL语句直接使用,只能通过EXECUT命令或PL/SQL程

深水蓝天 2364

Oracle-存储过程(procedure、function、package、tigger)

存储过程 概念: 完成特定功能的SQL语句集合,经过编译存储在数据库中 编译后sql语句,可以通过调用过程来实现功能,不需要重新写sql语句 优点: 模块化程序编程 减少网络流通量 提高安全性 提高可移植性 执行速度快 过程procedure 创建过程 create [ or replace ] procedure 过程名称 [ ( 参数列表) ] { is | as } ----声明...

浣熊不是小熊猫 876

Oracle中如何导出存储过程、函数、包和触发器的定义语句?如何导出表的结构?如何导出索引的创建语句?...

Oracle中如何导出存储过程、函数、包和触发器的定义语句?如何导出表的结构?如何导出索引的创建语句? Oracle中如何导出存储过程、函数、包和触发器的定义语句?如何导出表的结构?如何导出索引的创建语句?  QQ群里有人问:如何导出一个用户下的存储过程?   麦苗答:方法有多种,可以使用DBMS_METADATA.GET_DDL包...

小麦苗DBA宝典 1515

oracle中pl/sql编程---存储过程,函数,触发器,包

1.pl/sql编程 pl/sql 指procedure language 过程化/sql. pl/sql 是oracle在标准的sql语句基础上扩展的一种对oracle数据库进行编程的的语言。 可以定义变量和常量,而且可以使用条件语句和循环语句。 2.为什么要有pl/sql编程? 平时是通过java对数据操作,但是有个缺点 (1)不能模块化编程,比如完成订单,可能需要发几条sql

zhengqiqiqinqin的专栏 2711
下一篇: mac 多版本python管理及基本使用
水之光love
博客等级 码龄12年 56粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值