欢迎来到冰豆网! | 帮助中心 分享价值,成长自我!
冰豆网
全部分类
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • 党团工作>
  • ImageVerifierCode 换一换
    首页 冰豆网 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    ASE与Oracle差异.docx

    • 资源ID:8043533       资源大小:128.85KB        全文页数:67页
    • 资源格式: DOCX        下载积分:12金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要12金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    ASE与Oracle差异.docx

    1、ASE与Oracle差异1. ASE数据类型 2. 数据类型差异表Oracle Sybase Comments VARCHAR2(n) VARCHAR(n) NVARCHAR2(n) NVARCHAR(n) CHAR CHAR CHAR(1) BIT True/false 和yes/no类型的数据可以被存储占用1个字节的空间,可以存放0或者1CHAR(n) CHAR(n) NCHAR(n) NCHAR(n) NUMBER(3) TINYINT Sybase tinyint 范围是 0-255 NUMBER(4) SMALLINT Sybase smallint 范围是 32768 to +32

    2、767 NUMBER(9) INT integer 的范围是从 231 -1 (2,147,483,647) 到 -231 (-2,147,483,648) Oracle Sybase Comments NUMBER(19,4) MONEY Money和samllmoney数据类型存储金融数据。存储为保留为小数点后4位精度,小数点前面的数字,对于smallmoney大约为+/-$214K,对于money大约为+/-922T。 NUMBER(19,4) SMALLMONEY 同上. NUMBER REAL, FLOAT, DOUBLE FLOAT FLOAT, REAL FLOAT(p) DOU

    3、BLE PRECISION FLOAT(p) FLOAT(p) NUMBER(p,s)NUMERIC(p,s) Oracle数据库number(p,s)数据类型对应的是ASE数据库的numeric和decimal数据类型。NUMBER(p,s)DECIMAL(p,s)可参照上面的Oracle number的数据类型。 BINARY_FLOAT -BINARY_DOUBLE -DATE DATETIME Datatime的数值可以精确到1/300秒,前提是所在的平台必须也要能支持到这一粒度,存储的时间是从1753/1/1到9999/12/31TIMESTAMPDATETIMEDATE DATE

    4、DATE 可以存储的时间范围是0001/1/1到9999/12/31。占用4个字节的存储空间SMALLDATETIME可以存储的时间范围是1900/1/1到2079/6/6,可以精确到分钟。占用4个字节存储TIMETime存储的范围是00:00:00:000 and 23:59:59:999TIMESTAMP DATETIME Datetime的值可以精确到1/300秒 CLOB Text Text是一个变长的字段,它可以存储存储2,147,483,647 (231 - 1)字节的可打印字符。BLOBImageImage是一个可变长的字段,它可以存储2,147,483,647 (231 - 1

    5、)字节的裸数据。 LONGTEXTt Text是一个变长的字段,它可以存储存储2,147,483,647 (231 - 1)字节的可打印字符。RAW(n) VARBINARY(n) RAW(n) IMAGE BFILE -不支持3. SQL 语言差异下面是关于两种SQL语言差异的列表和实例:OracleSybase转换#代码翻译操作 常规1/GO搜索“/”并替换为“GO”这个/包含在SQL命令的结尾。它等价于Sybase的GO命令。2SQL中的分号(;)用空格全局替换之。搜索并替换3变量的定义比如:x:=表达式SELECT x = 表达式手工修改4参数名的转换在Sybase中需变量前增加“”符

    6、号。如果Oracle的变量长度是30个字符,可能会带来Sybase的30个字符长度限制的问题。替换或手工修改5select into 变量这是Oracle中将选择出来的数据赋给宿主语言的变量。使用Sybase的语法:select variable1=col1,veriable2=col2 手工修改6常数检查其使用的范围(局部/全局)然后将其定义为变量手工修改7%TYPE寻找Oracle数据类型域的定义,然后用代码还原手工重新编码8%ROWTYPE将每个域分别按单独的变量编码.手工重新编码9IS RECORD OF将每个域分别按单独的变量编码.手工编码转换10IS TABLE OF使用临时表,然

    7、后使用FETCH或SELECT处理每一行。重新设计代码以使用游标查询临时表来处理数据行手工编码转换11ORACLE的调用dbms重新编码以使用Sybase的函数,比如RAISEERROR或PRINT和其他Sybase系统存储过程手工重新编码12动态SQL使用Sybase T-SQL重新编码。手工重新编码13使用缺省值例如:blood_type_char := O使用“=”。例如:blood_group_char = O搜索并替换14EXIT WHEN nDbedDone=1 AND nAWMSDone=1;将其转换成一个表达式,然后将其值作为If的条件,并使用T-SQL语句BREAK或RETU

    8、RN确定程序的执行流程手工重新编码15INITCAP将其转换成存储过程或Open Client/Open Server的应用程序。手工重新编码16SEQUENCE或CREATE SEQUENCE例如:CREATE SEQUENCE test_seq MINVALUE 1STARTWITH 1INCREMENTED by 1CACHE 20;INSERT INTO m_tabble VALUES(test_seq.nextval,)设置一个关键值表,然后定义存储过程来模拟ORACLE中的NEXTVAL功能。例如:CREATE TABLE my_seq (seq int)goINSERT INTO

    9、 my_seq select 0goCREATE PROCEDURE get_seq (seq intOUTPUT)ASUPDATE my_seq SET seq = seq+1 SELECT seq = seq FROM my_seqgoDECLARE seq intEXEC get_seq seq OUTPUTINSERT INTO m_table VALUES (seq,)Go手工重新编码,将会带来schema的变化17synonym用database.table.column_name手工重新编码,使之为每个字段所引用。手工重新编码18TYPE AccountingRec IS REC

    10、ORD 手工对每个域编码,使其那为一个变量手工重新编码19UNIONUNION20userenv(sessionid)master.sysprocesses中的kernel pid唯一标识了每个会话的ID。使用这样等价的语句:select kpid from master.sysprocesses where status=running手工重新编码21局部和全局变量的处理可能会在存储过程中使用局部变量,它们的值可以被传递到调用者或被调用者中。在那些需要将package转换那各自分离的存储过程时,使用的局部或全局变量可能会涉及修改成特殊的代码。手工重新编码22用户自定义的函数使用Sybase存

    11、储过程。EXECUTE命令用于运行存储过程。在ASE 15.0.2可以支持用户自定义的函数。手工重新编码23IS在存储过程中定义, 转换成AS替换24存储过程中的NUMBER类型使用NUMERIC(10)25Packages and ProceduresPrivate and Public 尽可能地将Package转换成各自单一的存储过程。手工重新编码26触发器(之前触发器)可以在Sybase中使用规则(rule)对确定的列设定可接受的数据条件。手工重新编码27RETURN BOOLEAN由于boolean不是一个整数表达式,它不允许作为Sybase RETURN语句的一个参数。所以将其转换成

    12、一个整数表达式(0,1):false integer=1 并且 trueinterger=0; 因此存储过程应该返回 false 或 true.手工重新编码操作符1串联操作符|“+”将“|”替换成“+”Sybase 支持字符串的串联操作。操作符是”+“2取模运算MOD%替换3比较操作4IF rAcct.AuthNum IS NULLTHEN .BEGIN.END E.g IF VAR IS NULLOr IF VAR IS NOT NULL评估代码并将NULL转换成IS NULL或NOT NULL。可能会在schema级涉及列定义的修改。例如:IF VAR = NULLOr IF VAR !=

    13、 NULL手工重新编码并可能会有schema的修改函数系统函数1CEIL返回大于或等于指定值的最小整数。CEILING替换2TRUNCCONVERT(INT,)替换字符串函数3SUBSTR()SUBSTRING()替换4LENGTH()CHAR_LENGTH()替换5CHR()CHAR()替换6TO_CHAR CONVERT 手工重新编码7TO_NUMBER CONVERT(NUMERIC(n,n),field) 手工重新编码8转换字符到数字有用户自定义的字符转换到数字的程序。可以用Sybase函数(convert(decimal(x,y), “string”)来替换。对于可能有千年问题的应用

    14、,设置X=18,Y=9替换并手工重新编码日期函数9DATE函数和日期计算转换成Sybase的日期处理程序。Sybase支持大量的日期和时间处理函数,比如 DATEADD,DATEDIFF, DATEPART(), DATENAME(),timestamp 等等。替换并手工重新编码10LAST_DAY转换到Sybase的存储过程或Open Client/Open Server程序手工重新编码11SYSDATE,SYSTIMESTAMP使用GETDATE()和正确的格式替换12DATE和TIMESTAMP函数在一些情况下用局部变量代替,或者可以重新架构使用Sybase的用户自定义数据类型TIMES

    15、TAMP.手工重新编码13TRUNC(dstartdate)使用Sybase的CONVERT并使之返回带有00:00小时格式的日期手工重新编码转换函数14NVL用ISNULL替换替换15NVL2E.g NVL2(salary,salary*2,0)CASE表达式,例如:CASE WHEN salary = NULL THEN 0ELSE salary * 2END手工重新编码条件函数16DECODE,用于代替if-else的逻辑转换到Sybase的case表达式。例如:SELECT STUDENT_ID,(CASE WHEN COURSE_ID = 101 THEN 1ELSE 0 END)

    16、AS COURSE_101,(CASE WHEN COURSE_ID = 105 THEN 1ELSE 0 END) AS COURSE_105,(CASE WHEN COURSE_ID = 201 THEN 1ELSE 0 END) AS COURSE_201,(CASE WHEN COURSE_ID = 210 THEN 1ELSE 0 END) AS COURSE_210,(CASE WHEN COURSE_ID = 300 THEN 1ELSE 0 END) AS COURSE_300GROUP BY STUDENT_IDORDER BY STUDENT_ID手工重新编码连接(join

    17、)1col1 = col2(+) 或col1(+) = col2转换到Sybase T-SQL:col1 =* col2 或col2 *= col1)手工重新编码游标1CURSOR的使用转换CURSOR的定义代码到Sybase的代码手工重新编码2CURSOR的一些操作选项%ISOPEN,%NOTFOUND,%FOUND,%ROWCOUNT 使用rowcount和sqlstatus全局变量手工重新编码程序流的控制1IF expression THENstatement;END IF;IF expressionstatement当statement有多条语句时,使用BEGIN和END作为该语句块的

    18、标识符。手工重新编码2EXIT;BREAK替换3LOOP and END LOOP 转换到T-SQL语句WHILE, CONTINUE, GOTO和IF-ELSE手工重新编码错误处理1SQLCODEerror替换2一般错误的处理通过Sybase的系统函数监测错误的条件。加入代码以处理异常和错误。手工重新编码3WHEN TOO_MANY_ROWSTHEN (Error Handling) 通过Sybase的rowcount监测TOO_MANY_ROWS,然后加入错误处理代码。手工重新编码4WHEN NO_DATA_FOUND 通过Sybase的rowcount监测,然后加入错误处理代码。手工重新

    19、编码5诸如EXCEPTION 的错误处理用Sybase的错误和消息处理代替手工重新编码6cursor_already_open,dup_val_on_index,invalid_cursor,invlaid_number, login_denied,no_data_found,not_logged_on,program_error, storage_error,timeout_on_resource,too_many_rows,transaction_backed_out,value_error, zero_divide.通过Sybase的系统函数监测错误的条件。加入代码以处理异常和错误。手工

    20、重新编码7WHEN DUP_VAL_ON_INDEXTHEN EXCEPTION 根据INSERT或其他命令返回的错误代码判断。对于这种类型的错误,增加错误处理代码。手工重新编码8PRAGMA and other Oraclecompiler directives 通过Sybase的系统函数监测错误的条件。加入代码以处理异常和错误。手工重新编码9RAISE_APPLICATION _ERROR(-20300, Task has no ReasonCode supplied);在Sybase有几种方法可以处理。最简便的方法是使用EAISEERROR或PRINT命令打印出错误消息文本。其他的方法是

    21、创建系统消息并将其链接到逻辑条件中。手工重新编码SQL差异的举例:字符串的处理:oracle = SUBSTR(phone,1,3) AS AREA_CODE sybase = SUBSTRING(phone,1,3) AS AREA_CODE oracle = ( first_name | | mi_name | | last_name ) as name sybase = ( first_name + + mi_name + + last_name ) as name 数字的处理:oracle = SELECT student_id = 100 (acceptable, but not a

    22、 good idea) sybase = SELECT student_id = 100 oracle = LTRIM(RTRIM( TO_CHAR(course_ceu, 999D99) sybase = RTRIM(CONVERT(CHAR,ROUND(course_ceu,2)oracle = LTRIM(RTRIM( TO_CHAR(COURSE_CEU, 999)sybase = RTRIM(CONVERT(CHAR,CONVERT(INT, COURSE_CEU) (not ROUND)控制结构:oracle = LOOPmonthly_value := daily_value *

    23、 31;EXIT WHEN monthly_value 4000;END LOOP;Sybase = WHILE monthly_value = 4000SELECT monthly_value = daily_value * 31Oracle = FOR i IN 1.5END LOOP;Sybase = DECLARE lb int,ub int,iSELECT lb = 1,i = lb,ub = 5WHILE i NAME, param2 = value);Sybase = EXEC Result = proc_name param1 = NAME,param2 = value out

    24、put日期的处理:oracle = TO_CHAR(start_date, FMHH12FM:MI PM)sybase = SUBSTRING(RTRIM(CONVERT(CHAR, start_date, 0), 13, 8 )oracle = TO_CHAR(sysdate,mm/ yy) sybase = SUBSTRING(RTRIM(CONVERT(CHAR, GETDATE(), 3), 4, 5 ) oracle = SELECT add_months( xyz ,3 ) FROM dualsybase = SELECT DATEADD(month, 3, xyz) FROM d

    25、ualoracle = credit_expiration_date = last_day(TO_DATE( + cc_date + )sybase = credit_expiration_date = CONVERT(DATETIME, sybase += RTRIM(CONVERT(CHAR, + s_month + ) + / + sybase += RTRIM(CONVERT(CHAR,DATEDIFF(DAY, sybase += RTRIM(CONVERT(CHAR, + s_month + ) + sybase += /1/ + RTRIM(CONVERT(CHAR, + nYe

    26、ar + ), sybase += DATEADD(MONTH, 1, sybase += RTRIM(CONVERT(CHAR, + s_month + ) + sybase += /1/ + RTRIM(CONVERT(CHAR, + nYear + ) ) ) ) + sybase += / + RTRIM(CONVERT(CHAR, + nYear + ) )其他:oracle = DECLARE COUNT INT;BEGINSELECT COUNT() into COUNT FROM XYZ;END;sybase = declare COUNY intSELECT COUNT =

    27、COUNT(*) FROM XYZoracle = SELECT NULL as start_datesybase = SELECT CONVERT(DATETIME, NULL) as start_datesybase = SELECT as start_date (better)oracle = SELECT NULL as course_idsybase = SELECT CONVERT(INT, NULL) as course_idsybase = SELECT 0 as course_id (better)oracle = SELECT NULL as first_namesybas

    28、e = SELECT CONVERT(CHAR, NULL) as first_name sybase = SELECT as first_name (better)外连接的语法:oracle = student.student_id = student_company.student_id (+) sybase = student.student_id *= student_company.student_id oracle = student_company.student_id (+) = student.student_id sybase = student_company.student_id =* student.student_id 限制:Sybase ASE不允许在一个已经有外连接的表上再作一个其他的连接(example #1)。另外,如果执行带有一个外连接的查询,它的结果集列


    注意事项

    本文(ASE与Oracle差异.docx)为本站会员主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2022 冰点文档网站版权所有

    经营许可证编号:鄂ICP备2022015515号-1

    收起
    展开