- 浏览: 251405 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (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上搜索“程序员的第一个五年规划”结果看到了这 ...
我的中兴五年生活
1. ORACLE存储过程的参数不能限定位数,参数类型定位为
CHAR(5)是非法的,只能定义为CHAR,具体位数限定有调用时的实参决定,这一点确实与SYBASE有很大不同;
2. 游标在PL/SQL中作用极大,游标的概念渗透到整个PL/SQL的核心,连INSERT,UPDATE等语句都隐含了一个隐式游标SQL,类似SYBASE的@@ROWCOUNT等系统变量,在ORACLE中定义为游标属性SQL%ROWCOUNT;
3. ORACLE中显示一个变量的语句为SELECT V_VAR FROM DUAL;
与SYBASE不同的是必须加FROM DUAL;
4. SYBASE存储过程可以通过类似SELECT * FROM T_TABLE来返回数据集,在ORACLE中似乎不能,所有不带INTO的SELECT 语句在ORACLE存储过程中是非法的。这一点变化带来最大麻烦,应为POWERBUILDER调用SYBASE存储过程很喜欢这种方式。
5、在存储过程中声明参数不用加 DECLARE
6、在每个块中只有一个 DECLARE
7、参数名不用加 @ 后缀
8、每条语句后要加分号
9、变量附值不同:
myvalue:='abc';
select @myvalue='abc'
SELECT EMPNO into :emp from EMP WHERE ...;
SELECT @emp=EMPNO from emp WHERE...
10、在TRIGGER 中出现exception 不用加ROLLBACK命令
11、oracle 不使用 read locks ,无论是 read-consistent 还是 serializable 事务所以要注意SELECT FOR UPDATE的使用
移植方案:
一.后台存储过程利用conv72从SYBASE转换到ORACLE。
USAGE: conv72 [-P -F -M] <input_file_name>
-P指存储过程,-F指函数
例如:conv72 -P filename.sql
转换后,产生文件名字是filename.sql.sql
二.转换后的调整。
(一)后台存储过程的调整
1、NULL
ORACLE对NULL 的条件判断只能用: 变量 IS NULL 和变量 IS NOT NULL;
对NULL 的附值只能用:变量 := NULL;
因此需要对所有存储过程中有关 NULL 的操作做上述相应调整。
2、StoO_error:=0;
所有存储过程中,凡是对数据库做有效操作之前,包括UPDATE,DELETE,INSERT以及
执行子存储过程或函数,都有必要将ORACLE转化过程中自动加上的变量StoO_error清
零,即在操作之前加上 StoO_error:=0; 。
3、WHEN NO_DATA_FOUND THEN StoO_error :=0;
所有存储过程中,对数据库做有效操作之后,通常会用IF StoO_error != 0 THEN来
检验操作成功与否。对于空操作,即WHERE 子句条件不满足时,ORACLE会产生例外,
而SYBASE 不会出错。因此为了一致,在 EXCEPTION 中 应加入
WHEN NO_DATA_FOUND THEN StoO_error :=0;
4、示例:
StoO_error :=0;/*操作之前加上 StoO_error:=0*/ BEGIN DELETE BOAD WHERE (EXCH_ID = i_exch_id) AND (SWT_ID = i_swt_id) AND (FRAME_NBR = i_frame_nbr) AND (SHELF_NBR = i_shelf_nbr) AND (BOAD_NBR = i_boad_nbr); StoO_rowcnt := SQL%ROWCOUNT; EXCEPTION WHEN NO_DATA_FOUND THEN StoO_error :=0; WHEN OTHERS THEN StoO_error := SQLCODE; END; IF StoO_error != 0 THEN BEGIN ROLLBACK TO SAVEPOINT aa; i_status := -1 ; RETURN /* */; END; END IF;
5、事务设计
ORACLE的存储过程中,COMMIT 语句将会把此前未提交的所有事务都提交,且对于
已提交的事务,无论在后台存储过程中,还是在前台 PB 的脚本中,都无法回滚。
这与SYBASE 不同,因此事务应该结合后台存储过程与前台 PB 脚本设计。
6、事务的调整
在ORACLE中,没有SYBASE中事务嵌套数的概念,在后台的存储过程中,遇到
COMMIT时,将把整个事务(包括前台和后台)全部提交。而在SYBASE中,只
有当事物数为最低级时(设计都在前台)才能提交。
由于所有事务都在前台提交,
因此把后台存储过程中所有的COMMIT全部注释掉。
7、时间参数调整
如果该存储过程的输入参数为DATE型时,在POWERBUILDER中创建存储过程
时,将引发错误。
为了解决此问题,
在后台,将这种存储过程的DATE型输入参数
全部改为VARCHAR2型。
在存储过程中,将VARCHAR2转化为DATE,为了前后台一致,
采用统一的转化格式。
i_start_DATE:=TO_DATE(i_start_string,'YYYY/MM/DD HH24:MI:SS');
i_end_date :=TO_DATE(i_end_string, 'YYYY/MM/DD HH24:MI:SS');
在前台POWERBUILDER中,将DATE或者DATETIME型变量转化为STRING型,
也采用上述统一格式,再作为存储过程的参数。
v_STRING=STRING(v_DATE, 'YYYY/MM/DD HH:MM:SS')
v_STRING=STRING(v_DATETIME,'YYYY/MM/DD HH:MM:SS')
(二)用于数据窗口的后台存储过程的修改
1、通过特定表返回时,WHERE子句的处理
TABLE: TEST
COLUMN: NAME VARCHAR2(20);
AGE NUMBER;
BIRTH DATE;
REMARKS VARCHAR2(30);
最后的返回语句如下,WHERE子句的处理中,对字符型和日期型进行转义处理
PBDBMS.PUT_LINE('SELECT NAME,AGE,BIRTH,REMARKS ')
PBDBMS.PUT_LINE(' FROM TEST ');
str_where:=' WHERE NAME='|| ''''||VAR_NAME||''''
||'AND AGE =' || TO_CHAR(VAR_AGE)
||'AND BIRTH=' || ''''||TO_CHAR(VAR_BIRTH)||'''';
PBDBMS.PUT_LINE(str_where);
注意:
如果NUMBER型变量是该存储过程的输入参数,则要对他进行
单独处理
IF VAR_AGE IS NULL THEN
CONV:=' AND AGE IS NULL ';
ELSE
CONV:=' AND AGE = ' || TO_CHAR(VAR_AGE);
END IF;
2、最后数据的返回通过表DUAL进行
有两种方式:
(1)、用PBDBMS.PUT_LINE。无法处理返回值为空值的情况
使用方法见底下示例:
注意:对不同变量类型进行了不同处理。
(2)、用PBDBMS.PUT
该过程已经过修改,可对各种变量类型进行处理,不在需要在程序中对
不同类型进行不同处理,同时也可适应NULL值的情况。
使用方法见底下示例:
注意:直接使用该参数,多个变量返回时注意中间加PUT(',');
另外:PBDBMS包中行最大长度为255,而PUT函数不换行,因此估计
长度快到255时,使用PUT_LINE(',')来实现换行目的。
PROCEDURE AAA (I_SO_NBR VARCHAR2) IS I_NUM INTEGER; i_date date; I_NAME VARCHAR2(50); I_COV VARCHAR2(100); I_COV2 VARCHAR2(100); BEGIN /* 第一种方式*/ I_COV:= ' SELECT '||''''||I_NAME||''''||','||TO_CHAR(I_NUM)||','||''''||TO_CHAR(I_DATE)||''''; I_COV2:=' FROM DUAL'; PBDBMS.PUT_LINE(i_cov); PBDBMS.PUT_LINE(I_cov2); /*第二种方式*/ PBDBMS.PUT_LINE('SELECT '); PBDBMS.PUT(I_NAME); PBDBMS.PUT(',');/* 如长度将超过255,此处用PUT_LINE(',')进行换行*/ PBDBMS.PUT(I_NUM);PBDBMS.PUT(','); PBDBMS.PUT(I_DATE); PBDBMS.PUT_LINE(' FROM DUAL'); END;
(三)前台脚本中嵌入式SQL语句的调整
1、ORACLE 存储过程前台脚本调用方式:
DECLARE sosp_cust_i PROCEDURE FOR sosp_cust_i (:name,:reg_nbr,:li_cust_cat_id,osition, null,arent_id) ; execute sosp_cust_i; SYBASE 存储过程前台脚本调用方式: DECLARE sosp_cust_i PROCEDURE FOR sosp_cust_i @name = :ls_name, @reg_nbr = :ls_regnbr, @cat_id = :ii_cust_cat, @position = null, @type_id = :ii_cust_type, @parent_id = :ll_parent_id ; execute sosp_cust_i;
2、前台脚本中嵌入式的SQL语句中
(1)NULL
ORACLE对NULL 的条件判断只能用: 字段名 IS NULL 和 字段名?IS NOT NULL;
而不能用:字段名 = NULL 和 字段名?<> NULL?
若有上述情况,应做相应调整。
如:select * from so_charge where receipt_nbr = null;
应改为:select * from so_charge where receipt_nbr is null;
(2)""->''
ORACLE对字符串使用单引号,而SYBASE单引号、双引号均可
因此若有如select * from so where state="A";的语句
应改为select * from so where state='A';
(3)insert -> insert into
SYBASE允许使用insert tablename...,而ORACLE必须使用
insert into tablename...,若有上述情况,应做相应调整。
(4)+ --> ||
字符串连接,SYBASE使用'+',而ORACLE使用'||'。?
(5)getdate() --> sysdate
取系统时间,SYBASE使用getdate(),而ORACLE使用sysdate。
发表评论
-
hibernate连接sybase出现如下错误:010SK: 数据库无法设置连接选项 SET_READONLY_TRUE
2012-07-31 10:04 1327项目中使用hibernate连接sybase出现如下错误: ... -
Sybase复制服务器安装配置过程中常见问题及解决办法
2012-07-17 17:49 2133Sybase复制服务器安装 ... -
Sybase过程中动态SQL使用
2012-05-29 17:44 1456Sybase过程中动态SQL使用: --DROP PRO ... -
Sybase常见问题
2012-05-23 13:25 8741. 程序调用过程报以下 ... -
Sybase数据SQL查询
2012-01-05 12:42 1242Sybase查询: 查询某天是星期几 set date ... -
oracle常用函数,sybase常用函数
2011-12-08 12:03 1805oracle常用函数与sybas ... -
Sybase 写法与Oracle写法的 比较
2011-12-08 09:33 1047项目开发中整理: 1. 计算时间不同写法 ... -
java 调用 sybase存储过程
2011-11-25 23:04 991java程序调用Sybase存储过程: public vo ... -
sybase函数例子(2)
2011-11-16 21:10 721Sybase函数例子: -- 功能描述 : 系统初始 ... -
sybase函数例子(1)
2011-11-16 21:09 778Sybase create or replace funct ... -
Oracle左右连接和Sybase的比较
2011-11-16 00:55 1527数据表的连接 有: 1、内 ... -
存储过程sybase带输入输出参数和游标功能
2011-11-11 10:34 2031例子: /**带输入输出参数和游标功能的sybase ... -
sybase自动清除日志
2011-11-11 10:31 899在图形界面定位到日志端,弹出属性框,选择thresh ... -
Sybase 存储过程(嵌套调用)使用另外一个存储过程的结果集
2011-11-11 10:32 1041/****************************** ... -
Sybase Ase 添加定时任务
2011-11-11 10:30 883准备一个sh文件和sql文件 Sh文件中内容如下 . / ... -
Sybase IQ添加定时任务
2011-10-28 16:31 1174Sybase IQ添加定时任务: create even ... -
Sybase数据库清除日志的做法
2011-10-28 16:27 937最近在项目中使用Sybase,发现数据库日志满了,处理办法 ... -
Jsp调用Sybase数据库存储过程返回记录集成功.(weblogic数据源方式)
2011-10-28 16:27 918源代码如下: <%@page contentType= ... -
sybase存储过程基础
2011-10-28 16:28 1311总结一下sybase存储过程和触发器的一些基本特点。sybas ... -
SYBASE ASE12.5中存储过程的建立和调用
2011-10-28 16:29 1300一、建立存储过程(三个存储过程:up_sendgroup2-& ...
相关推荐
### Sybase存储过程的建立和使用 #### 一、存储过程概述 Sybase的存储过程是一种预先定义并编译好的SQL脚本,集中存储在SQL Server数据库中。它结合了SQL语句和流程控制语句,能够实现复杂的业务逻辑处理。存储...
Sybase存储过程是Sybase数据库管理系统中的一个重要特性,它允许开发者编写一组预编译的SQL语句和控制流语句,以实现复杂的数据处理逻辑。这些存储过程可以被多次调用,提高了数据库操作的效率,并提供了更好的数据...
### Sybase 中实现分页技术的存储过程 #### 背景介绍 Sybase 是一款高性能的关系型数据库管理系统,广泛应用于金融、电信等对数据处理性能有极高要求的领域。在实际的应用场景中,常常需要从数据库中获取大量的数据...
Sybase存储过程
sybase整体过程范例,在进行编程的时候可能有用,供大家参考。
以下是对Sybase存储过程编写经验和方法的深入探讨,旨在帮助数据库管理员和开发者提升技能,优化数据库应用。 ### Sybase存储过程编写经验 1. **表和视图的正确引用:** 在创建存储过程时,直接使用`database.dbo....
该手册涵盖了以下主题:概述、先决条件、创建mwrep用户、创建迁移存储库、捕获Sybase导出文件、检查兑换首选项、转换到甲骨文模型、解决存储过程转换失败、解决存储过程转换限制、生成并执行脚本以创建Oracle数据库...
在IT领域,数据库存储过程是实现复杂业务逻辑和优化性能的重要工具。Sybase数据库系统,作为一款企业级的关系型数据库管理...理解JNI调用约定和数据库对Java的支持特性,有助于顺利地将Java集成到Sybase存储过程中。
总的来说,Sybase数据库的存储过程性能优化需要从多个方面考虑,包括但不限于:避免或优化游标使用,利用CASE语句等新特性,以及综合运用各种SQL语句优化策略。通过这些方法,开发者可以显著提高存储过程的执行效率...
在Sybase数据库中,存储过程的编写是一项关键任务,它涉及到系统的性能和可维护性。...以上就是关于Sybase数据库存储过程编写的一些关键点,遵循这些原则可以显著提高程序的运行效率,同时降低系统维护的复杂性。
Sybase ASE 定时调度存储过程 在 Sybase ASE 环境中,定时调度存储过程是数据库管理员经常需要解决的问题。 Sybase ASE 提供了 Job Scheduler 机制来实现定时调度存储过程,然而,在安装和配置 Job Scheduler 之前...
### Sybase ASE V15.0 存储过程相关知识点 #### 一、概述 Sybase ASE (Adaptive Server Enterprise) 是一款高性能的关系型数据库管理系统,由Sybase公司开发并维护。Sybase ASE V15.0是该系列的一个重要版本,其中...
【Sybase IQ 存储过程详解】 Sybase IQ 是一种高效的数据仓库系统,它支持存储过程,这是一种在数据库中预编译的SQL语句集合,能够提升应用性能并简化复杂操作。存储过程允许用户将一系列操作封装起来,方便重复...
很全面的sybase资料集合,包括了创建修改删除的所有东西,也包括一些的语法和运算,对初学者很方便
sybase分页存储过程(代码),分页存储过程代码,实现sybase数据库分页查询。
Sybase的存储过程是集中存储在SQL Server中的预先定义且已经编译好的事务。存储过程由 SQL语句和流程控制语句组成。它的功能包括:接受参数;调用另一过程;返回一个状态值给调用过程或批处理,指示调用成功或失败;...
### Sybase IQ 存储过程、视图及触发器语法详解 #### 存储过程 存储过程是在数据库中预编译的一系列SQL指令,能够通过单一的调用来执行复杂的操作,提高了性能并简化了应用程序的设计。 ##### 创建存储过程 创建...
`语句,即可实现从Oracle到Sybase的数据查询。值得注意的是,如果Sybase数据库中的表名或字段名采用小写形式,应在Oracle中使用双引号进行引用,如`SELECT "a" FROM "b" @sybs;`。 综上所述,通过遵循上述八个步骤...