- 浏览: 242939 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (282)
- 常用-笔记 (9)
- 2012-2013开发整理 (19)
- 2017前-开发整理 (38)
- 2017-开发整理【前端】 (2)
- 数据库 (25)
- 数据库_Oracle (35)
- 数据库_MySql (4)
- 数据库_Sybase (30)
- 数据库_Oracle ERP (4)
- java 应用 (23)
- java_xml解析 (7)
- java_反射 (0)
- Java_多线程 (0)
- java_socket (0)
- 前端_CSS样式 (3)
- 前端_JavaScript (29)
- 前端_jQuery 应用 (11)
- 前端_jQuery EasyUI (2)
- 开源_SSH框架应用 (18)
- 开源_spring (0)
- 开源_springMVC (0)
- 开源_MyBatis (0)
- 架构_01. SOA_webService (8)
- 架构_02. 搜索引擎_Solr (0)
- 架构_03. redis (0)
- 架构_04. mongodb (2)
- 架构_05. 设计模式 (0)
- 架构_06. 缓存机制 (0)
- 架构_07. 身份认证 (0)
- 架构_08. 单点登录 (0)
- 架构_09. JMS消息机制 (0)
- 架构_10. 工作流 (0)
- 架构_11. 日志 (1)
- 架构_12. 数据库-设计 (1)
- 架构_13.分布式架构 (1)
- web_C标签 (4)
- web中间件 (6)
- 综合技术 (4)
- 管理_maven (3)
- 管理_软件项目管理 (17)
- 思考_程序人生 (16)
- 资源_网站 (2)
- 其他 (1)
- Eclipse基本配置 (3)
- 2017-18 (8)
- Linux (1)
- 数字计算 (3)
- 微信开发 (0)
最新评论
-
masuweng:
JavaScript 动态表格增加、删除、行金额计算、合计 -
xxwozixin:
迷茫中在iteye上搜索“程序员的第一个五年规划”结果看到了这 ...
我的中兴五年生活
在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默认为隐式事务来 提交。
发表评论
-
hibernate连接sybase出现如下错误:010SK: 数据库无法设置连接选项 SET_READONLY_TRUE
2012-07-31 10:04 1287项目中使用hibernate连接sybase出现如下错误: ... -
Sybase复制服务器安装配置过程中常见问题及解决办法
2012-07-17 17:49 2051Sybase复制服务器安装 ... -
Sybase过程中动态SQL使用
2012-05-29 17:44 1423Sybase过程中动态SQL使用: --DROP PRO ... -
Sybase常见问题
2012-05-23 13:25 8451. 程序调用过程报以下 ... -
Sybase数据SQL查询
2012-01-05 12:42 1205Sybase查询: 查询某天是星期几 set date ... -
oracle常用函数,sybase常用函数
2011-12-08 12:03 1771oracle常用函数与sybas ... -
Sybase 写法与Oracle写法的 比较
2011-12-08 09:33 1020项目开发中整理: 1. 计算时间不同写法 ... -
java 调用 sybase存储过程
2011-11-25 23:04 966java程序调用Sybase存储过程: public vo ... -
sybase函数例子(2)
2011-11-16 21:10 701Sybase函数例子: -- 功能描述 : 系统初始 ... -
sybase函数例子(1)
2011-11-16 21:09 759Sybase create or replace funct ... -
Oracle左右连接和Sybase的比较
2011-11-16 00:55 1504数据表的连接 有: 1、内 ... -
从sybase的存储过程转向oracle的存储过程的不同点
2013-01-08 17:26 13371. ORACLE存储过程的参数不能限定位数,参数类型定位为 ... -
存储过程sybase带输入输出参数和游标功能
2011-11-11 10:34 1977例子: /**带输入输出参数和游标功能的sybase ... -
sybase自动清除日志
2011-11-11 10:31 865在图形界面定位到日志端,弹出属性框,选择thresh ... -
Sybase 存储过程(嵌套调用)使用另外一个存储过程的结果集
2011-11-11 10:32 1000/****************************** ... -
Sybase Ase 添加定时任务
2011-11-11 10:30 860准备一个sh文件和sql文件 Sh文件中内容如下 . / ... -
Sybase IQ添加定时任务
2011-10-28 16:31 1132Sybase IQ添加定时任务: create even ... -
Sybase数据库清除日志的做法
2011-10-28 16:27 903最近在项目中使用Sybase,发现数据库日志满了,处理办法 ... -
Jsp调用Sybase数据库存储过程返回记录集成功.(weblogic数据源方式)
2011-10-28 16:27 896源代码如下: <%@page contentType= ... -
sybase存储过程基础
2011-10-28 16:28 1279总结一下sybase存储过程和触发器的一些基本特点。sybas ...
相关推荐
sybase 与oracle函数对比,一些常用的函数对比。
在sybase中实现分页技术的存储过程 procedures
Sybase数据库的存储过程性能优化.pdf
sybase的存储过程编写经验和方法sybase的存储过程编写经验和方法sybase的存储过程编写经验和方法
sybase分页存储过程(代码),分页存储过程代码,实现sybase数据库分页查询。
Sybase的存储过程是集中存储在SQL Server中的预先定义且已经编译好的事务。存储过程由SQL语句和流程控制语句组成。它的功能包括:接受参数;调用另一过程;返回一个状态值给调用过程或批处理,指示调用成功或失败;返回...
SybaseIQ存储过程学习笔记.docx SYBASE IQ存储过程学习笔记 1. 存储过程 存储过程将过程化的SQL语句存储在数据库中,供所有程序使用。存储过程中可以包含控制语句,如LOOP循环语句、IF和CASE这样的条件语句。存储过程...
如何在Sybase ASE上定时调度一个存储过程,如何在Sybase ASE上定时调度一个存储过程,
Sybase的存储过程是集中存储在SQL Server中的预先定义且已经编译好的事务。存储过程由 SQL语句和流程控制语句组成。它的功能包括:接受参数;调用另一过程;返回一个状态值给调用过程或批处理,指示调用成功或失败;...
Sybase存储过程
很全面的sybase资料集合,包括了创建修改删除的所有东西,也包括一些的语法和运算,对初学者很方便
sybase整体过程范例,在进行编程的时候可能有用,供大家参考。
sybase存储过程.zip
Oracle向Sybase ASE迁移指南, 很详细的介绍。
通过Oracle访问Sybase数据库
Java调用带参数的Oracle 存储过程并返回集合,
vb6+Sybase+Oracle源代码
sybaseiq 创建 存储过程,视图 ,触发器等语法大全