sybase与oracle存储过程的写法对比

sybase存储过程范例 sybase整体过程范例,在进行编程的时候可能有用,供大家参考。 立即下载

在oracle中创建存储过程和sybase及sql server下的语法有些不一致之处。
下面就此用不同的数据库下存储过程的例子来演示之。
---------------------------
oracle下:
 

CREATE OR REPLACE FUNCTION MY_FUNC
(
P1 
IN MY_TABLE.YY%TYPE,
P2 
IN MY_TABLE.NN%TYPE,
P3 
VARCHAR(100)
)
RETURN VARCHAR2 AS
/*定义有参数的游标和无参数的游标*/
CURSOR MY_CURSOR1 IS
    
SELECT YY,NN,DECODE(FYYSDM,0,'合计',1,'加工费','其他费用要素')
    
FROM MY_TABLE
    
WHERE YY=P1
    
GROUP BY YY,NN
    
ORDER BY YY,NN;
/*定义游标变量,存储游标数据集中的记录*/
V_CURSOR1 MY_CURSOR1
%ROWTYPE; 

CURSOR MY_CURSOR2(V_ZYDM MY_TABLE.ZYDM%TYPE,V_FYYSDM NUMBER) AS
    
SELECT YY,NN,ZYDM,NVL(ZYCB,0) /*NVL函数转换空值为指定值*/
    
FROM MY_TABLE
    
WHERE YY=P1 AND NN=P2 AND ZYDM=V_ZYDM AND FYYSDM=V_FYYSDM
    
GROUP BY YY,NN;
/*定义游标变量,存储游标数据集中的记录*/
V_CURSOR2 MY_CURSOR2
%ROWTYPE; 

V_CPDM  MY_TABLE.CPDM
%TYPE;
V_COUNT 
NUMBER;
V_BZ    
VARCHAR2(2);
V_CPCB  
NUMBER(22,2);

BEGIN
    V_BZ:
=1;
    
SELECT CPDM INTO V_CPDM FROM MY_TABLE;
    
SELECT CPCB INTO V_CPCB FROM MY_TABLE WHERE ROWNUM=1;
    
    
IF MY_CURSOR1%ISOPEN THEN /*判断游标是否已经打开*/
        
CLOSE MY_CURSOR1;
    
END IF;
    
OPEN MY_CURSOR1;
    
FETCH MY_CURSOR1 INTO V_CURSOR1;
    
IF MY_CURSOR1%NOTFOUND THEN /*游标返回结果为空*/
        
CLOSE MY_CURSOR1;
           
RETURN(V_BZ);
    
END IF;
    
WHILE MY_CURSOR1%FOUND LOOP /*游标返回结果不为空*/
        V_CPDM:
=V_CURSOR1.CPDM;
        V_CPCB:
=V_CURSOR1.CPCB;
        V_COUNT:
=100;
        
IF V_COUNT=100 THEN
            V_COUNT:
=99;
        
END IF;
            
FETCH MY_CURSOR1 INTO V_CURSOR1;
    
END LOOP;
    
CLOSE MY_CURSOR1;

    
/*显式打开带参游标*/
    
SELECT CPDM INTO V_CPDM FROM MY_TABLE;
    
OPEN MY_CURSOR2;
    
FETCH MY_CURSOR2 INTO V_CURSOR2;
    
WHILE MY_CURSOR2%FOUND LOOP /*游标返回结果不为空*/
        V_CPDM:
=V_CURSOR2.CPDM;
        V_CPCB:
=V_CURSOR2.CPCB;
        V_COUNT:
=100;
        
IF V_COUNT=100 THEN
            V_COUNT:
=99;
        
ELSE
            V_COUNT:
=88;
        
END IF;
            
FETCH MY_CURSOR2 INTO V_CURSOR2;
    
END LOOP;
    
CLOSE MYCURSOR2;

    
/*隐式打开游标*/
    
FOR V_CURSOR2 IN MY_CURSOR2(V_CPDM,V_CURSOR1.FYYSDM) LOOP
        
IF V_CURSOR2.CPCB IS NULL THEN
           
PRINT '非法!';
           
ROLLBACK;
        
END IF;

        
UPDATE MY_TABLE
        
SET CPCB=V_CPCB
        
WHERE YY=P1 AND NN=P2 AND CPDM=V_CURSOR2.CPDM;
        
