扩展SQL语法说明书.doc_第1页
扩展SQL语法说明书.doc_第2页
扩展SQL语法说明书.doc_第3页
扩展SQL语法说明书.doc_第4页
扩展SQL语法说明书.doc_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

深圳市道讯科技开发有限公司扩展SQL语法说明书扩展SQL语法说明书深圳市道讯科技开发有限公司2005/5/11. 格式1) 一律采用大写字母。2) SELECT、FROM、WHERE、GROUP BY、ORDER BY等关键字,出现在行首。3) 字段之间的分隔,采用逗号加空格的方式,例如:SELECT A, B, FROM 。2. 语法严格遵循SQL92标准,不得采用某种数据库特定的语法。3. 参数SQL参数和字段名称一致。如果有多个同名字段,则加上下划线和序号加以区分。例如:1) WHERE PRIV_ID = :PRIV_ID2) WHERE A.PRIV_ID =:PRIV_ID_1 OR B.PRIV_ID = :PRIV_ID_2。4. 伪列伪劣指SQL语句中,由于字段重名,或者为了精确表达字段实际意义,而指定的字段别名。伪列的使用和命名有以下约定:1) 基础实体表中的字段,和扩展实体表关联后,改用伪列来精确命名。例如:SELECT A.VENDER_ID, B.UNIT_NAME AS VENDER_NAMEFROM (VENDER A INNER JOIN SYS_UNIT BON (A.VENDER_ID = B.UNIT_ID)其中,基础实体表是SYS_UNIT,扩展实体表是VENDER,UNIT_NAME改名为VENDER_NAME,和VENDER_ID对应,表达更为精确。由于客户端不必了解数据库中的具体表法方式,因此,上述情况,SQL输出字段时采用伪列也更为合理。2) 不同实体表的字段冲突时,采用伪列并添加限定信息到伪列名称中。例如:SELECT A.VENDEE_ID, B.TEL_NUM AS VENDEE_TEL_NUM,B.LM_ID, C.TEL_NUM AS LM_TEL_NUMFROM (ORDER A INNER JOIN VENDEE BON (A.VENDEE _ID = B.VENDEE _ID)LEFT OUTER JOIN LM CON (A.LM_ID = C.LM_ID)其中,电话号码出现两次,一个是购买方电话,一个是联系人电话,采用伪列区分。5. 运算符字符串相加的运算符采用$+$,不能使用Oracle中的“|”或者Sybase中的“+”。其它运算符参照SQL92标准。6. DBMS标记数据库厂商对SQL92的支持不是非常全面,而且SQL92对部分复杂操作,尤其是查询优化提示的语法也没有详细规定,造成程序中少部分SQL语句无法用每个数据库都支持的方式来表达。因此,扩展语法中引入了DBMS标记,语法为:$DBMS1;DBMS2内容$。l 两个$字符之间为特殊DBMS语句。l 两个字符之间标记该语句适用的DBMS列表。DBMS之间用半角“;” 分隔。如果当前DBMSDBMS列表,则后续得内容有效;否则,后续内容被忽略。l 内容为特殊的SQL语句,针对DBMS列表中指定的数据库类型。7. 数据库联接采用INNER JOIN、LEFT OUTER JOIN、RIGHT OUTER JOIN的方式。考虑到某些数据库(如Access)对联接语法要求严格,多个表联接时,连接子句两边要用括号包围,例如:(A INNER JOIN B ON (A.F1 = B.F1)INNER JOIN C ON (B.F2 = C.F2)INNER JOIN D ON (C.F3 = D.F3)如果使用了嵌套SQL,用于关联的表从子查询获取时,Access和Oracle的要求方式不一样。Access还是如同上述要求,ORACLE则不允许多余的括号。举例如下:l Access(SELECT * FROM X) AINNER JOIN B ON (A.F1 = B.F1)INNER JOIN C ON (B.F2 = C.F2)INNER JOIN D ON (C.F3 = D.F3)l Oracle(SELECT * FROM X) AINNER JOIN B ON (A.F1 = B.F1)INNER JOIN C ON (B.F2 = C.F2)INNER JOIN D ON (C.F3 = D.F3)对于这类差异,只能采用DBMS标记来解决。加上DBMS标记后的SQL语句如下:$ACCESS($(SELECT * FROM X) AINNER JOIN B ON (A.F1 = B.F1) $ACCESS)$INNER JOIN C ON (B.F2 = C.F2) $ACCESS)$INNER JOIN D ON (C.F3 = D.F3)DBMS标记的说明参见扩展语法中相关说明。INNER JOIN连接中的ON子句无须带参数进行过滤,可以在WHERE条件中过滤解决。LEFT OUTER JOIN连接中ON字句中须要带参数时,如:A LEFT OUTER JOIN B ON (A.F1 = B.F1 AND ),参数只能落在B上:错误:A LEFT OUTER JOIN B ON (A.F1 = B.F1 AND A.F2 = :F2)正确:A LEFT OUTER JOIN B ON (A.F1 = B.F1 AND B.F2 = :F2)如果参数落在A上,则有潜在风险,如果是ACCESS驱动程序,更是会崩溃退出。事实上,落在A上的参数,可以在SELECT返回的字段中进行判断。因此,以上限制对程序开发没有造成太大不便。8. IN字句由于Oracle数据库限制IN字句中的元素数量不能超过1000个,而查询时客户选择的条件数量可能超过1000个引发错误,因此须要对可能超标准的IN字句进行特殊处理。编写SQL语句时,如果元素数量确认,并且少于1000个,则参照IN字句的一般写法即可;如果元素数量不确定(如客户端条件),并且可能超过1000个,则将IN改为$IN$,提示扩展SQL解释器,对这个IN字句进行特殊分析处理。9. HINT提示SQL语句中,可以包括向数据库系统的提示信息。提示的方式是在SQL语句前面插入提示代码,用半角“”标记起止位置,例如:XXXSELECT 。提示内容可以有多项,各项之间用半角“;”分割。目前支持的提示有:1)TOP=N:指定返回的最大行数。10. 标准函数只能使用COUNT、SUM、MIN、MAX和AVG,其它函数在扩展函数中实现。11. 扩展函数1) $IIF$(Condition, Value1, Value2):判断取值。如果Condition表达式满足,则返回Value1;否则,返回Value2。2) $DATE$:当前日期变量。3) $TIME$:当前时间变量。4) $NOW$:当前时间日期变量。5) $DAYDIFF$(Date1, Date2):获取Date1和Date2之间的间隔天数,Date2大于Date1时返回正数。6) $DAYADD$(Date, Value):获取以Date为基准,增加Value指定天数后的日期。7) $DATEVALUE$(DateTime):获取时间戳的日期部分。8) $TIMEVALUE$(DateTime):获取时间戳的时间部分。9) $STRTODATE$(String):将字符串转换为日期,字符串格式必须为YYYYMMDD。10) $STRTOTIME$(String):将字符串转换为时间,字符串格式必须为HHNNSS。11) $STRTODATETIME$(String):将字符串转换为日期时间,字符串格式必须为YYYYMMDDHHNNSS。12) $STRTONUMBER(String):将字符串转换为数值。13) $NUMBERTOSTR(Number):将数值转换为字符串。14) $YEAR$(Value):获取日期中的年份。15) $MONTH$(Value):获取日期中的月份。16) $DAY$(Value):获取日期中的日(1-31)。17) $DAYOFWEEK$(Value):获取日期中的星期几(1-7)。18) $DAYOFYEAR$(Value):获取每年的第几天(1-366)。19) $WEEKOFYEAR$(Value):获取每年的第几个星期(1-53)。20) $HOUR$(Value):获取时间中的小时(1-23)。21) $MINUTE(Value):获取时间中的分钟(1-59)。22) $SECOND(Value):获取时间中的秒(1-59)。23) $STRLEN$(String):获取字符串长度。24) $SUBSTR$(String, Index, Count):从Index开始获取字符串String的子串,长度为Count。25) $LEFT$(String, Count):获取字符串String左边长度为Count的字串。26) $RIGHT$(String, Count):获取字符串String右边长度为Count的字串。27) $TRIM$(String):去除字符串String的左右空格。28) $POS$(String1, String2):返回String2在String1中的下标。如果String2不在String1中,则返回0。29

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论