c语言调用oracle存储过程,Oracle存储过程
一、存储过程的概念
存储过程(stored procedure)是Oracle数据库中为了完成某功能的PL/SQL代码集,就像没有返回值的自定义函数。
二、存储过程的创建、调用和权限
1、创建存储过程
create or replace procedure 存储过程名(参数1 模式 数据类型,......)
as/is
-- 定义局部变量
变量1 数据类型;
......
begin
-- 实现存储过程功能的PL/SQL代码。
......
exception
-- 异常处理的PL/SQL代码。
......
end;
/
1)参数的模式有三种:
in:只读模式,在函数中,参数只能被引用/读取,不能改变它的值。
out:只写模式,参数只能被赋值,不能被引用/读取。
in out:可读可写。
参数的模式可以不写,缺省为in,out和in out两种模式极少使用。
2)as/is二选一,在这里没有区别。
3)可以不定义局部变量。
4)可以没有异常(exception)处理代码段。
示例:
1)生成测试数据,脚本如下:
create table T_GIRL
(
id char(4) not null, -- 编号
name varchar2(30) not null, -- 姓名
yz varchar2(20) null, -- 颜值
sc varchar2(20) null, -- 身材
weight number(4,1) not null, -- 体重
height number(3) not null, -- 身高
birthday date not null, -- 出生时间
memo varchar2(1000) null -- 备注
);
insert into T_GIRL(id,name,yz,birthday,sc,weight,height,memo)
values('0101','西施','漂亮',to_date('2000-01-01 01:12:35','yyyy-mm-dd hh24:mi:ss'),
'火辣',48.5,170,'这是一个非常漂亮姑娘,老公是夫差,男朋友是范蠡。');
insert into T_GIRL(id,name,yz,birthday,sc,weight,height,memo)
values('0102','貂禅','漂亮',to_date('1997-08-02 12:20:38','yyyy-mm-dd hh24:mi:ss'),
'苗条',45.2,168,'王允真不是男人,干不过董卓就把美人往火坑里推,千古罪人啊。');
insert into T_GIRL(id,name,yz,birthday,sc,weight,height,memo)
values('0103','妲已','漂亮',to_date('1998-03-03 10:50:33','yyyy-mm-dd hh24:mi:ss'),
'火辣',53.6,172,'如果商真的因我而亡,您们男人做什么去了?');
2)创建存储过程girlinfo,传入超女id参数,显示超女的基本信息。
create or replace procedure girlinfo(in_id varchar2)
is
s_name varchar2(30); -- 姓名
s_yz varchar2(20); -- 颜值
s_height number(3); -- 身高
begin
select name,yz,height into s_name,s_yz,s_height from T_GIRL where id=in_id;
dbms_output.put_line('姓名:'||s_name||'颜值:'||s_yz||'身高:'||s_height);
exception
when others then
dbms_output.put_line('输入的id('||in_id||')不正确,查询无结果。');
end;
/
2、存储过程的调用
1)直接执行
exec 存储过程名(参数,……);
execute 存储过程名(参数,……);
例如:
在上面创建的存储过程中用到了dbms_output,在sqlplus中要先执行set serveroutput on;才能输出内容。
2)在PL/SQL过程中调用
3、存储过程的权限
存储过程是数据库对象,Oracle对它权限管理方式与其它数据库对象相同。
如果getinfo函数是用scott用户创建的,其它用户调用时需要加scott用户名前缀,并且具备相应的权限,否则会出现“PLS-00201:必须声明标识符 'GIRLINFO'”的错误。
三、删除存储过程
drop procedure 存储过程名;
例如:
drop procedure girlinfo;
四、PL/SQL语言
PL/SQL是一种程序语言,叫做过程化SQL语言(Procedural Language/SQL)包括一整套的数据类型、条件结构、循环结构和异常处理结构,PL/SQL可以执行SQL语句,SQL语句中也可以使用PL/SQL函数。
PL/SQL是Oracle数据库对SQL语句的扩展,在普通SQL语句的使用上增加了编程语言的特点,所以PL/SQL把数据操作和查询语句组织在PL/SQL代码的过程性单元中,通过逻辑判断、循环等操作实现复杂的功能或者计算。
五、应用经验
关于存储过程的优缺点,本人查找了一些资料,以下文字来源于百度百科。
1、存储过程的优点
1)重复使用:存储过程可以重复使用,从而可以减少数据库开发人员的工作量。
2)存储过程位于服务器上,调用的时候只需要传递存储过程的名称以及参数就可以了,因此降低了网络传输的数据量。
3)参数化的存储过程可以防止SQL注入式***,而且可以将Grant、Deny以及Revoke权限应用于存储过程,提高了安全性。
4)存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
2、存储过程的缺点
1)调试麻烦,但是用 PL/SQL Developer 调试很方便!弥补这个缺点。
2)移植问题,数据库端代码当然是与数据库相关的。但是如果是做工程型项目,基本不存在移植问题。
3)重新编译问题,因为后端代码是运行前编译的,如果带有引用关系的对象发生改变时,受影响的存储过程、包将需要重新编译(不过也可以设置成运行时刻自动编译)。
4)如果在一个程序系统中大量的使用存储过程,到程序交付使用的时候随着用户需求的增加会导致数据结构的变化,接着就是系统的相关问题了,最后如果用户想维护该系统可以说是很难很难、而且代价是空前的,维护起来更麻烦。
3、我的看法
1)存储过程不会有任何性能的优势。
2)调用远程存储过程减少网络流量的说活太牵强,并且,调用远程存储过程的风险很大。
3)存储过程不能减少开发的工作量,PL/SQL也是一种开发语言,对开发者来说,要付出学习成本。
4)存储过程的调试、重新编译、兼容、维护等问题,任何一项都是很麻烦。
存储过程没有任何优点,作为一个程序员,我从来不用存储过程,大家对于这方面的知识了解即可,不必深入学习。
六、Oracle的包
PL/SQL为了满足程序模块化的需要,引入了包的构造,把存储过程、函数组合起来就成了包,通过使用包就可以分类管理存储过程和函数。有点类似C++中的命名空间。存储过程的应用场景已经很少,包就更少了。
七、版权声明
C语言技术网原创文章,转载请说明文章的来源、作者和原文的链接。
来源:C语言技术网(www.freecplus.net)
作者:码农有道
如果这篇文章对您有帮助,请点赞支持,或在您的博客中转发我的文章,谢谢!!!
如果文章有错别字,或者内容有错误,或其他的建议和意见,请您留言指正,非常感谢!!!
c语言调用oracle存储过程,Oracle存储过程相关推荐
- Oracle数据库中调用Java类开发存储过程、函数的方法
Oracle数据库中调用Java类开发存储过程.函数的方法 时间:2014年12月24日 浏览:5538次 oracle数据库的开发非常灵活,不仅支持最基本的SQL,而且还提供了独有的PL/SQL, ...
- 过程 oracle 写在哪里,Oracle怎么写存储过程? 在什么地方写以及怎么调用?最好给个Sample 急(2)...
当前位置:我的异常网» Java Web开发 » Oracle怎么写存储过程? 在什么地方写以及怎么调用 Oracle怎么写存储过程? 在什么地方写以及怎么调用?最好给个Sample 急(2) www ...
- Java中调用Oracle中的存储过程的单元测试代码
Oracle中的存储过程: /* 创建一个存储函数,返回指定员工的姓名,薪水和年收入 */ create or replace function queryEmp2(eno in number, em ...
- Mybatis 调用SqlServer 和 Oracle的存储过程实例
1.创建好mybatis的Mapper文件 在接口文件中声明好接口以及返回的参数类型 Map<String, Object> getGoodsInfo(Map<String,Obje ...
- oracle 存储同步,Oracle数据库知识——存储过程篇
在线QQ客服:1922638 专业的SQL Server.MySQL数据库同步软件 存储过程是一组用于完成特定功能的SQL语句,该语句已编译并存储在数据库中.用户通过指定存储过程的名称并提供参数(如果 ...
- Oracle PL/SQL 存储过程
Oracle PL/SQL 存储过程 Oracle 简介: 是甲骨文公司的一款关系数据库管理系统.它是在数据库领域一直处于领先地位的产品.可以说Oracle数据库系统是目前世界上流行的关系数据库管理系 ...
- Oracle job procedure 存储过程定时任务
Oracle job procedure 存储过程定时任务 oracle job有定时执行的功能,可以在指定的时间点或每天的某个时间点自行执行任务. 一.查询系统中的job,可以查询视图 --相关视图 ...
- oracle收发邮件存储过程
oracle收发邮件存储过程 2012-04-13 13:33:32| 分类: .NET | 标签: |字号大中小 订阅 CREATE OR REPLACE PROCEDURE PROC_SEND ...
- oracle 存储过程 db,oracle数据库的存储过程是什么?
oracle数据库的存储过程:一组为了完成特定功能的SQL语句集,经编译后存储在数据库中.存储过程是由流控制和SQL语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,应用程序使用时只要调用即 ...
- oracle 创建,删除存储过程,参数传递,创建,删除存储函数,存储过程和函数的查看,包,系统包
认识存储过程和函数 存储过程和函数也是一种PL/SQL块,是存入数据库的PL/SQL块.但存储过程和函数不同于已经介绍过的PL/SQL程序,我们通常把PL/SQL程序称为无名块,而存储过程和函数是以命 ...
最新文章
- 数据挖掘如何分箱以及如何对每个箱子中的数据进行平滑处理
- 基于WF4的新平台-表单格式
- linux系统安全设置
- centos安装vsftp后的虚拟用户设置
- 前端学习(1601):状态提升
- webpack-dev-server 搭建本地服务以及浏览器实时刷新
- Spring4.0之四:Meta Annotation(元注解)
- 【2016年第5期】数据科学人才的需求与培养
- Hello,Views(六)下拉框Spinner(附源码)
- GBTC负溢价扩大至20.44%,创下历史新低
- python 上传文件到服务器(模拟网页前端上传)
- 问题:宇视摄像机OSD如何配置
- 英语学习详细笔记(十)形容词
- win11电脑开机密码忘记了怎么办?
- torch模块常用方法总结
- 多处理器/多核处理器的并行处理方法之——微线程
- 【Jmeter操作步骤】
- [转载]推荐不伤眼睛的文字背景色 VS背景色
- 关于利用postman来模拟并发请求
- 深度学习系列错误笔记(一)之print(‘gpu‘,torch.cuda.is_available())输出gpu False
热门文章
- @DateTimeFormat@JsonFormat注解详解
- 游戏美术次世代制作流程图文详解
- 【原创】HSV和YCrCb色彩空间介绍
- 《Bootloader 启动流程和概念介绍》
- 用的五大bug管理工具的优缺点和下载地址
- 通达信精确逃顶主图指标
- 1.01_AFNetworking(4.0.1)源码分析(一)
- Java高性能系列-(一)VM生命周期
- Vue引入百度地图警告:A Parser-blocking, cross site (i.e. different eTLD+1) script....
- create与oncreate的区别