IF SQL%NOTFOUND THEN /*判断前句是否有执行结果*/
           
/*程序段*/
        
END IF;
    
END LOOP;
    
    V_BZ:
=MY_DELETE_CB(P_YY,P_NN);
    
IF V_BZ<>0 THEN
        
PRINT '失败!';
    
END IF;
    
FOR I INT 1..V_COUNT LOOP
        
/**/
    
END LOOP;

    
COMMIT;/*提交事务*/
    
RETURN(0);/*要有返回值*/
END MY_FUNC;

CREATE OR REPLACE PROCEDURE SP_MY 
(
P_YY 
IN MY_TABLE.YY%TYPE;
P_NN 
NUMBER;
)
IS

CURSOR MY_CURSOR IS
    
SELECT CPCB 
    
FROM MY_TABLE 
    
WHERE YY=P_YY AND NN=P_NN;

V_ZYCB 
NUMBER(22,2);

BEGIN
    
/**/
    
/*无返回值*/
END;


附oracle下函数:
NVL(AAA,BBB)  空值判断函数,AAA是待判断变量,BBB为为空时要替换值
DECODE(ID,P1,S1,P2,S2,S3) 条件判断函数,假如ID是P1则返回S1,假如ID是P2则返回S2,否则返回S3。
RPAD(AAA,COUNT,'0') 字符补空函数,在AAA变量后补零,共字符串长COUNT。
SUBSTR(AAA,M,N) 取子串函数,取AAA从第M个字符开始,取N个字符。
LENGTH(STR)  取字符长度。
LENGTHB(STR) 取字符字节长度。
TO_CHAR()
TO_NUMBER()类型转换函数
--------------------------------------------------
SYBASE下:

CREATE PROCEDURE PRO_MY
(
@P_YY CHAR(4),
@P_NN CHAR(2)='01',
@P_OUT VARCHAR(255)=NULL OUTPUT
)
AS
BEGIN
    
DECLARE @V_CPDM NUMERIC(9,0),
            
@V_CPCB NUMERIC(22,2),
            
@V_ID   INT,
            
@V_JE   FLOAT

    
DECLARE CUR_TEST CURSOR FOR
        
SELECT CPCB,JE
        
FROM TEST
        
WHERE YY=@P_YY AND NN=@P_NN AND CPDM=@V_CPDM
    
FOR READ ONLY

    
SELECT @V_CPCB=CPCB 
    
FROM TEST 
    
WHERE YY=@P_YY AND NN=@P_NN AND CPDM=@V_CPDM
    
IF @@ROWCOUNT=0
        
PRINT '未找到'
    
ELSE
            
PRINT '找到'

    
OPEN CUR_TEST
    
FETCH CUR_TEST INTO @V_CPCB,@V_JE
    
IF @@SQLSTATUS=2 --返回结果集为空
    IF @@SQLSTATUS=1 --游标执行出错
    BEGIN
        
RAISERROR 20000 --返回自定义错误号
        --RAISERROR 20000,'错误信息' --返回自定义错误号
        ROLLBACK
        
RETURN 10
    
END
    
WHILE @@SQLSTATUS=0 --结果集返回正常结果
    BEGIN
        
/*Exception*/
        
FETCH CUR_TEST INTO @V_CPCB,@V_JE
    
END
    
    
SELECT @V_ID=@V_ID+1

    
IF (@V_STR NOT LIKE "[0-9]")
        
SELECT @@V_ID=1

    
EXECUTE @V_ID=DELETE_CB @P_YY,@P_NN  

    
UPDATE TEST SET CPCB=100 WHERE YY=@P_YY AND NN=@P_NN
    
IF @@ERROR!=0
             
PRINT '更新失败'  

    
RETURN 0

END


附录:
CONVERT(INT,@V_JE) --类型转换函数
LTRIM(@V_STR) --去掉左空格
RTRIM(@V_STR) --去掉右空格
ROUND(@V_JE,2) --数值小数位数设定
SUBSTRING(@V_STR,M,N) --取子字符串
STR(@V_JE,M,N) --设置数值的显示位数和小数位数
CHAR_LENGTH(@V_STR) --字符串长度
PATINDEX("%[0-9]%",@V_STR) --取前边字符在后面字符串中的起始位置
patindex("%[kKmMgGpP]%", @v_str)
--case语句
CASE @V_ID WHEN 0 THEN 'NO' WHEN 1 THEN 'YES' ELSE 'OTHER' END
ISNULL(@V_JE,0) --非空值判断
-------------------------
另外:
关于事务处理:
ORACLE下不用显式打开事务,直接提交即可,而且可以分步提交,多次提交,不用成对出现。
SYBASE必须显式打开和提交事务,且必须成对出现,平时我们单条更新语句的执行被sybase默认为隐式事务来提交。

Sybase存储过程的建立和使用 Sybase存储过程的建立和使用Sybase存储过程的建立和使用Sybase存储过程的建立和使用 立即下载

相关推荐

Sybase ASE存储过程大全

很全面的sybase资料集合,包括了创建修改删除的所有东西,也包括一些的语法和运算,对初学者很方便

sybase 基本语法,存储过程,触发器

sybase据说在12.xx以后支持自定义function了,但是在Adaptive Server Enterprice版本中似乎不行, 但是函数可以通过存储过程来实现,因为存储过程也是有返回值的:) 存储过程 sybase的存储过程语法基本上与sqlserver相似 变量名需要前面加上@,比如@ABC 每行行末不需要分号(;) 基本函数什么的与sqlserver很接近,但有个烦人的c

kenny_10的专栏 2138

sybase数据库存储过程编写经验以及方法

开发人员如果用到其他库的Table或View,务必在当前库中建立View来实现跨库操作,最好不要直接使用“databse.dbo.table_name”,因为sp_depends不能显示出该SP所使用的跨库table或view,不方便校验。 提交SP前,必须已经使用set showplan on分析过查询计划,做过自身的查询优化检查。高程序运行效率,优化应用程序,在SP编写过程中应该注意SQL、索引、tempdb的使用规范。

sybase存储过程一 存储过程介绍

存储过程是由流控制和SQL语句书写的过程,这个过程经编译和优化  后存储在数据库服务器中,使用时只要调用即可。在ORACLE中,若干个  有联系的过程可以组合在一起构成程序包。  使用存储过程有以下的优点:  * 存储过程的能力大大增强了SQL语言的功能和灵活性。存储过程可  以用流控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的  运算。  * 可保证数据的安全性和完整性

ansanlog的专栏 757

Halcon与C#联合编程(一):使用S7协议实现机器视觉上位机与西门子PLC联动

本项目技术栈:C#基础,多线程,Halcon DirectShow,Halcon形状检测,Halcon QR码识别,西门子S7通讯协议,西门子PLC为核心的下位机及执行元件

虎鲸不是鱼 1万+

BH1750光强度传感器Stm32f103驱动(已测试ok)

1. 实验:Stm32f103 驱动 bh1750采集光照强度,串口打印采集到的数据。 2. 实验准备器材 开发版:stm32f103c8t6 器件:bh1750 GY-302 开发环境:win10,KILE4 下载程序的软件:FlyMcu.exe 串口调试助手:ComAssistant.exe 3. BH1750 的接线 VCC:5V或3.3V ...

weixin_53329977的博客 8928

sysbase转oracle,[原创]sysbase使用经验

现在项目组使用的数据库是Sybase,之前都是用Oralce的,在熟悉Sybase时发现Sybase的资料还是很少的(尤其网上资料),摸索很长时间后才慢慢适应过来,闲余之时,总结了下SybaseIQ的使用心得,由于之前用的的Oralce,所以有的差异也是和Oralce作的比较。希望能帮到Sybase初学者。==================================使用总结=======...

weixin_36019375的博客 572

别再乱改宏定义了!STM32F103程序移植保姆级教程(从C8T6到ZET6实战)

本文详细解析了STM32F103程序从C8T6移植到ZET6的实战步骤,重点介绍了硬件差异、开发环境配置、时钟陷阱及外设处理等关键点。通过修改宏定义(如STM32F10X_HD)、调整启动文件和时钟配置,确保移植顺利进行。适合嵌入式开发者参考,避免常见移植问题。

weixin_42567497的博客 215

java sybase存储过程_sybase 基本语法,存储过程,触发器

最近2天用了一下sybase,总结一下sybase存储过程和触发器的一些基本特点。sybase据说在12.xx以后支持自定义function了,但是在Adaptive Server Enterprice版本中似乎不行,但是函数可以通过存储过程来实现,因为存储过程也是有返回值的:)存储过程sybase的存储过程语法基本上与sqlserver相似变量名需要前面加上@,比如@ABC每行行末不需要分号(;...

weixin_36322704的博客 625

【Macbook-Latex安装部署教程】【Win-Texlive镜像下载】【简单易上手】MacTex+Vscode/Texstudio

该教程记录自己在mac()上安装部署Latex环境的经验,整个教程操作简单,配置要求少,易上手。教程分成三部分:Mactex下载与安装,Vscode插件下载与配置文件修改,Texstudio安装。

sunriseOvO的博客 2568

Vue3 - 详解实现网站接入微信扫码登录功能,微信授权生成登录二维码用户用手机扫描二维码登陆,微信扫描二维码登录详细流程及示例代码,支持弹框式、浏览器单独新开页显示,最新vue集成微信扫码授权登录!

vue3,nuxt3,PC网站,网页,微信扫码登录,微信登陆,vue3微信扫码登录,获取个人信息,扫码登录后如何获取用户手机号,微信扫码授权登录,vue3详细实现微信扫一扫登陆,pc网页微信登录,vue3集成微信扫码登录,详细流程和示例源码,第三方扫码登录,vue3微信扫码登录怎么新开一页,跳页显示二维码,内嵌登录二维码,iframe,iframe新页面弹出,弹出一个小窗口显示登录二维码,登录报错,微信扫码没反应,解决手机点登录报错没反应,官方文档,手机扫描微信二维码登录网站,最好用的插件,vue-wxlo

🏆 前端领域优质创作者 1万+

sybase 存储过程 示例

表:student 列:STUDENT_ID, NAME, AGE, SEX,TEACHER_ID 表:teacher 列:TEACHER_ID,NAME,AGE,SEX,SALARY,STUDENT_NUM 需求:将性别和年龄符合给定条件的学生,都指派给指定的老师,并将学生的数量,更新到teacher表中。 业务成功,则返回学生的数量,否则返回-1。 存储过程的代码: CREA

skyfred的博客 7017

IgH EtherCAT 从入门到精通:第 29 章 实战:EoE 远程维护通道搭建

摘要:本章详细介绍了基于EoE(Ethernet over EtherCAT)协议的远程维护通道搭建方案。主要内容包括:1)网络架构设计,采用管理网络与EoE子网隔离的方案;2)从站EoE支持确认与IP地址配置,提供API和命令行两种方式;3)路由/交换两种部署模式,重点推荐路由模式并给出自动化配置脚本;4)SSH远程访问配置,包括直接连接和跳板访问两种方式;5)安全加固措施,如防火墙规则、SSH密钥认证等;6)故障恢复机制与性能注意事项。该方案实现了通过EtherCAT网络对从站设备的远程SSH访问、文件

从事嵌入式linux android驱动开发,拥有全栈能力 360

sql: sybase 和 oracle 比较

1. sybase 和 oracle 比较 http://blog.itpub.net/14067/viewspace-1030014/ Oracle采用多线索多进程体系结构 Sybase采用单进程多线索体系结构 Oracle和Sybase都采用多线索。 采用多线索的模式,能用较少的线索管理大量的用户进程;并且,线索进程是动态可调整的,当用户数增加时, 线索进程也会阶段性地自动增加;当用户...

weixin_34195142的博客 202

基于自适应小波阈值算法的图像去噪

自适应小波阈值算法是一种基于小波变换的方法,它相对于传统的小波阈值去噪方法具有更好的性能和鲁棒性。该算法首先对图像进行小波变换,然后根据小波系数的大小确定一个自适应的阈值,将小波系数与阈值进行比较,大于阈值的系数被保留,小于阈值的系数被置零。在上述代码中,首先选取了小波函数sym4进行小波分解,然后根据标准差计算出阈值,使用wthresh函数进行阈值处理,最后进行反变换得到处理后的图像。该GUI界面与前面的自适应小波阈值算法代码结合,实现了图像的去噪,并提供了可视化的效果。

与其临渊羡鱼,不如退而结网 558

小卫星多普勒频偏MATLAB代码

多普勒频偏是由于发射机和接收机之间的相对运动而引起的频率变化。对于小卫星,由于其速度和高度的变化,多普勒频偏会变得更加明显。本文将探讨小卫星多普勒频偏的原理、影响因素以及补偿方法。多普勒频偏的原理当发射机和接收机之间存在相对运动时,接收到的信号频率会发生变化。这种频率变化称为多普勒频偏。其原理可以描述如下:设发射机和接收机之间的距离为 d,发射信号的频率为 f0,发射机和接收机的相对速度为 v。则接收到的信号频率 f 为:其中 c 为光速。

qq_59747472的博客 244

从sybase的存储过程转向oracle的存储过程的不同点

1. ORACLE存储过程的参数不能限定位数,参数类型定位为  CHAR(5)是非法的,只能定义为CHAR,具体位数限定有调用时的实参决定,这一点确实与SYBASE有很大不同;2. 游标在PL/SQL中作用极大,游标的概念渗透到整个PL/SQL的核心,连INSERT,UPDATE等语句都隐含了一个隐式游标SQL,类似SYBASE的@@ROWCOUNT等系统变量,在ORACLE中定义为游标属性SQL...

五月天的博客 291

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Sybase Oracle SQL 存储过程的创建和执行

Sybase 存储过程的创建和执行 --返回值为int的存储过程 create proc testReturn @tname varchar(12) , @tid int output as begin set @tid = (select testid from Mytest where testname=@tname) return end --返回值...

241

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

sybase oracle 好坏,SYBASE、ORACLE函数对比

SYBASE、ORACLE函数对比SysdateOracle取系统时间用“select sysdate from dual”查询语句。Sybase取系统时间用“select getdate()”查询语句。DecodeOracle的“select decode(IPAddressB,null,' ',IPAddressB) from res”语句,对应Sybase的“select case when...

weixin_39887925的博客 241

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

CASE WHEN 语句在Oracle和Sybase库中的不同

今天提交程序之后,反应有BUG,经仔细查询,发现一个之前并没注意到的问题,那就是case when 语句在Oracle中执行的BUG,用脚本来说明; Oracle --建表 CREATE TABLE TABLE_01  (CODE INT NOT NULL, NAME VARCHAR2(20) NULL); --插入数值,之所以分别插入null和''是因为在Sybase中''和null

skyfred的博客 2464

Sybase脚本修改为oracle脚本备忘

    最近有一个项目要把原来使用的Sybase数据库改为Oracle数据库, 所以我要把sybase的脚本改成oracle的脚本, 如表结构, 存储过程, 视图等的脚本.  这种改脚本的情况可能很久才能遇到一次吧, 放到blog里面, 以后需要自己再看看, 温故知新.(所用sybase版本是11.9.2,  oracle是10g)  1. if exists    用正则表达式 wh

lin49940的专栏 1609

Sybase IQ的使用心得(对比Oracle)

现在项目组使用的数据库是Sybase,之前都是用Oralce的,在熟悉Sybase时发现Sybase的资料还是很少的(尤其网上资料),摸索很长时间后才慢慢适应过来,闲余之时,总结了下Sybase IQ的使用心得,由于之前用的的Oralce,所以有的差异也是和Oralce作的比较。 希望能帮到Sybase初学者。 ==================================使用总结===

CODE男孩的博客 8633

oracle sybase部分常用sql对比

功能 oracle sybase 获取系统时间 sysdate getdate() if t

乌托邦的专栏 1433

oracle+连sybase,sybase与 oracle联接

当前位置:我的异常网» Sybase»sybase与 oracle联接sybase与 oracle联接www.myexceptions.net网友分享于:2015-08-26浏览:15次sybase与 oracle连接配置TRANSPARENT GATEWAY FOR Sybase步骤1.Oracle所在服务器上安装Sybase client(或者在同一台server上安装Oracle...

weixin_39995764的博客 184

sybase数据库与oracle,Oracle访问Sybase数据库的方法

配置TRANSPARENT GATEWAY FOR Sybase步骤1.Oracle所在服务器上安装Sybase client(或者在同一台server上安装Oracle、Sybase服务器),确保能够访问Sybase数据库;2.安装TRANSPARENT GATEWAY FOR Sybase选件,要用自定义安装。正确选择Sybase的安装目录;3.选择一个sid字符串准备赋给Sybase数据库。...

weixin_42153691的博客 270
上一篇: 存储过程的教程
下一篇: java读取oracle的存储过程
daniel112
博客等级 码龄21年 24粉丝 6原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值