参考:语句和选项

关闭空间申请  时间:2021-01-13  阅读:()

SybaseIQ15.
4文档ID:DC01142-01-1540-01最后修订日期:2011年11月版权所有2011Sybase,Inc.
保留所有权利.
除非新版本或技术声明中另有说明,否则本出版物适用于Sybase软件及所有后续版本.
本文档中的信息如有更改,恕不另行通知.
本出版物中描述的软件按许可证协议提供,其使用或复制必须符合协议条款.

要订购其它文档,美国和加拿大的客户请拨打客户服务部门电话(800)685-8225或发传真至(617)229-9845.
持有美国许可证协议的其它国家/地区的客户可通过上述传真号码与客户服务部门联系.
所有其它国际客户请与Sybase子公司或当地分销商联系.
仅在软件的定期发布日期提供升级内容.
未经Sybase,Inc.
的事先书面许可,不得以任何形式、任何手段(电子的、机械的、手工的、光学的或其它手段)复制、传播或翻译本出版物的任何部分.
可在http://www.
sybase.
com/detailid=1011207上的Sybase商标页中查看Sybase商标.
Sybase和列出的标记均是Sybase,Inc.
的商标.
表示已在美国注册.
SAP和此处提及的其它SAP产品与服务及其各自的徽标是SAPAG在德国和世界各地其它几个国家/地区的商标或注册商标.
Java和基于Java的所有标记都是SunMicrosystems,Inc.
在美国和其它国家/地区的商标或注册商标.
Unicode和Unicode徽标是Unicode,Inc.
的注册商标.
本书中提到的所有其它公司和产品名均可能是与之相关的相应公司的商标.

Use,duplication,ordisclosurebythegovernmentissubjecttotherestrictionssetforthinsubparagraph(c)(1)(ii)ofDFARS52.
227-7013fortheDODandassetforthinFAR52.
227-19(a)-(d)forcivilianagencies.
Sybase,Inc.
,OneSybaseDrive,Dublin,CA94568.
目录读者1SQL语句3SQL语法中的常见元素3语法约定4语句适用性指示符4ALLOCATEDESCRIPTOR语句[ESQL]5ALTERDATABASE语句7ALTERDBSPACE语句8ALTERDOMAIN语句12ALTEREVENT语句13ALTERFUNCTION语句14ALTERINDEX语句16ALTERLOGICALSERVER语句17ALTERLOGINPOLICY语句19逻辑服务器访问配置20登录策略选项配置21ALTERLSPOLICY语句22ALTERMULTIPLEXRENAME语句23ALTERMULTIPLEXSERVER语句24ALTERPROCEDURE语句25ALTERSERVER语句27ALTERSERVICE语句29ALTERTABLE语句31ALTERTEXTCONFIGURATION语句39ALTERTEXTINDEX语句39ALTERUSER语句39ALTERVIEW语句41确定和修复无效的相关视图43BACKUP语句44BEGIN……END语句49BEGINPARALLELIQ……ENDPARALLELIQ语句.
.
.
.
52参考:语句和选项iiiBEGINTRANSACTION语句[T-SQL]53CALL语句55CASE语句57CHECKPOINT语句58CLEAR语句[InteractiveSQL]59CLOSE语句[ESQL][SP]59COMMENT语句61COMMENTONLOGICALSERVER语句62COMMIT语句63CONFIGURE语句[InteractiveSQL]64CONNECT语句[ESQL][InteractiveSQL]65CREATEDATABASE语句68CREATEDBSPACE语句77CREATEDOMAIN语句80CREATEEVENT语句82CREATEEXISTINGTABLE语句87CREATEEXTERNLOGIN语句89CREATEFUNCTION语句90CREATEFUNCTION语句(JavaUDF)96CREATEINDEX语句97CREATEJOININDEX语句104CREATELOGICALSERVER语句107CREATELOGINPOLICY语句108CREATEMESSAGE语句[T-SQL]110CREATEMULTIPLEXSERVER语句111CREATEPROCEDURE语句112在过程中引用临时表117CREATEPROCEDURE语句[T-SQL]118CREATEPROCEDURE语句(外部过程)120CREATEPROCEDURE语句(JavaUDF)127CREATEPROCEDURE语句(表UDF)128CREATESCHEMA语句131CREATESERVER语句132CREATESERVICE语句133目录ivSybaseIQCREATETABLE语句136CREATETEXTCONFIGURATION语句147CREATETEXTINDEX语句147CREATEUSER语句147CREATEVARIABLE语句149CREATEVIEW语句151DEALLOCATEDESCRIPTOR语句[ESQL]152声明部分[ESQL]153DECLARE语句154DECLARECURSOR语句[ESQL][SP]155DECLARECURSOR语句[T-SQL]160DECLARELOCALTEMPORARYTABLE语句161DELETE语句163DELETE(定位)语句[ESQL][SP]165DESCRIBE语句[ESQL]166DISCONNECT语句[InteractiveSQL]169DROP语句170DROPCONNECTION语句172DROPDATABASE语句173DROPEXTERNLOGIN语句174DROPLOGINPOLICY语句175DROPLOGICALSERVER语句176DROPMULTIPLEXSERVER语句176DROPSERVER语句177DROPSERVICE语句178DROPSTATEMENT语句[ESQL]179DROPTEXTCONFIGURATION语句180DROPTEXTINDEX语句180DROPUSER语句180DROPVARIABLE语句181EXECUTE语句[ESQL]182EXECUTE语句[T-SQL]184EXECUTEIMMEDIATE语句[ESQL][SP]185EXIT语句[InteractiveSQL]187目录参考:语句和选项vFETCH语句[ESQL][SP]188FOR语句191FORWARDTO语句193FROM子句194GETDESCRIPTOR语句[ESQL]200GOTO语句[T-SQL]201GRANT语句202IF语句207IF语句[T-SQL]209INCLUDE语句[ESQL]210INSERT语句211INSTALLJAVA语句218IQUTILITIES语句220LEAVE语句221LOADTABLE语句223存储大小238LOCKTABLE语句239LOOP语句241MESSAGE语句242OPEN语句[ESQL][SP]245OUTPUT语句[InteractiveSQL]247PARAMETERS语句[InteractiveSQL]250PREPARE语句[ESQL]251PRINT语句[T-SQL]253PUT语句[ESQL]255RAISERROR语句[T-SQL]256READ语句[InteractiveSQL]258RELEASESAVEPOINT语句259REMOVE语句260RESIGNAL语句261RESTORE语句262RESUME语句267RETURN语句269REVOKE语句270目录viSybaseIQROLLBACK语句272ROLLBACKTOSAVEPOINT语句273ROLLBACKTRANSACTION语句[T-SQL]274SAVEPOINT语句275SAVETRANSACTION语句[T-SQL]276SELECT语句277SET语句[ESQL]285SET语句[T-SQL]287SETCONNECTION语句[ESQL][InteractiveSQL].
.
.
289SETDESCRIPTOR语句[ESQL]290SETOPTION语句291SETOPTION语句[InteractiveSQL]293SETSQLCA语句[ESQL]294SIGNAL语句295STARTDATABASE语句[InteractiveSQL]295STARTENGINE语句[InteractiveSQL]297STARTJAVA语句298STOPDATABASE语句[InteractiveSQL]298STOPENGINE语句[InteractiveSQL]299STOPJAVA语句300SYNCHRONIZEJOININDEX语句300TRIGGEREVENT语句301TRUNCATETABLE语句302UNION操作303UPDATE语句304UPDATE(定位)语句[ESQL][SP]308WAITFOR语句309WHENEVER语句[ESQL]311WHILE语句[T-SQL]312数据库选项315数据库选项简介315当前选项设置316数据库选项的作用域和持续时间317临时选项317目录参考:语句和选项vii公共选项318删除选项设置318初始选项设置319不建议使用的数据库选项320常规数据库选项320数据提取选项327Transact-SQL兼容性选项327Transact-SQL为实现AdaptiveServerEnterprise兼容性的选项设置329InteractiveSQL选项330按字母顺序排列的选项列表332AGGREGATION_PREFERENCE选项332ALLOW_NULLS_BY_DEFAULT选项[TSQL].
.
.
.
333ANSI_CLOSE_CURSORS_ON_ROLLBACK选项[TSQL]333ANSI_PERMISSIONS选项[TSQL]334ANSINULL选项[TSQL]334ANSI_SUBSTRING选项[TSQL]335ANSI_UPDATE_CONSTRAINTS选项335ALLOW_READ_CLIENT_FILE选项337APPEND_LOAD选项337ASE_BINARY_DISPLAY选项338ASE_FUNCTION_BEHAVIOR选项338AUDITING选项[database]339BIT_VECTOR_PINNABLE_CACHE_PERCENT选项340BLOCKING选项340BT_PREFETCH_MAX_MISS选项341BT_PREFETCH_SIZE选项341BTREE_PAGE_SPLIT_PAD_PERCENT选项.
.
.
342CACHE_PARTITIONS选项343CHAINED选项[TSQL]344CHECKPOINT_TIME选项344CIS_ROWSET_SIZE选项345目录viiiSybaseIQCLOSE_ON_ENDTRANS选项[TSQL]345CONTINUE_AFTER_RAISERROR选项[TSQL]345CONVERSION_ERROR选项[TSQL]346CONVERSION_MODE选项346CONVERT_VARCHAR_TO_1242选项352COOPERATIVE_COMMIT_TIMEOUT选项.
.
.
.
.
.
353COOPERATIVE_COMMITS选项353CURSOR_WINDOW_ROWS选项354DATE_FIRST_DAY_OF_WEEK选项354DATE_FORMAT选项355DATE_ORDER选项357DBCC_LOG_PROGRESS选项357DBCC_PINNABLE_CACHE_PERCENT选项.
.
.
358DEBUG_MESSAGES选项358DEDICATED_TASK选项359DEFAULT_DBSPACE选项359DEFAULT_DISK_STRIPING选项361DEFAULT_HAVING_SELECTIVITY_PPM选项.
361DEFAULT_ISQL_ENCODING选项[InteractiveSQL]362DEFAULT_KB_PER_STRIPE选项363DEFAULT_LIKE_MATCH_SELECTIVITY_PPM选项363DEFAULT_LIKE_RANGE_SELECTIVITY_PPM选项364DEFAULT_PROXY_TABLE_ROW_COUNT选项365DEFAULT_TABLE_UDF_ROW_COUNTOption365DELAYED_COMMIT_TIMEOUT选项365DELAYED_COMMITS选项366DISABLE_RI_CHECK选项366DIVIDE_BY_ZERO_ERROR选项[TSQL]366DQP_ENABLED选项367目录参考:语句和选项ixEARLY_PREDICATE_EXECUTION选项367ENABLE_LOB_VARIABLES选项368EXTENDED_JOIN_SYNTAX选项368FORCE_DROP选项369FORCE_NO_SCROLL_CURSORS选项369FORCE_UPDATABLE_CURSORS选项370FP_LOOKUP_SIZE选项370FP_LOOKUP_SIZE_PPM选项371FP_PREDICATE_WORKUNIT_PAGES选项.
.
.
.
372FPL_EXPRESSION_MEMORY_KB选项372GARRAY_FILL_FACTOR_PERCENT选项.
.
.
.
.
.
.
373GARRAY_INSERT_PREFETCH_SIZE选项.
.
.
.
.
373GARRAY_PAGE_SPLIT_PAD_PERCENT选项374GARRAY_RO_PREFETCH_SIZE选项374HASH_PINNABLE_CACHE_PERCENT选项.
.
.
375HASH_THRASHING_PERCENT选项375HG_DELETE_METHOD选项376HG_SEARCH_RANGE选项377HTTP_SESSION_TIMEOUT选项377IDENTITY_ENFORCE_UNIQUENESS选项.
.
.
.
.
378IDENTITY_INSERT选项378INDEX_ADVISOR选项379INDEX_ADVISOR_MAX_ROWS选项381INDEX_PREFERENCE选项382INFER_SUBQUERY_PREDICATES选项383IN_SUBQUERY_PREFERENCE选项383IQGOVERN_MAX_PRIORITY选项384IQGOVERN_PRIORITY选项385IQGOVERN_PRIORITY_TIME选项385ISOLATION_LEVEL选项386JAVA_LOCATION选项386JAVA_VM_OPTIONS选项387JOIN_EXPANSION_FACTOR选项387JOIN_OPTIMIZATION选项388目录xSybaseIQJOIN_PREFERENCE选项389JOIN_SIMPLIFICATION_THRESHOLD选项.
.
.
.
391LARGE_DOUBLES_ACCUMULATOR选项.
.
.
.
.
.
391LF_BITMAP_CACHE_KB选项392LOAD_ZEROLENGTH_ASNULL选项392LOCKED选项393LOG_CONNECT选项393LOG_CURSOR_OPERATIONS选项394LOGIN_MODE选项394LOGIN_PROCEDURE选项395MAIN_RESERVED_DBSPACE_MB选项395MAX_CARTESIAN_RESULT选项396MAX_CLIENT_NUMERIC_PRECISION选项.
.
.
397MAX_CLIENT_NUMERIC_SCALE选项397MAX_CONNECTIONS选项398MAX_CUBE_RESULT选项398MAX_CURSOR_COUNT选项399MAX_DAYS_SINCE_LOGIN选项399MAX_FAILED_LOGIN_ATTEMPTS选项399MAX_HASH_ROWS选项400MAX_IQ_THREADS_PER_CONNECTION选项400MAX_IQ_THREADS_PER_TEAM选项401MAX_JOIN_ENUMERATION选项401MAX_PREFIX_PER_CONTAINS_PHRASE选项402MAX_QUERY_PARALLELISM选项402MAX_QUERY_TIME选项403MAX_STATEMENT_COUNT选项403MAX_TEMP_SPACE_PER_CONNECTION选项404MAX_WARNINGS选项405MINIMIZE_STORAGE选项405MIN_PASSWORD_LENGTH选项406目录参考:语句和选项xiMONITOR_OUTPUT_DIRECTORY选项407MPX_AUTOEXCLUDE_TIMEOUT选项408MPX_HEARTBEAT_FREQUENCY选项408MPX_IDLE_CONNECTION_TIMEOUT选项.
.
.
.
408MPX_MAX_CONNECTION_POOL_SIZE选项408MPX_MAX_UNUSED_POOL_SIZE选项408MPX_WORK_UNIT_TIMEOUT选项408NEAREST_CENTURY选项[TSQL]409NOEXEC选项409NON_ANSI_NULL_VARCHAR选项410NON_KEYWORDS选项[TSQL]410NOTIFY_MODULUS选项411ODBC_DISTINGUISH_CHAR_AND_VARCHAR选项411ON_CHARSET_CONVERSION_FAILURE选项411ON_ERROR选项[InteractiveSQL]412ON_TSQL_ERROR选项[TSQL]412OS_FILE_CACHE_BUFFERING选项413OS_FILE_CACHE_BUFFERING_TEMPDB选项414PASSWORD_EXPIRY_ON_NEXT_LOGIN选项415PASSWORD_GRACE_TIME选项415PASSWORD_LIFE_TIME选项416POST_LOGIN_PROCEDURE选项416PRECISION选项416PREFETCH选项417PREFETCH_BUFFER_LIMIT选项417PREFETCH_BUFFER_PERCENT选项418PREFETCH_GARRAY_PERCENT选项418PREFETCH_SORT_PERCENT选项419目录xiiSybaseIQPRESERVE_SOURCE_FORMAT选项[database]419QUERY_DETAIL选项420QUERY_NAME选项421QUERY_PLAN选项421QUERY_PLAN_AFTER_RUN选项422QUERY_PLAN_AS_HTML选项422QUERY_PLAN_AS_HTML_DIRECTORY选项423QUERY_PLAN_TEXT_ACCESS选项424QUERY_PLAN_TEXT_CACHING选项425QUERY_ROWS_RETURNED_LIMIT选项.
.
.
.
.
.
.
.
426QUERY_TEMP_SPACE_LIMIT选项426QUERY_TIMING选项427QUOTED_IDENTIFIER选项[TSQL]427RECOVERY_TIME选项428RESERVED_KEYWORDS选项428RETURN_DATE_TIME_AS_STRING选项.
.
.
.
.
.
.
.
429ROW_COUNT选项430SCALE选项430SIGNIFICANTDIGITSFORDOUBLEEQUALITY选项431SORT_COLLATION选项431SORT_PINNABLE_CACHE_PERCENT选项.
.
.
432SQL_FLAGGER_ERROR_LEVEL选项[TSQL]433SQL_FLAGGER_WARNING_LEVEL选项[TSQL]434STRING_RTRUNCATION选项[TSQL]434SUBQUERY_CACHING_PREFERENCE选项435SUBQUERY_FLATTENING_PERCENT选项.
.
.
436SUBQUERY_FLATTENING_PREFERENCE选项437目录参考:语句和选项xiiiSUBQUERY_PLACEMENT_PREFERENCE选项438SUPPRESS_TDS_DEBUGGING选项438SWEEPER_THREADS_PERCENT选项439TDS_EMPTY_STRING_IS_NULL选项[database]439TEMP_EXTRACT_APPEND选项440TEMP_EXTRACT_BINARY选项440TEMP_EXTRACT_COLUMN_DELIMITER选项441TEMP_EXTRACT_DIRECTORY选项442TEMP_EXTRACT_ESCAPE_QUOTES选项.
.
.
.
443TEMP_EXTRACT_NAMEn选项443TEMP_EXTRACT_NULL_AS_EMPTY选项.
.
.
.
.
445TEMP_EXTRACT_NULL_AS_ZERO选项.
.
.
.
.
.
.
.
446TEMP_EXTRACT_QUOTE选项447TEMP_EXTRACT_QUOTES选项447TEMP_EXTRACT_QUOTES_ALL选项448TEMP_EXTRACT_ROW_DELIMITER选项.
.
.
.
.
.
449TEMP_EXTRACT_SIZEn选项449TEMP_EXTRACT_SWAP选项450TEMP_RESERVED_DBSPACE_MB选项451TEMP_SPACE_LIMIT_CHECK选项452TEXT_DELETE_METHOD选项453TIME_FORMAT选项453TIMESTAMP_FORMAT选项454TOP_NSORT_CUTOFF_PAGES选项455TRIM_PARTIAL_MBC选项455TSQL_VARIABLES选项[TSQL]456USER_RESOURCE_RESERVATION选项.
.
.
.
.
.
.
456VERIFY_PASSWORD_FUNCTION选项457WASH_AREA_BUFFERS_PERCENT选项.
.
.
.
.
.
458WAIT_FOR_COMMIT选项458WD_DELETE_METHOD选项459目录xivSybaseIQ索引461目录参考:语句和选项xv目录xviSybaseIQ读者本手册的目标读者是需要有关SybaseIQSQL语句和数据库选项的参考材料的SybaseIQ用户.
有关SybaseIQ其它方面的参考资料(包括语言元素、数据类型、函数、系统过程和系统表)可在《参考:构件块、表和过程》中找到.
其它手册提供有关如何执行特定任务的详细信息.
在本参考手册中可以查找可用的SQL语法、参数和选项等信息.
有关命令行实用程序启动参数,请参见《实用程序指南》.
读者参考:语句和选项1读者2SybaseIQSQL语句说明SybaseIQ中可用的SQL语句,包括只能在嵌入式SQL或InteractiveSQL中使用的某些语句.
SQL语法中的常见元素许多SQL语句的语法中出现的语言元素.
有关此处描述的元素的详细信息,请参见《参考:构件块、表和过程》>"SQL语言元素"中的"标识符"、"搜索条件"、"表达式"和"字符串".
column-name-表示列名的标识符.
condition-取值为TRUE、FALSE或UNKNOWN的表达式.
connection-name-表示活动连接名称的字符串.
data-type-存储数据类型.
expression-表达式.
filename-包含文件名的字符串.
host-variable-C语言变量,声明为前面有一个冒号的宿主变量.
indicator-variable-类型为shortint的另一个宿主变量,紧跟在常规宿主变量之后.
指示符变量的前面也必须有一个冒号.
指示符变量用于向数据库传入和从数据库传出空值.
number-任何数字序列,后跟一个可选的小数部分,前面有一个可选的负号.
数字后面还可以有一个"e"和一个指数.
例如,42-4.
038.
0013.
4e101e-10owner-表示拥有数据库对象的用户ID的标识符.
role-name-表示外键角色名称的标识符.
savepoint-name-表示保存点名称的标识符.
search-condition-取值为TRUE、FALSE或UNKNOWN的条件.
special-value-《参考:构件块、表和过程》>"SQL语言元素">"特殊值"中描述的特殊值之一.
statement-label-表示循环或复合语句标签的标识符.
table-list-表名列表,可能包含相关名.
有关详细信息,请参见《FROM子句》.
table-name-表示表名的标识符.
userid-表示用户名的标识符.
用户ID不区分大小写,并且不会受到数据库的CASERESPECT属性设置的影响.
SQL语句参考:语句和选项3variable-name-表示变量名的标识符.
另请参见FROM子句(第194页)语法约定SQL语法说明中使用的约定.
关键字-所有SQL关键字都以大写字母显示;但SQL关键字是不区分大小写的,因此您可以键入大写或小写格式的关键字.
例如,SELECT与Select相同,而Select又与select相同.
占位符-必须替换为相应标识符或表达式的项会显示为斜体.
续行符-以省略号(.
.
.
)开头的行是上一行的继续.
可选部分-语句的可选部分以中括号括起.
例如:RELEASESAVEPOINT[savepoint-name]此示例表明savepoint-name是可选的.
不要键入中括号.
重复项-对于重复项列表,只显示列表中的一个元素,后跟省略号.
允许指定一个或多个列表元素.
如果指定了多个元素且指明须用逗号进行分隔,则必须用逗号将它们隔开.
例如:UNIQUE(column-name该示例表明您可以多次指定column-name,中间用逗号隔开.
不要键入中括号.
备选选项-如果必须选择一个选项,则将备选选项放在大括号内.
例如:[QUOTES{ON|OFF}]该示例表明,如果选择QUOTES选项,则必须提供ON或OFF之一.
不要输入大括号.
一个或多个选项-如果选择多个选项,请用逗号分隔所选选项.
例如:{CONNECT,DBA,RESOURCE}语句适用性指示符某些语句标题的后面有一个指示符(括在中括号内),用于指示语句的使用环境.

这些指示符如下:[ESQL]-表示语句用于嵌入式SQL中.
[InteractiveSQL]-表示语句仅用于InteractiveSQL(dbisql)中.
[SP]-表示语句用于存储过程或批处理中.
SQL语句4SybaseIQ[T-SQL]-表示实现该语句的目的是为了与AdaptiveServerEnterprise兼容.
在有些情况下,该语句不能用于非Transact-SQL格式的存储过程中.
在其它情况下,如果不存在Transact-SQL兼容性问题,则可以使用一个与建议采用的ISO/ANSISQL标准更接近的替代语句.
如果使用两组括号,表示语句可用于两种环境.
例如,[ESQL][SP]表示语句既可以用于嵌入式SQL,也可以用于存储过程.
ALLOCATEDESCRIPTOR语句[ESQL]为SQL描述符区(SQLDA)分配空间.
语法ALLOCATEDESCRIPTORdescriptor-name…[WITHMAX{integer|host-variable}]参数descriptor-name:–string有关详细信息,请参见《参考:构件块、表和过程》>"SQL语言元素".
示例示例1–下面的示例程序包括ALLOCATEDESCRIPTOR语句用法的一个示例.
#include#include#includeEXECSQLINCLUDESQLCA;#includeEXECSQLBEGINDECLARESECTION;intx;shorttype;intnumcols;charstring[100];a_sql_statement_numberstmt=0;EXECSQLENDDECLARESECTION;intmain(intargc,char*argv[]){structsqlda*sqlda1;if(!
db_init(&sqlca)){SQL语句参考:语句和选项5return1;}db_string_connect(&sqlca,"UID=dba;PWD=sql;DBF=d:\\IQ-15_3\\sample.
db");EXECSQLALLOCATEDESCRIPTORsqlda1WITHMAX25;EXECSQLPREPARE:stmtFROM'select*fromEmployees';EXECSQLDECLAREcursCURSORFOR:stmt;EXECSQLOPENcurs;EXECSQLDESCRIBE:stmtintosqlda1;EXECSQLGETDESCRIPTORsqlda1:numcols=COUNT;//howmanycolumnsif(numcols>25){//reallocateifnecessaryEXECSQLDEALLOCATEDESCRIPTORsqlda1;EXECSQLALLOCATEDESCRIPTORsqlda1WITHMAX:numcols;}type=DT_STRING;//changethetypetostringEXECSQLSETDESCRIPTORsqlda1VALUE2TYPE=:type;fill_sqlda(sqlda1);//allocatespaceforthevariablesEXECSQLFETCHABSOLUTE1cursUSINGDESCRIPTORsqlda1;EXECSQLGETDESCRIPTORsqlda1VALUE2:string=DATA;printf("name=%s",string);EXECSQLDEALLOCATEDESCRIPTORsqlda1;EXECSQLCLOSEcurs;EXECSQLDROPSTATEMENT:stmt;db_string_disconnect(&sqlca,"");db_fini(&sqlca);return0;}用法使用此语句前,必须在C代码中声明以下内容:structsqlda*descriptor_name您可以通过WITHMAX子句来指定描述符区内的变量数.
缺省大小为1.
在执行提取操作或任何访问描述符区内数据的语句之前,仍必须调用fill_sqlda为实际的数据项分配空间.
请参见"SQLAnywhereServer–编程">"SQLAnywhere嵌入式SQL">"SQL描述符区域(SQLDA)".
注意:此参考指向SQLAnywhere文档.
SQL语句6SybaseIQ标准SQL-ISO/ANSISQL语法的供应商扩展.
Sybase-受OpenClient/OpenServer支持.
另请参见DEALLOCATEDESCRIPTOR语句[ESQL](第152页)ALTERDATABASE语句升级使用该软件以前版本创建的数据库,或者添加/删除jConnectforJDBC支持.
请使用InteractiveSQL运行该语句.
语法ALTERDATABASEUPGRADE[PROCEDUREON][JCONNECT{ON|OFF}]示例示例1–以下示例禁用jConnect支持:ALTERDATABASEUPGRADEJCONNECTOFF用法ALTERDATABASE语句升级使用该软件早期版本创建的数据库.
它适用于维护版本和主版本.
升级数据库时,SybaseIQ会做出以下更改:将系统表升级到当前版本.
添加任何新的数据库选项.
启用当前版本中的新功能.
如果数据库是用该软件的当前版本创建的,也可以使用ALTERDATABASEUPGRADE只添加jConnect功能.
注意:在升级之前,请参见《安装和配置指南》以了解备份建议.
在您运行ALTERDATABASEUPGRADE之前,请务必以限制用户连接的方式来启动服务器.
有关说明及其它升级问题,请参见针对所用平台的《安装和配置指南》>"数据库升级".
使用iqunload实用程序升级在15.
0之前的版本中创建的数据库.
请参见针对所用平台的《安装和配置指南》>"数据库升级".
SQL语句参考:语句和选项7使用ALTERDATABASEUPGRADE之后,请关闭数据库.
PROCEDURE子句–在数据库中删除并重新创建所有dbo和sys拥有的过程.
JCONNECT子句–要使SybasejConnectJDBC驱动程序能够访问系统目录信息,必须指定JCONNECTON.
这会安装jConnect系统表和过程.
若要排除jConnect系统对象,请指定JCONNECTOFF.
只要不访问系统目录信息,仍可以使用JDBC.
缺省设置为包括jConnect支持(JCONNECTON).
副作用:自动提交标准SQL-ISO/ANSISQL语法的供应商扩展.
Sybase-不受AdaptiveServerEnterprise支持.
权限必须具有DBA权限.
另请参见CREATEDATABASE语句(第68页)ALTERDBSPACE语句更改读/写模式、更改大小或扩展现有数据库空间.
语法ALTERDBSPACEdbspace-name{ADDnew-file-spec[,new-file-spec.
.
.
]|DROPFILElogical-file-name[,FILElogical-file-name.
.
.
]|RENAMETOnewname|RENAME'new-file-pathname'|READONLY|READWRITE|ONLINE|OFFLINE|STRIPING{ON|OFF}|STRIPESIZEKBsize-in-KBALTERFILEfile-name{READONLY|[FORCE]READWRITE}|SIZEfile-size[KB|MB|GB|TB]|ADDfile-size[KB|MB|GB|TB|PAGES]}RENAMEPATH'new-file-pathname'RENAMETOnewnameSQL语句8SybaseIQ参数new-file-spec:–FILElogical-file-name'file-path'iq-file-optsiq-file-opts:–[[SIZE]file-size]…[KB|MB|GB|TB]][RESERVEreserve-size[KB|MB|GB|TB]]示例示例1–将名为DspHist的数据库空间的模式更改为READONLY.
ALTERDBSPACEDspHistREADONLY示例2–通过添加大小为500MB的文件FileHist3,向数据库空间DspHist添加500MB.
ALTERDBSPACEDspHistALTERFILEFileHist3ADD500MB示例3–在UNIX系统上,向数据库空间DspHist添加两个500MB文件.
ALTERDBSPACEDspHistADDFILEFileHist3'/History1/data/file3'SIZE500MB,FILEFileHist4'/History1/data/file4'SIZE500示例4–将数据库空间IQ_SYSTEM_TEMP的大小增大2GB.
ALTERDBSPACEIQ_SYSTEM_TEMPADD2GB示例5–从数据库空间DspHist中删除两个文件.
两个文件必须为空.
ALTERDBSPACEDspHistDROPFILEFileHist2,FILEFileHist4示例6–将数据库空间IQ_SYSTEM_MAIN的大小增大1000页.
(ADD的缺省单位为页.
)ALTERDBSPACEIQ_SYSTEM_MAINADD1000用法ALTERDBSPACE更改读写模式,更改联机/脱机状态,更改文件大小,重命名数据库空间名称、文件逻辑名或文件路径,或设置数据库空间条带化参数.
有关现有数据库空间的详细信息,请运行sp_iqdbspace过程、sp_iqdbspaceinfo过程、sp_iqfile过程、sp_iqdbspaceobjectinfo和sp_iqobjectinfo.
数据库空间和dbfile名称始终不区分大小写.
如果数据库为CASERESPECT,且操作系统支持区分大小写的文件,则物理文件路径区分大小写.
否则,文件路径不区分大小写.
对于数据库空间名称和dbfile名称,要么不用引号引起来,要么用双引号引起来.
请将dbfile的物理文件路径用单引号引起来.
SQL语句参考:语句和选项9在Windows中,如果您指定一个路径,则任何后跟n或x的反斜杠字符(\)都必须双写.
这样可防止根据SQL中的字符串规则将这些反斜杠解释为换行符(\n)或十六进制数(\x).
更安全的做法是始终使用两个反斜杠.
请参见《参考:构件块、表和过程》>"系统过程">"系统存储过程">"sp_iqdbspace过程"和《系统管理指南第一卷》>"数据库对象管理">"数据存储".
ADDFILE子句-向指定dbspace中添加一个或多个文件.
必须为每个文件指定dbfile名称和物理文件路径,且该名称和路径必须唯一.
您可以向IQ主数据库空间、IQ共享临时数据库空间或IQ临时数据库空间添加文件.
您可以向只读数据库空间中添加一个文件,但数据库空间仍为只读.
您只能以只读模式(ADDFILE的缺省设置)向Multiplex共享临时dbspace添加文件.
请参见《使用SybaseIQMultiplex》.
一个目录数据库空间只能包含一个文件,因此ADDFILE不可用于目录数据库空间.
DROPFILE子句-从IQ数据库空间删除指定文件.
该文件必须为空.
您不能删除指定数据库空间中的最后一个文件.
如果数据库空间中仅包含一个文件,则应该使用DROPDBSPACE.
RENAMETO子句-将dbspace-name重命名为新名称.
新名称必须在数据库中唯一.
不能重命名IQ_SYSTEM_MAIN、IQ_SYSTEM_MSG、IQ_SYSTEM_TEMP、IQ_SHARED_TEMP或SYSTEM.
RENAME子句-重命名包含单个文件的数据库空间的路径名.
从语义上看,它等同于ALTERFILERENAMEPATH子句.
如果数据库空间包含多个文件,则系统会返回错误.
READONLY子句-将IQ_SYSTEM_MAIN、IQ_SYSTEM_TEMP、IQ_SYSTEM_MSG、IQ_SHARED_TEMP和SYSTEM之外的任何数据库空间更改为只读.
禁止对当前已分配至数据库空间的任何对象执行DML修改.
只能用于IQ主存储区中的数据库空间.
READWRITE子句-将数据库空间更改为读写.
数据库空间必须联机.
只能用于IQmain存储中的数据库空间.
ONLINE子句-将脱机数据库空间和所有关联文件设置为联机状态.
只能用于IQmain存储中的数据库空间.
OFFLINE子句-将联机只读数据库空间和所有关联文件设置为脱机状态.
(如果数据库空间为读写、已脱机或非IQ主存储区,则系统会返回错误.
)只能用于IQmain存储中的数据库空间.
STRIPING子句-按照指定条件更改数据库空间的磁盘条带化.
当磁盘条带化被设置为ON时,会以循环分区方式从数据库空间内的每个文件分配数据.
例如,所写的第一个数据库页面将进入第一个文件,所写的第二个页面将进入给定数据库空间内的下一个文件,以此类推.
将跳过只读数据库空间.
STRIPESIZEKB子句-指定磁盘条带化算法移至指定数据库空间的下一条带之前要写入每个文件的千字节数(KB).
ALTERFILEREADONLY-将指定文件更改为只读.
文件必须与IQ主数据库空间关联.
不能将IQ_SHARED_TEMP中的文件更改为READONLY状态.
SQL语句10SybaseIQALTERFILEREADWRITE-将指定的IQ主存储区dbfile或临时存储dbfile更改为读写.
文件必须与IQmain数据库空间或临时数据库空间关联.
ALTERFILEFORCEREADWRITE-将指定的共享临时存储dbfile的状态更改为读写,尽管辅助节点可能会出现已知文件状态问题.
该文件可能与IQ主数据库空间、共享临时数据库空间或临时数据库空间相关联,但因为IQ_SYSTEM_MAIN中的新dbfile和用户主数据库空间创建为读写,所以此子句只会影响共享临时数据库空间.

ALTERFILESIZE子句-以千字节(KB)、兆字节(MB)、千兆字节(GB)或千吉字节(TB)为单位指定文件的新大小.
缺省单位为兆字节.
您只能在空闲列表(一种分配映射)有足够空间且数据库空间有足够保留的空间时增大数据库空间.
减小数据库空间大小也只能在将要截断的部分未被使用的情况下才能进行.
ALTERFILEADD子句-以页、千字节(KB)、兆字节(MB)、千兆字节(GB)或千吉字节(TB)为单位扩展文件的大小.
缺省值为MB.
您只能在空闲列表(一种分配映射)有足够空间且数据库空间有足够保留的空间时执行ADD子句.
您还可以通过SybaseCentralDbspaces窗口来查看和更改数据库空间的模式和大小.
ALTERFILERENAMEPATH子句-重命名与指定文件关联的文件路径名.
此子句只是将文件与新文件路径关联起来,而不再关联旧路径.
子句并不实际更改操作系统文件名.
必须通过操作系统才能更改文件名.
数据库空间必须脱机才能重命名文件路径.
当数据库空间更改为联机状态或当数据库重新启动时,将使用新路径.

您不能重命名IQ_SYSTEM_MAIN中的文件的路径,因为如果新路径不可访问,则数据库将无法启动.
如果您需要重命名IQ_SYSTEM_MAIN中的文件的路径,请将文件设置为只读,清空并删除该文件,然后以新文件路径名再次添加该文件.
ALTERFILERENAMETO子句-将指定文件的逻辑名重命名为新名称.
新名称必须在数据库中唯一.
副作用:自动提交自动检查点如果将模式更改为READONLY,则数据库空间中的内部数据库结构会立即重新分配到某个读写数据库空间.
标准SQL-ISO/ANSISQL语法的供应商扩展.
Sybase-不受AdaptiveServerEnterprise支持.
权限必须具有SPACEADMIN或DBA权限.
另请参见CREATEDATABASE语句(第68页)SQL语句参考:语句和选项11CREATEDBSPACE语句(第77页)DROP语句(第170页)ALTERDOMAIN语句重命名用户定义的域或数据类型.
不重命名Java类型.
语法ALTER{DOMAIN|DATATYPE}user-typeRENAMEnew-name参数new-name:–表示新域名的标识符.
user-type:–要重命名的域的用户定义数据类型.
示例示例1–将Address域重命名为MailingAddress:ALTERDOMAINAddressRENAMEMailingAddress用法ALTERDOMAIN语句更新SYSUSERTYPE系统表中用户定义的域或数据类型的名称.
请参见《参考:构件块、表和过程》>"系统表和视图">"系统视图">"SYSUSERTYPE系统视图".
您必须重新创建所有引用该用户定义的域或数据类型的过程、视图或事件,否则它们将继续引用原来的名称.
另请参见《参考:构件块、表和过程》>"SQL数据类型".
副作用:自动提交权限必须具有DBA权限或者是创建域的数据库用户.
另请参见CREATEDOMAIN语句(第80页)SQL语句12SybaseIQALTEREVENT语句更改事件的定义或者与之关联的、自动执行预定义操作的处理程序.
还可以变更调度操作的定义.
语法ALTEREVENTevent-name[DELETETYPE|TYPEevent-type]{WHERE{trigger-condition|NULL}|{ADD|[MODIFY]|DELETE}SCHEDULEschedule-spec}[ENABLE|DISABLE][[MODIFY]HANDLERcompound-statement|DELETEHANDLER}参数event-type:–BackupEnd|"Connect"|ConnectFailed|DatabaseStart|DBDiskSpace|"Disconnect"|GlobalAutoincrement|GrowDB|GrowLog|GrowTemp|LogDiskSpace|"RAISERROR"|ServerIdle|TempDiskSpacetrigger-condition:–[event_condition(condition-name>=}value]schedule-spec:–[schedule-name]{STARTTIMEstart-time|BETWEENstart-timeANDend-time}[EVERYperiod{HOURS|MINUTES|SECONDS}][ON{(day-of-week,day-of-month,STARTDATEstart-date]event-name|schedule-name:–identifierday-of-week:–stringvalue|period|day-of-month:–integerstart-time|end-time:–timestart-date:–date用法通过ALTEREVENT,您可以更改使用CREATEEVENT创建的事件定义.
可能的用法包括:在开发期间更改事件处理程序.
在开发阶段,定义和测试没有触发器状态或日程表的事件处理程序,然后在事件处理程序完成后,使用ALTEREVENT添加执行条件.
通过禁用事件临时禁用事件处理程序.
使用ALTEREVENT更改事件时,请指定事件名称和(可选)日程表名称.
通过查询系统表SYSEVENT列出事件名称.
例如:SELECTevent_id,event_nameFROMSYS.
SYSEVENTSQL语句参考:语句和选项13通过查询系统表SYSSCHEDULE列出日程表名称.
例如:SELECTevent_id,sched_nameFROMSYS.
SYSSCHEDULE每个事件都具有唯一的事件ID.
可使用SYSEVENT和SYSSCHEDULE的event_id列将事件与关联的日程表匹配.
DELETETYPE子句-删除事件与事件类型的关联.
ADD|MODIFY|DELETESCHEDULE子句-更改日程表的定义.
在任一ALTEREVENT语句中,只能更改一个日程表.
WHERE子句-WHERENULL选项删除条件.
有关大多数参数的说明,请参见"CREATEEVENT语句".
另请参见《系统管理指南第二卷》>"使用日程表和事件自动完成任务".

副作用:自动提交权限必须具有DBA权限.
另请参见BEGIN……END语句(第49页)CREATEEVENT语句(第82页)ALTERFUNCTION语句修改现有函数.
在ALTERFUNCTION语句中包括修改后的整个函数.
语法语法1ALTERFUNCTION[owner.
]function-namefunction-definitionfunction-definition:CREATEFUNCTIONsyntax语法2ALTERFUNCTION[owner.
]function-nameSETHIDDEN语法3SQL语句14SybaseIQALTERFUNCTION[owner.
]function-nameRECOMPILE用法语法1-在语法上与CREATEFUNCTION语句相同,只是第一个字有所不同.
任意版本的CREATEFUNCTION语句均可更改.
系统将保留函数的现有权限,因此不必重新分配.
如果执行了DROPFUNCTION和CREATEFUNCTION,则必须重新分配执行权限.
语法2-使用SETHIDDEN搅乱关联函数的定义,并使其不可读取.
函数必须卸载并重新装载到其它数据库中.
警告!
SETHIDDEN设置是不可逆的.
如果您再次需要原始源,您必须在数据库外加以维护.
如果您使用SETHIDDEN,则使用存储过程调试工具进行调试时,系统不会显示函数定义,在过程分析中也看不到函数定义.
另请参见《系统管理指南第二卷》>"使用过程和批处理">"隐藏过程、函数和视图的内容".
语法3-使用RECOMPILE重新编译用户定义的函数.
当您重新编译函数时,将会重新分析目录中存储的定义并验证语法.
重新编译不会更改函数的保留源.
当您重新编译函数时,SETHIDDEN子句搅乱的定义仍保持混乱状态且不可读取.
副作用:自动提交标准SQL-ISO/ANSISQL语法的供应商扩展.
权限必须是函数的所有者或者具有DBA权限.
另请参见ALTERPROCEDURE语句(第25页)CREATEFUNCTION语句(第90页)DROP语句(第170页)SQL语句参考:语句和选项15ALTERINDEX语句重命名基表或全局临时表中的索引以及用户显式创建的索引和外键的外键角色名.

语法ALTER{INDEXindex-name|[INDEX]FOREIGNKEYrole-name|[INDEX]PRIMARYKEY|ON[owner.
]table-name{rename-clause|move-clause}参数rename-clause–:RENAMETO|ASnew-namemove-clause:–MOVETOdbspace-name示例示例1–将主键(c5的HG)从数据库空间Dsp4移动到Dsp8:CREATETABLEfoo(c1INTINDsp1,c2VARCHAR(20),c3CLOBINDsp2,c4DATE,c5BIGINT,PRIMARYKEY(c5)INDsp4)INDsp3);CREATEDATEINDEXc4_dateONfoo(c4)INDsp5;ALTERINDEXPRIMARYKEYONfooMOVETODsp8;示例2–将DATE索引从Dsp5移动到Dsp9:ALTERINDEXc4_dateONfooMOVETODsp9示例3–将表jal.
mytable中的索引COL1_HG_OLD重命名为COL1_HG_NEW:ALTERINDEXCOL1_HG_OLDONjal.
mytableRENAMEASCOL1_HG_NEW示例4–将表dba.
Employees中的外键角色名称ky_dept_id重命名为emp_dept_id:ALTERINDEXFOREIGNKEYky_dept_idONdba.
EmployeesRENAMETOemp_dept_id用法ALTERINDEX语句重命名索引以及用户显式创建的索引和外键的外键角色名称.
只能重命名基表或全局临时表中的索引.
不能重命名用于强制执行键约束的索引.

SQL语句16SybaseIQON子句-ON子句指定包含要重命名的索引或外键的表的名称.
RENAME[AS|TO]子句-RENAME子句指定索引或外键角色的新名称.
MOVE子句-MOVE子句将指定的索引、唯一约束、外键或主键移动到指定的数据库空间.
对于唯一约束或外键,您必须指定其唯一索引名称.
您必须对新数据库空间具有CREATE特权并且是表所有者,或者具有DBA或SPACEADMIN权限.
注意:如果尝试更改本地临时表中的索引,则系统会返回错误"未找到索引".
如果尝试更改非用户创建的索引,例如缺省索引(FP),则系统会返回错误"无法更改索引.
只能更改所有者类型为USER的基表或全局临时表中的索引.
"副作用:自动提交.
在InteractiveSQL的"结果"窗格中清除"结果"选项卡.
关闭当前连接的所有游标.
标准SQL-符合ISO/ANSISQL标准.
Sybase-不受AdaptiveServerEnterprise支持.
权限必须是表所有者、对表具有REFERENCES权限,或者具有DBA或RESOURCE权限.
对于ALTERINDEXMOVETO语句,您必须对新数据库空间具有CREATE特权并且是表所有者,或者具有DBA或SPACEADMIN权限.
另请参见ALTERTABLE语句(第31页)CREATEINDEX语句(第97页)CREATETABLE语句(第136页)ALTERLOGICALSERVER语句修改数据库中现有的用户定义的逻辑服务器配置.
语法ALTERLOGICALSERVERlogical-server-name{alter_clause}SQL语句参考:语句和选项17参数alter_clause:–{ADDMEMBERSHIP'('{ls-member,|DROPMEMBERSHIP'('{ls-member,}ls-member:–FORLOGICALCOORDINATOR|mpx-server-name示例示例1–以下示例通过将Multiplex节点n1和n2添加至逻辑服务器ls1,更改用户定义的逻辑服务器:ALTERLOGICALSERVERls1ADDMEMBERSHIP(n1,n2)示例2–以下示例添加COORDINATOR成员资格并将当前协调节点n1的成员资格从逻辑服务器ls1删除:ALTERLOGICALSERVERls1ADDMEMBERSHIP(FORLOGICALCOORDINATOR)ALTERLOGICALSERVERls1DROPMEMBERSHIP(n1)用法仅适用于Multiplex.
logical-server-name指现有用户定义的逻辑服务器名,换言之,它不能是内置或保留逻辑服务器名.
SYS.
ISYSIQLSMEMBER系统表存储逻辑服务器成员资格的定义.
成员节点添加至某一逻辑服务器或从中移除后,仅当该节点运行与ALTERLOGICALSERVER关联的TLV日志后,才在启动或关闭时接受逻辑服务器连接.
从逻辑服务器删除某一节点后,该节点现有逻辑服务器连接仍在运行,不过这些连接的分布式处理已停止.
发生如下情况时系统返回错误:任意ls-member(通过ADDMEMBERSHIP子句指定)已是逻辑服务器的成员.
任意ls-member(通过DROPMEMBERSHIP子句指定)不是逻辑服务器的现有成员.
逻辑服务器成员资格更改导致成员资格重叠检查失败.
权限必须具有DBA或MPXADMIN权限.
SQL语句18SybaseIQALTERLOGINPOLICY语句此语句执行两个功能.
可修改数据库中现有登录策略的选项值,也可配置逻辑服务器访问.
语法ALTERLOGINPOLICYpolicy-name{alter-clause}参数alter-clause:–{{ADD|DROP|SET}LOGICALSERVERls-assignment-list|policy-option-name=policy-option-value[LOGICALSERVERls-override-list]}ls-assignment-list:–{{ls-name,SERVER|NONE|DEFAULT}ls-override-list:–{ls-name,.
.
.
}ls-name:–{OPEN|user-defined-ls-name}policy-option-value:–{UNLIMITED|DEFAULT|value}示例示例1–请参见"逻辑服务器访问配置"和"登录策略选项配置".
用法仅适用于Multiplex.
请参见"逻辑服务器访问配置"和"登录策略选项配置".
权限必须具有DBA或USERADMIN权限.
SQL语句参考:语句和选项19逻辑服务器访问配置可使用ALTERLOGINPOLICY配置逻辑服务器访问.
示例1假定root登录策略允许访问逻辑服务器ls4、ls5且登录策略lp1不包含逻辑服务器分配.
如下语句可将登录策略lp1有效分配至逻辑服务器ls4、ls5.
将逻辑服务器ls1分配给逻辑策略lp1.
ALTERLOGINPOLICYlp1ADDLOGICALSERVERls1示例2本语句允许逻辑服务器ls2和ls3接受来自登录策略ls1的访问.
ALTERLOGINPOLICYlp1ADDLOGICALSERVERls2,ls3示例3修改登录策略lp1,仅允许访问ls3和ls4.
ALTERLOGINPOLICYlp1ADDLOGICALSERVERls4ALTERLOGINPOLICYlp1DROPLOGICALSERVERls1,ls2或者ALTERLOGINPOLICYlp1SETLOGICALSERVERls3,ls4示例4修改登录策略lp1,拒绝访问任意逻辑服务器.
ALTERLOGINPOLICYlp1SETLOGICALSERVERNONE示例5删除登录策略lp1的当前逻辑服务器分配,允许其继承root登录策略的逻辑服务器分配.
ALTERLOGINPOLICYlp1SETLOGICALSERVERDEFAULT用法仅适用于Multiplex.
ADD、DROP或SET子句可用来配置某一登录策略的逻辑服务器分配:ADD–向某一登录策略添加新逻辑服务器分配DROP–从某一登录策略删除现有逻辑服务器分配SET–使用一组新的逻辑服务器为某一登录策略替代所有逻辑服务器分配仅使用一个ADD、DROP或SET子句.
SERVER、NONE和DEFAULT仅与SET子句搭配使用.
对于每个ls-assignment列表或ls-override列表,仅指定特定逻辑服务器名一次.
SQL语句20SybaseIQ发生下列情况则会返回错误:已有指定ADD子句的逻辑服务器分配给了登录策略.
当前未有指定DROP子句的逻辑服务器分配给了登录策略.
逻辑服务器分配更改可能造成已分配逻辑服务器间成员资格重叠.
SYS.
ISYSIQLOGINPOLICYLSINFO存储逻辑服务器分配信息.
对登录策略中登录策略选项的每次逻辑服务器覆盖,ISYSIQLOGINPOLICYLSINFO中均有对应行.
登录策略选项配置可使用ALTERLOGINPOLICY配置登录策略访问.
示例以下示例覆盖两处逻辑服务器的登录策略设置,在逻辑服务器ls1启用分布式查询处理并增加逻辑服务器ls2的最大连接数:ALTERLOGINPOLICYlp1dqp_enabled=ONLOGICALSERVERls1;ALTERLOGINPOLICYlp2max_connections=20LOGICALSERVERls2;用法仅适用于Multiplex.
逻辑服务器级覆盖意味着,某一特定登录策略选项对于不同逻辑服务器有着不同设置.
SYS.
ISYSIQLSLOGINPOLICYOPTION为逻辑服务器覆盖春村登录策略选项值.
对登录策略中登录策略选项的每次逻辑服务器覆盖,ISYSIQLSLOGINPOLICYOPTION中均有对应行.
注意:仅可以为登录策略选项max_connections、dqp_enabled指定逻辑服务器覆盖设置.
(dqp_enabled选项仅影响Multiplex服务器.
请参见"Multiplex引用">"数据库选项">"dqp_enabled选项".
)无法为root登录策略指定逻辑服务器覆盖.
表1.
登录策略选项选项描述值ROOT策略的初始值适用于dqp_enabled如为ON,可为分配了该登录策略的用户启用分布式查询处理.
ON、OFFON仅用于Multiplex服务器.
所有用户(包括那些具有DBA权限的用户).
.
.
locked如果此选项的值为ON,则会禁止用户创建新连接ON、OFFOFF仅限没有DBA权限的用户SQL语句参考:语句和选项21选项描述值ROOT策略的初始值适用于max_connections用户可进行的最大并发连接数.
0–2147483647无限制仅限没有DBA权限的用户max_days_since_login同一用户进行的两次连续登录之间可经过的最大天数.
0–2147483647无限制仅限没有DBA权限的用户max_failed_login_attempts自上一次成功登录尝试后,帐户锁定前可登录到用户帐户的最大失败尝试次数.
0–2147483647无限制仅限没有DBA权限的用户max_non_dba_connections没有DBA权限的用户可以进行的最大并发连接数.
只有root登录策略支持此选项.
0–2147483647无限制仅限没有DBA权限的用户.
仅适用于root登录策略.
password_expiry_on_next_login如果此选项的值为ON,则用户的口令将会在下一次登录时过期.
ON、OFFOFF所有用户(包括那些具有DBA权限的用户)password_grace_time在口令到期前剩余的天数,在此期间允许登录,但缺省post_login过程将发出警告.
0–21474836470所有用户(包括那些具有DBA权限的用户)password_life_time必须更改口令前的最大天数.
0–2147483647无限制所有用户(包括那些具有DBA权限的用户)注意:SybaseIQ不再支持MULTIPLEXSERVER覆盖子句.
为登录策略选项使用ALTERLOGINPOLICY语句搭配MULTIPLEXSERVER覆盖子句,系统将返回错误.
ALTERLSPOLICY语句修改数据库中现有root逻辑服务器策略的某些或所有选项值.
语法ALTERLSPOLICYpolicy-nameSQL语句22SybaseIQoption-value-list参数option-value-list:–{option-name=value}示例示例1–以下示例更改逻辑服务器策略:ALTERLSPOLICYrootALLOW_COORDINATOR_AS_MEMBER=ON;注意:ALLOW_COORDINATOR_AS_MEMBER是逻辑服务器策略的唯一选项,root是唯一的逻辑服务器策略.
无法创建逻辑服务器策略.
用法仅适用于Multiplex.
权限必须具有DBA或MPXADMIN权限.
ALTERMULTIPLEXRENAME语句重命名Multiplex并将Multiplex名称存储在SYS.
ISYSIQINFO系统表中.
语法ALTERMULTIPLEXRENAMEmultiplex-name用法仅适用于Multiplex.
创建Multiplex后将以协调器命名.
Multiplex名称只能用在SybaseCentral中标识Multiplexes文件夹中的Multiplex.
此语句将自动提交.
权限必须具有DBA或MULTIPLEXADMIN权限.
SQL语句参考:语句和选项23ALTERMULTIPLEXSERVER语句更改给定服务器的名称、Catalog文件路径、角色或状态.
语法语法1:ALTERMULTIPLEXSERVERserver-nameserver-option语法2:ALTERMULTIPLEXSERVERPRIVATENULL参数server-option:–{RENAMEnew-server-name|DATABASE'dbfile'|ROLE{WRITER|READER|COORDINATOR}|STATUS{INCLUDED|EXCLUDED}|ASSIGNASFAILOVERSERVER|host-port-list}host-port-list:–{HOST'hostname'PORTportnumber.
.
.
}{PRIVATEHOST'hostname'PORTportnumber.
.
.
}注意:Sybase建议您先关闭某一目标服务器,然后再将其排除.
如果不这样操作,被排除的服务器将自动关闭并需要ALTERMULTIPLEXSERVERserver-nameSTATUSINCLUDED和同步操作以重新加入Multiplex.
示例示例–以下示例排除辅助服务器mpx_writer1:ALTERMULTIPLEXSERVERmpx_writer1STATUSEXCLUDED用法仅适用于Multiplex.
按如下方式更改Multiplex服务器:RENAME–更改给定服务器的名称.
服务器将自动关闭.
下次重新启动需要新名称.
SQL语句24SybaseIQDATABASE–更改给定服务器的Catalog文件路径.
服务器将自动关闭,下次应使用新Catalog路径启动.
用户应负责(SybaseCentral可能会隐藏)重新分配Catalog文件本身.
ROLE–更改给定服务器的角色.
不允许用户更改协调器的角色或将角色更改为协调器.
如果写入程序节点的角色更改为读取程序,服务器将关闭.
STATUS–更改给定服务器的状态.
不能排除故障切换节点,除非它是要排除的最后一个节点.
排除后服务器将自动关闭.
包括一个节点后,必须进行同步,然后重新启动服务器.
ASSIGN–将给定服务器指定为新的故障切换服务器.
此节点不应处于被排除的状态.
ASSIGNASFAILOVER子句是一个独立的子句,不能与任何其它ALTERMULTIPLEXSERVER子句一起使用.
协调器必须正在运行,但您可以从Multiplex中的任何服务器运行ALTERMULTIPLEXSERVER命令.
(Sybase建议所有DDL语句均在协调器上运行.
)除非将角色从读取程序更改为写入程序,否则在任何情况下,命名服务器都将自动关闭.
注意:Sybase建议您先关闭某一目标服务器,然后再将其排除.
如果不这样操作,被排除的服务器将自动关闭并需要ALTERMULTIPLEXSERVERserver-nameSTATUSINCLUDED和同步操作以重新加入Multiplex.
权限必须具有DBA或MULTIPLEXADMIN权限.
ALTERPROCEDURE语句用修改后的版本替换现有过程.
在ALTERPROCEDURE语句中包括修改后的整个过程,并对该过程重新分配用户权限.
语法语法1ALTERPROCEDURE[owner.
]procedure-nameprocedure-definition语法2ALTERPROCEDURE[owner.
]procedure-nameREPLICATE{ON|OFF}语法3ALTERPROCEDURE[owner.
]procedure-nameSETHIDDEN语法4ALTERPROCEDURE[owner.
]procedure-nameRECOMPILESQL语句参考:语句和选项25语法5ALTERPROCEDURE[owner.
]procedure-name([parameter,…])[RESULT(result-column,.
.
.
)]EXTERNALNAME'external-call'[LANGUAGEenvironment-name]}参数procedure-definition–CREATEPROCEDURE语法(名称之后)environment-name–JAVA[DISALLOW|ALLOWSERVERSIDEREQUESTS]external-call–[column-name:]function-name@library;.
.
.
用法ALTERPROCEDURE语句必须包括整个新过程.
可以将PROC用作PROCEDURE的同义词.
ALTERPROCEDURE语句在语法上与CREATEPROCEDURE语句相同.
语法1–除第一个单词不同以外,ALTERPROCEDURE语句的语法与CREATEPROCEDURE语句的语法相同.
Watcom和Transact-SQL术语过程都能通过使用ALTERPROCEDURE更改.
对于ALTERPROCEDURE,,有关过程的现有权限不会受到更改.
如果先后执行DROPPROCEDURE和CREATEPROCEDURE,则会重新指定执行权限.
语法2–如果需要用Sybase复制服务器将过程复制到其他站点,请对过程设置REPLICATEON.
语法3–使用SETHIDDEN对关联过程的定义进行模糊处理,使之不可读.
可将过程卸载并重新装载到其他数据库中.
注意:这种设置不可逆.
建议在数据库之外保留原来的过程定义.
如果使用SETHIDDEN,则使用调试程序进行调试将不会显示过程定义,也无法通过过程概况分析获得过程定义.
不能并用语法2和语法1.
语法4–使用RECOMPILE语法重新编译存储的过程.
当重新编译一个过程时,会重新分析存储在目录中的定义,也会验证其语法.
对于可生成结果集但不包含RESULT子句的过程,数据库服务器会尝试确定过程结果集的特点,并将信息存储在目录中.
如果自过程创建以来,过程所引用的表发生变更,从而添加、删除或重命名了列,这些信息会很有用.
重新编译不会更改过程的定义.
可以重新编译使用SETHIDDEN子句隐藏其定义的过程,但其定义仍是隐藏的.
语法5–可将这种语法用于JavaUDF.
iq-environment-name:JAVA[DISALLOW|ALLOWSERVERSIDEREQUESTS]:SQL语句26SybaseIQDISALLOW为缺省值.
ALLOW表示允许建立服务器端连接.
注意:除非有必要,否则不要指定ALLOW.
设置ALLOW会减慢某些类型的SybaseIQ表连接.
不要在同一查询中一同使用UDF与ALLOWSERVERSIDEREQUESTS和DISALLOWSERVERSIDEREQUESTS.
如果要将ALTERPROCEDURE语句用于表UDF,则所要受到的限制与使用CREATEPROCEDURE语句(外部过程)时所要受到的限制相同.
标准SQL—ISO/ANSISQL语法的供应商扩展.
Sybase—不受AdaptiveServerEnterprise支持.
权限必须是过程的所有者或者是DBA.
自动提交.
另请参见CREATEPROCEDURE语句(第112页)ALTERSERVER语句修改远程服务器的属性.
语法ALTERSERVERserver-name[CLASS'server-class'][USING'connection-info'][CAPABILITY'cap-name'{ON|OFF}][CONNECTIONCLOSE[CURRENT|ALL|connection-id]]参数server-class:–{ASAJDBC|ASEJDBC|ASAODBC|ASEODBC|DB2ODBC|MSSODBC|ORAODBC|ODBC}connection-info:–{machine-name:port-number[/dbname]|data-source-name}cap-name:–服务器功能的名称SQL语句参考:语句和选项27示例示例1–更改名为ase_prod的AdaptiveServerEnterprise服务器的服务器类,使它与SybaseIQ的连接基于ODBC.
数据源名称为ase_prod.
ALTERSERVERase_prodCLASS'ASEODBC'USING'ase_prod'示例2–更改服务器infodc的一项功能:ALTERSERVERinfodcCAPABILITY'insertselect'OFF示例3–关闭与名为rem_test的远程服务器的所有连接:ALTERSERVERrem_testCONNECTIONCLOSEALL示例4–关闭与名为rem_test的远程服务器的连接(连接ID为142536):ALTERSERVERrem_testCONNECTIONCLOSE142536用法ALTERSERVER所做的更改将直到下一次与远程服务器连接时才生效.
CLASS子句-使用CLASS子句更改服务器类.
有关服务器类的详细信息,请参见《系统管理指南第二卷》>"访问远程数据"和《系统管理指南第二卷》>"用于远程数据访问的服务器类".
USING子句-USING子句更改服务器的连接信息.
有关连接信息的详细信息,请参见"CREATESERVER语句".
CAPABILITY子句-CAPABILITY子句可将服务器功能设置为ON或OFF.
服务器功能存储在系统表SYSCAPABILITY中.
这些功能的名称存储在系统表SYSCAPABILITYNAME中.
对于远程服务器,直到与该服务器建立第一个连接后,SYSCAPABILITY表才会包含条目.
在第一个连接中,SybaseIQ向服务器询问其功能,然后填充SYSCAPABILITY.
对于后面的连接,它从该表中获取服务器的功能.
通常情况下,不需要变更服务器的功能.
可能需要变更属于ODBC类的通用服务器的功能.
CONNECTIONCLOSE子句-当用户创建与远程服务器的连接时,在用户从本地数据库断开连接之前,远程连接不会关闭.
您可以使用CONNECTIONCLOSE子句显式关闭与远程服务器的连接.
当远程连接处于非活动状态或不再需要时,此操作非常有用.
下列SQL语句等同,并且关闭与远程服务器的当前连接.
ALTERSERVERserver-nameCONNECTIONCLOSEALTERSERVERserver-nameCONNECTIONCLOSECURRENTSQL语句28SybaseIQ使用此语法可关闭与远程服务器的ODBC和JDBC连接.
无需DBA权限即可执行上述任一语句.
还可以通过指定连接ID来断开特定远程ODBC连接,或通过指定ALL关键字来断开所有远程ODBC连接.
如果尝试通过指定连接ID或ALL关键字来关闭JDBC连接,则会发生错误.
当connection-id标识的连接不是当前本地连接时,用户必须拥有DBA权限才能关闭连接.
副作用:自动提交标准SQL-ISO/ANSISQL语法的供应商扩展.
Sybase-受OpenClient/OpenServer支持.
权限必须具有DBA权限才能执行此命令.
另请参见CREATESERVER语句(第132页)DROPSERVER语句(第177页)ALTERSERVICE语句变更Web服务.
语法ALTERSERVICEservice-name[TYPE'service-type-string'][attributes][ASstatement']参数属性:[AUTHORIZATION{ON|OFF}][SECURE{ON|OFF}][USERuser-name|NULL}][URL[PATH]{PATH]{ON|OFF|ELEMENTS}][USING(SOAP-prefix|NULL}]–service-type-string:{'RAW'|'HTML'|'XML'|'SOAP'|'DISH'}示例示例1–若要快速设置Web服务器,请使用-xs开关启动数据库服务器,然后执行以下语句:SQL语句参考:语句和选项29CREATESERVICEtablesTYPE'HTML'ALTERSERVICEtablesAUTHORIZATIONOFFUSERDBAASSELECT*FROMSYS.
ISYSTAB在执行这些语句之后,使用任意Web浏览器打开URLhttp://localhost/tables.
用法ALTERSERVICE语句会将数据库服务器作为Web服务器.
service-name-不能重命名Web服务.
service-type-string-标识服务类型.
该类型必须是列出的服务类型之一.
无缺省值.
AUTHORIZATION子句-确定当连接到该服务时用户是否必须指定用户名和口令.
如果AUTHORIZATION为OFF,则需要使用AS子句,并且必须用USER子句标识单个用户.
使用该用户的帐户和权限执行所有请求.
如果AUTHORIZATION为ON,则所有用户必须提供用户名和口令.
或者,通过使用USER子句提供用户名或组名,您可以限制允许使用该服务的用户.
如果用户名为NULL,则所有已知用户都可以访问该服务.
缺省值为ON.
建议在启用了授权的情况下运行生产系统,并且通过将用户添加到组中来授予使用该服务的权限.
SECURE子句-表示是否接受不安全的连接.
ON表示只接受HTTPS连接.
在HTTP端口上接收的服务请求将自动重定向到HTTPS端口.
如果设置为OFF,则HTTP和HTTPS连接都接受.
缺省值为OFF.
USER子句-如果禁用授权,则此参数成为必需的参数,并指定用于执行所有服务请求的用户ID.
如果启用授权(缺省值),则此可选子句标识允许访问该服务的用户或组.
缺省值为NULL,即向所有用户授予访问权限.
URL子句-确定是否接受URI路径;如果接受,确定如何处理URI路径.
OFF指示URI请求中服务名后面不必有任何内容.
ON指示将URI中的其余部分解释为变量url的值.
ELEMENTS表示将URI路径的其余部分在斜线字符处分隔开,并分隔为每组最多包含10个元素的一个列表.
将这些值指派给名为url的变量外加介于1和10之间的数字后缀;例如,前三个变量名称分别为url1、url2和url3.
如果提供的值不到10个,则将其余变量设置为NULL.
如果服务名以字符/结尾,则必须将URL设置为OFF.
缺省值为OFF.
USING子句-此子句仅适用于DISH服务.
该参数指定名称前缀.
只处理其名称以此前缀开头的SOAP服务.
语句-如果该语句为空值,则URI必须指定要执行的语句.
否则,指定的SQL语句是唯一可通过该服务执行的语句.
SOAP服务必须含有语句;而DISH服务必须不含有语句.
缺省值为NULL.
SQL语句30SybaseIQ强烈建议在生产系统中运行的所有服务都定义一个语句.
只有在启用了授权的情况下,该语句才能为NULL.
RAW-将结果集发送到客户端,而不进行任何进一步的格式设置.
可以通过在过程中显式生成所需的标记来产生格式化文档.
HTML-自动将语句或过程的结果集转换为包含表的HTML文档格式.
XML-结果集采用XML格式.
如果还不是XML,则自动转换为XMLRAW格式.
SOAP-请求必须为有效的简单对象访问协议(SOAP)请求.
结果集将自动设置为SOAP响应的格式.
有关SOAP标准的详细信息,请参见www.
w3.
org/TR/SOAP.
DISH-DetermineSOAPHandler(DISH)服务充当一个或多个SOAP服务的代理.
在使用时,该服务充当容纳多个SOAP服务并为这些服务提供访问权限的容器.
Web服务描述语言(WSDL)文件是针对每个所包含的SOAP服务自动生成的.
所包含的SOAP服务由公用前缀标识,该前缀必须在USING子句中指定.
另请参见"SQLAnywhereServer-编程">"SQLAnywhereWeb服务">"使用SQLAnywhere作为HTTPWeb服务器".
注意:此参考指向SQLAnywhere文档.
标准SQL-ISO/ANSISQL语法的供应商扩展.
Sybase-不受AdaptiveServerEnterprise支持.
权限必须具有DBA权限.
另请参见CREATESERVICE语句(第133页)DROPSERVICE语句(第178页)ALTERTABLE语句修改表的定义.
语法ALTERTABLE[owner.
]table-name{alter-clause,.
.
.
}SQL语句参考:语句和选项31参数alter-clause:–ADDcreate-clause|ALTERcolumn-namecolumn-alteration|ALTER[CONSTRAINTconstraint-name]CHECK(condition)|DROPdrop-object|RENAMErename-object|move-clause|SPLITPARTITIONpartition-nameINTO(partition-decl-1,partition-decl-2)|MERGEPARTITIONpartition-name-1INTOpartition-name-2|UNPARTITION|PARTITIONBYRANGE(partition-key)range-partition-declcreate-clause:–column-namecolumn-definition[column-constraint]|table-constraint|PARTITIONBYpartitioning-schemacolumn-alteration:–{alterable-column-attribute}[alterable-column-attribute…]|ADD[constraint-name]CHECK(condition)|DROP{DEFAULT|CHECK|CONSTRAINTconstraint-name}alterable-column-attribute:–[NOT]NULL|DEFAULTdefault-value|[CONSTRAINTconstraint-name]CHECK{NULL|(condition)}column-constraint:–[CONSTRAINTconstraint-name]{UNIQUE|PRIMARYKEY|REFERENCEStable-name[(column-name)][actions]|CHECK(condition)|IQUNIQUE(integer)}drop-object:–{column-name|CHECK||CONSTRAINTconstraint-name|UNIQUE(index-columns-list)|PRIMARYKEY|FOREIGNKEYfkey-name|PARTITIONrange-partition-name}move-clause:–{ALTERcolumn-nameMOVE{PARTITION(partition-nameTOnew-dbspace-name)|TOnew-dbspace-name}}|MOVEPARTITIONpartition-nameTOnew-dbspace-name|MOVETOnew-dbspace-name|MOVEMETADATATOnew-dbspace-namerename-object:–new-table-name|column-nameTOnew-column-name|CONSTRAINTconstraint-nameTOnew-constraint-name|PARTITIONpartition-nameTOnew-partition-namecolumn-definition:–column-namedata-type[NOTNULL|NULL][INdbspace-name][DEFAULTdefault-value|IDENTITY]default-value:–special-value|string|globalvariable|[-]number|(constant-expression)|built-in-function(constant-expression)|AUTOINCREMENT|NULL|TIMESTAMP|LASTUSER|USERspecial-value:–CURRENT{DATABASE|DATE|REMOTEUSER|TIME|TIMESTAMP|USER|PUBLISHER}table-constraint:–[CONSTRAINTconstraint-name]{UNIQUE(column-name[,…])|PRIMARYKEY(column-nameforeign-key-constraint|CHECK(condition)}foreign-key-constraint:–FOREIGNKEY[role-name][(column-nameREFERENCEStable-name[(column-nameactions][SQL语句32SybaseIQrename-object:–new-table-name|column-nameTOnew-column-name|CONSTRAINTconstraint-nameTOnew-constraint-name|PARTITIONpartition-nameTOnew-partition-namerange-partitioning-scheme:–RANGE(partition-key)(range-partition-decl[,range-partition-decl.
.
.
])partition-key:–column-namerange-partition-decl:–partition-nameVALUESRECOMPILE以确保视图定义正确,并避免在查询该视图时出现意外结果.
ADDcolumn-definition[column-constraint]-向表添加一个新列.
表必须为空才可指定NOTNULL.
添加IDENTITY或DEFAULTAUTOINCREMENT列时,表可能包含数据.
如果列有缺省IDENTITY值,新列的所有行将用顺序值来填充.
也可为单列键添加外键约束作为其列约束.
IDENTITY/DEFAULTAUTOINCREMENT列的值唯一地标识表中的每一行.
IDENTITY/DEFAULTAUTOINCREMENT列存储在插入和更新期间自动生成的序列号.
DEFAULTAUTOINCREMENT列也称为IDENTITY列.
使用IDENTITY/DEFAULTAUTOINCREMENT时,列必须是整数数据类型之一,或精确数值类型,且SQL语句参考:语句和选项35标度为0.
有关列约束和IDENTITY/DEFAULTAUTOINCREMENT列的详细信息,请参见"CREATETABLE语句".
注意:无法将外键约束添加到用SybaseIQ版本12.
4.
3或更早版本创建的未受强制的主键上.
ALTERcolumn-namecolumn-alteration-更改列的定义.
允许进行以下修改:SETDEFAULTdefault-value-更改表中现有列的缺省值.
也可以将MODIFY子句用于此任务,但是ALTER符合ISO/ANSISQL标准,而MODIFY则不符合该标准.
修改缺省值不会更改表中的任何现有值.
DROPDEFAULT-删除表中现有列的缺省值.
也可以将MODIFY子句用于此任务,但是ALTER符合ISO/ANSISQL标准,而MODIFY则不符合该标准.
删除缺省值不会更改表中的任何现有值.
ADD-在列中添加一个命名约束或一个CHECK条件.
新的约束或条件仅在定义后应用于对表的操作.
但不会对表中现有的值进行校验来确认其是否满足新增的约束或条件.
CONSTRAINTcolumn-constraint-name-通过可选列约束名,您可以在以后修改或删除个别约束,而不必修改整个列约束.
[CONSTRAINTconstraint-name]CHECK(condition)-使用此子句在列上添加CHECK约束.
SETCOMPUTE(expression)-更改与计算列关联的表达式.
当执行语句时,重新计算列中的值,如果新表达式无效,则语句执行失败.
DROPCOMPUTE-将列从计算列更改为非计算列.
此语句不更改表中的任何现有值.
DROP分区子句-删除指定的分区.
行被删除,分区定义被删除.
您不能删除最后一个分区,因为删除最后一个分区会将分区表转变为未分区的表.
(要合并分区表,请改用UNPARTITION子句.
)例如:CREATETABLEfoo(c1INT,c2INT)PARTITIONBYRANGE(c1)(P1VALUES"配置数据库">"管理用户ID和权限">"管理登录策略".
注意:此参考指向SQLAnywhere文档.
《使用SybaseIQMultiplex》中介绍了适用于Multiplex的增强型ALTERLOGINPOLICY语法.
用户ID和口令不能:以空格、单引号或双引号开头以空格结尾包含分号如果您将PASSWORD_EXPIRY_ON_NEXT_LOGIN值设置为ON,则分配到此登录策略的所有用户的口令都将在用户下次登录时立即过期.
您可以使用ALTERUSER和LOGINPOLICY子句强制用户在下次登录时更改口令.
SQL语句40SybaseIQ标准SQL-ISO/ANSISQL语法的供应商扩展.
Sybase-不受AdaptiveServerEnterprise支持.
权限用户可以更改自己的口令.
要更改其他用户的口令,必须具有DBA或PERMSADMIN权限.
用户需要具有DBA或USERADMIN权限,才能执行ALTERUSERLOGINPOLICY、FORCEPASSWORDCHANGE或RESETLOGINPOLICY.
另请参见COMMENT语句(第61页)CREATELOGINPOLICY语句(第108页)CREATEUSER语句(第147页)DROPLOGINPOLICY语句(第175页)DROPUSER语句(第180页)GRANT语句(第202页)REVOKE语句(第270页)ALTERLOGINPOLICY语句(第19页)ALTERVIEW语句用修改后的版本替换视图定义.
语法语法1-更改视图的结构ALTERVIEW…[owner.
]view-name[(column-name…ASselect-statement…[WITHCHECKOPTION]语法2-更改视图的属性ALTERVIEW…[owner.
]view-name…{SETHIDDEN|RECOMPILE|DISABLE|ENABLE}用法AS-用途和语法与CREATEVIEW语句相同.
请参见"CREATEVIEW语句".
WITHCHECKOPTION-用途和语法与CREATEVIEW语句相同.
请参见"CREATEVIEW语句".
SQL语句参考:语句和选项41SETHIDDEN-将视图的定义进行模糊处理,并隐藏该视图(例如,在SybaseCentral中).
视图的显式引用仍有效.
警告!
SETHIDDEN操作是不可逆的.
RECOMPILE-为视图重新创建列定义.
在功能上与ENABLE子句相同,不同的是,此子句还可以用于未被禁用的视图上.
DISABLE-禁止数据库服务器使用视图.
ENABLE-启用已被禁用的视图,该操作会使数据库服务器为该视图重新创建列定义.
在启用视图之前,您必须启用该视图所依赖的所有视图.
当您变更视图时,视图的现有权限将保留,不需要重新指派.
此外,您还可以不使用ALTERVIEW语句,而分别使用DROPVIEW和CREATEVIEW来删除视图和重新创建视图.
否则,必须重新指派视图权限.
使用语法1完成视图变更之后,数据库服务器将重新编译该视图.
根据您执行更改的类型,如果存在相关视图,数据库服务器将尝试重新编译它们.
如果您执行的更改影响相关视图,则该视图可能会变为无效视图,从而需要更改相关视图的定义.

警告!
如果定义视图的SELECT语句中包含星号(*),则向基础表中添加列或从基础表中删除列时,视图中列的数目可能会变化.
视图列的名称和数据类型也会变化.

语法1-更改视图的结构.
与变更表不同,当您变更表时,您的变更可能限于各个列,而变更视图结构则要求您用新定义更换整个视图定义,因此与创建视图更相似.

有关用于定义视图结构的参数的说明,请参见"CREATEVIEW语句".
语法2-更改视图属性,例如是否隐藏视图定义.
当您使用SETHIDDEN时,您可以卸载视图并将其重新装载到其它数据库中.
使用调试程序进行调试并不显示视图定义,过程分析中也不显示视图定义.
如果需要更改隐藏视图的定义,则必须删除该视图并使用CREATEVIEW语句重新创建.
当您使用DISABLE子句时,数据库服务器无法再使用该视图来回答查询.
禁用视图类似于删除视图,不同的是,禁用视图时,视图定义仍保留于数据库中.
禁用视图还会禁用所有相关视图.
因此,DISABLE子句不仅要求对被禁用视图具有独占访问权限,而且对同时将被禁用的所有相关视图也必须具有独占访问权限.
另请参见《系统管理指南第二卷》>"使用过程和批处理">"隐藏过程、函数和视图的内容"以及《参考:构件块、表和过程》>"系统过程">"系统存储过程">"sa_dependent_views过程".
有关数据库服务器如何处理视图依赖性的详细信息,请参见"SQLAnywhereServer-SQL用法">"使用数据库对象">"使用视图">"视图依赖性".
注意:此参考指向SQLAnywhere文档.
副作用:自动提交SQL语句42SybaseIQ系统将从内存中卸载所有过程和触发器,因此引用该视图的所有过程或触发器都会反映新视图定义.
如果您经常更改视图,过程和触发器的卸载与装载会影响性能.
标准SQL-ISO/ANSISQL语法的供应商扩展.
Sybase-不受AdaptiveServerEnterprise支持.
权限必须是视图的所有者或者具有DBA权限.
另请参见CREATEVIEW语句(第151页)DROP语句(第170页)确定和修复无效的相关视图(第43页)确定和修复无效的相关视图检查并更正由于基础表发生变化而变为无效视图的任何相关视图.
在大多数情况下,如果基础表发生变化,数据库服务器会自动重新编译视图,以使视图保持有效.
但是,如果更改表的操作删除了视图定义引用的内容或对其进行了实质性更改,则相关视图将变为无效视图.
例如,如果您删除了视图定义中引用的一列,则相关视图将不再有效.
请更正视图定义并手动重新编译视图.
1.
运行sa_dependent_views以获取相关视图的列表.
2.
执行更改表的DDL操作.
服务器将自动禁用相关视图,并在DDL完成后尝试重新编译这些视图.
3.
检查sa_dependent_views列出的所有视图是否有效.
例如,执行SELECT*FROMmyview之类的简单测试.
4.
如果某个视图无效,您可能需要更改视图定义来解决该问题.
针对您所做的DDL更改检查视图定义,并进行必要的更改.
运行ALTERVIEWRECOMPILE以更正视图定义.
5.
测试更正的视图以确保其能够正常工作.
例如,执行SELECT*FROMmyview之类的简单测试.
sa_dependent_views会返回某个给定表或视图的所有相关视图的列表.
请参见《参考:构件块、表和过程》>"系统过程">"系统存储过程">"sa_dependent_views过程"和"SQLAnywhereServer-SQL参考">"系统过程">"按字母顺序排列的系统过程列表">"sa_dependent_views系统过程".
SQL语句参考:语句和选项43有关数据库服务器如何处理视图依赖性的详细信息,请参见"SQLAnywhereServer-SQL用法">"使用数据库对象">"使用视图">"视图依赖性".
注意:这些参考指向SQLAnywhere文档.
另请参见ALTERVIEW语句(第41页)BACKUP语句在一个或多个存档设备上备份SybaseIQ数据库.
语法BACKUPDATABASE[backup-option…]TOarchive_device[archive-option.
.
.
]…[WITHCOMMENTstring]参数backup-option:–{READWRITEFILESONLY|READONLYdbspace-or-file[,…]}CRC{ON|OFF}ATTENDED{ON|OFF}BLOCKFACTORinteger{FULL|INCREMENTAL|INCREMENTALSINCEFULL}VIRTUAL{DECOUPLED|ENCAPSULATED'shell_command'}WITHCOMMENTcommentdbspace-or-file:–{DBSPACESidentifier-list|FILESidentifier-list}identifier-list:–identifier[,…]archive-option:–SIZEintegerSTACKERinteger示例示例1–此UNIX示例将iqdemo数据库备份到SunSolaris平台上的磁带设备/dev/rmt/0和/dev/rmt/2中.
在Solaris上,设备名后面的字母n指定"无关闭回绕"功能.
请始终用BACKUP来指定此功能,并使用适用于您的UNIX平台SQL语句44SybaseIQ的命名约定(Windows不支持此功能).
此示例备份了自上次完全备份以来服务器上的所有更改:BACKUPDATABASEINCREMENTALSINCEFULLTO'/dev/rmt/0n'SIZE10000000TO'/dev/rmt/2n'SIZE15000000注意:大小单位为千字节(KB),但在大多数情况下,大小小于1GB是不合适的.
在此示例中,指定大小为10GB和15GB.
示例2–下面的BACKUP命令指定只读文件和数据库空间:BACKUPDATABASEREADONLYDBSPACESdsp1TO'/dev/rmt/0'BACKUPDATABASEREADONLYFILESdsp1_f1,dsp1_f2TO'bkp.
f1f2'BACKUPDATABASEREADONLYDBSPACESdsp2,dsp3READONLYFILESdsp4_f1,dsp5_f2TO'bkp.
RO'用法当您执行BACKUP命令时,IQ数据库可能会打开,以供多个读取器和写入器使用.
它充当只读用户,并依赖SybaseIQ的表级版本控制功能获得一致的数据集.
BACKUP将在开始之前隐式发出CHECKPOINT,然后备份描述数据库的catalog表(以及已添加到Catalog存储中的任何其它表).
在第一阶段,SybaseIQ不允许对数据库的元数据进行任何更改(例如,添加或删除列和表).
相应地,接下来对备份执行RESTORE最多只能恢复到初始CHECKPOINT.
BACKUP命令用于指定完全备份或增量备份.
您可以选择两种增量备份.
INCREMENTAL只备份自上次通过BACKUP备份任何类型(增量或完全)后发生更改和已提交的那些块.
INCREMENTALSINCEFULL备份自上次完全备份后已发生更改的所有块.
对于BACKUP命令而言,第一种类型的增量备份较小且速度较快,但对于RESTORE命令而言,第一种类型的增量备份的速度却较慢并且更加复杂.
而对另一种类型的增量备份来说,情况则相反.
这是因为第一种类型的增量备份通常会导致对于每个完全备份存档需要执行N组增量备份存档.
如果需要恢复,DBA必须首先RESTORE完全备份存档,然后按照适当的顺序恢复每个增量存档.
(SybaseIQ会跟踪所需的存档.
)第二种类型的增量备份要求DBA仅恢复完全备份存档和最后一个增量存档.
使用BACKUP语句的VIRTUALDECOUPLED和VIRTUALENCAPSULATED参数可支持增量虚拟备份.
您可以对表空间执行OS级复制,从而为一个或多个只读数据库空间制作虚拟备份,但Sybase建议您使用虚拟备份语句,因为它会将备份记录在IQ系统表中.
请参见《参考:构件块、表和过程》>"系统表和视图">"系统视图">"SYSIQBACKUPHISTORY系统视图"以及《参考:构件块、表和过程》>"系统表和视图">"系统视图">"SYSIQBACKUPHISTORYDETAIL系统视图".
SQL语句参考:语句和选项45READWRITEFILESONLY可以与FULL、INCREMENTAL和INCREMENTALSINCEFULL一起使用,限制仅针对数据库中的读写文件集执行备份.
读写数据库空间/文件必须是IQ数据库空间.
如果READWRITEFILESONLY与INCREMENTAL或INCREMENTALSINCEFULL备份一起使用,则备份操作不会备份自先决备份后已发生更改的只读数据库空间或dbfile上的数据.
如果INCREMENTAL或INCREMENTALSINCEFULL备份中不指定READWRITEFILESONLY,则备份操作会备份自先决备份后已发生更改的读写数据库空间与只读数据库空间上的所有数据库页.
CRC子句-除了硬件中提供的错误检测之外,还可对每个块激活32位循环冗余检查.
如果您指定此子句,则系统将在任何后续RESTORE操作过程中对针对备份计算出的数字进行检验,从而影响上述两个命令的性能.
缺省值为ON.
ATTENDED子句-仅在备份到磁带设备时适用.
如果使用ATTENDEDON(缺省值),当磁带驱动器需要干预时,系统将向发出BACKUP语句的应用程序发送一条消息.
这在某些情况下会发生,比如在需要新磁带时.
如果您指定了OFF,则BACKUP不会提示需提供新磁带.
如果需要其它磁带并且已指定了OFF,SybaseIQ会出现错误并中止BACKUP命令.
但是,由于自动栈式存储器驱动器需要时间来切换磁带,因此存在一个短暂的延迟.
BLOCKFACTOR子句-指定一次写入的块数.
其值必须大于0,否则SybaseIQ会生成错误消息.
对于UNIX系统,其缺省值为25,而对于Windows系统为15(以容纳更小的固定磁带块大小).
此子句可有效地控制用于缓冲区的内存量.
实际的内存量为此值乘以块大小再乘以用于从数据库中提取数据的线程数.
Sybase建议至少将BLOCKFACTOR设置为25.
FULL子句-指定完全备份;数据库中正在使用的所有块都将保存到存档设备.
这是缺省操作.
INCREMENTAL子句-指定增量备份;自上次执行任意类型的备份后发生更改的所有块都将保存到存档设备.
READONLYFILES不允许使用关键字INCREMENTAL.
INCREMENTALSINCEFULL子句-指定增量备份;自上次完全备份后发生更改的所有块都将保存到存档设备.
VIRTUALDECOUPLED子句-指定分离式虚拟备份.
要完成备份,您必须在分离式虚拟备份完成之后复制IQ数据库空间,然后执行非虚拟增量备份.
VIRTUALENCAPSULATED子句-指定封装式虚拟备份.
"shell-command"参数可以是字符串,也可以是包含作为封装式虚拟备份一部分执行的字符串的变量.
作为备份操作的一部分,shell命令对IQ存储执行系统级备份.
TO子句-指定要用于备份的archive_device的名称,并用单引号分隔.
archive_device是存档文件的文件名或磁带驱动器设备名.
如果使用多个存档设备,请使用单独的TO子句指定它们.
(不允许使用逗号分隔的列表.
)存档设备必须是不同的.
TO子句的数量决定了与输出设备有关的并行SybaseIQ尝试的数量.
SQL语句46SybaseIQBACKUP和RESTORE以并行方式在您指定的所有存档设备中写入或写出IQ数据.
Catalog存储以串行方式写入第一个设备.
并行度越高,备份和恢复越快.
SybaseIQ最多支持36台硬件设备用于备份.
为提高备份速度,每核心指定一或两台设备将有助于避免硬件和IO争用.
在BACKUP命令中设置SIZE参数可避免每台备份设备创建多个文件并考虑在BACKUP命令的BLOCKFACTOR子句中使用的值.
BACKUP将覆盖现有存档文件,除非您移动了旧文件或使用其它的archive_device名称或路径.
备份APIDLL实现可用于指定在打开存档设备时要传递给DLL的参数.
对于第三方实现,archive_device字符串具有以下格式:'DLLidentifier::vendor_specific_information'特定示例:'spsc::workorder=12;volname=ASD002'archive_device字符串的长度最长为1023字节.
DLLidentifier部分的长度必须为1到30字节且只能包含字母数字和下划线字符.
字符串的vendor_specific_information部分将传递给第三方实现,而不检查其内容.
在使用第三方实现时不要指定BACKUP命令的SIZE或STACKER子句,因为在字符串的vendor_specific_information部分中应该已对此信息进行编码.
注意:只有某些第三方产品才可用SybaseIQ通过使用此语法进行认证.
有关其它用法说明或限制,请参见《发行公告》.
在使用任意第三方产品以这种方式备份SybaseIQ数据库之前,请确保该产品已获得认证.
请参见《发行公告》,或参见位于http://www.
sybase.
com/support/techdocs/的"技术文档"中SybaseIQ产品的Sybase认证报告.
对于备份API的Sybase实现,您只需要指定磁带设备名或文件名.
对于磁盘设备,您还应指定SIZE值,否则SybaseIQ将假定所创建的每个磁盘文件在UNIX中不超过2GB,在Windows中不超过1.
5GB.
下例是为某些UNIX系统指定了磁带设备的SybaseAPIDLL的存档设备:'/dev/rmt/0'SIZE子句-指定每个输出设备的磁带或文件的最大容量(某些平台不能可靠地检测磁带结束标记).
在相应设备上使用的卷的长度不应小于此值.
此值适用于磁带和磁盘文件,但不适用于第三方设备.
大小单位为千字节(KB),但一般来说,小于1GB是不合适的.
例如,对于3.
5GB的磁带,指定3500000.
缺省值取决于平台和介质.
备份文件的最终大小是不确定的,因为备份是以大数据块为单位写入的.
SIZE参数是针对各输出设备而言.
SIZE不限制每个设备的字节数,SIZE限制文件大小.
每个输出设备可以具有不同的SIZE参数.
在备份过程中,当写入给定设备的信息量达到SIZE参数指定的值时,BACKUP将执行下列操作之一:SQL语句参考:语句和选项47如果设备属于文件系统设备,则BACKUP将关闭当前文件并创建另一个同名文件,并将按升序排列的下一个数附加到文件名,例如,bkup1.
dat1.
1、bkup1.
dat1.
2、bkup1.
dat1.
3.
如果设备属于磁带单元,则BACKUP将关闭当前磁带,您需要装入另一个磁带.
您有责任在需要时装入其它磁带,或者确保磁盘具有足够的空间来容纳备份.

指定多个设备时,BACKUP会将信息分配到所有设备.
表2.
BACKUP缺省大小平台磁带的缺省大小磁盘的缺省大小UNIX无2GBWindows1.
5GBSIZE必须是64的倍数.
其它值则向下舍入为64的倍数.
1.
5GBSTACKER子句-指定自动装载设备,并指定随设备一同装载的磁带数.
此值在栈式存储器中不表示磁带位置,可以为零.
当ATTENDED为OFF而STACKER为ON时,SybaseIQ将等待预定的时间,然后允许自动装载下一个磁带.
随SIZE子句提供的磁带数用于确定是否具有足够的空间来存储备份数据.
请不要对第三方介质管理设备使用此子句.
WITHCOMMENT子句-指定存档文件和备份历史文件中记录的可选注释.
最大长度为32KB.
如果您未指定值,将存储NULL字符串.
有关BACKUP的其它问题包括:BACKUP不支持将原始设备用作存档设备.
Windows系统仅支持对磁带设备执行固定长度的I/O操作(有关此限制的详细信息,请参见《安装和配置指南》).
虽然Windows支持磁带分区,但是SybaseIQ不会使用磁带分区功能,因此,请不要为BACKUP使用其它应用程序设置磁带格式.
Windows的磁带设备具有较简单的命名策略,其中第一个磁带设备为\\.
\tape0,第二个磁带设备为\\.
\tape1,依此类推.
警告!
对于备份(以及对于大多数其它情况),当反斜杠位于n、x或其它反斜杠之前时,SybaseIQ会将字符串中的前导反斜杠视为转义字符.
因此,当指定备份磁带设备时,必须根据Windows命名约定将每个反斜杠变为双反斜杠.
例如,将您要备份到的第一个Windows磁带设备表示为"\\\\.
\\tape0",第二个表示为"\\\\.
\\tape1",依此类推.
如果您忽略额外的反斜杠,或错误拼写了磁带设备的名称,并在您的系统中写入了一个无效磁带设备的名称,则SybaseIQ会将此名称解释为磁盘文件名称.
SybaseIQ在使用磁带之前不会回绕磁带.
必须确保用于BACKUP或RESTORE的磁带位于正确的起点,然后才能将其放置在磁带设备中.
SybaseIQ在磁带回绕设备上使用磁带之后将回绕磁带.
SQL语句48SybaseIQ在BACKUP和RESTORE操作过程中,如果SybaseIQ无法打开存档设备(例如,当它需要装载的介质时)并且ATTENDED参数为ON,它会等待十秒钟并重试.
它将无限期地继续这些尝试,直至成功或通过Ctrl+C终止操作.
如果您按Ctrl+C,BACKUP将失败并使数据库返回到开始备份之前所处的状态.
如果在诸如RAID等设备上使用磁盘条带化,则分条设备将被视为单个设备.
如果您要恢复SQLAnywhere数据库,请参见"SQLAnywhereServer-数据库管理">"维护数据库">"备份和数据恢复"以了解其它选项.
另请参见《系统管理指南第一卷》>"数据备份、恢复和存档".
副作用:自动提交标准SQL-ISO/ANSISQL语法的供应商扩展.
Sybase—AdaptiveServerEnterprise不支持.
权限必须是数据库的所有者或者具有DBA权限.
没有DBA权限的用户必须具有OPERATOR权限.
另请参见RESTORE语句(第262页)BEGIN……END语句将SQL语句组合到一起.
语法[statement-label:]…BEGIN[[NOT]ATOMIC]…[local-declaration;…]…statement-list…[EXCEPTION[exception-case…]]…END[statement-label]参数local-declaration:–{variable-declaration|cursor-declaration|exception-declaration|temporary-table-declaration}SQL语句参考:语句和选项49variable-declaration:–DECLAREvariable-name[,…]data-type[{=|DEFAULT}initial-value]initial-value:–special-value|string|[-]number|(constant-expression)|built-in-function(constant-expression)|NULLspecial-value:–CURRENT{DATABASE|DATE|PUBLISHER|TIME|TIMESTAMP|USER|UTCTIMESTAMP}|USER示例示例1–过程的主体是复合语句:CREATEPROCEDURETopCustomer(OUTTopCompanyCHAR(35),OUTTopValueINT)BEGINDECLAREerr_notfoundEXCEPTIONFORSQLSTATE'02000';DECLAREcurThisCustCURSORFORSELECTCompanyName,CAST(sum(SalesOrderItems.
Quantity*Products.
UnitPrice)ASINTEGER)VALUEFROMCustomersLEFTOUTERJOINSalesordersLEFTOUTERJOINSalesOrderItemsLEFTOUTERJOINProductsGROUPBYCompanyName;DECLAREThisValueINT;DECLAREThisCompanyCHAR(35);SETTopValue=0;OPENcurThisCust;CustomerLoop:LOOPFETCHNEXTcurThisCustINTOThisCompany,ThisValue;IFSQLSTATE=err_notfoundTHENLEAVECustomerLoop;ENDIF;IFThisValue>TopValueTHENSETTopValue=ThisValue;SETTopCompany=ThisCompany;ENDIF;ENDLOOPCustomerLoop;CLOSEcurThisCust;END用法过程或触发器的主体是复合语句.
过程或触发器内的控制语句也可以使用复合语句.

复合语句允许一个或多个SQL语句组合在一起,按一个单元处理.
复合语句以BEGIN开头,以END结尾.
紧接在BEGIN后,复合语句可以有仅存在于复合语句中的本地SQL语句50SybaseIQ声明.
复合语句可以有变量、游标、临时表或异常的本地声明.
本地声明可由该复合语句中的任何语句引用,或者可由该复合语句内嵌套的任何复合语句中的任何语句引用.
本地声明对于从复合语句中调用的其它过程不可见.
如果指定结尾statement-label,它必须与开头statement-label匹配.
可以使用LEAVE语句在复合语句之后的第一个语句处继续执行.
作为过程主体的复合语句具有与过程或触发器同名的隐式标签.
原子语句是完全执行或根本不执行的语句.
例如,更新数千行的UPDATE语句在更新许多行后可能会遇到错误.
如果语句未完成,则所有更改可能会恢复回其原始状态.
同样,如果指定BEGIN语句为原子语句,则此语句要么完全执行,要么根本不执行.
如果指定了initial-value,则该变量会设置为该值.
如果未指定initial-value,则该变量在SET语句分配另一个值之前包含的是空值.
如果您指定了initial-value,则该数据类型必须与data-type定义的类型相匹配.
有关复合语句和异常处理的完整说明,请参见《系统管理指南第二卷》>"使用过程和批处理".
标准SQL-ISO/ANSISQL语法的供应商扩展.
Sybase-受AdaptiveServerEnterprise支持.
这并不意味着支持复合语句中的所有语句.
在Transact-SQL中不要求使用BEGIN和END关键字.
BEGIN和END可用在Transact-SQL中以将一组语句组成一个复合语句,因此,诸如IF…ELSE之类的仅影响单个SQL语句的控制语句会影响整个组的性能.
ATOMIC关键字不受AdaptiveServerEnterprise的支持.
在Transact-SQL中,DECLARE语句不必紧跟在BEGIN之后,并且声明的游标或变量在复合语句的持续时间内存在.
为了兼容,应该在复合语句的开头声明变量.

权限无另请参见DECLARELOCALTEMPORARYTABLE语句(第161页)DECLARECURSOR语句[ESQL][SP](第155页)LEAVE语句(第221页)RESIGNAL语句(第261页)SIGNAL语句(第295页)SQL语句参考:语句和选项51BEGINPARALLELIQ……ENDPARALLELIQ语句将CREATEINDEX语句组合在一起,以便同时执行.
语法.
.
.
BEGINPARALLELIQstatement-list.
.
.
ENDPARALLELIQ参数statement-list–CREATEINDEX语句的列表示例示例1–下面的语句将自动执行.
如果其中有一个命令失败,则整个语句将回退:BEGINPARALLELIQCREATEHGINDEXc1_HGontable1(col1);CREATEHNGINDEXc12_HNGontable1(col12);CREATELFINDEXc1_LFontable1(col1);CREATEHNGINDEXc2_HNGontable1(col2);ENDPARALLELIQ用法BEGINPARALLELIQ…ENDPARALLELIQ语句允许您执行一组CREATEINDEX语句,就像它们是一个DDL语句似的,因而可同时对多个IQ表创建索引.
执行此语句时,您和其他用户将无法发出其它DDL语句.
可以在语句列表中指定多个表.
粒度处于列级.
换句话说,将依次执行同一列的多个索引.
注意:此语句不支持TEXT索引.
副作用:自动提交标准SQL-ISO/ANSISQL语法的供应商扩展.
Sybase-不受AdaptiveServerEnterprise支持.
有关对该语句中所包含语句的支持,请参见"CREATEINDEX语句".
SQL语句52SybaseIQ权限无另请参见CREATEINDEX语句(第97页)BEGINTRANSACTION语句[T-SQL]使用此语句可开始用户定义的事务.
注意:BEGINTRANSACTION是T-SQL构造,必须仅包含有效的T-SQL命令.
不能将T-SQL和非T-SQL命令混合在一起.
语法BEGINTRAN[SACTION][transaction-name]示例示例1–下面的批处理报告@@trancount的连续值:0、1、2、1、0.
这些值显示在服务器窗口上:PRINT@@trancountBEGINTRANSACTIONPRINT@@trancountBEGINTRANSACTIONPRINT@@trancountCOMMITTRANSACTIONPRINT@@trancountCOMMITTRANSACTIONPRINT@@trancount@@trancount的值只可用于跟踪已发出的显式BEGINTRANSACTION语句的数量.
当AdaptiveServerEnterprise隐式启动事务时,@@trancount变量设置为1.
当隐式启动事务时,SybaseIQ不会将@@trancount值设置为1.
因此,在任何BEGINTRANSACTION语句前(即使存在当前事务),SybaseIQ@@trancount变量的值均为0,而在AdaptiveServerEnterprise(在链接模式下)中,该变量的值为1.
对于由BEGINTRANSACTION语句启动的事务,执行第一个BEGINTRANSACTION语句后,在SybaseIQ和AdaptiveServerEnterprise中,@@trancount的值均为1.
如果事务由其它语句隐式启动,然后执行了BEGINTRANSACTION语句,则执行BEGINTRANSACTION语句后,在SybaseIQ和AdaptiveServerEnterprise中,@@trancount的值均为2.
SQL语句参考:语句和选项53用法可选参数transaction-name是分配给该事务的名称.
它必须是一个有效的标识符.
仅在最外面的一对嵌套的BEGIN/COMMIT或BEGIN/ROLLBACK语句中使用事务名称.
在事务内部执行BEGINTRANSACTION语句时,该语句会将事务嵌套级别增加一级.
通过COMMIT语句可减少嵌套级别.
当事务被嵌套时,只有最外层的COMMIT可使数据库更改永久生效.
AdaptiveServerEnterprise和SybaseIQ均有两种事务模式.
缺省的AdaptiveServerEnterprise事务模式称为非链接模式,它单独提交每个语句,除非执行显式BEGINTRANSACTION语句启动事务.
相反,与ISOSQL/2003兼容的链式模式仅当执行显式COMMIT时或执行能完成自动提交的语句(如数据定义语句)时才提交事务.
有关BEGINTRANSACTION语句[T-SQL]的详细信息,请参见"SQLAnywhereServer-SQL参考">"SQL语句">"BEGINTRANSACTION语句[T-SQL]".
注意:此参考指向SQLAnywhere文档.
通过设置链式数据库选项可以控制模式.
在SybaseIQ中,ODBC和嵌入式SQL连接的缺省设置为On,在这种情况下,SybaseIQ将在链式模式下运行.
(ODBC用户还应该检查AutoCommitODBC设置.
)TDS连接的缺省值是Off.
在非链式模式中,事务是在任何数据检索或修改语句之前隐式启动的.
这些语句包括:DELETE、INSERT、OPEN、FETCH、SELECT和UPDATE.
但仍必须用COMMIT或ROLLBACK语句显式结束事务.
不能在事务中变更链式选项.
注意:当调用存储过程时,应该确保它在要求的事务模式下正确运行.
当前嵌套级别保存在全局变量@@trancount中.
在执行第一个BEGINTRANSACTION语句前,@@trancount变量的值为0,而仅当@@trancount等于1时执行COMMIT才会对数据库进行永久更改.
没有事务名称或保存点名称的ROLLBACK语句总是将语句回退到最外层的BEGINTRANSACTION(显式或隐式)语句,并且取消整个事务.
标准SQL-ISO/ANSISQL语法的供应商扩展.
Sybase-受AdaptiveServerEnterprise支持.
权限无SQL语句54SybaseIQ另请参见COMMIT语句(第63页)ROLLBACKTRANSACTION语句[T-SQL](第274页)SAVETRANSACTION语句[T-SQL](第276页)ISOLATION_LEVEL选项(第386页)CALL语句调用过程.
语法语法1[variable=]CALLprocedure-name([expression语法2[variable=]CALLprocedure-name([parameter-name=expression]示例示例1–调用sp_customer_list过程.
此过程没有参数,并返回结果集:CALLsp_customer_list()示例2–此dbisql示例创建一个返回客户(提供了该客户的ID)所下的订单数的过程,创建一个保存结果的变量,调用此过程并显示结果:CREATEPROCEDUREOrderCount(INCustomerIDINT,OUTOrdersINT)BEGINSELECTCOUNT("DBA".
SalesOrders.
ID)INTOOrdersFROM"DBA".
CustomersKEYLEFTOUTERJOIN"DBA".
SalesOrdersWHERE"DBA".
Customers.
ID=CustomerID;ENDgo--CreateavariabletoholdtheresultCREATEVARIABLEOrdersINTgo--Calltheprocedure,FORcustomer101CALLOrderCount(101,Orders)go--DisplaytheresultSELECTOrdersFROMDUMMYgoSQL语句参考:语句和选项55用法CALL调用之前使用CREATEPROCEDURE语句创建的过程.
过程完成后,将复制回任何INOUT或OUT参数值.
您可以通过位置或使用关键字格式指定参数列表.
通过位置,参数与过程的参数列表中相对应的参数匹配.
通过关键字,参数与命名参数匹配.
在CREATEPROCEDURE语句中,可以为过程参数分配缺省值,缺少的参数被分配缺省值.
或者,如果未设置缺省值,则分配空值.
在过程内部,当过程返回结果集时,CALL可以用在DECLARE语句中.
注意:不能引用CALLSQL语句中的表UDF.
使用RETURN语句,过程可以返回整数值(比方说作为状态指示符).
使用等号作为赋值运算符,可以将该返回值保存在变量中:CREATEVARIABLEreturnvalINT;returnval=CALLproc_integer(arg1=val1,.
.
.
)注意:不建议使用此语句来调用函数.
要调用函数,请使用赋值语句来调用函数,然后将其结果赋值给变量.
例如:DECLAREvarnameINT;SETvarname=test();标准SQL-ISO/ANSISQL语法的供应商扩展.
Sybase-不受AdaptiveServerEnterprise支持.
有关支持的一种替代方法,请参见"EXECUTE语句[ESQL]".
权限必须是过程的所有者、具有过程的EXECUTE权限或具有DBA权限.
另请参见CREATEPROCEDURE语句(第112页)EXECUTE语句[ESQL](第182页)GRANT语句(第202页)SQL语句56SybaseIQCASE语句根据多种情况选择执行路径.
语法CASEvalue-expression…WHEN[constant|NULL]THENstatement-list……[WHEN[constant|NULL]THENstatement-list]……ELSEstatement-list…END示例示例1–此过程使用CASE语句,将演示数据库的Products表中列出的产品分为衬衣、帽子、短裤、未知几大类:CREATEPROCEDUREProductType(INproduct_idINT,OUTtypeCHAR(10))BEGINDECLAREprod_nameCHAR(20);SELECTnameINTOprod_nameFROM"GROUPO".
"Products"WHEREID=product_id;CASEprod_nameWHEN'TeeShirt'THENSETtype='Shirt'WHEN'Sweatshirt'THENSETtype='Shirt'WHEN'BaseballCap'THENSETtype='Hat'WHEN'Visor'THENSETtype='Hat'WHEN'Shorts'THENSETtype='Shorts'ELSESETtype='UNKNOWN'ENDCASE;END用法CASE语句是控制语句,它允许您根据表达式的值选择要执行的SQL语句列表.
如果value-expression的值存在匹配的WHEN子句,则执行WHEN子句中的statement-list.
如果不存在合适的WHEN子句,但存在ELSE子句,则执行ELSE子句中的statement-list.
执行过程从END之后的第一个语句开始继续.
注意:ANSI标准允许有两种形式的CASE语句.
虽然SybaseIQ允许有两种形式,但是当CASE位于谓词中时,为获得最佳性能,您必须使用此处显示的形式.
SQL语句参考:语句和选项57如果需要其它形式(也称为ANSI语法)以便与SQLAnywhere兼容,请参见"SQLAnywhereServer-SQL参考">"SQL语句">"CASE语句"中的CASE语句语法2.
注意:不要混淆CASE语句与CASE表达式的语法.
有关CASE表达式的信息,请参见《参考:构件块、表和过程》>"SQL语言元素">"表达式".
标准SQL-ISO/ANSISQL语法的供应商扩展.
Sybase—AdaptiveServerEnterprise不支持.
权限无另请参见BEGIN……END语句(第49页)CHECKPOINT语句对数据库执行检查点操作.
语法CHECKPOINT用法CHECKPOINT强制数据库服务器执行检查点操作.
数据库服务器也会根据内部算法自动执行检查点操作.
通常,应用程序无需发出CHECKPOINT.
有关检查点操作的完整说明,请参见《系统管理指南第一卷》>"数据备份、恢复和存档".
标准SQL-ISO/ANSISQL语法的供应商扩展.
Sybase-受AdaptiveServerEnterprise支持.
权限必须具有DBA或OPERATOR权限才能对数据库执行检查点操作.
SQL语句58SybaseIQCLEAR语句[InteractiveSQL]关闭InteractiveSQL(dbisql)中任何打开的结果集.
语法CLEAR用法关闭任何打开的结果集并保留"SQLStatements"窗格的内容不变.
副作用:CLEAR语句会关闭与清除的数据关联的游标.
标准SQL-ISO/ANSISQL语法的供应商扩展.
Sybase-不适用.
权限无另请参见EXIT语句[InteractiveSQL](第187页)CLOSE语句[ESQL][SP]关闭游标.
语法CLOSEcursor-name参数cursor-name:–{identifier|host-variable}示例示例1–关闭嵌入式SQL中的游标:SQL语句参考:语句和选项59EXECSQLCLOSEemployee_cursor;EXECSQLCLOSE:cursor_var;示例2–使用游标:CREATEPROCEDURETopCustomer(OUTTopCompanyCHAR(35),OUTTopValueINT)BEGINDECLAREerr_notfoundEXCEPTIONFORSQLSTATE'02000';DECLAREcurThisCustCURSORFORSELECTCompanyName,CAST(sum(SalesOrderItems.
Quantity*Products.
UnitPrice)ASINTEGER)VALUEFROMCustomersLEFTOUTERJOINSalesOrdersLEFTOUTERJOINSalesOrderItemsLEFTOUTERJOINProductsGROUPBYCompanyName;DECLAREThisValueINT;DECLAREThisCompanyCHAR(35);SETTopValue=0;OPENcurThisCust;CustomerLoop:LOOPFETCHNEXTcurThisCustINTOThisCompany,ThisValue;IFSQLSTATE=err_notfoundTHENLEAVECustomerLoop;ENDIF;IFThisValue>TopValueTHENSETTopValue=ThisValue;SETTopCompany=ThisCompany;ENDIF;ENDLOOPCustomerLoop;CLOSEcurThisCust;END用法此语句关闭指定的游标.
标准SQL-ISO/ANSISQL语法的供应商扩展.
Sybase-受AdaptiveServerEnterprise支持.
权限游标在此前必须已打开.
另请参见DECLARECURSOR语句[ESQL][SP](第155页)SQL语句60SybaseIQOPEN语句[ESQL][SP](第245页)PREPARE语句[ESQL](第251页)COMMENT语句在系统表中存储关于数据库对象的注释.
语法COMMENTON{COLUMN[owner.
]table-name.
column-name|DBSPACEdbspace-name|EVENTevent-name|EXTERNALENVIRONMENTenvironment-name|EXTERNALOBJECTobject-name|FOREIGNKEY[owner.
]table-name.
role-name|INDEX[[owner.
]table.
]index-name|INTEGRATEDLOGINintegrated-login-id|JAVACLASSjava-class-name|JAVAJARjava-jar-name|KERBEROSLOGIN"client-Kerberos-principal"|LOGINPOLICYpolicy-name|MATERIALIZEDVIEW[owner.
]materialized-view-name|PROCEDURE[owner.
]table-name|SERVICEweb-service-name|TABLE[owner.
]table-name|TRIGGER[[owner.
]table-name.
]trigger-name|USERuserid|VIEW[owner.
]view-name}IScomment参数comment:–{string|NULL}environment-name:–JAVA|PERL|PHP|CLR|C_ESQL32|C_ESQL64|C_ODBC32|C_ODBC64示例示例1–向Employees表添加注释:COMMENTONTABLEEmployeesIS"Employeeinformation"示例2–从Employees表中删除注释:COMMENTONTABLEEmployeesISNULLSQL语句参考:语句和选项61用法COMMENT语句可用于为数据库中的对象设置注释.
COMMENT语句更新ISYSREMARK系统表中的注释.
通过将注释设置为NULL可以删除注释.
对于某个索引或触发器上的注释,注释所有者即是为其定义该索引或触发器的表的所有者.
COMMENTONDBSPACE、COMMENTONJAVAJAR和COMMENTONJAVACLASS语句可用于在SYS.
ISYSREMARK系统表中设置Remarks列.
通过将注释设置为NULL可删除注释.
无法为本地临时表添加注释.
注意:仅IQCatalog存储中的SQLAnywhere表支持物化视图.
标准SQL-ISO/ANSISQL语法的供应商扩展.
Sybase—AdaptiveServerEnterprise不支持.
权限必须是要注释的数据库对象的所有者,或者必须有DBA权限.
(必须具有DBA或SPACEADMIN权限才能发出带有DBSPACE子句的语句.
)COMMENTONLOGICALSERVER语句用户定义的逻辑服务器上的注释.
语法COMMENTONLOGICALSERVERlogical-server-nameIS'comment'示例示例–以下示例创建有关用户定义的逻辑服务器ls1的注释.
COMMENTONLOGICALSERVERls1IS'ls1:PrimaryLogicalServer';用法仅适用于Multiplex.
权限必须具有DBA或MPXADMIN权限.
SQL语句62SybaseIQCOMMIT语句使数据库更改永久有效,或终止用户定义的事务.
语法语法1COMMIT[WORK]语法2COMMITTRAN[SACTION][transaction-name]示例示例1–提交当前事务:COMMIT示例2–下面的Transact-SQL批处理报告@@trancount的连续值:0、1、2、1、0:PRINT@@trancountBEGINTRANSACTIONPRINT@@trancountBEGINTRANSACTIONPRINT@@trancountCOMMITTRANSACTIONPRINT@@trancountCOMMITTRANSACTIONPRINT@@trancountgo用法语法1-COMMIT语句将结束事务,并使在该事务进行期间所做的所有更改在数据库中均永久有效.
数据定义语句自动执行提交.
有关信息,请参见每个SQL语句的"副作用"列表.
如果数据库服务器检测到任何无效的外键,COMMIT将失败.
这产生的结果是:不可能通过任何无效外键结束事务.
通常,在每项数据处理操作中会检查外键的完整性.

但是,如果数据库选项WAIT_FOR_COMMIT设置为ON,或者使用CHECKONCOMMIT子句定义了具体的外键,则数据库服务器会将完整性检查推迟到执行COMMIT语句之后.
语法2-可以成对地使用BEGINTRANSACTION和COMMITTRANSACTION语句来构造嵌套事务.
嵌套事务类似于保存点.
当在一组嵌套事务的最外层执行时,此语句使数据库更改永久有效.
在事务内部执行时,COMMITTRANSACTION会将事务的嵌套级别降低一级.
当事务被嵌套时,只有最外层的COMMIT可使数据库更改永久生效.
SQL语句参考:语句和选项63可选参数transaction-name是分配给该事务的名称.
它必须是一个有效的标识符.
仅在最外面的一对嵌套的BEGIN/COMMIT或BEGIN/ROLLBACK语句中使用事务名称.
可以使用一组选项来控制COMMIT语句的行为细节.
请参见"COOPERATIVE_COMMIT_TIMEOUT选项"、"COOPERATIVE_COMMITS选项"、"DELAYED_COMMITS选项"和"DELAYED_COMMIT_TIMEOUT选项".
可以使用Commit连接属性返回当前连接的提交数.
副作用:关闭打开为WITHHOLD的游标之外的所有游标.
删除此连接上声明的临时表的所有行,除非这些表是用ONCOMMITPRESERVEROWS声明的.
标准SQL-符合ISO/ANSISQL标准.
Sybase-受AdaptiveServerEnterprise支持.
语法2是ISO/ANSISQL语法的Transact-SQL扩展.
权限必须连接到数据库.
另请参见BEGINTRANSACTION语句[T-SQL](第53页)CONNECT语句[ESQL][InteractiveSQL](第65页)DISCONNECT语句[InteractiveSQL](第169页)ROLLBACK语句(第272页)SAVEPOINT语句(第275页)SETCONNECTION语句[ESQL][InteractiveSQL](第289页)COOPERATIVE_COMMIT_TIMEOUT选项(第353页)COOPERATIVE_COMMITS选项(第353页)DELAYED_COMMITS选项(第366页)DELAYED_COMMIT_TIMEOUT选项(第365页)CONFIGURE语句[InteractiveSQL]激活InteractiveSQL(dbisql)配置窗口.
语法CONFIGURESQL语句64SybaseIQ用法dbisql配置窗口显示所有dbisql选项的当前设置.
它不显示数据库选项,也不允许修改数据库选项.
如果选择"永久",这些选项将被写入数据库的SYSOPTION表中,并且数据库服务器将自动执行COMMIT.
如果您不选择"永久",而单击"确定",则这些选项只是暂时设置的,它们仅在当前数据库连接时保持有效.
标准SQL-ISO/ANSISQL语法的供应商扩展.
Sybase-不受AdaptiveServerEnterprise支持.
权限无另请参见SETOPTION语句(第291页)CONNECT语句[ESQL][InteractiveSQL]建立与数据库的连接.
语法语法1CONNECT…[TOengine-name]…[DATABASEdatabase-name]…[ASconnection-name]…[USER]userid[IDENTIFIEDBY]语法2CONNECTUSINGconnect-string参数engine-name:–标识符、字符串或宿主变量database-name:–标识符、字符串或宿主变量connection-name:–标识符、字符串或宿主变量userid:–标识符、字符串或宿主变量password:–标识符、字符串或宿主变量SQL语句参考:语句和选项65connect-string:–一个有效的连接字符串或宿主变量示例示例1–嵌入式SQL中的CONNECT用法:EXECSQLCONNECTAS:conn_nameUSER:useridIDENTIFIEDBY:password;EXECSQLCONNECTUSER"dba"IDENTIFIEDBY"sql";示例2–dbisql中的CONNECT用法:通过dbisql连接到数据库.
显示的提示要求输入用户ID和口令:CONNECT以DBA身份通过dbisql连接到缺省数据库.
显示口令提示:CONNECTUSER"DBA"以DBA身份通过dbisql连接到演示数据库:CONNECTTO_iqdemoUSER"DBA"IDENTIFIEDBYsql其中_iqdemo是引擎名称.
使用连接字符串通过dbisql连接到演示数据库:CONNECTUSING'UID=DBA;PWD=sql;DBN=iqdemo'用法CONNECT语句建立与数据库的连接,该数据库通过在engine-name所标识的服务器上运行的database-name来标识.
嵌入式SQL行为-在嵌入式SQL中,如果未指定engine-name,则系统将采用缺省的本地数据库服务器(启动的第一个数据库服务器).
如果未指定database-name,则系统将采用给定服务器上的第一个数据库.
WHENEVER语句、SETSQLCA和一些DECLARE语句不会生成代码,因此它们在源文件中可以出现在CONNECT语句之前.
否则,在成功执行CONNECT语句之前,不允许执行任何语句.
用户ID和口令用于对所有动态SQL语句执行权限检查.
缺省情况下,口令区分大小写;用户ID不区分大小写.
有关连接算法的详细说明,请参见《系统管理指南:第一卷>"SybaseIQ连接">"SybaseIQ建立连接的方式".
DBISQL行为-如果在CONNECT语句中未指定任何数据库或服务器,dbisql将保持与当前数据库(而不是与缺省的服务器和数据库)的连接.
如果指定了数据库名称但SQL语句66SybaseIQ未指定服务器名,dbisql会尝试连接到当前服务器上的指定数据库.
必须指定-n数据库开关中定义的数据库名称,而不是数据库文件名.
如果指定了服务器名但未指定数据库名称,dbisql会连接到指定服务器上的缺省数据库.
例如,如果与数据库连接时执行以下批处理语句,则将在同一个数据库中创建两个表.
CREATETABLEt1(c1int);CONNECTDBAIDENTIFIEDBYsql;CREATETABLEt2(c1int);在成功执行CONNECT语句之前,不允许执行其它数据库语句.
用户ID和口令用于对SQL语句执行权限检查.
如果未指定口令或用户ID和口令,系统将提示用户键入缺少的信息.
缺省情况下,口令区分大小写;用户ID不区分大小写.
多个连接通过当前连接的概念进行管理.
在成功执行连接语句后,新连接将变成当前连接.
若要切换到其它连接,请使用SETCONNECTION.
执行CONNECT语句时,系统不会关闭现有连接(如果有).
使用DISCONNECT可以删除连接.
静态SQL语句使用通过SQLPP语句行上的-l选项指定的用户ID和口令.
如果没有给出-l选项,则CONNECT语句的用户ID和口令也将用于静态SQL语句.
不使用口令进行连接-如果使用DBA权限连接到用户ID,则无需指定口令即可以连接到其它用户ID.
(dbtran的输出要求使用此功能.
)例如,如果您将以DBA身份通过InteractiveSQL连接到数据库,则可以使用以下语句在不提供口令的情况下连接到数据库:CONNECTother_user_id在嵌入式SQL中,可以在不输入口令的情况下进行连接,方法是对口令使用宿主变量,并将该宿主变量的值设置成空值指针.
AS子句-通过指定AS子句可对连接进行命名(可选).
这允许建立到同一个数据库的多个连接,或者建立到同一个或不同的多个数据库服务器的多个连接,所有连接都是同时发生的.
每个连接均有自己的关联事务.
事务之间有时甚至会发生锁定冲突.
例如,当试图从两个不同的连接修改同一数据库中的同一记录时,就会出现这种情况.
语法2-connect-string是格式为keyword=value的参数设置的列表,必须用单引号引起来.
标准SQL-ISO/ANSISQL语法的供应商扩展.
Sybase-OpenClient嵌入式SQL支持CONNECT语句的另一种语法.
权限无SQL语句参考:语句和选项67另请参见DISCONNECT语句[InteractiveSQL](第169页)GRANT语句(第202页)SETCONNECTION语句[ESQL][InteractiveSQL](第289页)CREATEDATABASE语句创建由多个操作系统文件组成的数据库.
语法CREATEDATABASEdb-name…[[TRANSACTION]{LOGON[log-file-name][MIRRORmirror-file-name]}]…[CASE{RESPECT|IGNORE}]…[PAGESIZEpage-size]…[COLLATIONcollation-label[(collation-tailoring-string)]]…[ENCRYPTED[TABLE]{algorithm-key-spec|OFF}]…{…[BLANKPADDINGON]…[JCONNECT{ON|OFF}]…[IQPATHiq-file-name]…[IQSIZEiq-file-size]…[IQPAGESIZEiq-page-size]…[BLOCKSIZEblock-size]…[IQRESERVEsizeMB]…[TEMPORARYRESERVEsizeMB]…[MESSAGEPATHmessage-file-name]…[TEMPORARYPATHtemp-file-name]…[TEMPORARYSIZEtemp-db-size]…[DBAUSERuserid]…[DBAPASSWORDpassword]参数db-name|log-file-name|mirror-file-name|iq-file-name|message-file-name|temp-file-name:–'file-name'page-size:–{4096|8192|16384|32768}iq-page-size:–{65536|131072|262144|524288}block-size:–{4096|8192|16384|32768}collation-label:–stringcollation-tailoring-string:–keyword=valuealgorithm-key-spec:–ON|[ON]KEYkey[ALGORITHMAES-algorithm]|[ON]ALGORITHMAES-algorithmKEYkey|[ON]ALGORITHM'SIMPLE'AES-algorithm:–'AES'|'AES256'|'AES_FIPS'|'AES256_FIPS'key:–quotedstringSQL语句68SybaseIQ示例示例1–以下Windows示例创建了一个名为mydb的SybaseIQ数据库,其对应的mydb.
db、mydb.
iq、mydb.
iqtmp和mydb.
iqmsg文件位于C:\s1\data目录中:CREATEDATABASE'C:\\s1\\data\\mydb'BLANKPADDINGONIQPATH'C:\\s1\\data'IQSIZE2000IQPAGESIZE65536示例2–以下UNIX命令将创建一个带有用于IQPATH和TEMPORARYPATH的原始设备的SybaseIQ数据库.
将应用大小为128KB的缺省IQ页大小.
CREATEDATABASE'/s1/data/bigdb'IQPATH'/dev/md/rdsk/bigdb'MESSAGEPATH'/s1/data/bigdb.
iqmsg'TEMPORARYPATH'/dev/md/rdsk/bigtmp'示例3–以下Windows命令将创建一个带有用于IQPATH的原始设备的SybaseIQ数据库.
请注意,原始设备名中使用的两个反斜杠(Windows要求):CREATEDATABASE'company'IQPATH'\\\\.
\\E:'JCONNECTOFFIQSIZE40示例4–以下UNIX示例将使用AES加密算法和密钥"is!
seCret"创建强加密SybaseIQ数据库.
CREATEDATABASE'marvin.
db'BLANKPADDINGONCASERESPECTCOLLATION'ISO_BINENG'IQPATH'/filesystem/marvin.
main1'IQSIZE6400IQPAGESIZE262144TEMPORARYPATH'/filesystem/marvin.
temp1'TEMPORARYSIZE3200ENCRYPTEDONKEY'is!
seCret'ALGORITHM'AES'用法用提供的名称和属性创建IQ数据库.
必须使用IQPATH子句才能创建SybaseIQ数据库;否则,可创建标准的SQLAnywhere数据库.
如果省略IQPATH选项,则指定以下任一选项将产生错误:IQSIZE、IQPAGESIZE、BLOCKSIZE、MESSAGEPATH、TEMPORARYPATH和TEMPORARYSIZE.
当SybaseIQ创建IQ数据库时,将自动生成四个数据库文件以存储构成IQ数据库的不同类型的数据.
每个文件都对应一个dbspace,即SybaseIQ用来标识数据库文件的逻辑名.
这些文件如下:db-name.
db为保存目录dbspaceSYSTEM的文件.
该文件包含用来描述数据库及任何添加的标准SQLAnywhere数据库对象的系统表和存储过程.
如果您没有添SQL语句参考:语句和选项69加.
db扩展名,SybaseIQ将添加它.
此初始dbspace包含Catalog存储,并且您可以稍后添加dbspace以增加其大小.
无法在原始分区上创建该文件.
db-name.
iq为用来保存主要数据数据库空间IQ_SYSTEM_MAIN的文件的缺省名,其中包含IQ表和索引.
可使用IQPATH子句指定不同的文件名.
此初始数据库空间包含IQ存储.
警告!
IQ_SYSTEM_MAIN是一个特殊数据库空间,它包含打开数据库所必需的结构:IQdb_identity块、IQ检查点日志、每个已提交事务和每个活动检查点事务的IQ前滚/回退位图、增量备份位图和空闲列表根页.
当打开数据库时,IQ_SYSTEM_MAIN始终处于联机状态.
管理员可以允许在IQ_SYSTEM_MAIN中创建用户表,特别是当这些表比较小且包含重要内容时.
但是,更常见的情况是在创建该数据库后,管理员会立即创建另一个主数据库空间,撤消所有用户在数据库空间IQ_SYSTEM_MAIN中的create特权,向选定用户授予对新的主数据库空间的create特权,并将PPUBLIC.
default_dbspace设置为新的主数据库空间.
db-name.
iqtmp为用来保存初始临时数据库空间IQ_SYSTEM_TEMP的文件的缺省名.
该文件包含特定查询生成的临时表.
此文件所需的大小可根据查询类型和数据量的不同而有所不同.
您可以使用TEMPORARYPATH子句指定不同的名称.
此初始数据库空间包含临时存储.
db-name.
iqmsg为包含消息跟踪数据库空间IQ_SYSTEM_MSG的文件的缺省名.
您可以使用MESSAGEPATH子句指定不同的文件名.
除这些文件之外,IQ数据库还拥有一个事务日志文件(db-name.
log),并且还可能拥有一个事务日志镜像文件.
文件名和CREATEDATABASE语句:文件名(db-name、log-file-name、mirror-file-name、iq-file-name、message-file-name、temp-file-name)是包含操作系统文件名的字符串.
作为文字字符串,它们必须用单引号引起来.
在Windows中,如果您指定一个路径,则任何后跟n或x的反斜杠字符(\)都必须双写.
这样可防止根据SQL中的字符串规则将这些反斜杠解释为换行符(\n)或十六进制数(\x).
更安全的做法是始终使用两个反斜杠.
例如:CREATEDATABASE'c:\\sybase\\mydb.
db'LOGON'e:\\logdrive\\mydb.
log'JCONNECTOFFIQPATH'c:\\sybase\\mydb'IQSIZE40如果未指定路径或指定了相对路径:Catalog存储文件(db-name.
db)创建在服务器工作目录的相对目录下.
IQ存储、临时存储和消息日志文件都创建在Catalog存储所在的目录下或其相对目录下.
建议使用相对路径名.
警告!
数据库文件、临时数据库空间和事务日志文件都必须位于与数据库服务器相同的物理计算机中.
不要将数据库文件和事务日志文件放在网络驱动器上.
然而,事务日志应位于与其镜像不同的设备上.
SQL语句70SybaseIQ在UNIX系统中,您可以创建符号链接,此类链接为间接指针,其中包含所指文件的路径名.
可以使用符号链接作为相对路径名.
为数据库文件名创建符号链接具有多个优点:指向原始设备的符号链接可以具有有意义的名称,而实际设备名语法可能模糊不清.
使用符号名称可能会消除在恢复自备份后已移至新目录的数据库文件时存在的问题.
要创建符号链接,请使用ln-s命令.
例如:ln-s/disk1/company/iqdata/company.
iqcompany_iq_store创建该链接后,您可以在诸如CREATEDATABASE或RESTORE之类的命令中指定符号链接而不是完全限定路径名.
创建数据库或数据库空间时,每个数据库空间文件的路径必须是唯一的.
如果您的CREATEDATABASE命令为这两种存储指定了相同的路径名和文件名,您将收到一个错误.
注意:要创建Multiplex数据库,请参见《使用SybaseIQMultiplex》.
可以用下列任何一种方式创建一个唯一的路径:为每个文件指定一个不同的扩展名(如mydb.
iq和mydb.
iqtmp)指定一个不同的文件名(如mydb.
iq和mytmp.
iq)指定一个不同的路径名(如/iqfiles/main/iq和/iqfiles/temp/iq)或不同的原始分区创建数据库时省略TEMPORARYPATH.
在此情况下,系统将在与Catalog存储相同的路径下创建临时存储,缺省名和扩展名为dbname.
iqtmp,其中dbname为数据库名称.
警告!
在UNIX平台上,要保持数据库的一致性,则必须指定链接到不同文件的文件名.
SybaseIQ无法检测到链接文件指向的目标.
即使命令中的文件名不同,也应确保它们不会指向同一个操作系统文件.
CREATEDATABASE的子句和选项:TRANSACTIONLOG-事务日志是数据库服务器用来记录所有数据库更改的文件.
事务日志在系统恢复中起着重要的作用.
如果不指定任何TRANSACTIONLOG子句,或者如果您省略文件名的路径,则事务日志将位于与.
db文件相同的目录中.
但是,应该将它放在不同于.
db和.
iq的物理设备上.
无法在原始分区上创建该文件.
MIRROR-事务日志镜像是与事务日志完全相同的一个副本,通常在单独的设备上进行维护,以便更好地保护您的数据.
缺省情况下,SybaseIQ不使用镜像事务日志.
如果您不想使用事务日志镜像,则必须提供文件名.
如果使用相对路径,则系统将创建相对于Catalog存储(db-name.
db)所在目录的事务日志镜像.
Sybase建议您始终创建事务日志的镜像副本.
SQL语句参考:语句和选项71CASE-对使用CASERESPECT创建的数据库而言,在比较和字符串操作中,所有受影响的值都区分大小写.
数据库对象名称(如列、过程或用户ID)则不受影响.
数据库空间名称始终不区分大小写,无论CASE规范如何.
缺省值(RESPECT)为所有比较均区分大小写.
CASERESPECT所提供的性能要比CASEIGNORE好一些.
插入到表中的字符串始终按输入时的大小写存储,而不管数据库是否区分大小写.
如果将字符串Value插入到字符数据类型的列中,该字符串在数据库中始终以大写V和其余字母小写的形式存储.
SELECT语句返回字符串作为Value.
但是,如果数据库不区分大小写,所有比较都会使Value与value、VALUE等相同.
IQ服务器可以大小写字母的任意组合返回结果,因此,不区分大小写的数据库中的结果不能区分大小写(CASEIGNORE).
例如,假定有以下表和数据:CREATETABLEtb(idintNOTNULL,stringVARCHAR(30)NOTNULL);INSERTINTOtbVALUES(1,'ONE');SELECT*FROMtbWHEREstring='oNe';SELECT的结果可为"oNe"(如在WHERE子句中所指定的那样),而不一定为"ONE"(如在数据库中所存储的那样).
类似地,SELECT*FROMtbWHEREstring='One';的结果可以为"One",SELECT*FROMtbWHEREstring='ONe';的结果可以为"ONe".
在创建所有数据库时至少使用一个用户ID:DBA以及口令:sql在新数据库中,所有口令都区分大小写,无论数据库是否区分大小写均是如此.
用户ID不受CASERESPECT设置的影响.
PAGESIZE-数据库(包含catalog表)的SQLAnywhere段的页大小可以为4096、8192、16384或32768字节.
通常,使用缺省值4096(4KB).
大型数据库可能需要比缺省大小更大的页大小以便提高性能.
较小的值可能会限制数据库能够支持的列数.
如果指定一个小于4096的页大小,则SybaseIQ将使用4096的页大小.
启动数据库时,其页大小不能大于当前服务器的页大小.
服务器页大小可从启动的第一组数据库中获取,或者在服务器命令行上使用-gp命令行选项来设置.
SQL语句72SybaseIQ任何语句的命令行长度都限制为目录页大小.
在大多数情况下,4KB缺省值已足够用;但是,在某些情况下,为了容纳非常长的命令(如引用多个数据库空间的PAGESIZE命令),需要更大的RESTORE值.
此外,执行涉及大量表或视图的查询时,也可能需要较大的页大小.
由于缺省目录页大小为4KB,因此仅当连接指向utility_db等数据库(页大小为1024)时才会出现问题.
此限制可能会导致引用大量数据库空间的RESTORE命令失败.
为避免此问题,请确保SQL命令行长度小于目录页大小.
或者,使用-gp32768启动引擎以增大目录页大小.
COLLATION-用于在数据库中对字符数据类型进行排序和比较的归类序列.
归类为正在使用的编码(字符集)提供字符比较和排序信息.
如果未指定COLLATION子句,SybaseIQ便会根据操作系统语言和编码选择一个归类.
对大多数操作系统来说,缺省归类序列为ISO_BINENG,该序列可提供最佳性能.
在ISO_BINENG中,归类顺序与ASCII字符集中的字符顺序相同.
所有大写字母均位于所有小写字母之前(例如,"A"和"B"均位于"a"的前面).
可以从支持归类的列表中选择归类.
对于在SybaseIQ服务器上创建的SQLAnywhere数据库,归类也可以是Unicode归类算法(UCA).
如果已指定UCA,则还应指定ENCODING子句.
有关ENCODING子句的详细信息,请参见"SQLAnywhereServer-SQL参考">"SQL语句">"CREATEDATABASE语句".
SybaseIQ不支持IQ数据库的任何基于UCA的归类.
如果在IQ数据库的CREATEDATABASE语句中指定基于UCA的归类,则服务器将返回错误"不支持UCA归类"且数据库创建将会失败.
请务必小心选择您的归类,创建数据库后不能更改归类.
有关选择归类的信息,请参见《系统管理指南第一卷》>"国际语言和字符集".
或者,您还可以指定归类定制选项(collation-tailoring-string),以便能够对字符的排序和比较进行更多的控制.
这些选项采取"关键字=值对"的形式,在归类名称后以括号括起.
注意:当为在SybaseIQ服务器中创建的SQLAnywhere数据库指定UCA归类时,支持若干归类定制选项.
对于所有其它归类和SybaseIQ来说,只支持区分大小写的定制.
同样,使用归类定制选项创建的数据库无法使用15.
0版之前的数据库服务器启动.
SybaseIQ的归类定制选项包含SybaseIQ数据库支持的关键字、允许的替代表单以及归类定制选项(collation-tailoring-string)允许的值.
SQL语句参考:语句和选项73表3.
SybaseIQ的归类定制选项关键字归类替代表单允许值CaseSensitivity所有支持的归类CaseSensitive,Caserespect区分字母间的大小写差异.
对于UCA归类,这相当于UpperFirst.
对于其它归类,respect的值取决于归类自身.
ignore忽略字母间的大小写差异.
UpperFirst始终将大写排在前面(Aa).
LowerFirst始终将小写排在前面(aA).
有关为SQLAnywhere数据库指定UCA归类时的语法及所支持的归类定制选项的完整列表,请参见"SQLAnywhereServer-SQL参考">"SQL语句">"CREATEDATABASE语句".
注意:此参考指向SQLAnywhere文档.
ENCRYPTED-加密可使存储在物理数据库文件中的数据变得无法阅读.
当对整个数据库进行加密时,请使用CREATEDATABASEENCRYPTED关键字且不包含TABLE关键字.
当只想对SQLAnywhere表启用表加密时,请使用ENCRYPTEDTABLE子句.
SybaseIQ表不支持表级别加密.
启用表加密意味着随后使用ENCRYPTED子句创建或更改的表将使用创建数据库时指定的设置进行加密.
有两个级别的数据库和表加密:简单加密和高度加密.
简单加密等效于模糊处理.
虽然这些数据无法阅读,但了解加密技术的人可能会破解数据.
若要进行简单加密,请指定CREATEDATABASE子句ENCRYPTEDONALGORITHM'SIMPLE'、ENCRYPTEDALGORITHM'SIMPLE'或指定ENCRYPTEDON子句而不指定算法或密钥.
高度加密可通过使用128位算法和安全密钥实现.
如果没有密钥,数据将不可读取,而且实际上不可破译.
对于高度加密,请指定使用128位或256位AES算法的CREATEDATABASE子句ENCRYPTEDONALGORITHM,并指定KEY子句来指定加密密钥.
应为密钥选择的值长度至少为16个字符,同时包含大写和小写字符,且包括数字、字母和特殊字符.
每次启动数据库时,都需要此加密密钥.
警告!
请保护好您的加密密钥!
将密钥副本存储在安全位置.
丢失了密钥将导致数据库完全无法访问,而无法访问的数据库是无法进行恢复的.
只能在数据库创建期间指定加密.
对现有数据库进行加密需要完全卸载、重新创建数据库以及重新装载所有数据.
如果使用ENCRYPTED子句但未指定算法,则缺省算法为AES.
缺省情况下,加密处于关闭状态.
BLANKPADDING—缺省情况下,系统将忽略用于比较用途的尾随空白(BLANKPADDINGON),并且嵌入式SQL程序将填充读入字符数组中的字符串.
提供此选项是为了与ISO/ANSISQL标准兼容.
SQL语句74SybaseIQ例如,以下两个字符串在使用BLANKPADDINGON创建的数据库中视为相等:'Smith''Smith'注意:CREATEDATABASE不再支持BLANKPADDINGOFF.
JCONNECT—要使用SybasejConnectforJDBC驱动程序来访问系统目录信息,请安装jConnect支持.
将JCONNECT设置为OFF可排除jConnect系统对象(缺省设置为ON).
只要不访问系统信息,您就仍然可以使用JDBC.
IQPATH—包含SybaseIQ数据的主要段文件的路径名.
可以指定操作系统文件或I/O设备的原始分区.
(针对所用平台的《安装和配置指南》说明了如何指定原始分区的格式.
)SybaseIQ会自动检测基于指定路径名的类型.
如果使用相对路径,则系统将创建相对于Catalog存储(.
db文件)所在目录的文件.
IQSIZE—通过IQPATH子句指定的原始分区或操作系统文件的大小(以MB为单位).
对于原始分区,应不指定IQSIZE而始终采用缺省值,使用缺省值可允许SybaseIQ使用整个原始分区;如果为IQSIZE指定一个值,则该值必须匹配I/O设备的大小,否则SybaseIQ将返回一个错误.
对于操作系统文件,您可以指定以下表中从最小值到最大4TB之间的某个值.
操作系统文件的缺省大小取决于IQPAGESIZE:表4.
IQ存储文件和临时存储文件的缺省大小和最小大小IQPAGESIZEIQSIZE缺省值TEMPORARYSIZE缺省值最小显式IQSIZE最小显式TEMPORARYSIZE65536409600020480004MB2MB131072819200040960008MB4MB26214416384000819200016MB8MB524288327680001638400032MB16MBIQPAGESIZE—数据库的SybaseIQ段(包含IQ表和索引)的页大小(字节).
该值必须为2的幂,从65536到524288字节.
缺省值为131072(128KB).
页大小的其它值都将被更改为下一个更大的大小.
IQ页大小确定了缺省的I/O传输块大小和数据库的最大数据压缩.
为获得最佳性能,Sybase推荐采用以下最小IQ页大小:64KB(IQPAGESIZE65536),针对其最大表不超过10亿行的数据库,或总大小小于8TB的数据库.
这是新数据库的绝对最小值.
在32位平台上,IQ页大小设置为64KB可实现最佳的性能.
128KB(IQPAGESIZE131072),针对位于64位平台上其最大表所含行数超过10亿且少于40亿的数据库,或总大小可能增至8TB或更大的数据库.
128KB为缺省IQ页大小.
SQL语句参考:语句和选项75256KB(IQPAGESIZE262144),针对位于64位平台上其最大表所含行数超过40亿的数据库,或总大小可能增加至8TB或更大的数据库.
非常宽的表(如带有多列宽VARCHAR数据的表[列大小从255到32,767字节])可能需要下一个更大的IQPAGESIZE.
BLOCKSIZE—数据库的SybaseIQ段的I/O传输块大小(以字节为单位).
该值必须小于IQPAGESIZE,并且必须为介于4096到32768之间的2的幂.
该大小的其它值将更改为下一个更大的大小.
缺省值取决于IQPAGESIZE子句的值.
对于大多数应用程序来说,此缺省值为最佳设置.
指定不同值之前,请参见《性能和调优指南》>"管理系统资源".
IQRESERVE—指定要为主IQ存储(IQ_SYSTEM_MAIN数据库空间)保留的空间大小(以MB为单位),以便将来可以增加该dbfile的大小.
sizeMB参数可以为大于0的任意数字.
数据库空间创建后,保留大小将无法更改.
指定IQRESERVE后,数据库将更多空间用于内部(空闲列表)结构.
如果保留大小过大,则内部结构所需的空间可能会大于指定大小,这会导致错误.
IQRESERVE—指定要为临时IQ存储(IQ_SYSTEM_TEMP数据库空间)保留的空间大小(以MB为单位),以便将来可以增加该dbfile的大小.
sizeMB参数可以为大于0的任意数字.
数据库空间创建后,保留大小将无法更改.
指定TEMPORARYRESERVE后,数据库将更多空间用于内部(空闲列表)结构.
如果保留大小过大,则内部结构所需的空间可能会大于指定大小,这会导致错误.

注意:如果从备份恢复数据库,则临时数据库空间的保留大小和模式将丢失.
MESSAGEPATH—包含SybaseIQ消息跟踪文件的段的路径名.
您必须指定操作系统文件;消息文件不能位于原始分区上.
如果使用相对路径或省略该路径,则系统将创建相对于.
db文件所在目录的消息文件.
TEMPORARYPATH—临时段文件的路径名,该文件包含特定查询生成的临时表.
可以指定操作系统文件或I/O设备的原始分区.
(针对所用平台的《安装和配置指南》说明了如何指定原始分区的格式.
)SybaseIQ会自动检测基于指定路径名的类型.
如果使用相对路径或省略该路径,则系统将创建相对于.
db文件所在目录的消息文件.
TEMPORARYSIZE—通过TEMPORARYPATH子句指定的原始分区或操作系统文件的大小(以MB为单位).
对于原始分区,应不指定TEMPORARYSIZE而始终采用缺省值,使用缺省值可允许SybaseIQ使用整个原始分区.
操作系统文件的缺省值始终为IQSIZE的值的一半.
如果IQ存储位于原始分区上且临时存储为操作系统文件,则缺省的TEMPORARYSIZE为IQ存储原始分区大小的一半.
DBAUSER—具有DBA权限的缺省用户帐户的用户名.
如果您不指定此子句,SybaseIQ会创建缺省的dba用户ID.
DBAPASSWORD—具有DBA权限的缺省用户帐户的口令.
副作用:SQL语句76SybaseIQ自动提交标准SQL-ISO/ANSISQL语法的供应商扩展.
Sybase—AdaptiveServerEnterprise提供了一个CREATEDATABASE语句,但具有不同选项.
权限执行此语句所需的权限是在服务器命令行上使用-gu选项设置的.
缺省设置为要求具有DBA权限.
运行服务器时所使用的帐户必须对创建文件的目录具有写权限.
另请参见CREATEDBSPACE语句(第77页)DROPDATABASE语句(第173页)CREATEDBSPACE语句为IQmain存储或目录存储创建一个新的数据库空间及关联dbfile.
语法语法1仅用于Catalog存储dbspace(SQLAnywhere(SA)dbspace).
CREATEDBSPACEdbspace-nameASfile-pathCATALOGSTORE语法2用于IQ数据库空间.
CREATEDBSPACEdbspace-nameUSINGfile-specification[IQSTORE]iq-dbspace-opts参数file-specification:–{single-path-spec|new-file-specsingle-path-spec:–'file-path'|iq-file-optsnew-file-spec:–FILElogical-file-name|'file-path'iq-file-optsiq-file-opts:–[[SIZE]file-size]…[KB|MB|GB|TB]][RESERVEsize…[KB|MB|GB|TB]]iq-dbspace-opts:–[STRIPING]{ON|OFF}]……[STRIPESIZEKBsizeKB]SQL语句参考:语句和选项77示例示例1–为UNIX系统上包含两个文件的IQ主存储区创建一个称为DspHist的数据库空间.
每个文件大小为1GB并可扩大500MB:CREATEDBSPACEDspHistUSINGFILEFileHist1'/History1/data/file1'SIZE1000RESERVE500,FILEFileHist2'/History1/data/file2'SIZE1000RESERVE500;示例2–创建名为DspCat2的另一个目录数据库空间:CREATEDBSPACEDspCat2AS'catalog_file2'CATALOGSTORE;示例3–为IQ存储创建名为EmpStore1的IQ主数据库空间(三种替代语法示例):CREATEDBSPACEEmpStore1USINGFILEEmpStore1'EmpStore1.
IQ'SIZE8MBIQSTORE;CREATEDBSPACEEmpStore1USINGFILEEmpStore1'EmpStore1.
IQ'8IQSTORE;CREATEDBSPACEEmpStore1USINGFILEEmpStore1'EmpStore1.
IQ'8;用法CREATEDBSPACE为IQ主存储区或Catalog存储创建一个新的数据库空间.
您添加的数据库空间可以位于与初始数据库空间不同的磁盘设备上,允许创建大于一个物理设备的存储.
Syntax1为目录存储创建一个数据库空间,在该存储中数据库空间和dbfile具有相同的逻辑名称.
该目录存储中的每个数据库空间都具有一个文件.
new-file-spec为IQmain存储创建一个数据库空间.
可以为IQmain存储指定一个或多个dbfile.
每个文件都需要dbfile名称和物理文件路径且必须是唯一的.
Dbspace名称和dbfile名称始终都不区分大小写.
如果数据库为CASERESPECT,则物理文件路径具有操作系统的区分大小写特性;如果数据库为CASEIGNORE,则物理文件路径不区分大小写.
无法为IQ临时存储创建dbspace.
当创建一个新数据库或升级一个SybaseIQ15.
3之前版本的数据库时,将创建一个临时dbspaceIQ_SYSTEM_TEMP.
可以使用ALTERDBSPACEADDFILE语法将其它文件添加到IQ_SYSTEM_TEMPdbspace中.
RESERVE子句—以千字节(KB)、兆字节(MB)、千兆字节(GB)或千吉字节(TB)为单位指定要保留的空间大小,从而可在将来增加数据库空间的大小.
size参数可为大于0的任何数字;缺省值为兆字节.
创建数据库空间dbfile后不能更改保留大小.
SQL语句78SybaseIQ指定RESERVE后,数据库将更多空间用于内部(空闲列表)结构.
如果保留大小过大,则内部结构所需的空间可能会大于指定大小,这会导致错误.
有关缺省情况下创建的文件的名称和类型,请参见"CREATEDATABASE语句".
注意:有关为Multiplex数据库创建dbspace的信息,请参见《使用SybaseIQMultiplex》.
可以用下列任何一种方式创建一个唯一的路径:为每个文件指定一个不同的扩展名(如mydb.
iq)指定一个不同的文件名(如mydb2.
iq)指定一个不同的路径名(如/iqfiles/main/iq)或不同的原始分区警告!
在UNIX平台上,要保持数据库的一致性,请指定链接到不同文件的文件名.
SybaseIQ无法检测到链接文件指向的目标.
即使命令中的文件名不同,也应确保它们不会指向同一个操作系统文件.
dbspace-name和dbfile-name是数据库空间和dbfile的内部名称.
filepath是dbfile的实际操作系统文件名,有时需要在前面添加路径.
在数据库的目录存储所在的目录中创建不包含显式目录的filepath.
任何相对目录都是相对于该目录存储而言.
SIZE子句—指定您在filepath中指定的操作系统文件的大小(从0至4千吉字节).
缺省值取决于存储类型和块大小.
对于IQmain存储,缺省字节数等于块大小乘以1000.
不能为目录存储指定SIZE子句.
值为0的SIZE将创建具有最小大小的数据库空间,对IQmain存储来说,该大小为8MB.
对于原始分区来说,不要显式指定SIZE.
SybaseIQ将此参数自动设置为最大原始分区大小,如果尝试指定另一大小,将返回一个错误.
STRIPESIZEKB子句-指定磁盘条带化算法移至指定数据库空间的下一条带之前要写入每个文件的千字节数(KB).
如果不指定条带化大小或带区大小,则应用选项DEFAULT_DISK_STRIPING和DEFAULT_KB_PER_STRIPE的缺省值.
一个数据库最多可具有(32KB-1)个数据库空间,其中包括在创建数据库时创建的初始数据库空间.
但是,您的操作系统可能会限制每个数据库的文件数.
另请参见《系统管理指南第一卷》>"数据库对象管理".
副作用:自动提交.
自动检查点.
SQL语句参考:语句和选项79标准SQL-ISO/ANSISQL语法的供应商扩展.
Sybase—AdaptiveServerEnterprise不支持.
权限必须具有DBA或SPACEADMIN权限.
另请参见CREATEDATABASE语句(第68页)DROP语句(第170页)CREATEDOMAIN语句在数据库中创建用户定义数据类型.
语法CREATE{DOMAIN|DATATYPE}domain-namedata-type…[NOT]NULL]…[DEFAULTdefault-value]参数domain-name:–标识符data-type:–具有精度和小数位数的内置数据类型default-value:–special-value|string|globalvariable|[-]number|(constant-expression)|built-in-function(constant-expression)|AUTOINCREMENT|CURRENTDATABASE|CURRENTREMOTEUSER|NULL|TIMESTAMP|LASTUSERspecial-value:–CURRENT{DATE|TIME|TIMESTAMP|USER|PUBLISHER}|USER示例示例1–创建名为address的数据类型,它包含35个字符长的字符串并且可以为空值:CREATEDOMAINaddressCHAR(35)NULL用法用户定义数据类型是内置数据类型的别名,包括适用的精度和小数位数值.
它们提高了方便程度并有利于数据库的一致性.
SQL语句80SybaseIQSybase建议您使用CREATEDOMAIN而不是CREATEDATATYPE,因为CREATEDOMAIN是ANSI/ISOSQL3术语.
创建数据类型的用户自动成为该数据类型的所有者.
在CREATEDATATYPE语句中不能指定所有者.
用户定义数据类型的名称必须是唯一的,所有用户都可以访问这个数据类型且不必将所有者作为前缀.
用户定义数据类型是数据库内的对象.
其名称必须遵守标识符规则.
与内置数据类型的名称一样,用户定义数据类型的名称始终不区分大小写.
缺省情况下,用户定义数据类型允许使用空值,除非allow_nulls_by_default选项设置为OFF.
此时,缺省情况下新的用户定义数据类型不允许空值.
在用户定义数据类型上创建的列可否为空值取决于该用户定义数据类型的定义设置,而不是引用该列时的allow_nulls_by_default选项设置.
任何在列定义中显式设置的空值或非空值都将覆盖用户定义数据类型设置.
使用CREATEDOMAIN语句可以对用户定义数据类型指定DEFAULT值.
在数据类型上定义的任何列都将继承DEFAULT值规范.
在列上显式指定的任何DEFAULT值都将覆盖为该数据类型指定的值.
有关使用列DEFAULT值的详细信息,请参见《系统管理指南第一卷》>"数据完整性">"列缺省值有助于保持数据完整性".

使用CREATEDOMAIN语句可以将称为CHECK条件的规则添加至用户定义数据类型的定义中.
对于基表、全局临时表、本地临时表和用户定义数据类型,SybaseIQ将强制执行CHECK约束.
要从数据库中删除数据类型,请使用DROP语句.
必须是数据类型的所有者或者具有DBA权限才能删除用户定义数据类型.
另请参见《参考:构件块、表和过程》>"SQL数据类型".
副作用:自动提交标准SQL-符合ISO/ANSISQL标准.
Sybase—AdaptiveServerEnterprise不支持.
Transact-SQL使用sp_addtype系统过程以及CREATEDEFAULT和CREATERULE语句提供类似功能.
权限必须具有RESOURCE权限.
另请参见DROP语句(第170页)SQL语句参考:语句和选项81CREATEEVENT语句定义事件及其关联处理程序以自动执行预定操作.
另外还定义了预定操作.

语法CREATEEVENTevent-name[TYPEevent-type[WHEREtrigger-condition[ANDtrigger-condition],.
.
.
]|SCHEDULEschedule-spec,…]…[ENABLE|DISABLE]…[AT{CONSOLIDATED|REMOTE|ALL}]…[HANDLERBEGIN…END]参数event-type:–BackupEnd|"Connect"|ConnectFailed|DatabaseStart|DBDiskSpace|"Disconnect"|GlobalAutoincrement|GrowDB|GrowLog|GrowTemp|IQMainDBSpaceFree|IQTempDBSpaceFree|LogDiskSpace|"RAISERROR"|ServerIdle|TempDiskSpacetrigger-condition:–event_condition(condition-namevalueschedule-spec:–[schedule-name]{STARTTIMEstart-time|BETWEENstart-timeANDend-time}[EVERYperiod{HOURS|MINUTES|SECONDS}][ON{(day-of-week,day-of-month,STARTDATEstart-date]event-name|schedule-name:–identifierday-of-week:–stringday-of-month|value|period:–integerstart-time|end-time:–timestart-date:–date示例示例1–指示数据库服务器每天凌晨1点执行自动增量备份:CREATEEVENTIncrementalBackupSCHEDULESTARTTIME'1:00AM'EVERY24HOURSHANDLERBEGINBACKUPDATABASEINCREMENTALTO'backups/daily.
incr'ENDSQL语句82SybaseIQ示例2–指示数据库服务器每10分钟调用一次系统存储过程sp_iqspaceused,然后将返回的当前日期和时间、当前的数据库连接数以及与使用main存储和临时IQ存储有关的当前信息存入表中:CREATETABLEmysummary(dtDATETIME,usersINT,mainKBUNSIGNEDBIGINT,mainPCUNSIGNEDINT,tempKBUNSIGNEDBIGINT,tempPCUNSIGNEDINT);CREATEEVENTmysummarySCHEDULEsched_mysummarySTARTTIME'00:01AM'EVERY10MINUTESHANDLERBEGINDECLAREmtUNSIGNEDBIGINT;DECLAREmuUNSIGNEDBIGINT;DECLAREttUNSIGNEDBIGINT;DECLAREtuUNSIGNEDBIGINT;DECLAREconncountUNSIGNEDINT;SETconncount=DB_PROPERTY('ConnCount');CALLSP_IQSPACEUSED(mt,mu,tt,tu);INSERTINTOmysummaryVALUES(NOW(),conncount,mu,(mu*100)/mt,tu,(tu*100)/tt);END;示例3–在含有事务日志文件的设备上的可用磁盘空间小于30%时,在服务器日志中张贴一条消息,但执行处理程序的频率不超过每300秒一次.
CREATEEVENTLowTxnLogDiskSpaceTYPEDBDiskSpaceWHEREevent_condition('DBFreePercent')=300HANDLERBEGINmessage'DiskspaceforTransactionLogislow.
';END;有关更多的示例,请参见《系统管理指南第二卷》>"使用日程表和事件自动完成任务">"事件的触发器状态".
用法主要有两种使用事件的方式:调度操作–数据库服务器按时间调度执行一组操作.
您可以使用此功能调度备份、有效性检查、报告表填充查询等.
数据库服务器在预定义的事件发生时执行一组操作.
可以处理的事件包括磁盘空间限制(当磁盘使用超过了指定的百分比后)、服务器何时空闲等.
事件定义包括两个不同方面.
触发器条件可以是一个事件,如磁盘使用超出了定义的阈值.
调度指一组时间,其中每个时间充当一个触发器状态.
当满足触发器状态时,SQL语句参考:语句和选项83执行事件处理程序.
事件处理程序包含一个或多个在复合语句(BEGIN.
.
.
END)内指定的操作.
如果未提供触发条件或调度说明,则只有显式TRIGGEREVENT语句才能触发事件.
在开发过程中,可能需要使用TRIGGEREVENT来开发和测试事件处理程序,并在测试完成后添加调度或WHERE子句.
事件错误记录到数据库服务器主控台.
触发事件处理程序后,服务器通过使用EVENT_PARAMETER函数向事件处理程序提供上下文信息(比如导致事件被触发的连接ID).
注意:虽然事件中不允许包含返回结果集的语句,但您可以允许事件调用存储过程并将过程结果插入临时表中.
请参见《系统管理指南第一卷》>"数据导入和导出">"从数据库导出数据的方法">"数据抽取工具">"启用数据提取选项">"提取限制".
CREATEEVENT–event-name是一个标识符.
事件都有创建者,即创建事件的用户.
事件处理程序只能在创建者的许可下执行.
这与存储过程的执行是一样的.
您不能创建由其他用户所拥有的事件.
通过查询系统表SYSEVENT,可以列出事件名称.
例如:SELECTevent_id,event_nameFROMSYS.
SYSEVENTTYPE–event-type是所列出的一组系统定义事件类型中的一种.
事件类型不区分大小写.
要指定此event-type触发事件的条件,请使用WHERE子句.
DiskSpace事件类型—如果数据库包含DiskSpace类型之一的事件处理程序,则数据库服务器每30秒对每一个与相关文件关联的设备上的可用空间进行检查.
如果数据库有多个数据库空间位于不同的驱动器,则DBDiskSpace会检查每个驱动器并根据最低的可用空间执行操作.
LogDiskSpace事件类型检查事务日志和任何事务日志镜像的位置,并根据最小的可用空间进行报告.
Globalautoincrement事件类型—当表的GLOBALAUTOINCREMENT缺省值低于其范围的1%时,触发此事件.
该处理程序的典型操作可能是为GLOBAL_DATABASE_ID选项请求新值.
对这种事件类型,可以使用以RemainingValues为参数的EVENT_CONDITION函数.
ServerIdle事件类型—如果数据库包含ServerIdle类型的事件处理程序,则服务器每30秒便会检查一次服务器的活动.
WHERE子句–此触发器状态定义事件在什么情况下触发.
例如,要在包含事务日志的磁盘80%以上的空间已满时执行操作,请使用以下触发条件:.
.
.
WHEREevent_condition('LogDiskSpacePercentFree')"SQL函数">"按字母顺序排列的函数列表">"EVENT_CONDITION函数[系统]".
SCHEDULE–指定预定操作何时发生.
时间序列充当事件处理程序中定义的关联操作的一组触发条件.
对给定事件及其关联的处理程序,可以创建多个调度.
这样可以实现复杂的调度.
有多个调度时必须提供调度名称,而仅提供一个调度时,则是可选的.
通过查询系统表SYSSCHEDULE,可以列出日程表名称.
例如:SELECTevent_id,sched_nameFROMSYS.
SYSSCHEDULE每个事件都具有唯一的事件ID.
可使用SYSEVENT和SYSSCHEDULE的event_id列将事件与关联的日程表匹配.
如果非反复出现的预定事件过去后,其调度将被删除,但不会删除事件处理程序.

预定事件的时间从调度创建时开始计算,并在事件处理程序完成执行时重新计算.
计算下一次事件时间的方法是,检查事件的调度并找到即将到来的下一次预定时间.
如果指示事件处理程序在9:00和5:00之间每隔一小时运行一次,并且它需要65分钟来执行,则它将分别在9:00、11:00、1:00、3:00和5:00运行.
如果要重叠执行,则必须创建多个事件.
以下是调度定义的子句:STARTTIME–在调度了事件的每一天中的最初预定时间.
如果指定了STARTDATE,则STARTTIME引用该日期.
如果没有指定STARTDATE,则STARTTIME是针对当前日期(除非该时间已过)和之后的每一天来说的.
BETWEEN……AND–一天中的一段时间,在该时间段之外,没有预定时间.
如果指定了STARTDATE,则在该日期之前不会有预定时间.
EVERY–连续预定事件之间的间隔.
预定事件仅在当天的STARTTIME之后或BETWEEN…AND指定的范围内才会发生.
ON–预定事件发生日的列表.
缺省值为每天.
事件发生日可指定为周内某日或月内某日.
周内某日是星期一、星期二等等.
也可以使用周内某日的简写形式,如Mon、Tue等等.
数据库服务器可以识别SybaseIQ支持的任何语言的完整日期名和简写日期名.
月内某日是从0到31的整数.
0值表示任何月的最后一天.
STARTDATE–预定事件开始发生的日期.
缺省为当前日期.
每当预定事件的处理程序完成后,即开始计算下一个预定时间和日期.
1.
如果使用了EVERY子句,则查看下次预定时间是否在当天,以及是否在BETWEEN…AND范围结束日期之前.
如果是,即为下次调度时间.
2.
如果下一个预定时间不在当天,请查找下一个执行事件的日期.
3.
查找该日期的STARTTIME或BETWEEN…AND范围的开始日期.
SQL语句参考:语句和选项85ENABLE|DISABLE–缺省情况下,事件处理程序处于启用状态.
指定DISABLE后,即使是在预定时间内或满足触发条件时,事件处理程序也不会执行.
TRIGGEREVENT语句不会导致禁用的事件处理程序执行.
AT–要在SQLRemote设置中的远程或统一数据库中执行事件,请使用此子句限制在哪一个数据库中处理事件.
缺省情况下,所有数据库都可以执行事件.
HANDLER–每个事件都有一个处理程序.
与存储过程的主体一样,处理程序是一个复合语句.
然而,两者之间存在一些差异:您可以在复合语句内使用EXCEPTION子句处理错误,但不能使用存储过程中提供的ONEXCEPTIONRESUME子句.
另请参见《系统管理指南第二卷》>"使用日程表和事件自动完成任务".

副作用:自动提交.
如果在执行期间未检测到任何错误,则系统将提交事件处理程序的操作.
如果检测到错误,则系统将回退.
标准SQL-ISO/ANSISQL语法的供应商扩展.
Sybase—AdaptiveServerEnterprise不支持.
权限必须具有DBA权限.
在事件所有者的许可下,事件处理程序在一个单独的连接上执行.
要使用DBA以外的权限执行,可以从事件处理程序内部调用过程:使用过程所有者的权限执行该过程.
这个单独的连接不计入个人数据库服务器只能有10个连接的限制中.
另请参见ALTEREVENT语句(第13页)BEGIN……END语句(第49页)COMMENT语句(第61页)DROP语句(第170页)TRIGGEREVENT语句(第301页)SQL语句86SybaseIQCREATEEXISTINGTABLE语句创建表示远程服务器上现有表的新代理表.
语法CREATEEXISTINGTABLE[owner.
]table_name[(column-definition,…)]AT'location-string'参数column-definition:–column-namedata-type[NOTNULL]location-string:–remote-server-name.
[db-name].
[owner].
object-name|remote-server-name;[db-name];[owner];object-name示例示例1–在远程服务器server_a上,为nation表创建名为nation的代理表:CREATEEXISTINGTABLEnation(n_nationkeyint,n_namechar(25),n_regionkeyint,n_commentchar(152))AT'server_a.
db1.
joe.
nation'示例2–在远程服务器server_a中为blurbs表创建了一个名为blurbs的代理表.
SybaseIQ将根据它从远程表中获得的元数据派生出列列表:CREATEEXISTINGTABLEblurbsAT'server_a.
db1.
joe.
blurbs'示例3–在SybaseIQ远程服务器remote_iqdemo_srv上,为Employees表创建名为rda_employee的代理表:CREATEEXISTINGTABLErda_employeeAT'remote_iqdemo_srv.
.
dba.
Employees'用法CREATEEXISTINGTABLE是CREATETABLE的变体.
EXISTING关键字与CREATETABLE一起使用时,指定已存在于远程位置的表,并指定其元数据将导入到SybaseIQ中.
以这种方式可使远程表成为用户可以看见的实体.
SybaseIQ在创建该表前将确认它是否存在于外部位置.
作为代理表使用的表,其名称长度不能超过30个字符.
如果对象不存在(作为主机数据文件或远程服务器对象),此语句将被拒绝并出现一条错误消息.
SQL语句参考:语句和选项87主机数据文件或远程服务器表的索引信息被抽取出来用于创建系统表sysindexes的行.
这定义了服务器方面的索引和关键字,使查询优化程序可以考虑该表上可能存在的任何索引.
参照约束在适当的时候传递到远程位置.
如果未指定列定义,SybaseIQ会根据它从远程表中获得的元数据来派生列列表.
如果指定列定义,SybaseIQ会对它们进行检验.
当SybaseIQ检查列名、数据类型、长度和空值属性时:列名称必须完全匹配(但忽略大小写).
CREATEEXISTINGTABLE中的数据类型必须匹配或者转换成远程位置的列的数据类型.
例如,本地列的数据类型定义为NUMERIC,而远程列的数据类型则为MONEY.
如果您从数据类型不匹配或存在其它不一致的表中进行选择,就可能会遇到错误.
系统将检查每个列的空值属性.
如果本地列的空值属性与远程列的空值属性不相同,则系统将发出一条警告消息,但不会中止语句.
系统将检查每个列的长度.
如果CHAR、VARCHAR、BINARY、DECIMAL和NUMERIC列的长度不匹配,则系统将发出一条警告消息,但不会中止命令.
可以选择在CREATEEXISTING语句中仅包含实际远程列列表的子集.
AT指定远程对象的位置.
AT子句支持将分号(;)用作分隔符.
如果分号出现在位置字符串中,则它用作字段分隔符.
如果没有分号,则使用句点作为字段分隔符.
这样即可在数据库和所有者字段中使用文件名和扩展名.
分号字段分隔符主要用于当前不支持的服务器类;但是,您也可以在句点用作字段分隔符的情况下使用它们.
例如,以下语句将表proxy_a1映射到远程服务器myasa上的SQLAnywhere数据库mydb:CREATEEXISTINGTABLEproxy_a1AT'myasa;mydb;;a1'在Simplex环境中,不能在同一节点上创建引用远程表的代理表.
在Multiplex环境中,不能创建引用在Multiplex中定义的远程表的代理表.
例如,在Simplex环境中,如果您尝试创建引用在同一节点上定义的基表Employees的代理表proxy_e,则系统会拒绝CREATEEXISTINGTABLE语句,并返回错误消息.
在Multiplex环境中,如果从引用Multiplex中定义的远程表Employees的任何节点(协调节点或辅助节点)中创建代理表proxy_e,则系统会拒绝CREATEEXISTINGTABLE语句.
另请参见《系统管理指南第二卷》>"访问远程数据"和《系统管理指南第二卷》>"用于远程数据访问的服务器类".
标准SQL-符合ISO/ANSISQL标准.
Sybase-受OpenClient/OpenServer支持.
SQL语句88SybaseIQ权限必须具有RESOURCE权限.
若要为其它用户创建表,您必须具有DBA权限.
另请参见CREATETABLE语句(第136页)CREATEEXTERNLOGIN语句指派与远程服务器通信时使用的替代登录名和口令.
语法CREATEEXTERNLOGINlogin-nameTOremote-serverREMOTELOGINremote-user[IDENTIFIEDBYremote-password]示例示例1–连接到服务器sybase1时,使用口令4TKNOX将名为DBA的本地用户映射到用户sa:CREATEEXTERNLOGINdbaTOsybase1REMOTELOGINsaIDENTIFIEDBY4TKNOX用法CREATEEXTERNLOGIN所做的更改将直到下一次与远程服务器连接时才生效.
缺省情况下,SybaseIQ每次代表其客户端连接到远程服务器时都会使用这些客户端的名称和口令.
CREATEEXTERNLOGIN指派在与远程服务器通信时要使用的替代登录名和口令.
它以加密的形式将口令存储在内部.
remote_server必须通过ISYSSERVER系统表中的条目为本地服务器所知.
有关详细信息,请参见"CREATESERVER语句".
使用CREATEEXTERNLOGIN语句创建远程登录并使用CREATESERVER语句定义远程服务器可以针对INSERT.
.
.
LOCATION设置外部登录名和口令,从而任何用户均可在任何上下文中使用登录名和口令.
这可避免可能因难以获得登录名或口令而产生错误,并且是连接到远程服务器的推荐方式.
注意:如果您使用的是当前连接的用户ID和口令,并且用户更改了口令,则您必须停止并重新启动服务器,新的口令才能在远程服务器上生效.
更改缺省用户ID的口令不会影响使用CREATEEXTERNLOGIN创建的远程登录.
具有自动口令失效功能的站点应该就定期更新外部登录口令作出计划.

不能从事务内部使用CREATEEXTERNLOGIN.
SQL语句参考:语句和选项89login-name—指定本地用户登录名.
如果使用集成登录,login-name是Windows用户ID所映射到的数据库用户.
TO—TO子句指定远程服务器的名称.
REMOTELOGIN—REMOTELOGIN子句为本地用户login-name指定用于remote-server的用户帐户.
IDENTIFIEDBY—IDENTIFIEDBY子句指定remote-password是remote-user的口令.
如果省略IDENTIFIEDBY子句,则系统会将空值作为口令发送给远程服务器.
如果指定IDENTIFIEDBY""(空字符串),则发送的口令为空字符串.
remote-user和remote-password组合对于remote-server必须有效.
副作用自动提交标准SQL-符合ISO/ANSISQL标准.
Sybase-受OpenClient/OpenServer支持.
权限只有DBA或USERADMIN帐户才能添加或修改外部登录名.
另请参见DROPEXTERNLOGIN语句(第174页)INSERT语句(第211页)CREATESERVER语句(第132页)CREATEFUNCTION语句在数据库中创建一个新函数.
语法语法1CREATE[ORREPLACE][TEMPORARY]FUNCTION[owner.
]function-name([parameter,…])RETURNSdata-typeroutine-characteristics[SQLSECURITY{INVOKER|DEFINER}]{compound-statement|AStsql-compound-statement|external-name}语法2SQL语句90SybaseIQCREATEFUNCTION[owner.
]function-name([parameter,…])RETURNSdata-typeURLurl-string[HEADERheader-string][SOAPHEADERsoap-header-string][TYPE{'HTTP[:{GET|POSTSOAP[:{RPC|DOC}]'}][NAMESPACEnamespace-string][CERTIFICATEcertificate-string][CLIENTPORTclientport-string][PROXYproxy-string]参数url-string:–'{HTTP|HTTPS|HTTPS_FIPS}://[user:password@]hostname[:port][/path]'parameter:–INparameter-namedata-type[DEFAULTexpression]routine-characteristics:–ONEXCEPTIONRESUME|[NOT]DETERMINISTICtsql-compound-statement:–sql-statementsql-statement…external-name:–EXTERNALNAMElibrary-call|EXTERNALNAMEjava-callLANGUAGEJAVAlibrary-call:–'[operating-system:]function-name@library;…'operating-system:–UNIXjava-call:–'[package-name.
]class-name.
method-namemethod-signature'method-signature:–([field-descriptor,….
])return-descriptorfield-descriptor和return-descriptor:–Z|B|S|I|J|F|D|C|V|[descriptor|Lclass-name;示例示例1–将firstname字符串与lastname字符串并置起来:CREATEFUNCTIONfullname(firstnameCHAR(30),lastnameCHAR(30))RETURNSCHAR(61)BEGINDECLAREnameCHAR(61);SETname=firstnamelastname;RETURN(name);END下面的示例说明了fullname函数的使用.
从两个提供的字符串中返回完整的名称:SELECTfullname('joe','smith')fullname('joe','smith')joesmithSQL语句参考:语句和选项91列出所有雇员的姓名:SELECTfullname(givenname,surname)FROMEmployeesfullname(givenname,surname)FranWhitneyMatthewCobbPhilipChinJulieJordanRobertBreault.
.
.
示例2–使用Transact-SQL语法:CREATEFUNCTIONDoubleIt(@InputINT)RETURNSINTASDECLARE@ResultINTSELECT@Result=@Input*2RETURN@Result语句SELECTDoubleIt(5)返回值10.
示例3–创建一个用Java编写的外部函数:CREATEFUNCTIONdba.
encrypt(INnamechar(254))RETURNSVARCHAREXTERNALNAME'Scramble.
encrypt(Ljava/lang/String;)Ljava/lang/String;'LANGUAGEJAVA用法CREATEFUNCTION语句将在数据库中创建用户定义的函数.
通过指定所有者名称,可以为其他用户创建函数.
根据权限,可以用与其它非集合函数的使用方法完全相同的方法使用用户定义的函数.
CREATEFUNCTION—参数名称必须遵守数据库标识符规则.
它们必须是有效的SQL数据类型,而且必须以关键字IN作为前缀,以表明参数是为函数提供值的表达式.
指定CREATEORREPLACEFUNCTION将创建一个新函数或替换同名的现有函数.
替换某个函数后,该函数的定义将更改,但现有的权限将保留.
不能将ORREPLACE子句与临时函数一起使用.
执行函数时,不必指定所有参数.
如果在CREATEFUNCTION语句中提供了缺省值,则系统会为缺少的参数指派缺省值.
如果调用者未提供参数且未设置缺省值,则发生错误.
如果指定TEMPORARY(CREATETEMPORARYFUNCTION),则将意味着该函数仅对创建它的连接可见,并在删除该连接时随之自动删除.
也可以显式删除临时函数.
无法SQL语句92SybaseIQ在临时函数上执行ALTER、GRANT或REVOKE操作,而且与其它函数不同,临时函数不会在目录或事务日志中予以记录.
具有临时函数创建者(当前用户)权限才能执行临时函数,并且临时函数只能由其创建者所有.
因此,创建临时函数时不要指定所有者.
如果已连接到只读数据库,则可以创建和删除临时函数.
SQLSECURITY—定义是作为INVOKER(调用函数的用户)还是作为DEFINER(拥有函数的用户)执行函数.
缺省为DEFINER.
如果指定了SQLSECURITYINVOKER,系统将使用更多内存,因为必须为调用过程的每个用户进行注释.
此外,如果指定了SQLSECURITYINVOKER,则系统也将以调用者身份执行名称解析.
因此,请注意利用所有对象的相应所有者限定这些对象的名称(表、过程等).
compound-statement—一组用BEGIN和END括起来的SQL语句,中间用分号分隔.
请参见"BEGIN……END语句".
tsql-compound-statement—一批Transact-SQL语句.
请参见《参考:构件块、表和过程》>"与其它Sybase数据库的兼容性">"Transact-SQL过程语言概述">"Transact-SQL批处理概述"和"CREATEPROCEDURE语句[T-SQL]".
EXTERNALNAME—使用EXTERNALNAME子句的函数是包含对外部库函数调用的包装.
使用EXTERNALNAME的函数在RETURNS子句之后可不含任何其它子句.
库名可包含文件扩展名,在Windows中通常为.
dll,在UNIX中通常为.
so.
在没有扩展名的情况下,该软件附加平台特定的缺省库文件扩展名.
临时函数不支持EXTERNALNAME子句.
请参见"SQLAnywhereServer–编程">"SQLAnywhere外部调用接口".
注意:此参考指向SQLAnywhere文档.
EXTERNALNAMELANGUAGEJAVA—将EXTERNALNAME与LANGUAGEJAVA子句一起使用的函数是包含Java方法的包装.
有关调用Java过程的信息,请参见"CREATEPROCEDURE语句".
ONEXCEPTIONRESUME—使用Transact-SQL-like错误处理.
请参见"CREATEPROCEDURE语句".
NOTDETERMINISTIC—指定为NOTDETERMINISTIC的函数每次在查询中调用时都将重新求值.
不是以这种方式指定的函数的结果可以存入高速缓存以便提高性能,并且每次在查询求值过程中使用相同的参数调用函数时,都会重用高速缓存的结果.

对于具有副作用(如修改基础数据)的函数,应将其声明为NOTDETERMINISTIC.
例如,一个生成主键值并用在INSERT…SELECT语句中的函数应声明为NOTDETERMINISTIC:CREATEFUNCTIONkeygen(incrementINTEGER)RETURNSINTEGERNOTDETERMINISTICSQL语句参考:语句和选项93BEGINDECLAREkeyvalINTEGER;UPDATEcounterSETx=x+increment;SELECTcounter.
xINTOkeyvalFROMcounter;RETURNkeyvalENDINSERTINTOnew_tableSELECTkeygen(1),.
.
.
FROMold_table如果函数对给定的输入参数总是返回相同的值,则可以将其声明为DETERMINISTIC.
除非所有用户定义的函数都声明为NOTDETERMINISTIC,否则它们将被视为确定型函数.
确定型函数为相同参数返回一致的结果并且没有副作用.
也就是说,数据库服务器假设对具有相同参数的同一函数的两次连续调用将返回相同的结果,同时不会对查询语义产生有害副作用.
注意:CLR、ESQL和ODBC、Perl和PHP外部环境中的用户定义的函数由Catalog存储(SQLAnywhere)处理.
它们不能利用SybaseIQ的性能特性.
Java中的用户定义的函数由SybaseIQ来处理,并可提高性能.
在某些情况下,如果在用户定义的函数中发出查询,SQLAnywhere和SybaseIQ之间的语义差异可导致不同的查询结果.
例如,SybaseIQ将CHAR和VARCHAR数据类型视为各不相同的数据类型,而SQLAnywhere按VARCHAR的处理方式来处理CHAR数据.
要修改用户定义的函数或通过加密函数定义来隐藏函数的内容,请使用ALTERFUNCTION语句.
URL—仅用于定义HTTP或SOAPWeb服务客户端函数.
指定Web服务的URL.
其中的用户名和口令参数是可选的,它们提供了一种用于提供HTTP基本验证所需的证书的方法.
HTTP基本鉴定以64为基数对用户和口令信息进行编码并在HTTP请求的"Authentication"标头中传递编码后的信息.
对于Web服务客户端函数来说,返回类型为SOAP和HTTP的函数必须为字符数据类型中的一种,如VARCHAR.
返回的值为HTTP响应的正文.
不含任何HTTP标头信息.
如果需要详细信息(如状态信息),请使用过程而不是函数.
参数值作为请求的一部分进行传递.
所用的语法取决于请求的类型.
对于HTTP:GET,参数将作为URL的一部分进行传递;对于HTTP:POST请求,值将位于请求的主体中.
SOAP请求的参数总是被绑定在请求主体中.
HEADER—创建HTTPWeb服务客户端函数时,此子句用于添加或修改HTTP请求标头条目.
仅可为HTTP标头指定可打印ASCII字符,且这些字符不区分大小写.
有关如何使用此子句的详细信息,请参见"CREATEPROCEDURE语句"的HEADER子句.
有关使用HTTP标头的详细信息,请参见"SQLAnywhereServer–编程">"HTTPWeb服务""使用Web客户端访问Web服务""开发Web客户端应用程序""Web客户端函数和过程要求与推荐">"HTTP请求标头管理".
SQL语句94SybaseIQ注意:此参考指向SQLAnywhere文档.
SOAPDHEADER—当将SOAPWeb服务声明为函数时,此子句用于指定一个或多个SOAP请求标头条目.
SOAP标头可声明为静态常量,也可以使用参数替代机制动态设置(为hd1、hd2等声明IN、OUT或INOUT参数).
Web服务函数可以定义一个或多个IN模式替代参数,但无法定义INOUT或OUT替代参数.
有关如何使用该子句的详细信息,请参见"SQLAnywhereServer–SQL参考">"SQL语句">"CREATEPROCEDURE语句(Web客户端)"中的SOAPHEADER子句.
注意:此参考指向SQLAnywhere文档.
TYPE—指定提出Web服务请求时使用的格式.
如果指定SOAP或未包括类型子句,则使用缺省类型SOAP:RPC.
HTTP意味着HTTP:POST.
SOAP请求始终作为XML文档发送.
HTTP:POST始终用于发送SOAP请求.
NAMESPACE—仅适用于SOAP客户端函数并且标识出SOAP:RPC和SOAP:DOC请求通常都需要的方法命名空间.
处理请求的SOAP服务器使用此命名空间来解释SOAP请求消息主体中的实体名称.
可以从Web服务服务器中提供的SOAP服务的WSDL说明中获取该命名空间.
缺省值为过程的URL,最多为可选路径组件(但不包括).
CERTIFICATE—要发出安全(HTTPS)请求,客户端必须具有对HTTPS服务器所用证书的访问权限.
在分号分隔的关键字/值对的字符串中指定所需信息.
证书可置于文件中且假设该文件的名称使用文件关键字,或者整个证书可置于字符串中,但不能同时出现这两种情况.
它提供以下键:键缩写描述文件证书的文件名certificatecert证书companyco证书中指定的公司unit证书中指定的公司单元名称证书中指定的常见名称只有定向到HTTPS服务器或可以从非安全服务器重定向至安全服务器的请求才需要证书.
CLIENTPORT—标识HTTP客户端过程使用TCP/IP在其上通信的端口号.
假定该端口用于并且建议只用于跨防火墙的连接,因为防火墙根据TCP/UDP端口进行过滤.
可以指定一个端口号、端口号范围或两者的组合,例如CLIENTPORT'85,90-97'.
请参见《系统管理指南第一卷》>"连接和通信参数">"网络通信参数">"ClientPort通信参数[CPort]".
PROXY—指定代理服务器的URI.
在客户端必须通过代理服务器访问网络时使用.
表示该过程将连接到代理服务器并通过它向Web服务发送请求.
副作用SQL语句参考:语句和选项95自动提交标准SQL-符合ISO/ANSISQL标准.
Sybase—AdaptiveServerEnterprise不支持.
权限必须具有RESOURCE权限.
外部函数(包括Java函数)必须有DBA权限.
另请参见ALTERFUNCTION语句(第14页)BEGIN……END语句(第49页)CREATEPROCEDURE语句(第112页)DROP语句(第170页)RETURN语句(第269页)CREATEFUNCTION语句(JavaUDF)用于在数据库中新建外部Java表UDF函数.
语法CREATE[ORREPLACE|TEMPORARY]FUNCTION[owner.
]function-name([parameter,…])RETURNSdata-typeroutine-characteristics[SQLSECURITY{INVOKER|DEFINER}]{compound-statement|AStsql-compound-statement|EXTERNALNAME'java-call'LANGUAGEJAVA}参数参数–INparameter-namedata-type[DEFAULTexpression]routine-characteristics–ONEXCEPTIONRESUME|[NOT]DETERMINISTICtsql-compound-statement–sql-statementsql-statement…environment-name–JAVA[ALLOW|DISALLOWSERVERSIDEREQUESTS]java-call–'[package-name.
]class-name.
method-namemethod-signature'method-signature–([field-descriptor,….
])return-descriptorfield-descriptor和return-descriptor–Z|B|S|I|J|F|D|C|V|[descriptor|Lclass-name;SQL语句96SybaseIQ示例示例1–创建一个用Java编写的外部函数:CREATEFUNCTIONdba.
encrypt(INnamechar(254))RETURNSVARCHAREXTERNALNAME'Scramble.
encrypt(Ljava/lang/String;)Ljava/lang/String;'LANGUAGEJAVA用法不许将LONGBINARY和LONGVARCHAR用作return-value数据类型.
EXTERNALNAMELANGUAGEJAVA—是将EXTERNALNAME与LANGUAGEJAVA子句一起使用的函数,也是包含Java方法的包装.
iq-environment-name:JAVA[ALLOW|DISALLOWSERVERSIDEREQUESTS]:DISALLOW为缺省值.
ALLOW表示允许建立服务器端连接.
注意:除非有必要,否则不要指定ALLOW.
设置ALLOW会减慢某些类型的SybaseIQ表的连接.
不要在同一查询中同使用UDF与ALLOWSERVERSIDEREQUESTS和DISALLOWSERVERSIDEREQUESTS.
标准SQL—符合ISO/ANSISQL标准.
Sybase—不受AdaptiveServerEnterprise支持.
权限必须具有RESOURCE权限.
外部Java函数必须有DBA权限.
CREATEINDEX语句创建指定表或表对的索引.
语法CREATE[UNIQUE][index-type]INDEX[IFNOTEXISTS]index-name…ON[owner.
]table-name…(column-name[,column-name]…)…|[WITHNULLSNOTDISTINCT]…[{IN|ON}dbspace-name]SQL语句参考:语句和选项97…[NOTIFYinteger]…[DELIMITEDBY'separators-string']…[LIMITmaxwordsize-integer]参数index-type:–{CMP|HG|HNG|LF|WD|DATE|TIME|DTTM}示例示例1–创建projected_earnings和current_earnings列的比较索引.
这些列是具有相同精度和小数位数的decimal列.
CREATECMPINDEXproj_curr_cmpONsales_data(projected_earnings,current_earnings)示例2–在SalesOrderItems表的ID列上创建一个High_Group索引.
该索引的数据页是从数据库空间Dsp5中分配的.
CREATEHGINDEXid_hgONSalesOrderItems(ID)INDsp5示例3–在SalesOrderItems表的ProductID列上创建一个High_Group索引:CREATEHGINDEXitem_prod_hgONSales_OrderItems(ProductID)示例4–在SalesOrderItems表上为同一ProductID列创建一个Low_Fast索引,而不会出现任何通知消息:CREATELFINDEXitem_prodONSalesOrderItems(ProductID)NOTIFY0示例5–创建earnings_report表上的WD索引.
将字符串的分隔符指定为空格、冒号、分号和句点.
将字符串的长度限制为25.
CREATEWDINDEXearnings_wdONearnings_report_table(varchar)DELIMITEDBY':;.
'LIMIT25示例6–在SalesOrders表的OrderDate列上创建一个DTTM索引:CREATEDTTMINDEXorder_dttmONSalesOrders(OrderDate)SQL语句98SybaseIQ用法CREATEINDEX语句可创建指定表中指定列的索引.
索引一旦创建后就再也不能在SQL语句中再次引用,除非使用DROPINDEX语句将它删除.
对于SybaseIQ表中的列,index-type可指定为HG(High_Group)、HNG(High_Non_Group)、LF(Low_Fast)、WD(Word)、DATE、TIME或DTTM(Datetime).
如果未指定index-type,则缺省情况下创建HG索引.
要在IQ表中两个列之间的关系上创建索引,index-type可指定为CMP(Compare).
两个列必须具有相同的数据类型、精度和小数位数.
对于CHAR、VARCHAR、BINARY或VARBINARY列,精度表示两列具有相同的宽度.
对于最快查询速度,列的索引的正确类型取决于:列中的唯一值数列将在查询中的使用方式可用的磁盘空间大小《系统管理指南第一卷》详细说明了索引类型并说明了如何为数据确定适当的索引类型.
可以在IQ表中的列上指定多个索引,但这些索引的索引类型必须不同.
使用CREATEINDEX不能添加重复的索引类型.
SybaseIQ会选择适用于当前查询或查询的部分的最快索引.
但各其它索引类型可能会显著增加该表的空间要求.
column-name—指定要进行索引的列的名称.
列名是一个跟在可选相关名后面的标识符.
(相关名通常是表名.
有关相关名的详细信息,请参见"FROM子句".
)如果列名含有字母、数字和下划线以外的其它字符,则用引号("")将它引起来.
如果省略UNIQUE,则可以仅指定HG索引.
外键要求非唯一HG索引并且组合外键要求非唯一组合HG索引.
唯一和不唯一的HG索引的多列组合键都具有最大宽度5300字节.
如果CHAR或VARCHAR数据是组合键或单列HG、LF、HNG、DATE、TIME或DTTM索引,则这两种数据都不能超过255字节.
UNIQUE—UNIQUE可确保在索引中的所有列中,表中的任意两行都不具有相同的值.
每个索引键必须是唯一的,或者至少在一列中包含NULL.
可以对多个列创建唯一的HG索引,但不能使用其它索引类型创建多列索引.
不能使用UNIQUE、CMP、HNG、WD、DATE或TIME索引类型指定DTTM.
如果列定义允许使用空值并且不强制执行约束(主键或唯一),则SybaseIQ允许在用户创建的唯一多列HG索引的数据值中使用空值.
有关详细信息,请参见"注释"中的"多列索引".
如果指定了UNIQUE,但未指定WITHNULLSNOTDISTINCT,则每个索引键必须是唯一的,或者至少在一列中包含空值.
例如,('a',NULL)和('a',NULL)两个条目中的每个条目都视为唯一的.
如果指定了UNIQUE.
.
.
WITHNULLSNOTDISTINCT,则无论是否包含空值,索引键必须是唯一的.
例如,('a',NULL)和('a',NULL)两个条目被视为相同的,而不是唯一的.
SQL语句参考:语句和选项99IFNOTEXISTS—如果指定的对象已存在,则不会进行任何更改,也不会返回错误.
IN—指定索引位置.
如果省略IN子句,将在创建表的dbspace中创建索引.
索引始终放在与其表类型相同的dbspace(IQ存储或临时存储)中.
装载索引时,数据将跨所有具备可用空间的该类型数据库文件分布.
SybaseIQ确保您指定的任何dbspace-name都适用于该索引.
如果尝试为临时表上的索引指定IQ_SYSTEM_MAIN或其它主dbspace(反之亦然),则会收到一个错误.
dbspace名称始终不区分大小写,无论CREATEDATABASE……CASEIGNORE或CASERESPECT规范如何.
DELIMITEDBY—指定用于将列字符串分析为要存储到该列的WD索引中的单词的分隔符.
如果忽略该子句或指定该值为空字符串,则SybaseIQ会使用缺省分隔符集.
缺省分隔符集是为缺省归类顺序(ISO-BINENG)设计的.
它包括非7位ASCII字母数字字符的所有7位ASCII字符,但连字符和单引号除外.
在缺省情况下,连字符和单引号属于字词的一部分.
缺省分隔符集中有64个分隔符.
例如,如果列值为以下字符串:Thecatisonthemat并且使用了使用缺省分隔符的CASEIGNORE设置来创建数据库,下列单词会从该字符串存储到WD索引中:catismatonthe如果指定多个DELIMITEDBY和LIMIT子句,则不会返回任何错误,但仅使用每种类型的最后一个子句.
separators-string—分隔符字符串必须是数据库创建时使用的归类顺序中的0个或多个字符的序列.
分隔符字符串中的每个字符都被当作一个分隔符.
如果分隔符字符串中没有字符,则会使用缺省分隔符集.
(每个分隔符必须是正在使用的归类序列中的单个字符.
)分隔符字符串中的字符(分隔符)不能多于256个.
要将制表符指定为分隔符,可以在分隔符字符串内键入字符,或者使用制表符的十六进制ASCII代码\x09.
"\t"指定两个分隔符,\和字母t.
要将换行符指定为分隔符,可以键入字符或十六进制ASCII代码\x0a.
例如,子句DELIMITEDBY':;.
\/t'可指定以下七个分隔符:spacet表5.
制表符和换行符作为分隔符对于以下分隔符在DELIMITEDBY子句中使用此分隔符字符串tab''(键入)或'\x09'newline''(键入)或'\x0a'LIMIT—仅可用于创建WD索引.
指定WD索引中允许的最大单词长度.
分析过程中单词长度超过该值会导致错误.
缺省值为255个字节.
最小允许值为1而最大允许值为255.
如果CREATEINDEX语句中指定的或缺省确定的最大单词长度超过列宽,则所用的最大单词长度会自动减小至列宽.
使用的最大允许单词长度越小,允许插入、删SQL语句100SybaseIQ除和更新使用的空间会更小、时间会更短.
空词(两个相邻的分隔符)将被自动忽略.
在创建WD索引后,到其列的任何插入都将使用创建时确定的分隔符和最大单词大小进行分析.
创建索引之后,这些分隔符和最大单词大小将无法更改.
NOTIFY—在为索引成功添加n个记录后,会给出通知消息.
这些消息会发送到标准输出设备.
消息包含与内存使用情况、数据库空间以及当前使用的缓冲区大小有关的信息.
缺省值为100,000条记录.
要关闭NOTIFY,请将其设置为0.
注释索引所有权—在CREATEINDEX语句中无法指定索引所有者.
索引会自动由在其上定义这些索引的表的所有者所拥有.
索引名称对每个所有者必须是唯一的.

不存在视图索引—无法为视图创建索引.
索引名称—每个索引的名称对给定的表必须是唯一的.
排它表使用—只要CREATEINDEX影响了当前正由其它连接修改的表,就会禁止该语句.
但允许对正在同时添加索引的表进行查询.
CHAR列—在创建WD索引后,到其列的任何插入都将使用分隔符进行分析,并且在创建索引后,最大单词大小将无法更改.
对于CHAR列,Sybase建议您至少指定一个空格作为其中的一个分隔符或使用缺省分隔符集.
SybaseIQ会自动将CHAR列填充至最大列宽.
除字符数据外,如果列包含还包含空白,则对WD索引数据的查询可能会返回令人误解的结果.
例如,列CompanyName包含由分隔符分隔的两个单词,但第二个单词以空白填充:'Concord''Farms'假设用户输入以下查询:SELECTCOUNT(*)FROMCustomersWHERECompanyNamecontains('Farms')分析程序确定字符串包含:'Farms'而不是:'Farms'并返回0而不是1.
您可以通过使用VARCHAR列而不是CHAR列避免此问题.
数据类型不能使用CREATEINDEX针对包含BIT数据的列创建索引.
对于255字节以上的CHAR和VARCHAR数据,只能创建缺省索引、CMP索引或WD索引.
对于LONGVARCHAR数据,只能创建缺省索引和WD索引类型.
对于255字节以上的BINARY和VARBINARY数据,只能创建缺省索引、CMP索引和TEXT索引类型.
不能对包含FLOAT、REAL或DOUBLE数据的列创建HNG索引或CMP索引.
TIME索引只能针对数据类型为TIME的列创建.
SQL语句参考:语句和选项101DATE索引只能针对数据类型为DATE的列创建.
DTTM索引只能针对数据类型为DATETIME或TIMESTAMP的列创建.
多列索引—可以对多个列创建唯一的或非唯一的HG索引.
SybaseIQ可对组成外键的一组列隐式创建一个非唯一的HG索引.
仅HG和CMP是可以包含多列的索引类型.
不能对多个列创建唯一的HNG或LF索引,也不能对多个列创建DATE、TIME或DTTM索引.
多列串联键的最大宽度为5KB(5300字节).
允许的列数取决于5KB包含的列数.
超过255字节的CHAR或VARCHAR数据不允许作为单列HG、LF、HNG、DATE、TIME或DTTM索引中的组合键的一部分.
基表上的多列索引在使用那些基表创建的连接索引中不会进行复制.
用于多列索引的INSERT必须包含索引的所有列.
在ORDERBY子句中对一个列进行查询的速度快于使用多列HG索引进行查询的速度.
例如:SELECTabs(x)fromt1ORDERBYx在以上示例中,HG索引在排序顺序中垂直投射x.
若要增强查询性能,请在带有以下条件的SELECT或ORDERBY子句中使用多列HG索引对多个列执行ORDERBY操作(也可以包括ROWID):索引中存在所有投射的列以及所有排序列(ROWID除外)排序关键字的顺序与前导HG列的顺序相符如果多个多列HG索引满足这些条件,则使用具有最低离散值个数的索引.
如果查询具有一个ORDERBY子句,并且ORDERBY列列表为多列索引的前缀(SELECT列表中引用的所有列都存在于一个多列索引中),则该多列索引执行垂直投射.
例如:SELECTx,z,yFROMTORDERBYx,y如果SELECT列表中的基列中存在表达式,并且所有表达式中引用的所有列都存在于该多列索引中,则查询将使用多列索引.
例如:SELECTpower(x,2),x+y,sin(z)FROMTORDERBYx,y除以上两个示例之外,如果ROWID()函数位于SELECT列表表达式中,则将使用多列索引.
例如:SELECTrowid()+x,zFROMTORDERBYx,y,z除以上三个示例之外,如果ROWID()存在于ORDERBY列表结尾处,并且该列表的列(不包括ROWID())以相同顺序使用多列索引,则多列索引将用于该查询.
例如:SELECTz,yFROMTORDERBYx,y,z,ROWID()如果列定义允许使用空值并且不强制执行约束(主键或唯一),则SybaseIQ允许在用户创建的唯一多列HG索引的数据值中使用空值.
此功能的规则如下:SQL语句102SybaseIQ空值会被视为未定义的值.
唯一索引列中允许具有空值的多个行.
1.
在单列索引中,一个索引列中允许多个具有空值的行.
2.
在多列索引中,只要其余列中的非空值可保证该索引中的唯一性,索引列允许多个具有空值的行.
3.
在多列索引中,索引涉及的所有列中允许多个具有空值的行.
以下两个示例说明了这些规则.
给定表table1:CREATETABLEtable1(c1INTNULL,c2INTNULL,c3INTNOTNULL);对允许空值的列创建唯一的单列HG索引:CREATEUNIQUEHGINDEXc1_hg1ONtable1(c1);根据上述规则1,可以将空值插入到索引列的多个行:INSERTINTOtable1(c1,c2,c3)VALUES(NULL,1,1);INSERTINTOtable1(c1,c2,c3)VALUES(NULL,2,2);对允许空值的列创建唯一多列HG索引:CREATEUNIQUEHGINDEXc1c2_hg2ONtable1(c1,c2);根据上述规则2,必须确保索引的唯一性.
以下INSERT不会成功,因为对行1和行3的多列索引c1c2_hg2具有相同的值:INSERTINTOtable1(c1,c2,c3)VALUES(NULL,1,3);但根据规则1和3,以下INSERT操作会成功:INSERTINTOtable1(c1,c2,c3)VALUES(NULL,NULL,3);INSERTINTOtable1(c1,c2,c3)VALUES(NULL,NULL,4);唯一性会在多列索引中得到保留.
以下UPDATE操作会成功,因为规则3允许在多列索引的所有列中包含多个具有空值的行:UPDATEtable1SETc2=NULLWHEREc3=1如果多列HG索引受唯一约束制约,则索引中涉及的任何列都不允许空值.
并行索引创建—可以使用BEGINPARALLELIQ…ENDPARALLELIQ语句对多个IQ表中的CREATEINDEX语句进行分组,这样便可如同单个DDL语句一样执行这些语句了.
有关详细信息,请参见"BEGINPARALLELIQ……ENDPARALLELIQ语句".
警告!
对包含未提交数据的本地临时表使用CREATEINDEX命令会失败并产生错误消息"要创建索引,必须提交本地临时表.
"请先提交本地临时表中的数据,然后再创建索引.
另请参见《系统管理指南第一卷》>"SybaseIQ索引".
副作用SQL语句参考:语句和选项103自动提交标准SQL-ISO/ANSISQL语法的供应商扩展.
Sybase—AdaptiveServerEnterprise拥有的CREATEINDEX语句比SybaseIQ更复杂.
虽然在SybaseIQ中允许使用AdaptiveServerEnterprise语法,但一些子句和关键字会被忽略.
有关AdaptiveServerEnterpriseCREATEINDEX语句的完整语法,请参见《AdaptiveServerEnterprise参考手册第二卷:命令》.
AdaptiveServerEnterprise索引可以是聚簇的或非聚簇的.
聚簇索引检索数据几乎总是比非聚簇索引快.
每个表只允许有一个聚簇索引.
SybaseIQ不支持聚簇索引.
SQLAnywhere允许使用CLUSTERED和NONCLUSTERED关键字,但SybaseIQ会忽略它们.
如果未指定index-type,则SybaseIQ会对指定的列创建HG索引.
SybaseIQ不允许使用DESC关键字.
对于SybaseIQ和AdaptiveServerEnterprise,给定表的索引名称必须都是唯一的.
权限必须具有DBA权限或RESOURCE权限以及指定数据库空间中的CREATE权限才能创建索引.
另请参见BEGINPARALLELIQ……ENDPARALLELIQ语句(第52页)CREATEJOININDEX语句(第104页)DROP语句(第170页)INDEX_PREFERENCE选项(第382页)FROM子句(第194页)CREATEJOININDEX语句创建连接索引(这可定义通过特定列预连接的一组表)以通过将表用在连接操作中来提高查询性能.
语法CREATEJOININDEXjoin-index-nameFORjoin-clauseINdbspace-nameSQL语句104SybaseIQ参数join-clause:join-expressionjoin-typejoin-expression[ONsearch-condition][)]join-expression:–{table-name|join-clause}join-type:–[NATURAL]FULL[OUTER]JOINsearch-condition:search-expression[ANDsearch-expression][)]search-expression:table-name.
]column-name=[table-name.
]column-name[)]示例示例1–使用DepartmentID列在Departments和Employees表之间创建连接索引,该列将作为Departments的主键和Employees的外键.
CREATEJOININDEXemp_dept_joinFORDepartmentsFULLOUTERJOINEmployeesONDepartments.
DepartmentID=Employees.
DepartmentID示例2–创建表t1和t2,以后的数据分配将从缺省数据库空间进行,创建连接索引t1t2,以后的数据分配将从数据库空间Dsp6进行.
CREATETABLEt1(c1int,c2char(5));CREATETABLEt2(c1int,c3char(5));CREATEJOININDEXt1t2FORt1FULLOUTERJOINt2ONt2.
c1=t1.
c1INDsp6;用法CREATEJOININDEX在指定表的指定列上创建连接索引.
一旦连接索引创建后,除非使用DROPJOININDEX将该索引删除或使用SYNCHRONIZEJOININDEX同步该索引,否则将不会再次引用该索引.
此语句仅支持连接类型FULLOUTER;OUTER关键字是可选的.
IN—指定连接索引的存放位置.
如果省略IN子句,则SybaseIQ会在缺省dbspace中创建连接索引(由选项DEFAULT_DBSPACE指定).
ON—仅从两个表引用列.
一个列集必须来自左侧子树中的单个表而另一个列集必须来自右侧子树中的某个表.
支持的谓词仅为等值连接谓词.
SybaseIQ不允许单变量谓词、列内比较或不等值连接.
连接索引列必须具有相同的数据类型、精度和标度.
要指定由多部分组成的键,请包括链接由逻辑运算符AND连接的两个表的多个谓词.
分离的ON子句不受支持;即SybaseIQ不允许连接谓词的逻辑运算符OR.
而且ON子句不接受标准的WHERE子句,因此无法指定别名.
可以使用NATURAL关键字,而非ON子句.
NATURAL连接是一种将列按名称进行组对并表示等值连接的连接.
如果NATURAL连接生成涉及多个表对的谓词,则SQL语句参考:语句和选项105CREATEJOININDEX将返回错误.
您可以指定NATURAL或ON,但不要同时指定这两者.
CREATEJOININDEX查找表中主外键关系来确定一对多关系的方向.
(一对一关系的方向并不重要.
)主键始终是"一",而外键始终是"多".
如果未定义此信息,SybaseIQ假定左侧子树为"一"而右侧子树为"多".
如果反过来,CREATEJOININDEX将返回错误.
注意:针对所有连接的查询优化主要依赖基础主键.
它们不需要外键.
然而,您可以从使用外键中获益.
如果您对负载进行设置以检查主键-外键关系,SybaseIQ将会强制使用外键.
连接索引表必须为SybaseIQ基表.
这些表不能为临时表、远程表或代理表.
基表上的多列索引在使用那些基表创建的连接索引中不会进行复制.
星形连接索引是指其中位于星中心的单个表以一对多关系与多个表相连接.
要定义星形连接索引,必须先定义单列键和主键,然后在CREATEJOININDEX语句中使用键连接语法.
SybaseIQ不支持将多个连接键列用于任一连接的星形连接索引.
注意:您必须先显式授予您的组中其他用户对基础"连接虚拟表"的权限,然后这些用户才能操作连接中的表.
有关授予对连接虚拟表的特权的信息,请参见《系统管理指南第一卷》>"SybaseIQ索引">"使用连接索引">"从连接索引表中进行插入或删除".
另请参见《系统管理指南第一卷》>"SybaseIQ索引".
副作用自动提交标准SQL-符合ISO/ANSISQL标准.
Sybase—AdaptiveServerEnterprise不支持.
权限必须具有DBA权限或RESOURCE权限,是要进行连接的所有表的所有者,对数据库空间具有CREATE权限.
另请参见CREATEINDEX语句(第97页)CREATETABLE语句(第136页)SQL语句106SybaseIQCREATELOGICALSERVER语句创建用户定义的逻辑服务器.
语法CREATELOGICALSERVERlogical-server-name[MEMBERSHIP'('{ls-member,参数ls-member:–FORLOGICALCOORDINATOR|mpx-server-name示例示例1–以下示例创建用户定义的逻辑服务器ls1,其中包含三个Multiplex节点作为其成员.
CREATELOGICALSERVERls1MEMBERSHIP(n1,n2,n3)用法仅适用于Multiplex.
Catalog存储逻辑服务器及其成员资格定义.
要向协调器定义逻辑成员资格,请在MEMBERSHIP子句中指定FORLOGICALCOORDINATOR.
如果在逻辑服务器创建过程中未指定成员时,则创建的逻辑服务器为空.

注意:系统根本不会存储隐式逻辑服务器成员资格定义(如用于OPEN、SERVER逻辑服务器的定义).
SYS.
ISYSLOGICALSERVER系统表存储有关逻辑服务器的信息.
SYS.
ISYSLOGICALMEMBER系统表存储有关逻辑服务器成员资格定义的信息.
logical-server-name可以是除下列项目外的任意用户指定标识符:OPENSERVERNONE缺省值COORDINATORALL将root逻辑服务器策略的ALLOW_COORDINATOR_AS_MEMBER选项从ON改为OFF并不会影响存储在Catalog中的成员资格信息.
它仅影响逻辑服务器的有效配置.
SQL语句参考:语句和选项107即便在ALLOW_COORDINATOR_AS_MEMBER设置为OFF时,通过指定Multiplex服务器名或通过使用FORLOGICALCOORDINATOR子句,都可以向当前协调器定义逻辑服务器成员资格.
成员资格定义存储在Catalog,但当Multiplex服务器作为协调器时,成员资格定义处于非活动状态.
权限必须具有DBA或MULTIPLEXADMIN权限.
CREATELOGINPOLICY语句在数据库中创建登录策略.
语法CREATELOGINPOLICYpolicy-namepolicy-options参数policy-options:–policy-option[policy-option.
.
.
]policy_option:–policy-option-name=policy-option-valuepolicy-option-value={UNLIMITED|legal-option-value}示例示例1–创建Test1登录策略.
登录策略的口令有效期没有时间限制,允许用户最多尝试五次输入正确的口令,之后便会锁定帐户.
CREATELOGINPOLICYTest1password_life_time=UNLIMITEDmax_failed_login_attempts=5;用法policy-name—登录策略的名称.
policy-option-name—登录策略选项的名称.
如果未指定选项,则会应用root登录策略中的值.
policy-option-value—分配给登录策略选项的值.
如果您指定UNLIMITED,则不会强制执行任何限制.
如果不指定任何策略选项,则采用从根登录策略获得的登录策略值.
SQL语句108SybaseIQ表6.
登录策略选项选项描述值ROOT策略的初始值适用于locked如果此选项的值为ON,则会禁止用户创建新连接ON、OFFOFF仅限没有DBA权限的用户max_connections用户可进行的最大并发连接数.
0–2147483647无限制仅限没有DBA权限的用户max_days_since_login同一用户进行的两次连续登录之间可经过的最大天数.
0–2147483647无限制仅限没有DBA权限的用户max_failed_login_attempts自上一次成功登录尝试后,帐户锁定前可登录到用户帐户的最大失败尝试次数.
0–2147483647无限制仅限没有DBA权限的用户max_non_dba_con-nections没有DBA权限的用户可以进行的最大并发连接数.
只有root登录策略支持此选项.
0–2147483647无限制仅限没有DBA权限的用户.
仅适用于root登录策略.
password_expiry_on_next_login如果此选项的值为ON,则用户的口令将会在下一次登录时过期.
ON、OFFOFF所有用户(包括那些具有DBA权限的用户)password_grace_time在口令到期前剩余的天数,在此期间允许登录,但缺省post_login过程将发出警告.
0–21474836470所有用户(包括那些具有DBA权限的用户)password_life_time必须更改口令前的最大天数.
0–2147483647无限制所有用户(包括那些具有DBA权限的用户)权限必须具有DBA或USERADMIN权限.
SQL语句参考:语句和选项109CREATEMESSAGE语句[T-SQL]将用户定义消息添加到SYSUSERMESSAGES系统表,以供PRINT和RAISERROR语句使用.
语法CREATEMESSAGEmessage-number.
.
.
AS'message-text'用法CREATEMESSAGE将消息号与消息字符串关联.
在PRINT和RAISERROR语句中可以使用消息号.
message_number—要添加的消息的消息号.
用户定义消息的消息号必须为20000或更大.
message_text—要添加的消息的文本.
最大长度是255字节.
PRINT和RAISERROR识别要输出的消息文本中的占位符.
一条消息最多可包含20个任意顺序的、各不相同的占位符.
消息的文本发送到客户端时,这些占位符将被替换为消息后面任意参数的格式化内容.
将消息翻译成一种具有不同语法结构的语言时,占位符进行编号以允许参数重排序.
参数占位符的形式为"%nn!
",即百分号(%)后跟一个1到20之间的整数,然后是一个感叹号(!
),其中整数代表参数在参数列表中的位置.
"%1!
"是第一个参数,"%2!
"是第二个参数,依此类推.
没有与sp_addmessage的language参数相对应的参数.
副作用自动提交标准SQL-ISO/ANSISQL语法的供应商扩展.
Sybase—在AdaptiveServerEnterprise中,由sp_addmessage过程提供CREATEMESSAGE功能.
权限必须具有RESOURCE权限.
另请参见PRINT语句[T-SQL](第253页)SQL语句110SybaseIQRAISERROR语句[T-SQL](第256页)CREATEMULTIPLEXSERVER语句创建Multiplex服务器.
语法变量声明:CREATEMULTIPLEXSERVERserver-nameDATABASE'dbfile'host-portlist[ROLE{READER|WRITER}][STATUS|{INCLUDED|EXCLUDED}]参数host-port-list:–{[PRIVATE]HOST'hostname'PORTportnumber}示例示例1–请参见"通过InteractiveSQL添加Multiplex服务器".
用法仅适用于Multiplex.
如果计划将UNIX软(符号)链接用于服务器路径,请在运行CREATEMULTIPLEXSERVER之前创建软链接.
启动新服务器时,数据库文件路径必须匹配创建该服务器时指定的数据库文件路径.
根据服务器启动选项-n的规则选择Multiplex服务器的名称(server-name).
请参见《实用程序指南》第1章"运行数据库服务器"中的"数据库服务器启动".

创建初始Multiplex服务器时,协调节点行和辅助节点行将添加到SYS.
ISYSIQMPXSERVER.
事务日志以两条单独CREATEMULTIPLEXSERVER命令的形式记录本操作,一条记录协调节点,一条记录辅助节点.
SYS.
ISYSIQMPXSERVER系统表将HOSThostnamePORTportname对在其connection_info字符串中存储为host:port[;host:port…].
注意:如果运行Multiplex服务器的计算机有多块冗余网卡映射到其它网络地址,则使用Multiplexhost:port对.
可以按照任意顺序指定子句DATABASE、host-portlist、ROLE和STATUS.
缺省ROLE是READER.
缺省STATUS是INCLUDED.
host-port-list关键字PRIVATE指定用于专用互连的特定HOSTPORT对.
一条单独专用互连,可提供Multiplex进程间通信(MIPC)所需的高可用性和高性能网络.
SybaseSQL语句参考:语句和选项111IQSybaseIQ自动打开专用端口;无需在启动服务器时使用host-port-list将其列出.
所有公共端口和专用端口都需要使用唯一端口号,以避免冲突.
添加服务器时,协调器必须正在运行,但您可以从Multiplex中的任何服务器运行CREATEMULTIPLEXSERVER命令.
此语句将自动提交.
权限必须具有DBA或MULTIPLEXADMIN权限.
CREATEPROCEDURE语句在数据库中创建新的用户定义SQL过程.
要创建外部过程接口,请参见"CREATEPROCEDURE语句(外部过程)".
语法CREATE[ORREPLACE|TEMPORARY]PROCEDURE[owner.
]procedure-name([parameter,…]){[RESULT(result-column,…)|NORESULTSET][SQLSECURITY{INVOKER|DEFINER}][ONEXCEPTIONRESUME]compoundstatement|ATlocation-string参数parameter:–parameter_modeparameter-namedata-type[DEFAULTexpression]|SQLCODE|SQLSTATEparameter_mode:–IN|OUT|INOUTresult-column:–column-namedata-type示例示例1–使用case语句对查询结果归类:CREATEPROCEDUREProductType(INproduct_idINT,OUTtypeCHAR(10))BEGINDECLAREprod_nameCHAR(20);SELECTnameINTOprod_nameFROM"GROUPO".
"Products"WHEREID=product_id;CASEprod_nameWHEN'TeeShirt'THENSETtype='Shirt'WHEN'Sweatshirt'THENSETtype='Shirt'WHEN'BaseballCap'THENSETtype='Hat'SQL语句112SybaseIQWHEN'Visor'THENSETtype='Hat'WHEN'Shorts'THENSETtype='Shorts'ELSESETtype='UNKNOWN'ENDCASE;END示例2–使用游标并循环通过游标的行以返回单值:CREATEPROCEDURETopCustomer(OUTTopCompanyCHAR(35),OUTTopValueINT)BEGINDECLAREerr_notfoundEXCEPTIONFORSQLSTATE'02000';DECLAREcurThisCustCURSORFORSELECTCompanyName,CAST(sum(SalesOrderItems.
Quantity*Products.
UnitPrice)ASINTEGER)VALUEFROMCustomersLEFTOUTERJOINSalesOrdersLEFTOUTERJOINSalesorderItemsLEFTOUTERJOINProductsGROUPBYCompanyName;DECLAREThisValueINT;DECLAREThisCompanyCHAR(35);SETTopValue=0;OPENcurThisCust;CustomerLoop:LOOPFETCHNEXTcurThisCustINTOThisCompany,ThisValue;IFSQLSTATE=err_notfoundTHENLEAVECustomerLoop;ENDIF;IFThisValue>TopValueTHENSETTopValue=ThisValue;SETTopCompany=ThisCompany;ENDIF;ENDLOOPCustomerLoop;CLOSEcurThisCust;END用法CREATEPROCEDURE在数据库中创建过程.
具有DBA权限的用户可以通过指定owner为其他用户创建过程.
过程由CALL语句激活.
注意:创建存储过程有两种方式:ISO/ANSISQL和T-SQL.
例如,当使用CREATEPROCEDURE语法时,BEGINTRANSACTION特定于T-SQL.
请不要在创建存储过程时混合语法.
请参见"CREATEPROCEDURE语句[T-SQL]".
CREATEPROCEDURE—可以创建永久的或临时的(TEMPORARY)存储过程.
可以将PROC用作PROCEDURE的同义词.
SQL语句参考:语句和选项113参数名必须符合其它数据库标识符(如列名)的规则,而且必须是有效的SQL数据类型.
请参见《参考:构件块、表和过程》>"SQL数据类型".
这些关键字具有以下含义:参数可以使用以下关键字之一作为前缀:IN、OUT和INOUT.
如果不指定关键字,参数在缺省情况下为INOUT.
这些关键字具有以下含义:IN—此参数是一个为过程提供值的表达式.
OUT—此参数是一个可由过程赋值的变量.
INOUT—此参数是一个为过程提供值的变量,并且可由过程赋值.
使用CALL执行过程时,不需要指定所有的参数.
如果在CREATEPROCEDURE语句中提供了缺省值,则系统会为缺少的参数指派缺省值.
如果CALL语句中未提供参数,且缺省值未设置,则会给出错误.
SQLSTATE和SQLCODE是特殊参数,它们在过程结束时输出SQLSTATE或SQLCODE值(它们是OUT参数).
无论是否指定SQLSTATE和SQLCODE参数,总是可以在过程调用后立即检查SQLSTATE和SQLCODE特殊值以测试过程的返回状态.
SQLSTATE和SQLCODE特殊值会由下一个SQL语句修改.
如果将SQLSTATE或SQLCODE作为过程参数提供,则允许返回代码存储在变量中.
指定CREATEORREPLACEPROCEDURE将创建一个新过程或替换同名的现有过程.
此子句更改过程的定义,但保留现有权限.
不能将ORREPLACE子句与临时过程一起使用.
另外,如果被替换的过程已在使用中,则会返回错误.
如果指定CREATETEMPORARYPROCEDURE,则将意味着该存储过程仅对创建它的连接可见,并在删除该连接时随之自动删除.
您也可以显式删除临时存储过程.
您无法在临时存储过程上执行ALTER、GRANT或REVOKE,而且与其它存储过程不同,临时存储过程不会在目录或事务日志中予以记录.
临时过程使用其创建者(当前用户)或指定所有者的权限执行.
可以在以下情况下为临时过程指定所有者:临时过程是在永久存储过程中创建的临时和永久过程有同样的所有者要删除临时过程的所有者,请先删除临时过程.
当您与只读数据库连接时,可以创建和删除临时存储过程;它们不能是外部过程.

例如,以下临时存储过程会删除名为CustRank的表(如果此表存在).
对于此示例,过程假定表名是唯一的,可以由过程创建者在不指定表所有者的情况下引用:CREATETEMPORARYPROCEDUREdrop_table(IN@TableNamechar(128))BEGINIFEXISTS(SELECT*FROMSYS.
SYSTABWHEREtable_name=@TableName)THENEXECUTEIMMEDIATE'DROPTABLE"'||@TableName||'"';MESSAGE'Table"'||@TableName||'"dropped'toclient;SQL语句114SybaseIQENDIF;END;CALLdrop_table('CustRank')RESULT—声明结果集中的列的数量和类型.
RESULT关键字后面括在括号内的列表定义结果的列名和类型.
描述CALL语句时,嵌入式SQLDESCRIBE或ODBCSQLDescribeCol会返回此信息.
《参考:构件块、表和过程》>"SQL数据类型"中列出了允许使用的数据类型.
有关从过程返回的结果集的详细信息,请参见《系统管理指南第二卷》>"使用过程和批处理".
因执行的方式不同,有些过程可生成多个结果集.
例如,下面的过程在有些情况下返回两列,在有些情况下返回一列.
CREATEPROCEDUREnames(INformalchar(1))BEGINIFformal='n'THENSELECTGivenNameFROMEmployeesELSESELECTSurname,GivenNameFROMEmployeesENDIFEND包含可变结果集的过程必须用不带RESULT子句的语句编写,或者用Transact-SQL编写.
它们的使用受以下限制:嵌入式SQL—您必须在打开用于结果集的游标之后、但在返回任何行之前DESCRIBE(描述)过程调用,才能获得正确形式的结果集.
需要DESCRIBE语句的CURSORcursor-name子句.
ODBC、OLEDB、ADO.
NET—可变结果集过程可由ODBC应用程序使用.
结果集的正确描述由驱动程序或提供程序完成.
OpenClient应用程序—OpenClient应用程序可以使用可变结果集过程.
如果过程仅返回一个结果集,则应使用RESULT子句.
该子句可防止ODBC和OpenClient应用程序在游标打开后再次描述结果集.
要处理多个结果集,ODBC必须描述当前正在执行的游标,而不是描述由过程定义的结果集.
因此,ODBC并不总是按照过程定义的RESULT子句中的定义来描述列名称.
为避免这种问题,请在生成结果集的SELECT语句中使用列的别名.
NORESULTSET—声明此过程不返回结果集.
当外部环境需要知道某个过程不返回结果集时,这是非常有用的.
SQLSECURITY—定义是作为INVOKER(调用过程的用户)还是作为DEFINER(拥有过程的用户)执行过程.
缺省为DEFINER.
如果指定了SQLSECURITYINVOKER,将使用更多内存,因为必须为调用过程的每个用户进行注释.
此外,还将以调用者身份执行名称解析.
因此,请使用所有对象名(表、过程等)的相应所有者限定这些名称.
例如,假定user1创建以下过程:SQL语句参考:语句和选项115CREATEPROCEDUREuser1.
myProcedure()RESULT(columnAINT)SQLSECURITYINVOKERBEGINSELECTcolumnAFROMtable1;END;如果user2尝试运行此过程,而且表user2.
table1不存在,则系统会产生表查找错误.
此外,如果user2.
table1存在,则系统会使用该表,而不使用预期的user1.
table1.
为防止出现这种情况,请在语句中限定表引用(user1.
table1,而不是仅table1).
如果使用ONEXCEPTIONRESUME,则过程会根据ON_TSQL_ERROR选项的设置来执行操作.
如果ON_TSQL_ERROR设置为CONDITIONAL(缺省值),则会在下一条语句能处理错误时继续执行该语句;否则,便会退出.
错误处理语句包括:IFSELECT@variable=CASELOOPLEAVECONTINUECALLEXECUTESIGNALRESIGNALDECLARESETVARIABLE请勿将显式错误处理代码与ONEXCEPTIONRESUME子句一起使用.
请参见"ON_TSQL_ERROR选项[TSQL]".
ATlocation-string—在当前数据库中为location-string指定的远程过程创建代理存储过程.
在location-string中,AT子句支持将分号(;)用作分隔符.
如果没有分号,则使用句点作为字段分隔符.
这样即可在数据库和所有者字段中使用文件名和扩展名.

远程过程在输出变量中最多只能返回254个字符.
如果远程过程可以返回结果集,但不是在所有情况下都能返回,则本地过程定义必须包含RESULT子句.
有关远程服务器的信息,请参见"CREATESERVER语句".
有关使用远程过程的信息,请参见《系统管理指南第二卷》>"访问远程数据">"SybaseIQ和远程数据">"远程过程调用(RPC)".
注意:当删除和创建过程时,在SybaseIQ之前创建的数据库可能最终达到proc_id的最大限制32767,并导致CREATEPROCEDURE在SybaseIQ12.
6中返回"项已存SQL语句116SybaseIQ在"错误.
有关解决方法,请参见《系统管理指南第一卷》>"故障排除提示">"特定情况的解决方案">"资源问题">"过程标识符不足".
副作用自动提交标准SQL-符合ISO/ANSISQL标准.
Sybase—Transact-SQLCREATEPROCEDURE语句与此不同.
SQLJ—提议的SQLJ1标准中指定了Java结果集的语法扩展.
权限必须具有RESOURCE权限,否则只能创建临时过程.
对于外部过程,或要为另一用户创建过程,则必须具有DBA权限.
另请参见在过程中引用临时表(第117页)BEGIN……END语句(第49页)CALL语句(第55页)CREATEPROCEDURE语句[T-SQL](第118页)CREATEPROCEDURE语句(外部过程)(第120页)CREATESERVER语句(第132页)DROP语句(第170页)EXECUTEIMMEDIATE语句[ESQL][SP](第185页)GRANT语句(第202页)RAISERROR语句[T-SQL](第256页)ON_TSQL_ERROR选项[TSQL](第412页)在过程中引用临时表如果临时表定义不一致,则在过程之间共享该表会导致出现问题.
例如,假设有两个过程procA和procB,这两个过程均定义临时表temp_table,并调用名为sharedProc的另一过程.
即未调用procA,也未调用procB,所以临时表还不存在.
现在假设temp_table在procA中的定义与在procB中的定义略有不同,而两个过程均使用相同的列名称和类型,但列顺序不同.
调用procA时,它返回预期结果.
但调用procB时,它返回不同的结果.
这是因为,调用procA时,它创建temp_table,然后调用sharedProc.
调用sharedProc时,会解析并验证其中的SELECT语句,然后缓存该语句解析后的表SQL语句参考:语句和选项117示形式,这样执行另一SELECT语句时就可以再次使用该语句.
缓存的形式可反映procA中表定义的列顺序.
调用procB时将重新创建temp_table,但列顺序不同.
procB调用sharedProc时,数据库服务器使用SELECT语句的缓存表示形式.
因此,结果不同.
可通过执行以下某项操作避免出现这种问题:确保以此方式使用的临时表定义一致考虑改用全局临时表CREATEPROCEDURE语句[T-SQL]创建与AdaptiveServerEnterprise兼容的新过程.
语法SybaseIQ支持Transact-SQLCREATEPROCEDURE语句的下列子集:CREATE[ORREPLACE]PROCEDURE[owner.
]procedure_nameparameter_namedata-type[=default][OUTPUT[)]]…[WITHRECOMPILE]…AS…statement-list用法Transact-SQL和SybaseIQSQL语句之间的差异:指定CREATEORREPLACEPROCEDURE将创建一个新过程或替换同名的现有过程.
此子句更改过程的定义,但保留现有权限.
另外,如果被替换的过程已在使用中,则会返回错误.
带@前缀的变量名—"@"符表示Transact-SQL变量名,而SybaseIQ变量可以是任何有效的标识符,也可以带@前缀.
输入和输出参数—SybaseIQ过程参数指定为IN、OUT或INOUT;而Transact-SQL过程参数在缺省情况下为INPUT参数,也可以指定为OUTPUT.
在SybaseIQ中声明为INOUT或OUT的参数在Transact-SQL中应使用OUTPUT进行声明.
参数缺省值—SybaseIQ使用关键字DEFAULT为过程参数提供缺省值,而Transact-SQL使用等号(=)提供缺省值.
返回结果集—SybaseIQ使用RESULT子句指定返回的结果集.
在Transact-SQL过程中,第一个查询的列名或别名将返回到调用环境中:CREATEPROCEDUREshowdept@deptnamevarchar(30)ASSELECTEmployees.
Surname,Employees.
givenNameFROMDepartments,EmployeesWHEREDepartments.
DepartmentName=@deptnameSQL语句118SybaseIQANDDepartments.
DepartmentID=Employees.
DepartmentID对应的SybaseIQ过程:CREATEPROCEDUREshowdept(indeptnamevarchar(30))RESULT(lastnamechar(20),firstnamechar(20))ONEXCEPTIONRESUMEBEGINSELECTEmployees.
SurName,Employees.
GivenNameFROMDepartments,EmployeesWHEREDepartments.
DepartmentName=deptnameANDDepartments.
DepartmentID=Employees.
DepartmentIDEND过程主体—Transact-SQL过程的主体是一系列以关键字AS开始的Transact-SQL语句.
SybaseIQ过程的主体是用关键字BEGIN和END括起来的复合语句.
注意:创建存储过程有两种方式:T-SQL和SQL/92.
例如,当使用CREATEPROCEDURE语法时,BEGINTRANSACTION特定于T-SQL.
请不要在创建存储过程时混合语法.
副作用自动提交标准SQL-ISO/ANSISQL语法的Transact-SQL扩展.
Sybase—SybaseIQ支持AdaptiveServerEnterpriseCREATEPROCEDURE语句语法的子集.
如果提供了Transact-SQLWITHRECOMPILE可选子句,它将被忽略.
数据库启动后,当过程第一次执行时,SQLAnywhere总是重新编译它们,并存储编译的过程直到数据库停止.
不支持过程组.
权限必须具有RESOURCE权限.
另请参见CREATEPROCEDURE语句(第112页)SQL语句参考:语句和选项119CREATEPROCEDURE语句(外部过程)创建本机或外部过程的接口.
要创建SQL过程,请参见"CREATEPROCEDURE语句".
要创建表UDF或TPF,请参见"CREATEPROCEDURE语句(表UDF)".
语法CREATE[ORREPLACE]PROCEDURE[owner.
]procedure-name([parameter,…])[RESULT(result-column,…)|NORESULTSET][DYNAMICRESULTSETSinteger-expression][SQLSECURITY{INVOKER|DEFINER}][EXTERNALNAME'external-call'[LANGUAGEenvironment-name]参数parameter:–parameter_modeparameter-namedata-type[DEFAULTexpression]|SQLCODE|SQLSTATEparameter_mode:–IN|OUT|INOUTresult-column:–column-namedata-typeenvironment-name:–C_ESQL32|C_ESQL64|C_ODBC32|C_ODBC64|CLR|JAVA|PERL|PHP用法过程的主体由复合语句组成.
有关复合语句的信息,请参见"BEGIN……END语句".
注意:创建存储过程有两种方式:ISO/ANSISQL和T-SQL.
例如,当使用CREATEPROCEDURE语法时,BEGINTRANSACTION特定于T-SQL.
请不要在创建存储过程时混合语法.
请参见"CREATEPROCEDURE语句[T-SQL]".
CREATEPROCEDURE在数据库中创建过程.
具有DBA权限的用户可以通过指定owner为其他用户创建过程.
过程由CALL语句激活.
如果存储过程返回一个结果集,则该函数也无法设置输出参数或返回返回值.

当从多个过程中引用临时表时,如果临时表定义不一致并且引用该表的语句被高速缓存,则可能会发生潜在问题.
可以创建这样的永久存储过程:它们调用用多种编程语言编写的外部或本机过程.
可以将PROC用作PROCEDURE的同义词.
参数名称–参数名称必须符合其它数据库标识符(如列名)的规则.
它们必须是有效的SQL数据类型.
请参见《参考:构件块、表和过程》>"SQL数据类型".
SQL语句120SybaseIQ参数可以使用以下关键字之一作为前缀:IN、OUT或INOUT.
如果不指定这些值中的任何一个,参数在缺省情况下为INOUT.
关键字表示:IN—此参数是一个为过程提供值的表达式.
OUT—此参数是一个可由过程赋值的变量.
INOUT—此参数是一个为过程提供值的变量,并且可由过程赋值.
注意:TABLE参数不能声明为INOUT或OUT.
请参见"CREATEPROCEDURE语句(表UDF)".
使用CALL执行过程时,不需要指定所有的参数.
如果在CREATEPROCEDURE语句中提供了缺省值,则系统会为缺少的参数指派缺省值.
如果CALL语句中没有提供参数并且没有设置缺省值,则发生错误.
注意:无法调用表UDF.
请参见"CREATEPROCEDURE语句(表UDF)".
SQLSTATE和SQLCODE是特殊OUT参数,它们在过程结束时输出SQLSTATE或SQLCODE值.
无论是否指定SQLSTATE和SQLCODE参数,总是可以在过程调用后立即检查SQLSTATE和SQLCODE特殊值以测试过程的返回状态.
SQLSTATE和SQLCODE特殊值会由下一个SQL语句修改.
如果将SQLSTATE或SQLCODE作为过程参数提供,则允许返回代码存储在变量中.
ORREPLACE–指定ORREPLACE(CREATEORREPLACEPROCEDURE)将创建一个新过程或替换同名的现有过程.
此子句更改过程的定义,但保留现有权限.
如果您尝试替换已在使用中的过程,则会返回错误.
您不能创建TEMPORARY外部调用过程.
有关从过程返回的结果集的详细信息,请参见《系统管理指南第二卷》>"使用过程和批处理".
RESULT–声明结果集中的列的数量和类型.
RESULT关键字后面括在括号内的列表定义结果的列名和类型.
描述CALL语句时,嵌入式SQLDESCRIBE或ODBCSQLDescribeCol会返回此信息.
《参考:构件块、表和过程》>"SQL数据类型"中列出了允许使用的数据类型.
调用嵌入式SQL(LANGUAGEC_ESQL32、LANGUAGEC_ESQL64)或ODBC(LANGUAGEC_ODBC32、LANGUAGEC_ODBC64)外部函数的过程可以返回0个或1个结果集.
调用Perl或PHP(LANGUAGEPERL、LANGUAGEPHP)外部函数的过程无法返回结果集.
调用由数据库服务器装载的本地函数的过程无法返回结果集.
调用CLR或Java(LANGUAGECLR、LANGUAGEJAVA)外部函数的过程可以返回0个、1个或更多结果集.
NORESULTSET–声明此过程不返回结果集.
当外部环境需要知道某个过程不返回结果集时,这是非常有用的.
DYNAMICRESULTSETS–将此子句与LANGUAGECLR和LANGUAGEJAVA调用合用.
此子句仅在指定LANGUAGE的情况下有意义.
如果指定了RESULT子句,则DYNAMICRESULTSETS缺省值为1.
如果未指定RESULT子句,则SQL语句参考:语句和选项121DYNAMICRESULTSETS缺省值为0.
请注意,调用Perl或PHP(LANGUAGEPERL、LANGUAGEPHP)外部函数的过程无法返回结果集.
调用由数据库服务器装载的本地函数的过程无法返回结果集.
SQLSECURITY–定义是作为INVOKER(调用过程的用户)还是作为DEFINER(拥有过程的用户)执行过程.
缺省值为DEFINER.
对于外部调用,此子句在外部环境中为非限定对象引用建立所有权上下文.
如果指定了SQLSECURITYINVOKER,将使用更多内存,因为必须为调用过程的每个用户进行注释.
此外,如果指定了SQLSECURITYINVOKER,也将以调用者身份执行名称解析.
因此,应注意利用所有对象的相应所有者限定这些对象的名称(表、过程等).
例如,假定user1创建以下过程:CREATEPROCEDUREuser1.
myProcedure()RESULT(columnAINT)SQLSECURITYINVOKERBEGINSELECTcolumnAFROMtable1;END;如果user2尝试运行此过程,而且表user2.
table1不存在,则系统会产生表查找错误.
此外,如果user2.
table1存在,则系统会使用该表,而不使用预期的user1.
table1.
为防止出现这种情况,请在语句中限定表引用(user1.
table1,而不是仅table1).
EXTERNALNAMELANGUAGE–EXTERNALNAMELANGUAGE'native-call'native-call:[operating-system:]function-name@library;.
.
.
将EXTERNALNAME与LANGUAGEJAVA子句一起使用的过程是包含Java方法的包装.
operating-system:UNIX—使用不带LANGUAGE属性的EXTERNALNAME子句的过程可定义用某种编程语言(如C)编写的本地函数的接口.
本地函数由数据库服务器装载到其地址空间中.
库名可包含文件扩展名,在Windows中通常为.
dll,在UNIX中通常为.
so.
在没有扩展名的情况下,该软件附加平台特定的缺省库文件扩展名.
以下是规范示例:CREATEPROCEDUREmystring(INinstrLONGVARCHAR)EXTERNALNAME'mystring@mylib.
dll;Unix:mystring@mylib.
so';更简单的编写前一个EXTERNALNAME子句的方法(使用特定于平台的缺省设置):CREATEPROCEDUREmystring(INinstrLONGVARCHAR)EXTERNALNAME'mystring@mylib';在被调用时,函数所在的库会装载到数据库服务器的地址空间中.
本地函数将作为服务器的一部分执行.
这种情况下,如果函数引发错误,数据库服务器就会终止.

SQL语句122SybaseIQ因此,建议使用LANGUAGE属性在外部环境中装载和执行函数.
如果函数在外部环境中引发错误,数据库服务器将继续运行.
有关本地库调用的信息,请参见"SQLAnywhereServer-编程">"SQLAnywhere外部调用接口".
注意:此参考指向SQLAnywhere文档.
EXTERNALNAMELANGUAGE'c-call'LANGUAGE{C_ESQL32|C_ESQL64|C_ODBC32|C_ODBC64}c-call:[operating-system:]function-name@library;.
.
.
operating-system:UNIX要在外部环境中(而不是数据库服务器中)调用已编译的本机C函数,就要使用EXTERNALNAME子句后跟LANGUAGE属性(指定C_ESQL32、C_ESQL64、C_ODBC32和C_ODBC64之一)来定义存储过程或函数.
如果指定LANGUAGE属性,函数所在的库就会由外部进程装载,而且外部函数将作为该外部进程的一部分执行.
这种情况下,如果函数引发错误,数据库服务器将继续运行.
示例过程定义:CREATEPROCEDUREODBCinsert(INProductNameCHAR(30),INProductDescriptionCHAR(50))NORESULTSETEXTERNALNAME'ODBCexternalInsert@extodbc.
dll'LANGUAGEC_ODBC32;请参见"SQLAnywhereServer–编程">"SQLAnywhere外部环境支持">"ESQL和ODBC外部环境".
注意:此参考指向SQLAnywhere文档.
EXTERNALNAME'clr-call'LANGUAGECLRclr-call:dll-name::function-name(param-type-1,.
.
.
)operating-system:UNIX要在外部环境中调用.
NET函数,过程接口应使用后跟LANGUAGECLR属性的EXTERNALNAME子句来定义.
CLR存储过程或函数在行为上与SQL存储过程或函数相同,不同之处是该过程或函数的代码是用.
NET语言(如C#或VisualBasic)编写的,而且该过程或函数的执行发生在数据库服务器之外(即,在单独的.
NET可执行文件内).
示例过程定义:CREATEPROCEDUREclr_interface(INp1INT,SQL语句参考:语句和选项123INp2UNSIGNEDSMALLINT,OUTp3LONGVARCHAR)NORESULTSETEXTERNALNAME'CLRlib.
dll::CLRproc.
Run(int,ushort,outstring)'LANGUAGECLR;请参见"SQLAnywhereServer–编程">"SQLAnywhere外部环境支持">"CRL外部环境".
注意:此参考指向SQLAnywhere文档.
EXTERNALNAME'perl-call'LANGUAGECLRperl-call:$sa_perl_return=perl-sub($sa_perl_arg0,.
.
.
)要在外部环境中调用Perl函数,就要使用EXTERNALNAME子句后跟LANGUAGEPERL属性来定义过程接口.
Perl存储过程或函数在行为上与SQL存储过程或函数相同,不同之处是该过程或函数的代码是用Perl编写的,而且该过程或函数的执行发生在数据库服务器之外(即,在Perl可执行实例内).
示例过程定义:CREATEPROCEDUREPerlWriteToConsole(INstrLONGVARCHAR)NORESULTSETEXTERNALNAME'WriteToServerConsole($sa_perl_arg0)'LANGUAGEPERL;请参见"SQLAnywhereServer–编程">"SQLAnywhere外部环境支持">"PERL外部环境".
注意:此参考指向SQLAnywhere文档.
EXTERNALNAME'perl-call'LANGUAGEPHPprintphp-func($argv[1],.
.
.
)要在外部环境中调用PHP函数,就要使用EXTERNALNAME子句后跟LANGUAGEPHP属性来定义过程接口.
PHP存储过程或函数在行为上与SQL存储过程或函数相同,不同之处是该过程或函数的代码是用PHP编写的,而且该过程或函数的执行发生在数据库服务器之外(即,在PHP可执行实例内).
示例过程定义:CREATEPROCEDUREPHPPopulateTable()NORESULTSETEXTERNALNAME'ServerSidePHPSub()'LANGUAGEPHP;SQL语句124SybaseIQ请参见"SQLAnywhereServer–编程">"SQLAnywhere外部环境支持">"PHP外部环境".
注意:此参考指向SQLAnywhere文档.
EXTERNALNAMEjava-callLANGUAGEJAVA'java-call'[package-name.
]class-name.
method-name(method-signaturemethod-signature:([field-descriptor,return-descriptorJava方法签名是参数类型和返回值类型的压缩字符表示形式.
要在外部环境中调用Java方法,就要使用EXTERNALNAME子句后跟LANGUAGEJAVA属性来定义过程接口.
Java接口存储过程或函数在行为上与SQL存储过程或函数相同,不同之处是该过程或函数的代码是用Java编写的,而且该过程或函数的执行发生在数据库服务器之外(即在Java虚拟机内).
示例过程定义:CREATEPROCEDUREHelloDemo(INnameLONGVARCHAR)NORESULTSETEXTERNALNAME'Hello.
main([Ljava/lang/String;)V'LANGUAGEJAVA;请参见"SQLAnywhereServer–编程">"SQLAnywhere外部环境支持">"Java外部环境".
注意:此参考指向SQLAnywhere文档.
表7.
JavaField-descriptor和Return-descriptor字段类型Java数据类型BbyteCcharDdoubleFfloatIintJlongLclass-name;class-name类的实例.
类名必须是完全限定的,而且名称中的任何点都必须由反斜杠代替.
例如,java/lang/StringSshortV无类型SQL语句参考:语句和选项125字段类型Java数据类型Zboolean[数组的每个维度都使用一个例如:doublesome_method(booleana,intb,java.
math.
BigDecimalc,byte[][]d,java.
sql.
ResultSet[]d){}具有以下签名:'(ZILjava/math/BigDecimal;[[B[Ljava/sql/ResultSet;)D'副作用自动提交标准SQL-符合ISO/ANSISQL标准.
Sybase—Transact-SQLCREATEPROCEDURE语句与此不同.
SQLJ—提议的SQLJ1标准中指定了Java结果集的语法扩展.
权限必须具有RESOURCE权限,否则只能创建临时过程.
对于外部过程,或要为另一用户创建过程,则必须具有DBA权限.
另请参见ALTERPROCEDURE语句(第25页)BEGIN……END语句(第49页)CALL语句(第55页)CREATEPROCEDURE语句(第112页)CREATEPROCEDURE语句[T-SQL](第118页)DROP语句(第170页)EXECUTEIMMEDIATE语句[ESQL][SP](第185页)GRANT语句(第202页)SQL语句126SybaseIQCREATEPROCEDURE语句(JavaUDF)创建外部Java表UDF的接口.
外部过程的CREATEPROCEDURE语句参考信息位于单独的主题中.
表UDF的CREATEPROCEDURE语句参考信息位于单独的主题中.
如果您的查询引用SybaseIQ表,请注意相对于仅引用Catalog存储表的查询,该查询要应用不同的语法和参数.
仅在FROM子句中支持Java表UDF.
语法对于至少引用一个SybaseIQ表的查询:CREATE[ORREPLACE]PROCEDURE[owner.
]procedure-name([parameter,…])[RESULT(result-column,.
.
.
)][SQLSECURITY{INVOKER|DEFINER}]EXTERNALNAME'java-call'[LANGUAGEJava]}对于仅引用Catalog存储表的查询:CREATE[ORREPLACE]PROCEDURE[owner.
]procedure-name([parameter,…])[RESULT(result-column,.
.
.
)]|NORESULTSET[DYNAMICRESULTSETSinteger-expression][SQLSECURITY{INVOKER|DEFINER}]EXTERNALNAME'java-call'[LANGUAGEJava]}参数参数–对于至少引用一个SybaseIQ表的查询:[INparameter_modeparameter-namedata-type[DEFAULTexpression]对于仅引用Catalog存储表的查询:[IN|OUT|INOUT]parameter_modeparameter-namedata-type[DEFAULTexpression]result-column–column-namedata-typeJAVA–[ALLOW|DISALLOWSERVERSIDEREQUESTS]java-call–'[package-name.
]class-name.
method-namemethod-signature'用法对于Java表函数,只允许一个结果集.
如果Java表函数使用SybaseIQ表连接或SybaseIQ表中某个列是Java表函数的参数,则仅支持一个结果集.
如果Java表函数是FROM子句中唯一的项目,则允许N个结果集.
JAVA:[ALLOW|DISALLOWSERVERSIDEREQUESTS]:SQL语句参考:语句和选项127DISALLOW为缺省值.
ALLOW指示允许服务器端连接.
注意:除非有必要,否则不要指定ALLOW.
ALLOW的设置会减慢特定类型的SybaseIQ表连接.
如果将过程定义从ALLOW改为DISALLOW(反之亦然),则直到建立新的连接后,才会确认更改.
不要在同一查询中将UDF与ALLOWSERVERSIDEREQUESTS和DISALLOWSERVERSIDEREQUESTS同时使用.
标准SQL—符合ISO/ANSISQL标准.
Sybase—Transact-SQLCREATEPROCEDURE语句与此不同.
SQLJ—提议的SQLJ1标准中指定了Java结果集的语法扩展.
权限必须具有RESOURCE权限,否则只能创建临时过程.
具有DBA权限的用户可以通过指定owner为其他用户创建UDF.
用户必须具有DBA权限才能创建外部UDF,或者为另一用户创建外部UDF.
CREATEPROCEDURE语句(表UDF)创建外部表用户定义函数的接口(表UDF).
用户必须经过专门授权才能使用表UDF.
使用a_v4_extfnAPI定义表UDF.
针对不使用a_v3_extfn或者a_v4_extfnAPI的外部过程,请于相关专题中获取CREATEPROCEDURE语句的参考信息.
针对JavaUDF,请于相关专题中获取CREATEPROCEDURE语句的参考信息.
语法CREATE[ORREPLACE]PROCEDURE[owner.
]procedure-name([parameter[,…]])|RESULTresult-column[,…])[SQLSECURITY{INVOKER|DEFINER}]EXTERNALNAME'external-call'参数参数:–[IN]parameter-namedata-type[DEFAULTexpression]|[IN]parameter-nametable-type表类型:–TABLE(column-namedata-typeSQL语句128SybaseIQ外部调用:–[column-name:]function-name@library;.
.
.
用法语句CREATEPROCEDURE语句在数据库中创建过程.
具有DBA权限的用户可以通过指定所有者为其他用户创建过程.
如果存储过程返回一个结果集,则该函数也无法设置输出参数或返回返回值.
当从多个过程中引用临时表时,如果临时表定义不一致并且引用该表的语句被高速缓存,则可能会发生潜在问题.
在过程中引用临时表时应小心谨慎.
您可以使用CREATEPROCEDURE语句,以创建使用不同于SQL的编程语言实现的外部表UDF.
然而,在创建外部UDF之前请注意表UDF的限制.
适用于标量参数、结果列和TABLE参数列的数据类型必须为有效的SQL数据类型.
参数名必须符合其它数据库标识符(如列名)的规则.
它们必须是有效的SQL数据类型.
TPF支持混合标量参数以及单个表参数.
TABLE参数必须为输入行组定义模式,输入行组则由UDF进行处理.
TABLE参数的定义包括列名和列数据类型.
TABLE(c1INT,c2CHAR(20))上述示例定义了一个包含两列的模式,分别是INT类型的c1列和CHAR(20)类型的c2列.
UDF所处理的每一行都必须为包含两个值的元组.
与标量参数不同,无法为表参数分配默认值.
IN关键字–参数可冠以关键字IN作为前缀:IN—该参数对象为标量参数提供值,或者为UDF的TABLE参数提供一组值.
注意:不能将TABLE参数声明为INOUT或者OUT.
只能有一个表参数(其位置并不重要).
ORREPLACE–指定ORREPLACE(CREATEORREPLACEPROCEDURE)将创建一个新过程或替换同名的现有过程.
该子句更改过程的定义,但保留现有权限.
如果您尝试替换已在使用中的过程,则会返回错误.
RESULT–为外部UDF声明其结果集中的列的名称和数据类型.
各列的数据类型必须为有效的SQL数据类型(例如,结果集中的列不能为TABLE数据类型).
结果中的数据集隐含着TABLE数据类型.
外部UDF只能有一个TABLE类型的结果集.
注意:TABLE不是输出值.
表UDF的结果集中不能包含有LONGVARBINARY或LONGVARCHAR数据类型,但是参数化表函数(TPF)的结果集中可以包含有大对象(LOB)数据类型.
TPF不能生成LOB数据,但是其结果集中的列可以为LOB数据类型.
然而,在输出中得到LOB数据的唯一方法是将列从输入表传递至输出表.
如示例文件tpf_blob.
cxx所示,描述属性EXTFNAPIV4_DESCRIBE_COL_VALUES_SUBSET_OF_INPUT允许执行该操作.
SQL语句参考:语句和选项129关于过程返回的结果集的详细信息,请参见《系统管理指南》:第二卷>使用过程和批处理.
SQLSECURITY–对于是以INVOKER(调用过程的用户)身份,还是以DEFINER(拥有过程的用户)身份执行过程进行定义.
缺省时以DEFINER身份.
如果指定了SQLSECURITYINVOKER,则将会占用更多的内存,因为必须为调用过程的每名用户进行标注.
此外,如果指定了SQLSECURITYINVOKER,也将以调用者身份执行名称解析.
因此,应注意利用所有对象的相应所有者限定这些对象的名称(表、过程等).
例如,假设user1创建以下过程:CREATEPROCEDUREuser1.
myProcedure()RESULT(columnAINT)SQLSECURITYINVOKERBEGINSELECTcolumnAFROMtable1;END;如果user2试图运行此过程,而表user2.
table1不存在,则会产生表查寻错误.
此外,如果user2.
table1存在,就会使用该表,而不使用预期的user1.
table1.
为防止出现这种情况,请在语句中限定表引用(user1.
table1,而不是仅table1).
EXTERNALNAME–EXTERNALNAME'external-call':external-call:[operating-system:]function-name@library;.
.
.
.
外部UDF必须含有EXTERNALNAME子句,该子句使用编程语言(例如C语言)定义了函数接口.
数据库服务器则将函数装载入其地址空间.
库名可包含文件扩展名,在Windows中通常为.
dll,在UNIX中通常为.
so.
在没有扩展名的情况下,该软件附加平台特定的缺省库文件扩展名.
以下是规范示例.
CREATEPROCEDUREmystring(INinstrCHAR(255),INinput_tableTABLE(AINT))RESULT(CHAR(255))EXTERNALNAME'mystring@mylib.
dll;Unix:mystring@mylib.
so'更简单的编写前一个EXTERNALNAME子句的方法(使用特定于平台的缺省设置)如下:CREATEPROCEDUREmystring(INinstrCHAR(255),INinput_tableTABLE(AINT))RESULT(CHAR(255))EXTERNALNAME'mystring@mylib'标准SQL—符合ISO/ANSISQL标准.
Sybase—Transact-SQLCREATEPROCEDURE语句与此不同.
SQLJ—Java结果集与建议采用的标准的语法扩展相同.
SQL语句130SybaseIQ权限必须具有RESOURCE权限,否则只能创建临时过程.
具有DBA权限的用户可以通过指定所有者为其他用户创建UDF.
用户必须具有DBA权限,才能创建外部UDF,或者为其他用户创建外部UDF.
CREATESCHEMA语句为数据库用户创建模式,模式是表、视图以及权限和其关联权限的集合.

语法CREATESCHEMAAUTHORIZATIONuserid.
.
.
[{create-table-statement|create-view-statement|grant-statement}]…用法userid必须是当前连接的用户ID.
无法为其他用户创建模式.
用户ID不区分大小写.
如果CREATESCHEMA语句中的任何语句失败,整个CREATESCHEMA语句将回退.
CREATESCHEMA语句仅是一种将各CREATE和GRANT语句收集到一个操作中的方式.
数据库中没有创建任何SCHEMA数据库对象,要删除对象,必须使用各DROPTABLE或DROPVIEW语句.
要撤消权限,请对每个授予的权限使用REVOKE语句.
注意:CREATESCHEMA语句在活动Multiplex上是无效的.
各CREATE或GRANT语句不用语句分隔符分隔.
语句分隔符用于标记CREATESCHEMA语句其本身的结尾.
必须排序各CREATE或GRANT语句,以便在授予对象权限之前创建它们.
不建议为用户创建多个模式,将来的版本可能也不支持这样做.
副作用自动提交标准SQL-符合ISO/ANSISQL标准.
Sybase—SybaseIQ不支持在CREATESCHEMA语句中使用REVOKE语句,也不允许在Transact-SQL批处理或过程中使用它.
权限必须具有RESOURCE权限.
SQL语句参考:语句和选项131另请参见CREATETABLE语句(第136页)CREATEVIEW语句(第151页)GRANT语句(第202页)CREATESERVER语句向ISYSSERVER表中添加服务器.
语法CREATESERVERserver-nameCLASS'server-class'USING'connection-info'[READONLY]参数server-class:–{ASAJDBC|ASEJDBC|ASAODBC|ASEODBC|DB2ODBC|MSSODBC|ORAODBC|ODBC}connection-info:–{machine-name:port-number[/dbname]|data-source-name}示例示例1–为基于JDBC的AdaptiveServerEnterprise服务器创建一个名为ase_prod的远程服务器.
它的计算机名称是"banana",端口号是3025.
CREATESERVERase_prodCLASS'asejdbc'USING'banana:3025'示例2–创建一个名为testasa的SQLAnywhere远程服务器,它位于"apple"计算机上,并监听端口号2638.
CREATESERVERtestasaCLASS'asajdbc'USING'apple:2638'示例3–为Oracle服务器创建一个名为oracle723的远程服务器.
它的ODBC数据源名称是"oracle723".
CREATESERVERoracle723CLASS'oraodbc'USING'oracle723'用法CREATESERVER从SybaseIQ目录中定义远程服务器.
有关服务器类和如何配置服务器的详细信息,请参见《系统管理指南第二卷》>"用于远程数据访问的服务器类".
SQL语句132SybaseIQUSING子句—如果使用基于JDBC的服务器类,则USING子句为hostname:port-number[/dbname],其中:主机名—是运行远程服务器的计算机.
端口号—是远程服务器监听的TCP/IP端口号.
SybaseIQ和SQLAnywhere缺省端口号为2638.
dbname—对于SQLAnywhere远程服务器,如果不指定dbname,则使用缺省数据库.
对于AdaptiveServerEnterprise,缺省值为master数据库,除使用dbname之外,另一个选择是通过其它某些方法(例如,在FORWARDTO语句中),使用另一个数据库.
有关详细信息,请参见《系统管理指南第二卷》>"用于远程数据访问的服务器类">"基于JDBC的服务器类".
如果使用基于ODBC的服务器类,则USING子句为data-source-name.
data-source-name是ODBC数据源名称.
READONLY—READONLY子句指定远程服务器是只读数据源.
SybaseIQ拒绝任何更新请求.
副作用自动提交标准SQL-符合ISO/ANSISQL标准.
Sybase-受OpenClient/OpenServer支持.
权限必须具有DBA权限才能执行此命令.
另请参见ALTERSERVER语句(第27页)DROPSERVER语句(第177页)CREATESERVICE语句允许数据库服务器用作Web服务器.
语法CREATESERVICEservice-nameTYPEservice-type-string[attributes][ASstatement]SQL语句参考:语句和选项133参数attributes:–[AUTHORIZATION{ON|OFF}][SECURE{ON|OFF}][USER{user-name|NULL}][URL[PATH/]{ON|OFF|ELEMENTS}][USING{SOAP-prefix|NULL}]service-type-string:–{'RAW'|'HTML'|'XML'|'SOAP'|'DISH'}示例示例1–若要快速设置Web服务器,请使用-xs开关启动数据库服务器,然后执行以下语句:CREATESERVICEtablesTYPE'HTML'AUTHORIZATIONOFFUSERDBAASSELECT*FROMSYS.
ISYSTAB执行完此语句之后,使用任意Web浏览器打开URLhttp://localhost/tables.
用法CREATESERVICE语句将使数据库服务器充当Web服务器.
在SYSWEBSERVICE系统表中创建一个新条目.
service-name—Web服务名可以是字母数字字符或以下字符组成的任何序列:"/"、或")",但第一个字符不能以斜杠(/)开始,且名称中不能包含两个或两个以上连续的斜杠字符.
service-type-string-标识服务类型.
该类型必须是列出的服务类型之一.
无缺省值.
AUTHORIZATION子句-确定当连接到该服务时用户是否必须指定用户名和口令.
如果AUTHORIZATION为OFF,则需要使用AS子句,并且必须用USER子句标识单个用户.
使用该用户的帐户和权限执行所有请求.
如果AUTHORIZATION为ON,则所有用户必须提供用户名和口令.
也可通过使用USER子句提供用户名或用户组名来限定允许使用服务的用户.
如果用户名为NULL,则所有已知用户都可以访问该服务.
缺省值为ON.
Sybase建议在启用了授权的情况下运行生产系统,并且通过将用户添加到组中来授予使用该服务的权限.
SECURE子句-表示是否接受不安全的连接.
ON表示只接受HTTPS连接.
在HTTP端口上接收的服务请求将自动重定向到HTTPS端口.
如果设置为OFF,则HTTP和HTTPS连接都接受.
缺省值为OFF.
USER子句-如果禁用授权,则此参数成为必需的参数,并指定用于执行所有服务请求的用户ID.
如果启用授权(缺省值),则此可选子句标识允许访问该服务的用户或组.
缺省值为NULL,即向所有用户授予访问权限.
URL子句-确定是否接受URI路径;如果接受,确定如何处理URI路径.
OFF指示URI请求中服务名后面不必有任何内容.
ON指示将其余的URI解释为变量url的值.
SQL语句134SybaseIQELEMENTS表示按照斜线字符将URL路径的余下部分拆分为数量最多为10个的一组元素.
将这些值指派给名为url的变量外加介于1和10之间的数字后缀,例如,前三个变量名称分别为url1、url2和url3.
如果提供的值不到10个,则将其余变量设置为NULL.
如果服务名以字符/结尾,则必须将URL设置为OFF.
缺省值为OFF.
USING子句—仅适用于DISH服务.
该参数指定名称前缀.
只处理其名称以此前缀开头的SOAP服务.
语句-如果该语句为空值,则URI必须指定要执行的语句.
否则,指定的SQL语句是唯一可通过该服务执行的语句.
该语句是SOAP服务所必需的,而DISH服务将忽略该语句.
缺省值为NULL.
Sybase强烈建议在生产系统中运行的所有服务都定义一个语句.
只有在启用了授权的情况下,该语句才能为NULL.
RAW-将结果集发送到客户端,而不进行任何进一步的格式设置.
可以通过在过程中显式生成所需的标记来产生格式化文档,如以下示例所示.
HTML-自动将语句或过程的结果集转换为包含表的HTML文档格式.
XML-结果集采用XML格式.
如果还不是XML,则自动转换为XMLRAW格式.
SOAP-请求必须为有效的简单对象访问协议(SOAP)请求.
结果集将自动设置为SOAP响应的格式.
有关SOAP标准的详细信息,请参见www.
w3.
org/TR/SOAP.
DISH-DetermineSOAPHandler(DISH)服务充当一个或多个SOAP服务的代理.
在使用时,该服务充当容纳多个SOAP服务并为这些服务提供访问权限的容器.
Web服务描述语言(WSDL)文件是针对每个所包含的SOAP服务自动生成的.
所包含的SOAP服务由公用前缀标识,该前缀必须在USING子句中指定.
有关使用Web服务的详细信息,请参见"SQLAnywhereServer-编程">"HTTPWeb服务">"使用SQLAnywhere作为HTTPWeb服务器".
注意:此参考指向SQLAnywhere文档.
标准SQL-符合ISO/ANSISQL标准.
Sybase-不受AdaptiveServerEnterprise支持.
权限必须具有DBA权限.
另请参见ALTERSERVICE语句(第29页)DROPSERVICE语句(第178页)SQL语句参考:语句和选项135CREATETABLE语句在数据库中或远程服务器上创建一个新表.
语法CREATE[{GLOBAL|LOCAL}TEMPORARY]TABLE[IFNOTEXISTS][owner.
]table-name…(column-definition[column-constraint]…[,column-definition[column-constraint]…][,table-constraint]…)|[WITHNULLSNOTDISTINCT]…[INdbspace-name]…[ONCOMMIT{DELETE|PRESERVE}ROWS|NOTTRANSACTIONAL][ATlocation-string][PARTITIONBYrange-partitioning-scheme]参数column-definition:–column-namedata-type[[NOT]NULL][INdbspace-name][DEFAULTdefault-value|IDENTITY][PARTITION(partition-nameINdbspace-namedefault-value:–special-value|string|globalvariable|[-]number|(constant-expression)|built-in-function(constant-expression)|AUTOINCREMENT|CURRENTDATABASE|CURRENTREMOTEUSER|NULL|TIMESTAMP|LASTUSERspecial-value:–CURRENT{DATE|TIME|TIMESTAMP|USER|PUBLISHER}|USERcolumn-constraint:–[CONSTRAINTconstraint-name]{{UNIQUE|PRIMARYKEY|REFERENCEStable-name[(column-name)][action]}[INdbspace-name]|CHECK(condition)|IQUNIQUE(integer)}table-constraint:–[CONSTRAINTconstraint-name]{{UNIQUE(column-name[,column-name]…)|PRIMARYKEY(column-name[,column-nameINdbspace-name]|foreign-key-constraint|CHECK(condition)|IQUNIQUE(integer)}foreign-key-constraint:–FOREIGNKEY[role-name][(column-name[,column-nameREFERENCEStable-name[(column-name[,column-name[action][INdbspace-name]action:–ON{UPDATE|DELETE{RESTRICT}location-string:–{remote-server-name.
[db-name].
[owner].
object-name|remote-server-name;[db-name];[owner];object-name}range-partitioning-scheme:–RANGE(partition-key)(range-partition-decl[,range-partition-decl.
.
.
])partition-key:–column-nameSQL语句136SybaseIQrange-partition-decl:–partition-nameVALUES=date_borrowed))示例7–在远程服务器SERVER_A上创建表t1,并创建映射到该远程表的名为t1的代理表:CREATETABLEt1(aINT,bCHAR(10))AT'SERVER_A.
db1.
joe.
t1'示例8–创建表tab1,其中包含以特殊常量LASTUSER为缺省值的列c1:CREATETABLEtab1(c1CHAR(20)DEFAULTLASTUSER)SQL语句138SybaseIQ用法通过指定所有者名称,可为其他用户创建表.
如果未指定GLOBALTEMPORARY或LOCALTEMPORARY,表将作为基表被引用.
否则,表为临时表.
与基表一样,创建的全局临时表也存在于数据库中并一直保留在数据库中,直到被DROPTABLE语句显式删除.
临时表中的行仅对插入行的连接是可见的.
来自相同或不同应用程序的多个连接可同时使用同一临时表,而每个连接只能看到自己的行.
给定的连接会继承全局临时表在该连接首次引用它时存在的模式.
连接结束时会删除临时表中的行.
创建本地临时表时,请忽略所有者说明.
如果在创建临时表时指定了所有者(例如,CREATETABLEdbo.
#temp(col1int)),就会将其错误地创建成基表.
如果该连接中存在某一本地临时表,尝试创建同名的基表或全局临时表将失败,这是因为owner.
table无法唯一地标识新表.
但是,可创建同名的本地临时表,作为现有基表或全局临时表.
由于将首先解析本地临时表,因此对表名的引用将访问本地临时表.
例如,请考虑以下序列:CREATETABLEt1(c1int);INSERTt1VALUES(9);CREATELOCALTEMPORARYTABLEt1(c1int);INSERTt1VALUES(8);SELECT*FROMt1;返回的结果为8.
对t1的任何引用都将引用本地临时表t1,直到连接已删除本地临时表为止.
在过程中,如果要创建一个在过程完成后仍然保留的表,可使用CREATELOCALTEMPORARYTABLE语句,而不是DECLARELOCALTEMPORARYTABLE语句.
使用CREATELOCALTEMPORARYTABLE语句创建的局部临时表会一直保留到它被显式删除或连接终止.
使用CREATELOCALTEMPORARYTABLE在IF语句中创建的本地临时表也在IF语句完成后继续存在.
不能用临时表创建连接索引.
请不要更新已成为任何连接索引的一部分的基表.
不允许执行此操作,并会返回以下错误:"无法更新表%2,因为它在一个或多个连接索引中进行了定义"SybaseIQ不支持将CREATETABLEENCRYPTED子句用于对SybaseIQ表进行表级加密.
不过,SybaseIQ数据库中的SQLAnywhere表支持CREATETABLEENCRYPTED子句.
IFNOTEXISTS—如果指定的对象已存在,则不会进行任何更改,也不会返回错误.
SQL语句参考:语句和选项139只有在您将索引声明为UNIQUE时,才能指定WITHNULLSNOTDISTINCT子句,该子句允许您指定索引键中的空值不是唯一的.
有关详细信息,请参见UNIQUE子句.
IN—指定要在哪个数据库文件(数据库空间)中创建表.
可使用该子句指定SYSTEM,将永久表或临时表放在目录存储中.
IN子句的其它用法皆省略.
不能使用该子句将IQ表放置到特定的数据库空间中.
缺省情况下,所有永久表放置在主IQ存储中,所有临时表放置在临时IQ存储中.
全局临时表和本地临时表永远不能出现在IQ存储中.
column-definition、column-constraint、table-constraint和foreign-key子句中的IN子句用于指定将在其中创建相应对象的dbspace.
如果省略IN子句,SybaseIQ将会在已为其分配表的dbspace中创建相应对象.
有关数据库空间的详细信息,请参见"CREATEDBSPACE语句".
ONCOMMIT—仅允许临时表.
缺省情况下,临时表的行将在COMMIT时被删除.
有关Multiplex全局临时表中的子句行为,请参见《使用SybaseIQMultiplex》>"Multiplex事务">"DDL命令">"角色限制">"保留行".
NOTTRANSACTIONAL—仅用于临时表.
使用NOTTRANSACTIONAL创建的表不受COMMIT或ROLLBACK影响.
在某些情况下,NOTTRANSACTIONAL子句可以提高性能,因为对非事务性临时表执行的操作不会导致在回退日志中生成条目.
例如,在反复调用使用临时表的过程而不对COMMIT或ROLLBACK语句进行干预时,NOTTRANSACTIONAL可能会非常有用.
CREATETABLE语句后面的带括号的列表中可以包含任意顺序的以下子句:AT—用于在location-string指定的远程位置创建表.
创建的本地表是映射至远程位置的代理表.
用作代理表的表名不得超过30个字符.
AT子句支持将分号(;)用作分隔符.
如果分号出现在location-string中,则它用作字段分隔符.
如果没有分号,则使用句点作为字段分隔符.
这样即可在数据库和所有者字段中使用文件名和扩展名.

分号字段分隔符主要用于当前不支持的服务器类;但是,您也可以在句点用作字段分隔符的情况下使用它们.
例如,以下语句将表proxy_a映射到远程服务器myasa上的SQLAnywhere数据库mydb:CREATETABLEproxy_a1AT'myasa;mydb;;a1'远程表的外键定义将被忽略.
引用远程表的本地表的外键定义也会被忽略.
如果远程服务器支持主键,则主键定义发送到此服务器.
在Simplex环境中,不能在同一节点上创建引用远程表的代理表.
在Multiplex环境中,不能创建引用在Multiplex中定义的远程表的代理表.
例如,在Simplex环境中,如果您尝试创建引用在同一节点上定义的基表Employees的代理表proxy_e,则系统会禁止使用CREATETABLE.
.
.
AT语句,并返回错误消息.
在Multiplex环境中,如果从引用Multiplex中定义的远程表Employees的任何节点(协调节点或辅助节点)中创建代理表proxy_e,则系统会拒绝CREATETABLE.
.
.
.
AT语句.
SQL语句140SybaseIQcolumn-definition—定义表中的列.
《参考:构件块、表和过程》>"SQL数据类型"中说明了允许使用的数据类型.
同一个表中的列不能同名.
如果指定了NOTNULL,或者列具有UNIQUE或PRIMARYKEY约束,则列不能含有任何空值.
您最多可以创建45,000列;但如果一个表中的列多于10,000,则可能会出现性能下降问题.
每个表中允许NULL的列数限制大约为8*(数据库页大小–30).
DEFAULTdefault-value—定义表的列时,可使用CREATETABLE(以及ALTERTABLE)语句中的DEFAULT关键字为列指定一个缺省值.
如果为列指定了DEFAULT值,则此DEFAULT值将用作任一未指定列值的INSERT(或LOAD)语句中的列值.
有关使用列DEFAULT值的详细信息,请参见《系统管理指南第一卷》>"数据完整性">"列缺省值有助于保持数据完整性".
DEFAULTAUTOINCREMENT—DEFAULTAUTOINCREMENT列的值唯一地标识表中的每一行.
这种类型的列还称为IDENTITY列,用于与AdaptiveServerEnterprise相兼容.
IDENTITY/DEFAULTAUTOINCREMENT列存储在插入和更新期间自动生成的序列号.
使用IDENTITY或DEFAULTAUTOINCREMENT时,列的标度必须为0,且必须是整数数据类型之一,或精确数值类型.
列的值也可以是NULL.
必须使用所有者的名称来限定指定的表名.
ON可向表中插入行.
如果没有指定IDENTITY/DEFAULTAUTOINCREMENT列的值,则生成一个比列中的任何其它值都大的唯一值.
如果INSERT指定了列值,则使用该值;如果指定的值不大于当前列中的最大值,该值将用作后续插入的起点.
删除行不会减少IDENTITY/AUTOINCREMENT计数器的值.
由于删除行而产生的间隙只能由使用插入时的显式赋值填充.
数据库选项IDENTITY_INSERT必须设置为表名,以向IDENTITY/AUTOINCREMENT列执行插入操作.
例如,以下示例创建了一个带有IDENTITY列的表,并向它显示添加了一些数据:CREATETABLEmytable(c1INTIDENTITY);SETTEMPORARYOPTIONIDENTITY_INSERT="DBA".
mytable;INSERTINTOmytableVALUES(5);显式插入小于该列最大值的行号后,后面没有显式赋值的行仍自动递增为比上一个最大值大1的值.
通过检查@@identity全局变量,可以找到最近一次插入的列值.
IDENTITY—使用AUTOINCREMENT缺省值的替代方法,并与Transact-SQL兼容.
在SybaseIQ中,可以使用IDENTITY或DEFAULTAUTOINCREMENT子句创建标识列.
table-constraint—帮助确保数据库中数据的完整性.
共有四种类型的完整性约束:UNIQUE约束—标识唯一标识表中各行的一列或多列.
表中任意两行的值在所有命名列中均不能相同.
表可以有多个唯一约束.
PRIMARYKEY约束—与UNIQUE约束相同,但表只能有一个主键约束.
不能为同一列同时指定主键约束和唯一约束.
主键通常标识行的最佳标识符.
例如,客户号可能是customer表的主键.
SQL语句参考:语句和选项141FOREIGNKEY约束—限制一组列的值,以与主键或另一表的唯一约束中的值相匹配.
例如,外键约束可用于确保invoice表中的客户号与customer表中的客户号相对应.
注意:不能在本地临时表上创建外键约束.
全局临时表必须用ONCOMMITPRESERVEROWS创建.
CHECK约束—允许对任意条件进行检验.
例如,检查约束可用于确保名为Gender的列只包含值male或female.
表中的任何行都不能违反约束.
如果INSERT或UPDATE语句会导致行违反约束,则不允许执行相应操作并且撤消语句的作用.
列检查约束中以符号"@"开头的列标识符是实际列名的占位符.
以下格式的语句:CREATETABLEt1(c1INTEGERCHECK(@foo"数据库对象管理">"表管理">"表创建准则">"优化存储和查询性能".
完整性约束UNIQUE或UNIQUE(column-name,…)—表中任意两行的值在所有命名列中均不能相同.
表可以有多个唯一约束.
唯一约束与唯一索引是有区别的.
唯一索引的列可以为NULL,而唯一约束的列不能为NULL.
外键可以引用主键或者具有唯一约束的列,但不能引用具有唯一索引的列,因为唯一索引可以包括多个NULL实例.
PRIMARYKEY或PRIMARYKEY(column-name,…)—表的主键由列出的列组成,而且指定的列都不可含有任何空值.
SybaseIQ可以确保表中的每一行都有唯一的主键值.
表只能有一个PRIMARYKEY.
采用第二种格式(PRIMARYKEY后面跟有列的列表)时,创建的主键所包括的列是按其定义的顺序排序的,而不是按列出的顺序排序.
将一列指定为PRIMARYKEY、FOREIGNKEY或UNIQUE时,SybaseIQ会自动为其创建一个High_Group索引.
对于多列主键,该索引在主键上,不在各个列上.
为了获得最佳性能,应单独用HG或LF索引对各列创建索引.
REFERENCESprimary-table-name[(primary-column-name)]—该子句将列定义为主键的外键,或主表的唯一约束.
通常,外键是针对主键而言的,而非针对唯一约束.
如果指定了主列名,则它必须与主表中的某一列相匹配,并且该主表受仅由此列组成的唯一约束或主键约束的制约.
否则外键就会引用第二个表的主键.
主键与外键必须具有相同的数据类型以及精度、标度和符号.
仅会为单列外键创建非唯一单列HG索引.
对于多列外键,SybaseIQ会创建非唯一组合HG索引.
唯一或非唯一HG索引的多列组合键的最大宽度为1KB.
临时表不能有引用基表的外键,而基表不能有引用临时表的外键.
本地临时表不能有外键,也不能被其引用.
FOREIGNKEY[role-name]REFERENCESprimary-table-name[(.
.
.
)]—定义引用另一表的主键或唯一约束的外键.
通常,外键是针对主键而言的,而非针对唯一约束.

(按照这种描述,该另一表称为主表.
)如果未指定主表列名,主表列即是指表的主键中的列.
如果未指定外键列名,则外键列的列名与主表的列名相同.
如果指定外键列名,则还必须指定主键列名,列名按照列表中的位置成对出现.
如果主表与外键表不一样,则可能是由于唯一约束或主键约束是在被引用的键上定义的.
被引用的键和外键必须具有同样多的列数,并拥有具有同样符号、精度和标度的同一数据类型.
行的外键值必须作为主表的某一行的候选键值出现,除非外键的允许空值的列中有一列或多列包含空值.
SQL语句参考:语句和选项143所有非显式定义的外键列在创建时会被自动赋予与主表中的相应列相同的数据类型.

这些自动创建的列不能属于外表的主键.
因此,同时用于主键和外键的列必须显式创建.
role-name是外键的名称.
role-name的主要作用是区分同一表的两个外键.
如果不指定role-name,则按如下方式分配角色名:1.
如果没有与表名同名的role-name外键,则将表名指派为role-name.
2.
如果表名已被使用,则role-name为表名加上表的唯一3位零填充数字.
参照完整性动作定义为维护数据库中的外键关系而采取的操作.
每当更改主键值或从数据库表中删除主键值时,其它表中的相应外键值也应该以某种方式修改.
您可以指定ONDELETE子句,后跟RESTRICT子句.
RESTRICT—如果在数据库的其它地方有相应的外键时试图更新或删除主键值,将发生错误.
如果试图更新外键因此通过候选键创建了不匹配的新值,将发生错误.
这是缺省操作,除非您指定该LOAD拒绝违反参照完整性的行(可选).
这样会在语句级强制实施参照完整性.
如果使用CHECKONCOMMIT时未指定任何操作,则RESTRICT将被认作是DELETE的一项操作.
SybaseIQ不支持CHECKONCOMMIT.
全局临时表不能有引用基表的外键,而基表不能有引用全局临时表的外键.
本地临时表不能有外键,也不能被其引用.
CHECK(条件)—不允许行违反条件.
如果INSERT语句会导致行违反条件,则不允许该操作并且撤消语句的执行结果.
只有条件为FALSE时才会拒绝更改;特别是,如果条件为UNKNOWN也会允许更改.
SybaseIQ不会强制实行CHECK条件.
有关TRUE、FALSE和UNKNOWN条件的详细信息,请参见《参考:构件块、表和过程》>"SQL语言元素">"空值"和《参考:构件块、表和过程》>"SQL语言元素">"搜索条件".
注意:Sybase建议,除非您确认没有孤立外键,否则就不要在SybaseIQ中定义参照完整性外键-主键关系.
远程表远程表的外键定义将被忽略.
引用远程表的本地表的外键定义也会被忽略.
如果远程服务器支持主键,则主键定义发送到此服务器.
PARTITIONBYRANGE—根据分区列中指定范围内的值指定要对其进行分区的行.
partition-keyclause中的column-name用于指定分区键列.
SybaseIQ支持一个分区键列.
range-partition-declclause中的partition-name指定要在其上存储表行的新分区的名称.
在某个表的分区集中分区名称不能雷同.
partition_nameclause是必需项.
VALUE子句—根据范围分区条件,为每个分区指定上限(包含上限).
用户必须为每个范围分区指定分区条件,才能保证每一行只分配给一个分区.
分区列允许NULL,包含作为分区键值的NULL的行属于第一个表分区.
然而,界限值不能是NULL.
SQL语句144SybaseIQ第一个分区没有下限(最小值).
分区键第一列中NULL单元格的行将进入第一个分区.
对于最后一个分区,您可以指定上限或最大值(包含该值).
如果最后一个分区的上限值不是最大值,则在加载或插入其中的分区键值大于最后一个分区的上限值的行时将会生成错误.
MAX—表示无限大的上限,只能为最后一个分区指定.
IN—在partition-decl中,指定分区中的行所在的数据库空间.
以下限制影响范围分区表的分区键和界限值:分区界限必须是常量,而不是常量表达式.
分区边界必须依照分区创建顺序按升序排列.
也就是说,第二个分区的上限必须大于第一个分区的上限,依此类推.
此外,分区界限值必须与相应的分区键列数据类型兼容.
例如,VARCHAR与CHAR兼容.
如果界限值的数据类型与其相应的分区键列不同,SybaseIQ会将界限值的数据类型转换为分区键列的数据类型,但存在以下例外情况:不允许进行显式转换.
此示例尝试将INT显式转换为VARCHAR,并产生错误:CREATETABLEEmployees(emp_nameVARCHAR(20))PARTITIONBYRANGE(emp_name)(p1VALUES"数据库对象管理">"表管理">"表创建准则".
副作用自动提交SQL语句参考:语句和选项145标准SQL-ISO/ANSISQL语法的供应商扩展.
以下是供应商扩展:{IN|ON}dbspace-name子句ONCOMMIT子句一些缺省值Sybase-受AdaptiveServerEnterprise支持,有一些差异.
临时表—通过在CREATETABLE语句中的表名前加上#符号,可以创建临时表.
这些临时表是SybaseIQ声明的临时表,只能在当前连接中才可用.
有关声明的临时表的信息,请参见"DECLARELOCALTEMPORARYTABLE语句".
物理放置—在SybaseIQ和AdaptiveServerEnterprise中,表的物理放置方式不同.
AdaptiveServerEnterprise支持ONsegment-name子句,SybaseIQ中也支持它,但segment-name引用IQdbspace.
约束—SybaseIQ不支持命名的约束或命名的缺省值,但确实支持允许在数据类型定义中封装约束和缺省值定义的用户定义数据类型.
它还支持在CREATETABLE语句中使用显式缺省值和CHECK条件.
空值缺省值—缺省情况下,AdaptiveServerEnterprise中的列缺省为非空值,而SybaseIQ中的缺省设置为空值,以允许空值.
可使用ALLOW_NULLS_BY_DEFAULT选项控制此设置.
请参见"ALLOW_NULLS_BY_DEFAULT选项[T-SQL]".
要使您的数据定义语句成为可移植的语句,应显式指定NULL或NOTNULL.
权限必须具有RESOURCE权限.
若要为其它用户创建表,您必须具有DBA权限.
若要在IQmain存储数据库空间中创建基表,必须对指定的数据库空间具有DBA权限/RESOURCE权限和CREATE权限.
另请参见ALLOW_NULLS_BY_DEFAULT选项[TSQL](第333页)ALTERTABLE语句(第31页)CREATEDBSPACE语句(第77页)CREATEINDEX语句(第97页)DECLARELOCALTEMPORARYTABLE语句(第161页)DROP语句(第170页)MINIMIZE_STORAGE选项(第405页)SQL语句146SybaseIQCREATETEXTCONFIGURATION语句创建文本配置对象.
语法请参见下文.
用法有关语法和完整说明,请参见《SybaseIQ中的非结构化数据分析》.
CREATETEXTINDEX语句创建TEXT索引.
语法请参见下文.
用法有关语法和完整说明,请参见《SybaseIQ中的非结构化数据分析》.
CREATEUSER语句创建用户.
语法CREATEUSERuser-name[IDENTIFIEDBYpassword][LOGINPOLICYpolicy-name][FORCEPASSWORDCHANGE{ON|OFF}]示例示例1–创建一个名为SQLTester的用户,口令为welcome.
将SQLTester用户分配到Test1登录策略,而且下次登录时口令到期:CREATEUSERSQLTesterIDENTIFIEDBYwelcomeLOGINPOLICYTest1FORCEPASSWORDCHANGEON;示例2–创建一个名为MyGroup的组:SQL语句参考:语句和选项147CREATEUSERMyGroup;GRANTGROUPTOMyGroup;用法user-name—用户的名称.
IDENTIFIEDBY子句—为用户提供口令.
policy-name-要将用户分配到的登录策略的名称.
如果未指定LOGINPOLICY,则不会进行任何更改.
FORCEPASSWORDCHANGE子句-控制用户登录时是否必须指定新口令.
此设置覆盖其策略中的PASSWORD_EXPIRY_ON_NEXT_LOGIN选项设置.
您不必为用户指定口令.
没有口令的用户无法连接到相应数据库.
如果要创建组,但不希望任何人使用组用户ID连接到数据库,则这很有用.
用户ID必须是有效的标识符.
用户ID和口令不能:以空格、单引号或双引号开头以空格结尾包含分号口令可以是有效的标识符,也可以是以单引号括起的字符串(最多255个字节).
口令区分大小写.
Sybase建议口令由7位ASCII字符组成,因为如果数据库服务器不能将其从客户端的字符集转换为UTF-8,则其它字符也许无法正常工作.
VERIFY_PASSWORD_FUNCTION选项可用于指定函数,以实现口令规则(例如,口令至少必须包含一位).
如果使用口令检验函数,则不能在GRANTCONNECT语句中指定多个用户ID和口令.
有关详细信息,请参见"VERIFY_PASSWORD_FUNCTION选项"和"GRANT语句".
另请参见"SQLAnywhereServer–数据库管理">"配置数据库">"管理用户ID和权限">"管理登录策略".
注意:此参考指向SQLAnywhere文档.
标准SQL-ISO/ANSISQL语法的供应商扩展.
Sybase-不受AdaptiveServerEnterprise支持.
权限需要具有DBA或USERADMIN权限.
另请参见COMMENT语句(第61页)SQL语句148SybaseIQCREATELOGINPOLICY语句(第108页)DROPLOGINPOLICY语句(第175页)DROPUSER语句(第180页)GRANT语句(第202页)PASSWORD_EXPIRY_ON_NEXT_LOGIN选项(第415页)VERIFY_PASSWORD_FUNCTION选项(第457页)ALTERLOGINPOLICY语句(第19页)CREATEVARIABLE语句创建SQL变量.
语法CREATE[ORREPLACE]VARIABLEidentifierdata-type[{=|DEFAULT}initial-value]参数initial-value:–special-value|string|[-]number|(constant-expression)|built-in-function(constant-expression)|NULLspecial-value:–CURRENT{DATABASE|DATE|PUBLISHER|TIME|TIMESTAMP|USER|UTCTIMESTAMP}|USER示例示例1–下面这段代码可向数据库中插入一个大文本值:EXECSQLBEGINDECLARESECTION;charbuffer[5000];EXECSQLENDDECLARESECTION;EXECSQLCREATEVARIABLEhold_blobVARCHAR;EXECSQLSEThold_blob='';for(;;){/*readsomedataintobuffer.
.
.
*/size=fread(buffer,1,5000,fp);if(size"使用过程和批处理">"控制语句">"使用复合语句".
如果您指定了initial-value,则该数据类型必须与data-type定义的类型相匹配.
另请参见《参考:构件块、表和过程》>"SQL数据类型".
标准SQL-ISO/ANSISQL语法的供应商扩展.
Sybase-不受AdaptiveServerEnterprise支持.
权限无另请参见BEGIN……END语句(第49页)DECLARE语句(第154页)DROPVARIABLE语句(第181页)SQL语句150SybaseIQSET语句[ESQL](第285页)CREATEVIEW语句在数据库上创建视图.
视图用于以一种不同的角度提供数据,即使它不是以那种方式存储的.
语法CREATE[ORREPLACE]VIEW…[owner.
]view-name[(column-name…ASselect-without-order-by…[WITHCHECKOPTION]示例示例1–创建一个仅显示男性雇员的全部信息的视图.
此视图和基表具有同样的列名:CREATEVIEWmale_employeeASSELECT*FROMEmployeesWHERESex='M'示例2–创建显示雇员及其所属部门的视图:CREATEVIEWemp_deptASSELECTSurname,GivenName,DepartmentNameFROMEmployeesJOINDepartmentsONEmployees.
DepartmentID=Departments.
DepartmentID用法通过指定owner.
名称,可以为其他用户创建视图.
必须具有DBA权限才能为其他用户创建视图.
在SELECT、DELETE、UPDATE和INSERT语句中,可以使用视图名取代表名.
但在数据库中,视图实际上不是以表的形式存在.
每次使用时它们就会派生.
视图作为CREATEVIEW语句中指定的SELECT语句的结果派生.
视图中使用的表名应该由表所有者的用户ID限定.
否则,一个不同的用户ID可能无法找到表或者可能得到错误的表.
指定ORREPLACE子句(CREATEORREPLACEVIEW)将创建一个新视图或替换同名的现有视图.
如果使用ORREPLACE子句,将保留现有权限,但将删除视图上的INSTEADOF触发器.
视图中的列名由列名列表指定.
如果没有指定列名列表,则视图列名来自选择列表项.
要使用选择列表项中的名称,项必须是简单列名或者指定了别名(请参见"SELECT语句").
不能向视图添加或删除IDENTIY/AUTOINCREMENT列.
SQL语句参考:语句和选项151只要定义视图的SELECT语句不包含GROUPBY子句、集合函数或不涉及UNION操作,就可以更新视图.
视图的更新会导致基表更新.
view-name—一个标识符.
缺省所有者是当前用户ID.
column-name—视图中的列名由column-name列表指定.
如果没有指定列名列表,则视图列名来自选择列表项.
要使用选择列表项中的名称,每项必须是简单列名或者指定了别名(请参见"SELECT语句").
AS—视图所依据的SELECT语句不得包含ORDERBY子句、SELECT列表中的子查询或一个TOP或FIRST限定.
它可以包含一个GROUPBY子句或者是一个UNION.
WITHCHECKOPTION—拒绝不满足SELECT语句定义的视图条件的任何视图更新和插入.
但是,SybaseIQ当前会忽略该选项(它支持出于兼容性考虑的语法).
副作用自动提交标准SQL-ISO/ANSISQL语法的供应商扩展.
Sybase-受AdaptiveServerEnterprise支持.
权限必须有RESOURCE权限和视图定义中的表的SELECT权限.
另请参见CREATETABLE语句(第136页)DROP语句(第170页)SELECT语句(第277页)DEALLOCATEDESCRIPTOR语句[ESQL]释放与SQL描述符区相关联的内存.
语法DEALLOCATEDESCRIPTORdescriptor-name:string示例示例1–请参见"ALLOCATEDESCRIPTOR语句[ESQL]".
SQL语句152SybaseIQ用法释放与描述符区关联的所有内存,包括数据项、指示符变量和结构本身.

标准SQL-ISO/ANSISQL语法的供应商扩展.
Sybase-受OpenClient/OpenServer支持.
权限无另请参见ALLOCATEDESCRIPTOR语句[ESQL](第5页)SETDESCRIPTOR语句[ESQL](第290页)声明部分[ESQL]声明嵌入式SQL程序中的宿主变量.
宿主变量用于同数据库交换数据.
语法EXECSQLBEGINDECLARESECTION;.
.
.
CdeclarationsEXECSQLENDDECLARESECTION;示例示例1–EXECSQLBEGINDECLARESECTION;char*emp_lname,initials[5];intdept;EXECSQLENDDECLARESECTION;用法声明部分只不过是由BEGINDECLARESECTION和ENDDECLARESECTION语句括起来的C变量声明部分.
声明部分使SQL预处理器可以识别用作宿主变量的C变量.
并非所有的C声明在声明部分内都有效.
请参见"SQLAnywhereServer–编程">"嵌入式SQL">"嵌入式SQL编程技巧".
注意:此参考指向SQLAnywhere文档.
SQL语句参考:语句和选项153标准SQL-ISO/ANSISQL语法的供应商扩展.
权限无另请参见BEGIN……END语句(第49页)DECLARE语句声明复合语句(BEGIN.
.
.
END)中的SQL变量.
语法DECLAREvariable_name[,…]data-type[{=|DEFAULT}initial-value]参数initial-value:–special-value|string|[-]number|(constant-expression)|built-in-function(constant-expression)|NULLspecial-value:–CURRENT{DATABASE|DATE|PUBLISHER|TIME|TIMESTAMP|USER|UTCTIMESTAMP}|USER示例示例1–下面批处理语句阐释了DECLARE语句的使用并在服务器窗口上输出消息:BEGINDECLAREvarnameCHAR(61);SETvarname='Testname';MESSAGEvarname;END用法在过程主体中使用的变量可以用DECLARE语句声明.
变量在声明它的复合语句的持续时间内存在,而且必须在复合语句内是唯一的.
SQL语句154SybaseIQ过程的主体是复合语句,变量必须紧跟在BEGIN后声明.
在Transact-SQL过程或触发器中没有此限制.
如果指定了initial-value,则该变量会设置为该值.
如果未指定initial-value,则该变量在SET语句分配另一个值之前包含的是空值.
如果您指定了initial-value,则该数据类型必须与data-type定义的类型相匹配.
标准SQL-符合ISO/ANSISQL标准.
Sybase-受AdaptiveServerEnterprise支持.
为与AdaptiveServerEnterprise兼容,变量名的前面必须有一个@.
在AdaptiveServerEnterprise中,过程或触发器中声明的变量在过程或触发器的持续时间内存在.
在SybaseIQ中,如果在复合语句内声明某变量,该变量仅在此复合语句的持续时间内存在(不论它是在SybaseIQSQL还是在Transact-SQL复合语句内声明的).
权限无另请参见BEGIN……END语句(第49页)DECLARECURSOR语句[ESQL][SP]声明游标.
游标是处理查询结果的主要方法.
语法DECLAREcursor-name[SCROLL|NOSCROLL|DYNAMICSCROLL]CURSORFOR{select-statement|statement-name|USINGvariable-name}参数cursor-name:–标识符statement-name:–标识符|宿主变量SQL语句参考:语句和选项155column-name-list:–标识符variable-name:–标识符示例示例1–在嵌入式SQL中声明滚动游标:EXECSQLDECLAREcur_employeeSCROLLCURSORFORSELECT*FROMEmployees;示例2–在嵌入式SQL中为预准备语句声明游标:EXECSQLPREPAREemployee_statementFROM'SELECTemp_lnameFROMEmployees';EXECSQLDECLAREcur_employeeCURSORFORemployee_statement;示例3–在存储过程中使用游标:BEGINDECLAREcur_employeeCURSORFORSELECTemp_lnameFROMEmployees;DECLAREnameCHAR(40);OPENcur_employee;LOOPFETCHNEXTcur_employeeINTOname;.
.
.
ENDLOOP;CLOSEcur_employee;END用法DECLARECURSOR语句用SELECT语句或CALL语句的指定名称声明游标.
SCROLL—声明为SCROLL的游标支持FETCH语句的NEXT、PRIOR、FIRST、LAST、ABSOLUTE和RELATIVE选项.
当SCROLL游标处于打开状态时,您可以通过它提取结果集中的任意行.
NOSCROLL—声明为NOSCROLL的游标仅限于使用FETCHNEXT和FETCHABSOLUTE(0)查找操作在结果集中前进.
DYNAMICSCROLL—声明为DYNAMICSCROLL的游标支持FETCH语句的NEXT、PRIOR、FIRST、LAST、ABSOLUTE和RELATIVE选项.
当DYNAMICSCROLL游标处于打开状态时,您可以通过它提取结果集中的任意行.
因为一旦游标离开行,行就不能返回,所以游标没有敏感性限制.
因此,当请求NOSCROLL游标时,SybaseIQ提供效率最高的游标,即敏感性游标.
FORstatement-name—使用PREPARE语句为各语句命名.
只能为预准备SELECT或CALL声明游标.
FORREADONLY—声明为FORREADONLY的游标不能在定位的UPDATE或定位的DELETE操作中使用.
READONLY是FOR子句的缺省值.
SQL语句156SybaseIQ当打开游标时,由游标声明的FORREADONLY查看声明该游标的表的版本,而不是在首次执行FETCH时查看表的版本.
例如,提取游标时,只能从表中提取一行:CREATETABLEt1(c1INT);INSERTt1VALUES(1);BEGINDECLAREt1_cursorCURSORFORSELECT*FROMt1FORREADONLY;OPENt1_cursor;INSERTt1VALUES(2);FETCHT1_CURSOR;ENDFORUPDATE—可以更新声明为FORUPDATE的游标的游标结果集.
可更新游标仅支持敏感性未定型行为,其它敏感性都会被忽略.
游标打开后,会从所有打开以进行更新的表上提取排它表锁.
在同一事务中,打开以进行更新的表上不允许独立的LOADTABLE、UPDATE、INSERT、DELETE和TRUNCATE语句,因为SybaseIQ一次只允许一条语句对表进行修改.
您一次只能打开特定表上的一个可更新游标.
除了不能通过OpenClient滚动外,可更新游标允许进行滚动.
OFcolumn-name-list—来自定义为可更新的游标结果集(用select-statement指定)的列的列表.
USINGvariable-name—可以在存储过程和用户定义的函数中的变量上声明游标.
此变量是包含游标SELECT语句的字符串.
当处理DECLARE时,此变量必须可用,因此必须是以下项之一:过程的参数.
例如:createfunctionget_row_count(inqryvarchar)returnsintbegindeclarecrsrcursorusingqry;declarerowcntint;setrowcnt=0;opencrsr;lp:loopfetchcrsr;ifSQLCODE0thenleavelpendif;setrowcnt=rowcnt+1;endloop;returnrowcnt;end此变量被赋值后,嵌套在另一个BEGIN…END内.
例如:createprocedureget_table_name(inid_valueint,outtabnamechar(128))begindeclareqryvarchar;setqry='selecttable_namefromSYS.
ISYSTAB'||'wheretable_id='||string(id_value);begindeclarecrsrcursorusingqry;opencrsr;fetchcrsrintotabname;closecrsr;endend嵌入式SQL使用PREPARE语句为各语句命名.
只能为预准备SELECT或CALL声明游标.
可更新游标支持SQL语句参考:语句和选项157可更新游标的SybaseIQ支持与可更新游标的SQLAnywhere支持相似.
有关游标类型和使用游标的完整论述,请参见"SQLAnywhereServer-编程">"在应用程序中使用SQL">"游标简介".
注意:此参考指向SQLAnywhere文档.
SybaseIQ支持一种类型的游标敏感性,该敏感性按照对基础数据的哪些更改是可见的进行定义.
所有SybaseIQ游标都是敏感性游标,这意味着更改可能会反映在通过游标看到的结果集的成员资格、顺序或值中,或者也可能根本没有反映.
使用敏感性游标时,受定位的UPDATE和定位的DELETE影响的语句都会在游标结果集中可见,除非客户端高速缓存阻止看到这些更改.
插入的行不可见.
已进行更新以使其不再满足打开的游标的WHERE子句的行仍然可见.
当使用游标时,在效率和一致性之间总存在平衡问题.
敏感性游标以一致性为代价提供高效性能.
SybaseIQ支持单个表上的可更新游标.
LONGVARCHAR和LONGBINARY数据类型在可更新游标中不受支持.
有关SybaseIQ中的LONGVARCHAR和LONGBINARY数据类型的信息,请参见《SybaseIQ中的非结构化数据分析》.
可更新游标中不支持标量用户定义的函数和用户定义的集合函数.
SybaseIQ中支持的用于可更新游标的查询说明如下:选择列表中的表达式,该选择列表针对功能上不取决于要更新的列敏感性未定型行为进行的任意子查询,也就是说对子查询所引用的数据的更改在游标结果集中不可见ORDERBY子句;可能会更新ORDERBY列,但结果集不会重新排序符合以下要求的列:列上没有CASTSELECT子句中基表的基列SELECT子句中没有该列的表达式或函数,并且它在选择列表(例如,SELECTc1,c1)中不重复.
如果指定了FORUPDATEOFcolumn-name-list子句,则仅限该子句中列出的基表的基列.
SybaseIQ不允许使用在含有任何阻止一对一地将结果集行映射至基表中的行的运算符的查询上的可更新游标;特别是:SELECTDISTINCT有UNION的运算符有GROUPBY的运算符有SET函数的运算符有OLAP函数的运算符,RANK()除外SQL语句158SybaseIQ请参见"UPDATE(定位)语句[ESQL][SP]"的说明,了解用于更新游标结果集中的行的SET子句所允许的列和表达式的相关信息.
SybaseIQ仅支持可更新游标上的插入,并且这些游标上的可非空列、非标识列都已选定且可更新.
在SybaseIQ中,打开的可更新游标内不允许有COMMIT和ROLLBACK,即使该游标是作为持有游标而打开的.
SybaseIQ不支持可更新游标内有ROLLBACKTOSAVEPOINT.
在游标打开后发生的任何故障都会导致已通过此打开的游标执行的所有操作回退.

可更新游标限制声明的游标在以下情况下是只读游标,并且不可更新:数据抽取工具在TEMP_EXTRACT_NAME1选项设置为路径名的情况下启用作为连接索引或在连接索引内ANSI_CLOSE_CURSORS_ON_ROLLBACK设为OFFCHAINED设为OFF语句为INSERTSELECT或SELECTINTO包括了一个以上的表不存在可更新列如果SybaseIQ未能设置请求的可更新游标,请参见.
iqmsg文件以了解相关信息.
对可更新游标和ODBC有一个限制.
使用以下ODBC函数一次最多只能更新、删除或插入65535行或65535个记录:SQLSetPosSQL_UPDATE、SQL_DELETE和SQL_ADDSQLBulkOperationsSQL_ADD、SQL_UPDATE_BY_BOOKMARK和SQL_DELETE_BY_BOOKMARK语句属性中的最大值有一个视具体实现而定的限制,可控制受影响的行数最大值为UNSIGNEDSMALLINT,即65535.
SQLSetStmtAttr(HANDLE,SQL_ATTR_ROW_ARRAY_SIZE,VALUE,0)可更新游标的不同之处SybaseIQ可更新游标与ANSISQL3标准行为的区别如下:持有游标更新在提交后关闭.
SybaseIQ在游标打开时会锁定表.
游标关闭时,系统按以下顺序执行所有更新、删除和插入操作:首先执行删除操作,接着执行更新操作,然后执行插入操作.
另请参见《参考:构件块、表和过程》>"系统过程">"系统存储过程">"sp_iqcursorinfo过程".
SQL语句参考:语句和选项159标准SQL-ISO/ANSISQL语法的供应商扩展.
Sybase—受OpenClient/OpenServer支持.
权限无另请参见CALL语句(第55页)DELETE(定位)语句[ESQL][SP](第165页)FETCH语句[ESQL][SP](第188页)OPEN语句[ESQL][SP](第245页)PREPARE语句[ESQL](第251页)SELECT语句(第277页)UPDATE(定位)语句[ESQL][SP](第308页)DECLARECURSOR语句[T-SQL]声明一个与AdaptiveServerEnterprise兼容的游标.
语法DECLAREcursor-name…CURSORFORselect-statement…[FOR{READONLY|UPDATE}]用法SybaseIQ支持AdaptiveServerEnterprise中不支持的DECLARECURSOR语法.
有关DECLARECURSOR的完整语法的信息,请参见"DECLARECURSOR语句[ESQL][SP]".
另请参见《参考:构件块、表和过程》>"系统过程">"系统存储过程">"sp_iqcursorinfo过程".
标准SQL—FORUPDATE和FORREADONLY选项是ISO/ANSISQL语法的Transact-SQL扩展.
Sybase—AdaptiveServerEnterpriseDECLARECURSOR语句的一些特性在SybaseIQ中不受支持.
SQL语句160SybaseIQ在SybaseIQ术语中,过程或批处理中的DECLARECURSOR必须紧跟在BEGIN关键字后.
Transact-SQL术语没有此限制.
在AdaptiveServerEnterprise中,当在过程或批处理中声明游标时,它在过程或批处理的持续时间内存在.
在SybaseIQ中,如果在复合语句内声明某游标,该游标仅在此复合语句的持续时间内存在(不论它是在SybaseIQSQL还是在Transact-SQL复合语句内声明的).
权限无另请参见DECLARECURSOR语句[ESQL][SP](第155页)DECLARELOCALTEMPORARYTABLE语句声明本地临时表.
语法DECLARELOCALTEMPORARYTABLEtable-name…(column-definition[column-constraint]…[,column-definition[column-constraint]…][,table-constraint]…)…[ONCOMMIT{DELETE|PRESERVE}ROWSNOTTRANSACTIONAL]示例示例1–在嵌入式SQL中声明本地临时表:EXECSQLDECLARELOCALTEMPORARYTABLEMyTable(numberINT);示例2–在存储过程中声明本地临时表:BEGINDECLARELOCALTEMPORARYTABLETempTab(numberINT);.
.
.
END用法DECLARELOCALTEMPORARYTABLE声明本地临时表.
本地临时表以及其中的行仅对创建该表并插入这些行的连接可见.
缺省情况下,临时表的行将在COMMIT时被删除.
SQL语句参考:语句和选项161复合语句中声明的局部临时表存在于复合语句中.
否则,声明的局部临时表在连接断开前一直存在.
有关column-definition、column-constraint和table-constraint,以及NOTTRANSACTIONAL子句的定义,请参见"CREATETABLE语句".
有关如何将数据选入临时表中的示例,请参见"SELECT语句".
隐式或显式创建本地临时表之后,在该临时表存在期间,不能创建同一名称的另一个临时表.
例如,您可以隐式创建一个本地临时表:select*into#tmpfromtable1或者,您可以通过声明以下内容显式创建一个本地临时表:declarelocaltemporarytablefoo然后,如果您再次尝试选择#tmp或foo,或者声明#tmp或foo,将会收到一个错误,指示#tmp或foo已存在.
声明本地临时表时,请忽略所有者说明.
如果在同一会话的一个以上的DECLARELOCALTEMPORARYTABLE语句中中指定相同的owner.
table,系统会报告一个语法错误.
例如,在同一会话中执行下列语句时系统会报告错误:DECLARELOCALTEMPORARYTABLEuser1.
temp(col1int);DECLARELOCALTEMPORARYTABLEuser1.
temp(col1int);如果忽略所有者名,则报告错误"项temp已存在":DECLARELOCALTEMPORARYTABLEtemp(col1int);DECLARELOCALTEMPORARYTABLEtemp(col1int);如果该连接中存在某一本地临时表,尝试创建同名的基表或全局临时表将失败,这是因为owner.
table无法唯一地标识新表.
但是,可创建同名的本地临时表,作为现有基表或全局临时表.
由于将首先解析本地临时表,因此对表名的引用将访问本地临时表.
例如,请考虑以下序列:CREATETABLEt1(c1int);INSERTt1VALUES(9);DECLARELOCALTEMPORARYTABLEt1(c1int);INSERTt1VALUES(8);SELECT*FROMt1;返回的结果为8.
对t1的任何引用都将引用本地临时表t1,直到连接已删除本地临时表为止.
不能在本地临时表上使用ALTERTABLE和DROPINDEX语句.
不能在本地临时表上使用sp_iqindex、sp_iqtablesize和sp_iqindexsize存储过程.
SQL语句162SybaseIQ标准SQL-ISO/ANSISQL语法的供应商扩展.
Sybase—AdaptiveServerEnterprise不支持DECLARETEMPORARYTABLE.
权限无另请参见CREATETABLE语句(第136页)SELECT语句(第277页)DELETE语句从数据库中删除行.
语法DELETE[FROM][owner.
]table-name…[FROMtable-list]…[WHEREsearch-condition]示例示例1–将ID为105的雇员从数据库中删除:DELETEFROMEmployeesWHEREEmployeeID=105示例2–从FinancialData表中删除1993年之前的所有数据:DELETEFROMFinancialDataWHEREYear"系统过程">"系统存储过程">"sp_iqcursorinfo过程".
标准SQL—如果将ANSI_UPDATE_CONSTRAINTS选项设置为OFF,则可以更新的游标范围可能包含ISO/ANSISQL语法的供应商扩展.
Sybase—OpenClient/OpenServer支持使用嵌入式SQL.
在SQLAnywhere中支持使用过程和触发器.
权限必须对游标中使用的表具有DELETE权限.
另请参见DECLARECURSOR语句[ESQL][SP](第155页)INSERT语句(第211页)UPDATE语句(第304页)UPDATE(定位)语句[ESQL][SP](第308页)DESCRIBE语句[ESQL]获取特定宿主变量的有关信息,这些宿主变量是存储从数据库检索的数据所必需的,或用于将数据传递到数据库.
语法DESCRIBE…[USERTYPES]…[{ALL|BINDVARIABLESFOR|INPUT|OUTPUT|SELECTLISTFOR}]…[{LONGNAMES[long-name-spec]|WITHVARIABLERESULT}]…[FOR]{statement-name|CURSORcursor-name}…INTOsqlda-nameSQL语句166SybaseIQ参数long-name-spec:–{OWNER.
TABLE.
COLUMN|TABLE.
COLUMN|COLUMN}statement-name:–标识符|宿主变量cursor-name:–声明的游标sqlda-name:–标识符示例示例1–如何使用DESCRIBE语句:sqlda=alloc_sqlda(3);EXECSQLDESCRIBEOUTPUTFORemployee_statementINTOsqlda;if(sqlda->sqld>sqlda->sqln){actual_size=sqlda->sqld;free_sqlda(sqlda);sqlda=alloc_sqlda(actual_size);EXECSQLDESCRIBEOUTPUTFORemployee_statementINTOsqlda;}用法DESCRIBE设置指定的SQLDA以描述指定语句的OUTPUT(等效于SELECTLIST)或INPUT(BINDVARIABLES).
在使用INPUT的情况下,DESCRIBEBINDVARIABLES不会在SQLDA中设置数据类型:这需要由应用程序完成.
使用ALL关键字可以在一个SQLDA中描述INPUT和OUTPUT.
如果指定了语句名,则以前一定已经使用PREPARE语句用同样的语句名准备了此语句,并且以前一定已经分配了SQLDA(请参见"ALLOCATEDESCRIPTOR语句[ESQL]").
如果指定了游标名,则以前必须已经声明和打开过此游标.
缺省操作是描述OUTPUT.
只有SELECT语句和CALL语句具有OUTPUT.
将SQLDA的sqld字段设置为零后,对其它任何语句或非动态游标执行DESCRIBEOUTPUT时都不会显示输出.
USERTYPES—带有USERTYPES子句的DESCRIBE语句返回有关列的用户定义数据类型的信息.
通常,在前一个DESCRIBE返回DT_HAS_USERTYPE_INFO指示符时会执行这样的DESCRIBE.
返回的信息和不带USERTYPES关键字的DESCRIBE返回的信息是相同的,但sqlname字段保存的是用户定义数据类型的名称,而不是列名.
如果DESCRIBE使用LONGNAMES子句,则sqldata字段会保存此信息.
SELECT—DESCRIBEOUTPUT在SQLDA中填写每个选择列表项的数据类型和长度.
选择列表项的名称字段也会填入一个名称.
如果为选择列表项指定了别名,则名称就SQL语句参考:语句和选项167是该别名.
否则,名称从选择列表项派生:如果该项是简单列名,则使用该项;否则使用表达式的子字符串.
DESCRIBE还会将选择列表项的数目放在SQLDA的sqld字段中.
如果所描述的语句是两个或更多SELECT语句的UNION,则为DESCRIBEOUTPUT返回的列名就是为第一个SELECT语句返回的列名.
CALL—DESCRIBEOUTPUT语句将为过程中的每个INOUT或OUT参数填充SQLDA中的数据类型、长度和名称.
DESCRIBEOUTPUT还将INOUT或OUT参数的数目放在SQLDA的sqld字段中.
CALL(结果集)—DESCRIBEOUTPUT将为过程定义中的每个RESULT列填充SQLDA中的数据类型、长度和名称.
DESCRIBEOUTPUT还将结果列的数目放在SQLDA的sqld字段中.
INPUT—绑定变量是数据库执行语句时由应用程序提供的值.
绑定变量可以看作是语句的参数.
DESCRIBEINPUT用绑定变量名填充SQLDA中的名称字段.
DESCRIBEINPUT还会将绑定变量的数目放在SQLDA的sqld字段中.
DESCRIBE使用SQLDA中的指示符变量提供其它信息.
DT_PROCEDURE_IN和DT_PROCEDURE_OUT位是在描述CALL语句时在指示符变量中设置的位.
DT_PROCEDURE_IN指示IN或INOUT参数,而DT_PROCEDURE_OUT则指示INOUT或OUT参数.
过程的RESULT列将使这两个位清零.
在DESCRIBEOUTPUT之后,这些位可用于区分有结果集(需要使用OPEN、FETCH、RESUME、CLOSE)和没有结果集(需要使用EXECUTE)的语句.
仅当绑定变量是CALL语句的参数时,DESCRIBEINPUT才会相应地设置DT_PROCEDURE_IN和DT_PROCEDURE_OUT,作为CALL语句参数的表达式中的绑定变量会设置这些位.
DESCRIBEALL允许您通过向数据库服务器发送一条请求来描述INPUT和OUTPUT.
在多用户环境中,这样做具有性能优势.
首先由INPUT信息填充SQLDA,然后是OUTPUT信息.
sqld字段包含INPUT和OUTPUT变量的总数.
指示符变量中的DT_DESCRIBE_INPUT位是为INPUT变量而设,对于OUTPUT变量则清零.
检索长列名–LONGNAMES子句用于为语句或游标检索列名.
如不使用此子句,则列名长度存在29个字符的限制:如果使用该子句,任意长度的名称均受支持.
如果使用了LONGNAMES,长名称就会放到SQLDA的SQLDATA字段中,就像从游标中读取一样.
不填写任何其它字段(SQLLEN、SQLTYPE等).
必须像设置FETCHSQLDA一样设置SQLDA:对于每列,它必须包含一个对应条目,并且该条目必须属于字符串类型.
长名称的缺省规范为TABLE.
COLUMN.
描述可变结果集–WITHVARIABLERESULT语句用于描述可以有一个以上结果集(具有不同列数或列类型)的过程.
如果使用WITHVARIABLERESULT,则数据库服务器将DESCRIBE子句之后的SQLCOUNT值设置为下列值之一:SQL语句168SybaseIQ0—结果集可能更改:应该在每个OPEN语句后重新描述过程调用.
1—结果集是固定的.
不需要重新描述.
有关使用SQLDA结构的详细信息,请参见"SQLAnywhereServer–编程">"嵌入式SQL">"SQL描述符区(SQLDA)".
注意:此参考指向SQLAnywhere文档.
标准SQL—一些子句是ISO/ANSISQL语法的供应商扩展.
Sybase—一些子句受OpenClient/OpenServer支持.
权限无另请参见ALLOCATEDESCRIPTOR语句[ESQL](第5页)DECLARECURSOR语句[ESQL][SP](第155页)OPEN语句[ESQL][SP](第245页)PREPARE语句[ESQL](第251页)DISCONNECT语句[InteractiveSQL]删除与数据库的连接.
语法DISCONNECT[{connection-name|CURRENT|ALL}]参数connection-name:–标识符、字符串或宿主变量示例示例1–如何使用嵌入式SQL中的DISCONNECT:EXECSQLDISCONNECT:conn_name示例2–如何从dbisql中使用DISCONNECT来断开所有连接:DISCONNECTALLSQL语句参考:语句和选项169用法DISCONNECT语句用于删除与数据库服务器的连接并释放该连接使用的所有资源.
如果要删除的连接已在CONNECT语句中命名,则可以指定该名称.
指定ALL会删除应用程序与所有数据库环境的所有连接.
CURRENT是缺省设置,用于删除当前连接.
系统会对已删除的连接执行隐式ROLLBACK.
标准SQL-符合ISO/ANSISQL标准.
Sybase-受OpenClient/OpenServer支持.
权限无另请参见CONNECT语句[ESQL][InteractiveSQL](第65页)SETCONNECTION语句[ESQL][InteractiveSQL](第289页)DROP语句从数据库中删除对象.
语法DROP{DBSPACEdbspace-name|{DATATYPE[IFEXISTS]|DOMAIN[IFEXISTS]}datatype-name|EVENT[IFEXISTS]event-name|INDEX[IFEXISTS][[owner].
table-name.
]index-name|JOININDEX[owner.
]join-index-name|MESSAGEmessage-number|TABLE[IFEXISTS][owner.
]table-name|VIEW[IFEXISTS][owner.
]view-name|PROCEDURE[IFEXISTS][owner.
]procedure-name|FUNCTION[IFEXISTS][owner.
]function-name}示例示例1–从数据库中删除Departments表:DROPTABLEDepartments示例2–从数据库中删除emp_dept视图:DROPVIEWemp_deptSQL语句170SybaseIQ用法DROP语句删除指定数据库结构的定义.
如果该结构是数据库空间,则必须先删除或重新分配该数据库空间中包含任何数据的所有表,再删除该数据库空间;将自动重新分配其它结构.
如果该结构是表,则在删除过程中将自动删除该表中的所有数据.
另外,DROPTABLE语句还会删除该表的所有索引和键.
但是,如果有任何连接索引使用该表,则无法删除该表.
必须先使用DROPJOININDEX删除这些连接索引.
如果您不希望在DROP语句试图删除不存在的数据库对象时返回错误,请使用IFEXISTS子句.
DROPINDEX可删除任何显式创建的索引.
它只在没有关联的主键、唯一或外键约束时,才会删除隐式创建的索引.
如果存在关联的未受强制外键,则对非唯一HG执行的DROPINDEX操作将失败.
警告!
请勿删除由DBO用户所有的视图.
删除此类视图或将它们转化为表可能导致出问题.
只要语句影响了当前正由其它连接使用的表,都会禁止DROPTABLE、DROPINDEX、DROPJOININDEX和DROPDBSPACE.
DROPTABLE如果主表具有与之关联的外键约束(包括未受强制的外键约束),则会禁止.
如果相应表包含IDENTITY列且IDENTITY_INSERT设置为该表,也会禁止DROPTABLE.
要删除该表,必须清除IDENTITY_INSERT(即将IDENTITY_INSERT设置为空字符串''),或者将其设置为其它表名.
外键可以具有非唯一的单列或多列HG索引.
主键可以具有唯一的单列或多列HG索引.
无法删除为现有外键、主键和唯一约束隐式创建的HG索引.
如果DBA要删除属于其他用户的连接索引,则此连接索引的名称必须用所有者名称加以限定.

四个初始数据库空间为SYSTEM、IQ_SYSTEM_MAIN、IQ_SYSTEM_TEMP和IQ_SYSTEM_MSG.
您不能删除这些初始数据库空间,但只要至少一个数据库空间仍处于读写模式,您就可以从IQmain存储或目录存储(可能包含多个数据库空间)中删除数据库空间.
必须先将数据库空间中的表删除,然后才能删除数据库空间.
如果该数据库空间仍包含用户数据,则会返回错误;该数据库空间删除后,将自动重新分配其它结构.
只有在使数据库空间处于只读模式后,才能删除它.
注意:数据库空间被命令使用后,在任何时刻都可能包含数据,因而会禁止对它执行DROPDBSPACE.
有关修改数据库空间的详细信息,请参见《系统管理指南第一卷》>"数据库对象管理">"数据存储".
其它连接正在使用相应过程时,禁止执行DROPPROCEDURE.
SQL语句参考:语句和选项171如果表中用到相应数据类型,则会禁止执行DROPDATATYPE.
必须更改以某种用户定义数据类型定义的所有列的数据类型,才能删除这种数据类型.
建议使用DROPDOMAIN而不是DROPDATATYPE,因为DROPDOMAIN是ANSI/ISOSQL3草案中使用的语法.
副作用自动提交.
清空dbisql中的数据窗口.
DROPTABLE和DROPINDEX会关闭当前连接的所有游标.
局部临时表是个特例,删除它时不执行提交.
另请参见《参考:构件块、表和过程》>"系统过程">"系统存储过程">"sp_iqdbspace过程"和《系统管理指南第一卷》>"数据库对象管理".
标准SQL-符合ISO/ANSISQL标准.
Sybase-受AdaptiveServerEnterprise支持.
权限对于DROPDBSPACE,必须具有DBA或SPACEADMIN权限,并且必须是唯一的数据库连接.
要执行其它删除语句,用户必须是相应对象的所有者且获得DBA权限.
除非引用全局临时表的所有用户都已经断开连接,否则不能删除该全局临时表.

要执行DROPINDEX,非DBA用户必须提供完全限定的索引名来删除DBA拥有的基表上的索引.
DBA或具有适当权限的用户可以在不使用完全限定名的情况下删除非DBA用户拥有的表上的索引.
DROPCONNECTION语句删除任意用户与数据库的连接.
语法DROPCONNECTIONconnection-id示例示例1–删除ID号为4的连接:DROPCONNECTION4SQL语句172SybaseIQ用法DROPCONNECTION通过删除与数据库的连接,将用户同数据库断开.
不能删除当前连接,必须首先创建另一个连接,然后才能删除第一个连接.
连接的connection-id是通过使用connection_property函数索取连接号获得的.
下面的语句将返回当前连接的连接ID:SELECTconnection_property('number')标准SQL-ISO/ANSISQL语法的供应商扩展.
Sybase-不受AdaptiveServerEnterprise支持.
权限需要DBA或OPERATOR权限.
另请参见CONNECT语句[ESQL][InteractiveSQL](第65页)DROPDATABASE语句删除数据库及其关联的数据库空间段文件.
语法DROPDATABASEdb-filename[KEYkey-spec]参数key-spec:–一个字符串,包含混合大小写字符、数字、字母和特殊字符.
防止该键受到命令解释器的解释或更改可能非常有必要.
示例示例1–删除数据库mydb:DROPDATABASE'mydb.
db'示例2–删除创建的具有密钥is!
seCret的加密数据库marvin.
db:DROPDATABASE'marvin.
db'KEY'is!
seCret'示例3–以下UNIX示例从/s1/temp目录中删除数据库temp.
db:DROPDATABASE'/s1/temp/temp.
db'SQL语句参考:语句和选项173用法DROPDATABASE先删除所有与IQ存储和临时存储关联的数据库段文件,再删除目录存储文件.
必须先停止数据库,然后才能删除它.
如果使用连接参数AUTOSTOP=no,您可能需要发出STOPDATABASE语句.
您指定的db-filename对应于您使用CREATEDATABASE为数据库定义的数据库文件名.
如果在CREATEDATABASE命令中为此值指定了目录路径,还必须为DROPDATABASE指定目录路径.
否则,SybaseIQ会在服务器文件所在的缺省目录中查找数据库文件.
无法通过执行DROPDATABASE语句来删除定义了DatabaseStart事件的IQ数据库.
标准SQL-ISO/ANSISQL语法的供应商扩展.
Sybase-不受AdaptiveServerEnterprise支持.
权限使用数据库服务器的-gu命令行选项设置所需的权限.
缺省设置为要求具有DBA权限.
另请参见CREATEDATABASE语句(第68页)STOPDATABASE语句[InteractiveSQL](第298页)DROPEXTERNLOGIN语句从SybaseIQ系统表中删除外部登录名.
语法DROPEXTERNLOGINlogin-nameTOremote-server示例示例1–DROPEXTERNLOGINdbaTOsybase1用法DROPEXTERNLOGIN所做的更改将直到下一次与远程服务器连接时才生效.
SQL语句174SybaseIQDROPEXTERNLOGIN从SybaseIQ系统表中删除外部登录名.
login-name—指定本地用户登录名.
TO—指定远程服务器的名称.
本地用户用来登录该服务器的备用登录名和口令就是所删除的外部登录凭据.
副作用自动提交标准SQL-符合ISO/ANSISQL标准.
Sybase-受OpenClient/OpenServer支持.
权限必须具有DBA或USERADMIN权限.
另请参见CREATEEXTERNLOGIN语句(第89页)DROPLOGINPOLICY语句从数据库中删除登录策略.
语法DROPLOGINPOLICYpolicy-name示例示例1–先创建Test11登录策略,然后将其删除:CREATELOGINPOLICYTest11;DROPLOGINPOLICYTest11;用法如果您尝试删除已分配给用户的策略,则DROPLOGINPOLICY语句会失败.
您可以使用ALTERUSER语句更改用户的策略分配,或使用DROPUSER语句删除用户.
权限必须具有DBA或USERADMIN权限.
SQL语句参考:语句和选项175另请参见ALTERUSER语句(第39页)CREATELOGINPOLICY语句(第108页)DROPUSER语句(第180页)ALTERLOGINPOLICY语句(第19页)DROPLOGICALSERVER语句删除用户定义的逻辑服务器.
语法DROPLOGICALSERVERlogical-server-name示例示例1–以下示例删除用户定义的逻辑服务器ls1.
DROPLOGICALSERVERls1用法仅适用于Multiplex.
删除逻辑服务器时,SybaseIQ内部执行如下Catalog更改操作:删除逻辑服务器的所有成员资格定义.
从每个登录策略中删除显式分配给主逻辑服务器的逻辑服务器分配.
如果该服务器是分配到登录策略的唯一逻辑服务器,SybaseIQ将该登录策略的逻辑服务器分配设置为NONE.
从ISYSIQ.
LOGICALSERVER删除逻辑服务器条目.
权限必须具有DBA或MULTIPLEXADMIN权限.
DROPMULTIPLEXSERVER语句从Multiplex删除服务器.
语法DROPMULTIPLEXSERVER{server-name}[drop_mpx_server_clause]SQL语句176SybaseIQ参数drop_mpx_server_clause:–{WITHDROPMEMBERSHIP|WITHDROPLOGICALSERVER}示例示例1–DROPMULTIPLEXSERVERwriter1用法仅适用于Multiplex.
Sybase建议您先关闭每台Multiplex服务器,然后再删除.
此语句将自动提交.
如果尚未按建议停止,删除的服务器将在执行此语句之后自动关闭.
删除最后一台辅助服务器将使Multiplex转回Simplex.
删除Multiplex内的最后一台辅助服务器后,协调器将自动关闭.
如果需要,它需要重新启动.
请参见第3.
3.
1节,获取Multiplex转换为Simplex时所应用的规则集详细信息.
子句WITHDROPMEMBERSHIP–正在删除的Multiplex服务器拥有一项或多项逻辑服务器成员资格,DROPMULTIPLEXSERVER失败并显示错误.
使用WITHDROPMEMBERSHIP子句,删除逻辑服务器及其所有成员资格.
子句WITHDROPLOGICALSERVER–删除前一辅助服务器时,由于存在一处或多处用户定义的逻辑服务器,DROPMULTIPLEXSERVER命令失败.
使用WITHDROPLOGICALSERVER子句,删除前一辅助服务器及其所有用户定义的逻辑服务器.
注意:WITHDROPLOGICALSERVER子句仅在删除前一辅助服务器时有效.
否则,系统将报告错误.
权限必须具有DBA或MULTIPLEXADMIN权限.
DROPSERVER语句从SybaseIQ系统表中删除远程服务器.
语法DROPSERVERserver-nameSQL语句参考:语句和选项177示例示例1–DROPSERVERase_prod用法必须先删除已经为远程服务器定义的所有代理表,DROPSERVER才会成功.
副作用自动提交标准SQL-符合ISO/ANSISQL标准.
Sybase-受OpenClient/OpenServer支持.
权限只有DBA帐户可以删除远程服务器.
另请参见CREATESERVER语句(第132页)DROPSERVICE语句删除Web服务.
语法DROPSERVICEservice-name示例示例1–删除名为tables的Web服务:DROPSERVICEtables用法DROPSERVICE删除Web服务.
另请参见"SQLAnywhereServer-编程">"HTTPWeb服务">"使用SQLAnywhere作为HTTPWeb服务器".
注意:此参考指向SQLAnywhere文档.
SQL语句178SybaseIQ标准SQL-符合ISO/ANSISQL标准.
Sybase-不受AdaptiveServerEnterprise支持.
权限必须具有DBA权限.
另请参见ALTERSERVICE语句(第29页)CREATESERVICE语句(第133页)DROPSTATEMENT语句[ESQL]释放语句占用的资源.
语法DROPSTATEMENT[owner.
]statement-name参数statement-name:–标识符或宿主变量示例示例1–EXECSQLDROPSTATEMENTS1;EXECSQLDROPSTATEMENT:stmt;用法DROPSTATEMENT释放由指定的准备好的语句占用的资源.
这些资源由成功执行的PREPARE语句分配,通常直到释放数据库连接时才释放.
标准SQL-ISO/ANSISQL语法的供应商扩展.
Sybase—在OpenClient/OpenServer中不受支持.
权限必须已经准备了此语句.
SQL语句参考:语句和选项179另请参见PREPARE语句[ESQL](第251页)DROPTEXTCONFIGURATION语句删除文本配置对象.
语法请参见下文.
用法有关语法和完整说明,请参见《SybaseIQ中的非结构化数据分析》.
DROPTEXTINDEX语句从数据库中删除TEXT索引.
语法请参见下文.
用法有关语法和完整说明,请参见《SybaseIQ中的非结构化数据分析》.
DROPUSER语句删除用户.
语法DROPUSERuser-name示例示例1–从数据库中删除用户SQLTester:DROPUSERSQLTester;用法user-name—要删除的用户的名称.
SQL语句180SybaseIQ另请参见"SQLAnywhereServer–数据库管理">"配置数据库">"管理用户ID和权限">"管理登录策略".
注意:此参考指向SQLAnywhere文档.
标准SQL-符合ISO/ANSISQL标准.
Sybase-不受AdaptiveServerEnterprise支持.
权限必须具有DBA或USERADMIN权限.
另请参见CREATELOGINPOLICY语句(第108页)CREATEUSER语句(第147页)DROPLOGINPOLICY语句(第175页)GRANT语句(第202页)ALTERLOGINPOLICY语句(第19页)DROPVARIABLE语句删除SQL变量.
语法DROPVARIABLEidentifier用法DROPVARIABLE消除以前用CREATEVARIABLE语句创建的S1L变量.
释放数据库连接时,会自动删除变量.
由于变量通常用于大对象,因此在使用后删除它们或者将它们设置为NULL,可以释放大量资源(主要是磁盘空间).
如果您不希望在DROP语句试图删除不存在的数据库对象时返回错误,请使用IFEXISTS子句.
标准SQL-ISO/ANSISQL语法的供应商扩展.
Sybase-不受AdaptiveServerEnterprise支持.
SQL语句参考:语句和选项181权限无另请参见CREATEVARIABLE语句(第149页)SET语句[ESQL](第285页)EXECUTE语句[ESQL]执行SQL语句.
语法语法1EXECUTEstatement-name.
.
.
[{USINGDESCRIPTORsqlda-name|USINGhost-variable-list}].
.
.
[{INTODESCRIPTORinto-sqlda-name|INTOinto-host-variable-list].
.
.
[ARRAY:nnn}]语法2EXECUTEIMMEDIATEstatement参数statement-name:–标识符或宿主变量sqlda-name:–标识符into-sqlda-name:–标识符statement:–字符串或宿主变量示例示例1–执行DELETE:EXECSQLEXECUTEIMMEDIATE'DELETEFROMEmployeesWHEREEmployeeID=105';示例2–执行预准备DELETE语句:EXECSQLPREPAREdel_stmtFROM'DELETEFROMEmployeesWHEREEmployeeID=:a';EXECSQLEXECUTEdel_stmtUSING:employee_number;示例3–执行预准备查询:EXECSQLPREPAREsel1FROM'SELECTSurnameFROMEmployeesWHEREEmployeeID=:a';EXECSQLEXECUTEsel1USING:employee_numberINTO:emp_lname;SQL语句182SybaseIQ用法语法1执行指定的动态语句,这是以前准备好的语句.
如果动态语句包含为请求(绑定变量)提供信息的宿主变量占位符,则sqlda-name必须指定一个指向SQLDA(它包含的描述符足够语句中出现的所有绑定变量使用)的C指针变量,或者必须在host-variable-list中提供绑定变量.
可选的ARRAY子句可与预准备INSERT语句一起使用,从而允许宽插入,即一次插入多行,这样可以提高性能.
值nnn是要插入的行数.
SQLDA必须包含nnn*(每行的列数)个变量.
第一行放在SQLDA变量0和(每行的列数)-1之间,依此类推.
SELECT语句或CALL语句产生的OUTPUT将放入变量列表中的变量中,或放入指定SQLDA描述的程序数据区中.
OUTPUT(选择列表或参数)和宿主变量列表或SQLDA描述符数组之间是一对一的对应关系.
如果EXECUTE与INSERT语句一起使用,则插入的行在第二个描述符中返回.
例如,使用生成主键值的自动增量主键时,EXECUTE将提供一种机制,用于立即重新读取该行和确定分配给该行的主键值.
语法2是一种PREPARE和EXECUTE语句的简写形式,适用于不含绑定变量或输出的语句.
包含在相应字符串或宿主变量中的SQL语句将会立即得到执行,并且在完成后会被删除.
EXECUTE可用于可以准备的任何SQL语句.
游标用于返回数据库中的许多行的SELECT语句或CALL语句.
注意:在EXECUTE语句中不能引用表UDF.
成功执行INSERT、UPDATE或DELETE语句后,将用上述操作所影响的行数填写SQLCA(SQLCOUNT)中的sqlerrd[2]字段.
标准SQL—ISO/ANSISQL语法的供应商扩展.
Sybase-在OpenClient/OpenServer中受支持.
权限会检查用户对所执行的语句是否具备相应权限.
另请参见DECLARECURSOR语句[ESQL][SP](第155页)PREPARE语句[ESQL](第251页)SQL语句参考:语句和选项183EXECUTE语句[T-SQL]调用过程,作为CALL语句的与AdaptiveServerEnterprise兼容的备用方案.
语法EXECUTE[@return_status=][owner.
]procedure_nameparameter-name=]expression|[@parameter-name=]@variable[output]},.
.
.
示例示例1–创建过程p1:CREATEPROCEDUREp1(@varINTEGER=54)ASPRINT'oninput@var=%1!
',@varDECLARE@intvarintegerSELECT@intvar=123SELECT@var=@intvarPRINT'onexit@var=%1!
',@var;为参数提供输入值23,执行此过程.
如果是从OpenClient应用程序连接的,则PRINT消息会显示在客户端窗口中.
如果是从ODBC或嵌入式SQL应用程序连接的,则消息会显示在数据库服务器窗口中.
EXECUTEp123下面是另一种执行该过程的方法,适用于存在几个参数时的情况:EXECUTEp1@var=23使用参数的缺省值执行该过程:EXECUTEp1执行该过程,并将返回值存储在变量中,以便检查返回状态:EXECUTE@status=p123用法EXECUTE用于执行存储过程,可选择性地提供过程参数以及检索输出值和返回状态信息.
实现EXECUTE是为了与Transact-SQL兼容,但此语句可以在Transact-SQL或SybaseIQ批处理和过程中使用.
注意:在EXECUTE语句中不能引用表UDF.
SQL语句184SybaseIQ权限用户必须是相应过程的所有者,对该过程有EXECUTE权限或获得DBA权限.
另请参见CALL语句(第55页)EXECUTEIMMEDIATE语句[ESQL][SP]实现从过程中执行动态构造的语句.
语法语法1EXECUTEIMMEDIATE[execute-option]string-expressionexecute-option:WITHQUOTES[ON|OFF]|WITHESCAPES{ON|OFF}|WITHRESULTSET{ON|OFF}语法2EXECUTE(string-expression)示例示例1–此过程创建一个表,其中表名作为过程的参数提供.
整个EXECUTEIMMEDIATE语句必须在一行上.
CREATEPROCEDURECreateTableProc(INtablenamechar(30))BEGINEXECUTEIMMEDIATE'CREATETABLE'||tablename||'(column1INTPRIMARYKEY)'END;调用过程并创建表mytable:CALLCreateTableProc('mytable')用法EXECUTEIMMEDIATE扩展了可以从过程内执行的语句的范围.
它使您可以执行动态准备的语句,比如用传递到过程中的参数构造的语句.
SQL语句参考:语句和选项185该语句中的文字字符串必须用单引号引起来,且必须不同于PREPARE或EXECUTEIMMEDIATE语句中的任何现有语句名称.
整个语句必须在一行上.
EXECUTEIMMEDIATE执行的语句只能引用全局变量.
在Transact-SQL存储过程内部只能使用语法2.
WITHQUOTES—当指定WITHQUOTES或WITHQUOTESON时,会认为字符串表达式中的所有双引号都用于界定标识符.
当未指定WITHQUOTES或指定了WITHQUOTESOFF时,对字符串表达式中的双引号的处理方式取决于QUOTED_IDENTIFIER选项的当前设置.
如果使用传递到存储过程中的对象名构造要执行的语句,但该名称可能需要双引号并且当QUOTED_IDENTIFIER设置为OFF时可能调用该过程,这时WITHQUOTES很有用.
请参见"QUOTED_IDENTIFIER选项[TSQL]".
WITHESCAPES—WITHESCAPESOFF使得字符串表达式中的任何转义序列(如\n、\x或\\)被忽略.
例如,两个连续的反斜杠仍保留为两个反斜杠,而不会转换为一个反斜杠.
缺省设置等同于WITHESCAPESON.
可以使用WITHESCAPESOFF来更简便地执行引用包含反斜杠的文件名的动态构造语句.
在某些上下文中,执行EXECUTEIMMEDIATE之前会转换string-expression中的转义序列.
例如,会先分析复合语句,再执行它,且不论WITHESCAPES如何设置,在此分析过程中都会转换转义序列.
在此类环境中,使用WITHESCAPESOFF可防止发生进一步的转换.
例如:BEGINDECLAREString1LONGVARCHAR;DECLAREString2LONGVARCHAR;EXECUTEIMMEDIATE'SETString1=''Onebackslash:EXECUTEIMMEDIATEWITHESCAPESOFF'SETString2=''Twobackslashes:SELECTString1,String2ENDWITHRESULTSET—可以通过指定WITHRESULTSETON让EXECUTEIMMEDIATE语句返回结果集.
使用该子句,包含它的过程被标记为返回结果集.
如果不包含此子句,则如果在调用该过程时该语句不产生结果集,将报告一个错误.
注意:缺省选项为WITHRESULTSETOFF,表示语句执行时不产生结果集.
副作用无.
但是,如果此语句是存在自动提交副作用的数据定义语句,则确实会发生这种提交.
SQL语句186SybaseIQ标准SQL-符合ISO/ANSISQL标准.
Sybase—在OpenClient/OpenServer中受支持.
权限无.
此语句用过程所有者的权限执行,而不是用调用过程的用户的权限执行.

另请参见BEGIN……END语句(第49页)CREATEPROCEDURE语句(第112页)QUOTED_IDENTIFIER选项[TSQL](第427页)EXIT语句[InteractiveSQL]退出InteractiveSQL.
语法{EXIT|QUIT|BYE}[return-code]return-code:number|connection-variable示例–如果表T有行,将把InteractiveSQL返回值设置为1,如果T中没有行,则设置为0.
CREATEVARIABLErowCountINT;CREATEVARIABLEretcodeINT;SELECTCOUNT(*)INTOrowCountFROMT;IF(rowCount>0)THENSETretcode=1;ELSESETretcode=0;ENDIF;EXITretcode;注意:不能编写以下语句,因为EXIT是InteractiveSQL语句(而不是SQL语句),而且不能在其它SQL块语句中包含InteractiveSQL语句:CREATEVARIABLErowCountINT;SELECTCOUNT(*)INTOrowCountFROMT;IF(rowCount>0)THENEXIT1;notallowedELSESQL语句参考:语句和选项187EXIT0;notallowedENDIF;用法将InteractiveSQL作为窗口式程序运行时,会关闭InteractiveSQL窗口,而以命令提示符(批处理)模式运行时,会完全终止InteractiveSQL.
在这两种情况下,数据库连接也被关闭.
关闭数据库连接前,如果COMMIT_ON_EXIT选项设置为ON,则InteractiveSQL自动执行COMMIT语句.
如果此选项设置为OFF,则InteractiveSQL执行隐式ROLLBACK.
缺省情况下,COMMIT_ON_EXIT选项设置为ON.
在批处理文件中可以使用可选的返回代码来指示InteractiveSQL命令文件中的命令是成功还是失败.
缺省返回码为0.
副作用如果选项COMMIT_ON_EXIT设置为ON(缺省),则自动执行提交;否则此语句执行隐式回退.
在Windows操作系统中,提供的可选返回值是ERRORLEVEL.
标准SQL-ISO/ANSISQL语法的供应商扩展.
Sybase—不适用于AdaptiveServerEnterprise.
权限无另请参见SETOPTION语句(第291页)FETCH语句[ESQL][SP]重新定位游标并从中获取数据.
语法FETCH{NEXT|PRIOR|FIRST|LAST|ABSOLUTErow-count|RELATIVErow-count}.
.
.
cursor-name.
.
.
{[INTOhost-variable-list]|USINGDESCRIPTORsqlda-name|INTOvariable-list}.
.
.
[PURGE][BLOCKn][ARRAYfetch-count].
.
.
INTOvariable-listSQL语句188SybaseIQ.
.
.
IQCACHErow-count参数cursor-name:–标识符或宿主变量sqlda-name:–标识符host-variable-list:–可以包含指示符变量row-count:–数字或宿主变量fetch-count:–整数或宿主变量示例示例1–嵌入式SQL示例:EXECSQLDECLAREcur_employeeCURSORFORSELECTEmployeeID,SurnameFROMEmployees;EXECSQLOPENcur_employee;EXECSQLFETCHcur_employeeINTO:emp_number,:emp_name:indicator;示例2–过程示例:BEGINDECLAREcur_employeeCURSORFORSELECTSurnameFROMEmployees;DECLAREnameCHAR(40);OPENcur_employee;LOOPFETCHNEXTcur_employeeintoname;.
.
.
ENDLOOPCLOSEcur_employee;END用法FETCH可从指定的游标中检索一行.
ARRAY子句允许宽提取,即同时检索多行,这样可能会提高性能.
游标在此前必须已打开.
SELECT语句结果中的一行被放入变量列表的变量中.
选择列表和宿主变量列表之间是一对一的对应关系.
SELECT语句返回的结果中的一行或多行放在变量列表的变量中或指定SQLDA描述的程序数据区中.
在以上两种情况下,选择列表与宿主变量列表或SQLDA描述符数组之间都是一对一的对应关系.
INTO子句是可选的.
如果未指定该子句,则FETCH仅定位游标(参见以下段落).
SQL语句参考:语句和选项189可指定一个可选定位参数用来允许在提取行之前移动游标.
缺省值为NEXT,它使游标在提取行之前向前移动一行.
PRIOR使游标在提取前向后移动一行.
RELATIVE定位用于在读取前将游标沿任一方向移动指定的行数.
正数表示向前移动,负数表示向后移动.
因此,NEXT等同于RELATIVE1,PRIOR等同于RELATIVE-1.
RELATIVE0检索上一提取语句在此游标上所检索的行.
ABSOLUTE定位参数用于转到具体行.
0表示第一行前面的位置.
请参见《系统管理指南第二卷》>"使用过程和批处理".
1表示第一行,依此类推.
负数用于指定从游标末尾开始计数的绝对位置.
-1表示游标的最后一行.
FIRST是ABSOLUTE1的简写形式.
LAST是ABSOLUTE-1的简写形式.
注意:SybaseIQ处理FIRST、LAST、ABSOLUTE和为负的RELATIVE选项时的效率低于处理某些其它DBMS产品时的效率,因此在使用它们时会影响性能.
OPEN最初将游标定位在第一行之前.
当打开游标时,由游标声明的FORREADONLY查看声明该游标的表的版本,而不是在首次执行FETCH时查看表的版本.
如果提取操作中包括定位参数,而位置在允许的游标位置外,则会发出SQLE_NOTFOUND警告.
IQCACHE子句指定FIFO队列中可以缓存的最大行数.
如果不为IQCACHE子句指定值,则会使用CURSOR_WINDOW_ROWS数据库选项的值.
CURSOR_WINDOW_ROWS的缺省设置为200行.
在嵌入式SQL中使用FETCH和OPEN语句以下子句仅供嵌入式SQL使用:USINGDESCRIPTORsqlda-nameINTOhost-variable-listPURGEBLOCKnARRAYfetch-count在cursor-name和row-count中使用host-variableDECLARECURSOR在C源代码中必须出现在FETCH的前面,而OPEN语句必须在FETCH之前执行.
如果宿主变量将用于游标名,则实际上是DECLARE语句生成代码,因此该语句必须在FETCH之前执行.
在多用户环境下,客户端一次可提取多行.
这类提取称为块提取或多行提取.
第一个提取导致从服务器发送回若干行.
客户端将这些行放入缓冲区,后面的提取从这些缓冲区中检索,而不对服务器发出新的请求.
BLOCK子句就应用程序可提取多少行向客户端和服务器给出提示.
特殊值0表示请求将发送到服务器,并且只返回一行(没有行块).
SQL语句190SybaseIQPURGE子句使客户端刷新其所有行的缓冲区,然后向服务器发送提取请求.
此提取请求可能返回行块.
如果在提取时返回SQLSTATE_NOTFOUND警告,则SQLCA(SQLCOUNT)的sqlerrd[2]字段中包含尝试的提取超出允许游标位置的行数.
(游标可在某行上、第一行之前或最后一行之后.
)如果未找到行但位置有效,则值为0,例如,当定位到游标的最后一行上时执行FETCHRELATIVE1.
如果所尝试的提取超出了游标的末尾,则为正值;如果所尝试的提取位于游标开头的前面,则为负值.
成功执行了FETCH语句后,SQLCA(SQLIOCOUNT)的sqlerrd[1]字段递增,增量为执行提取所需的输入/输出操作数.
该字段实际上在每个数据库语句执行时都递增.

要在嵌入式SQL中使用宽提取,请将FETCH语句包括在代码中:EXECSQLFETCH.
.
.
ARRAYnnn其中ARRAYnnn是FETCH语句的最后一项.
提取计数nnn可以是一个宿主变量.
SQLDA必须包含nnn*(每行的列数)个变量.
第一行放在SQLDA变量0和(每行的列数)-1之间,依此类推.
服务器在SQLCOUNT中返回提取的记录数,并始终返回大于零的SQLCOUNT(除非出现错误).
旧版本的服务器仅返回一行,而SQLCOUNT设置为零.
因此如果在SQLCOUNT为零时没有出现错误情况,则表示提取了一个有效行.
标准SQL-符合ISO/ANSISQL标准.
Sybase-AdaptiveServerEnterprise中支持.
权限游标必须是打开的,并且用户必须对游标声明中所引用的表具有SELECT权限.
另请参见DECLARECURSOR语句[ESQL][SP](第155页)OPEN语句[ESQL][SP](第245页)PREPARE语句[ESQL](第251页)CURSOR_WINDOW_ROWS选项(第354页)FOR语句为游标中的每行重复执行一次语句列表.
语法[statement-label:]FORfor-loop-nameAScursor-name[cursor-type]CURSORSQL语句参考:语句和选项191{FORstatement.
.
.
[{FOR{UPDATEcursor-concurrency|FORREADONLY}]|USINGvariable-name}DOstatement-listENDFOR[statement-label]参数cursor-type:–NOSCROLL|DYNAMICSCROLL|SCROLL|INSENSITIVE|SENSITIVEcursor-concurrency:–BY{VALUES|TIMESTAMP|LOCK]variable-name:–identifier示例示例1–下面的代码段阐释了FOR循环的用法:FORnamesAScursCURSORFORSELECTSurnameFROMEmployeesDOCALLsearch_for_name(Surname);ENDFOR;用法FOR是控制语句,它允许对游标中的每一行执行一次SQL语句列表.
FOR语句等效于这样一个复合语句:游标有一个DECLARE,游标结果集中的每一列有一个变量DECLARE,后面跟一个循环,该循环将游标中的一行读入局部变量,并对游标中的每一行执行一次statement-list.
有关cursor-type参数的说明以及更多示例,请参见"SQLAnywhereServer-SQL参考">"SQL语句">"FOR语句".
注意:此参考指向SQLAnywhere文档.
所声明的局部变量的名称和数据类型都是从游标中使用的statement派生的.
在SELECT语句中,数据类型是选择列表中表达式的数据类型.
名称是选择列表项的别名(如果存在这样的别名),否则名称是列的名称.
任何不是简单列引用的选择列表项都必须有别名.
在CALL语句中,名称和数据类型取自过程定义中的RESULT子句.
LEAVE语句可在ENDFOR语句后的第一个语句处用于重新开始执行.
如果指定结尾statement-label,它必须与开头statement-label匹配.
标准SQL-符合ISO/ANSISQL标准.
Sybase-不受AdaptiveServerEnterprise支持.
SQL语句192SybaseIQ权限无另请参见DECLARECURSOR语句[ESQL][SP](第155页)FETCH语句[ESQL][SP](第188页)LEAVE语句(第221页)LOOP语句(第241页)FORWARDTO语句向远程服务器发送本地语法.
语法语法1FORWARDTOserver-name{sql-statement}语法2FORWARDTO[server-name]示例示例1–与远程服务器ase_prod的直通会话:FORWARDTOaseprodSELECT*fromtitlesSELECT*fromauthorsFORWARDTO用法FORWARDTO使用户能够指定需要直通连接的服务器.
此语句的用法如下:将语句发送到远程服务器(语法1)将SybaseIQ置于直通模式,以便向远程服务器发送一系列的语句(语法2)代表用户与server-name建立连接时,服务器使用:用CREATEEXTERNLOGIN设置的远程登录别名如果未设置远程登录别名,则使用用于与SybaseIQ通信的名称和口令如果无法与指定的服务器建立连接,在返回给用户的消息中会指出原因.

在将语句传递给请求的服务器后,所有结果都会转换成客户端程序可以识别的形式.

server-name是远程服务器的名称.
SQL语句参考:语句和选项193sql-statement是远程服务器的本地语法中的命令.
该命令或命令组使用大括号({})或单引号括起来.
如果指定了server_name,但未指定FORWARDTO查询中的语句,则会话将进入直通模式,且所有后续查询都直接传递到远程服务器.
若要关闭直通模式,请发出不指定server_name的FORWARDTO.
注意:FORWARDTO语句是服务器指令,不能用在存储过程、触发器、事件或批处理中.
副作用在FORWARDTO会话的持续时间内,远程连接设置为AUTOCOMMIT(非链接)模式.
在FORWARDTO语句之前未完成的任何工作都自动提交.
标准SQL-符合ISO/ANSISQL标准.
Sybase-受OpenClient/OpenServer支持.
权限无另请参见CREATEEXTERNLOGIN语句(第89页)CREATESERVER语句(第132页)FROM子句指定SELECT语句中涉及的数据库表或视图.
语法.
.
.
FROMtable-expression[,…]table-expression:table-name|view-name|procedure-name|common-table-expression|(subquery)[[AS]derived-table-name[column_name,.
.
.
)]]|derived-table|join-expression|(table-expression,.
.
.
)|openstring-expression|apply-expression|contains-expression|dml-derived-tableSQL语句194SybaseIQtable-name:[userid.
]table-name][[AS]correlation-name][FORCEINDEX(index-name)]view-name:[userid.
]view-name[[AS]correlation-name]procedure-name:[owner,]procedure-name([parameter,.
.
.
])[WITH(column-namedatatype,)][[AS]correlation-name]parameter:scalar-expression|table-parametertable-parameter:TABLE(select-statement)[OVER(table-parameter-over)]table-parameter-over:[PARTITIONBY{ANY|NONE|table-expression}][ORDERBY{expression|integer}[ASC|DESCderived-table:(select-statement)[AS]correlation-name[(column-name,join-expression:table-expressionjoin-operatortable-expression[ONjoin-condition]join-operator:[KEY|NATURAL][join-type]JOIN|CROSSJOINjoin-type:INNER|LEFT[OUTER]|RIGHT[OUTER]|FULL[OUTER]openstring-expression:OPENSTRING({FILE|VALUE}string-expression)WITH(rowset-schema)[OPTION(scan-option.
.
.
)][AS]correlation-nameapply-expression:table-expression{CROSS|OUTER}APPLYtable-expressioncontains-expression:{table-name|view-name}CONTAINS(column-name[,.
.
.
],contains-query)[[AS]score-correlation-name]rowset-schema:column-schema-list|TABLE[owner.
]table-name[(column-list)]SQL语句参考:语句和选项195column-schema-list:{column-nameuser-or-base-type|filler(column-list:{column-name|filler(scan-option:BYTEORDERMARK{ON|OFF}|COMMENTSINTRODUCEDBYcomment-prefix|DELIMITEDBYstring|ENCODINGencoding|ESCAPECHARACTERcharacter|ESCAPES{ON|OFF}|FORMAT{TEXT|BCP}|HEXADECIMAL{ON|OFF}|QUOTEstring|QUOTES{ON|OFF}|ROWDELIMITEDBYstring|SKIPinteger|STRIP{ON|OFF|LTRIM|RTRIM|BOTH}contains-query:stringdml-derived-table:(dml-statement)REFERENCING([table-version-names|NONE])dml-statement:insert-statementdelete-statementupdate-statementmerge-statementtable-version-names:OLD[AS]correlation-name[FINAL[AS]correlation-name]|FINAL[AS]correlation-name示例示例1–以下是有效的FROM子句:.
.
.
FROMEmployees.
.
.
.
.
.
FROMEmployeesNATURALJOINDepartments.
.
.
.
.
.
FROMCustomersKEYJOINSalesOrdersKEYJOINSalesOrderItemsKEYJOINProducts.
.
.
示例2–下面的查询阐释如何在查询中使用派生表:SELECTSurname,GivenName,number_of_ordersFROMCustomersJOINSQL语句196SybaseIQ(SELECTCustomerID,count(*)FROMSalesOrdersGROUPBYCustomerID)ASsales_order_counts(CustomerID,number_of_orders)ON(Customers.
ID=sales_order_counts.
cust_id)WHEREnumber_of_orders>3用法SELECT语句需要用一个表列表来指定该语句要使用的表.
注意:虽然这里的说明针对的是表,但除非另有说明,同样适用于视图.
FROM表列表创建由所有指定表中的所有列组成的结果集.
构成的表中行的所有组合最初都在结果集中,但使用连接条件和/或WHERE条件通常会减少组合数.
SCALAR–scalar-parameter是有效的SQL数据类型的任何对象.
TABLE–可以使用表、视图或常见的table-expression名称指定TABLE参数,如果在TABLE参数外也使用该对象,则将它们视为该对象的新实例.
此查询阐释了有效的FROM子句,其中对同一表T的两个引用将视为同一表T的两个不同的实例.
SELECT*FROMT,my_proc(TABLE(SELECTT.
Z,T.
XFROMT)OVER(PARTITIONBYT.
Z));表参数化函数(TPF)示例-此查询阐释有效的FROM子句.
SELECT*FROMR,SELECT*FROMmy_udf(1);SELECT*FROMmy_tpf(1,TABLE(SELECTc1,c2FROMt))(my_proc(R.
X,TABLETOVERPARTITIONBYT.
X))ASXX;如果使用子查询来定义TABLE参数,则必须具有以下限制:TABLE参数必须是IN类型.
PARTITIONBY或ORDERBY子句必须引用派生表和外部引用的列.
expression-list中的表达式可以是整数K,它引用TABLE输入参数的第K列.
注意:表UDF只能在SQL语句的FROM子句中引用.
PARTITIONBY–PARTITIONBY子句从逻辑上指定执行引擎如何执行函数调用.
执行引擎必须为每个分区调用函数,并且该函数必须在每次调用时对整个分区进行处理.
PARTITIONBY还指定必须如何对输入数据进行分区,以便每次调用函数时只处理一个分区的数据.
函数调用的次数必须等于分区数.
对于TPF,通过运行时服务器和UDF之间的动态协商来建立并行特性.
如果可针对N输入分区并行执行TPF,则可以使用M"与其它Sybase数据库的兼容性".
可通过指定userid对不同用户拥有的表进行限定.
当前用户所属组拥有的表在缺省情况下无需指定用户ID便可找到.
相关名用于为表赋予一个仅供SQL语句使用的临时名称.
在引用必须由表名限定的列,但表名很长不方便键入时,相关名颇为有用.
在同一查询中多次引用同一表时,也有必要使用相关名来区别各个表的实例.
如果没有指定相关名,则表名将在当前语句中用作相关名.
如果表表达式中的同一个表使用了两次相同的相关名,该表按仅列出一次处理.
例如,在下面的语句中:SELECT*FROMSalesOrdersKEYJOINSalesOrderItems,SalesOrdersKEYJOINEmployeesSalesOrders表的两个实例按一个实例处理,因此等效于:SELECT*FROMSalesOrderItemsKEYJOINSalesOrdersKEYJOINEmployees与之相反的是,在下面语句中Person表因具有两个不同的相关名HUSBAND和WIFE,被视为两个实例处理:SELECT*FROMPersonHUSBAND,PersonWIFE无需在FROM子句中使用一个或多个表或视图,您便可通过SELECT语句在不创建视图的情况下在组中使用组,或者与组连接.
SELECT语句的这种用法称为派生表.
连接列需要相似的数据类型来获得最佳性能.
性能注意事项–在优化程序启用的情况下,SybaseIQ允许在FROM子句中使用16到64个表,具体随查询而定;不过,如果在非常复杂的查询的FROM子句中使用16到18个以上的表,则性能可能会受到影响.
注意:如果省略FROM子句,或者查询中的所有表都在SYSTEMdbspace中,则查询将由SQLAnywhere处理而非SybaseIQ处理且行为可能不同,特别是关于语法和语义限制和选项设置的影响方面.
SQL语句参考:语句和选项199如果您的查询不需要FROM子句,则可以通过添加FROMiq_dummy子句强制SybaseIQ处理查询,在这种情况下,iq_dummy表示在数据库中创建的包含一行和一列的表.
标准SQL—符合ISO/ANSISQL标准.
Sybase—某些版本的AdaptiveServerEnterprise中不支持JOIN子句.
这样就必须改用WHERE子句构建连接.
权限必须连接到数据库.
另请参见DELETE语句(第163页)SELECT语句(第277页)GETDESCRIPTOR语句[ESQL]检索描述符区内变量的信息,或从描述符区的某个变量中检索实际数据.

语法GETDESCRIPTORdescriptor-name.
.
.
{hostvar=COUNT}|VALUEnassignment[,…]}参数assignment:–hostvar={TYPE|LENGTH|PRECISION|SCALE|DATA|INDICATOR|NAME|NULLABLE|RETURNED_LENGTH}示例示例1–有关示例,请参见"ALLOCATEDESCRIPTOR语句[ESQL]".
用法值n指定要在描述符区内检索其信息的变量.
在执行GETDESCRIPTOR.
.
.
DATA时会进行类型检查,以确保宿主变量和描述符变量的数据类型相同.
GETDESCRIPTOR.
.
.
DATA不支持LONGVARCHAR和LONGBINARY.
如果出现错误,则在SQLCA中返回该错误.
SQL语句200SybaseIQ标准SQL-符合ISO/ANSISQL标准.
Sybase-受OpenClient/OpenServer支持.
权限无另请参见ALLOCATEDESCRIPTOR语句[ESQL](第5页)DEALLOCATEDESCRIPTOR语句[ESQL](第152页)SETDESCRIPTOR语句[ESQL](第290页)GOTO语句[T-SQL]分支到带标签的语句.
语法label:GOTOlabel示例示例1–下面的Transact-SQL批处理在服务器窗口上四次输出消息"yes":declare@countsmallintselect@count=1restart:print'yes'select@count=@count+1while@count"SQL语句">"GRANT语句".
DBA权限–"数据库管理员"授权可赋予用户执行任何操作的权限.
此权限通常是为组织中负责管理数据库的人员保留的.
MULTIPLEXADMIN权限–允许用户执行Multiplex管理任务,如创建和删除Multiplex服务器.
有关完整说明,请参见《使用SybaseIQMultiplex》>"Multiplex服务器管理">"管理权限">"MULTIPLEXADMIN权限".
OPERATOR权限–允许用户对数据库进行检查点和备份操作,删除连接,以及监控系统.
有关完整说明,请参见《系统管理指南第一卷》>"管理用户ID和权限".
PERMSADMIN权限–允许用户管理数据权限、组、授权和口令.
有关完整说明,请参见《系统管理指南第一卷》>"管理用户ID和权限".
PROFILE权限–授予用户执行分析和诊断操作的权限.
请参见"SQLAnywhereServer-SQL参考">"SQL语句">"GRANT语句".
READCLIENTFILE权限–允许用户从客户端计算机上的文件中进行读取(例如在装载数据时).
请参见"SQLAnywhereServer-SQL参考">"SQL语句">"GRANT语句".
READFILE权限–允许用户使用OPENSTRING子句对文件执行SELECT语句.
请参见"SQLAnywhereServer-SQL参考">"SQL语句">"GRANT语句".
RESOURCE权限–允许用户创建数据库对象,如表、视图和存储过程.
在语法1中,ALL是RESOURCE的同义词,它与AdaptiveServerEnterprise兼容.
SPACEADMIN权限–允许用户管理数据库空间.
有关完整说明,请参见《系统管理指南第一卷》>"管理用户ID和权限".
USERADMIN权限–允许用户管理用户、外部登录和登录策略.
有关完整说明,请参见《系统管理指南第一卷》>"管理用户ID和权限".
VALIDATE权限–允许用户执行多个VALIDATE语句支持的验证操作,如验证数据库、验证表和索引,以及验证校验和.
此权限还允许用户使用SybaseCentral中的校验实用程序(dbvalid)和校验数据库向导.
请参见"SQLAnywhereServer-SQL参考">"SQL语句">"GRANT语句".
WRITECLIENTFILE权限–允许用户对客户端计算机上的文件进行写入(例如在卸载数据时).
请参见"SQLAnywhereServer-SQL参考">"SQL语句">"GRANT语句".
注意:这些参考指向SQLAnywhere文档.
GROUP子句–允许用户拥有成员.
有关完整说明,请参见《系统管理指南第一卷》>"管理用户ID和权限".
MEMBERSHIPINGROUP子句–允许用户从组中继承表权限和引用组创建的表,而不必限定表名.
如果不希望某个特定用户访问特定的表、视图或过程,则不要使该用户成为对该对象拥有权限的组的成员.
SQL语句204SybaseIQGRANTpermission子句–授予对单个表或视图的权限.
可以将表权限列在一起,或者通过指定ALL一次性授予所有六种权限.
如果指定了WITHGRANTOPTION,则指定的用户ID还会得到向其他用户IDGRANT(授权)同样权限的授权.
ALL权限–在语法3中,授予所有权限.
ALTER权限–用户可以使用ALTERTABLE语句更改相应表.
对视图不允许此权限.
DELETE权限–用户可从相应表或视图删除行.
INSERT权限–用户可向指定的表或视图插入行.
REFERENCES权限–用户可在指定的表上创建索引,并创建引用指定表的外键.
如果指定了列名,则用户仅可引用这些指定的列.
列的REFERENCES权限不能授予视图,只能授予表.
SELECT权限–用户可查看相应视图或表中的信息.
如果指定了列名,则用户仅可查看这些指定的列.
列的SELECT权限不能授予视图,只能授予表.
UPDATE权限–用户可更新相应视图或表中的行.
如果指定了列名,则用户仅可更新这些指定的列.
列的UPDATE权限不能授予视图,只能授予表.
若要更新表,用户必须对表拥有SELECT和UPDATE权限.
例如,若要向用户Laurel授予对Employees表的SELECT和UPDATE权限:GRANTSELECT,UPDATE(street)ONEmployeesTOLaurelEXECUTEON子句–授予执行过程的权限.
INTEGRATEDLOGINTO子句–在一个或多个Windows用户配置文件和一个现有数据库用户ID之间创建显式集成登录映射,使成功登录到本地计算机的用户不必提供用户ID或口令,就可以连接到数据库.
KERBEROSLOGINTO子句–创建从一个或多个Kerberos主体到现有数据库用户ID的Kerberos验证登录映射.
这使成功登录到Kerberos的用户(具有一个有效Kerberos票据授予票据的用户)不必提供用户ID或口令,就可以连接到数据库.
请参见"SQLAnywhereServer-SQL参考">"SQL语句">"GRANT语句".
CONNECTTO子句–创建新用户.
GRANTCONNECT也可由任何用户用来更改他们自己的口令.
注意:Sybase建议使用CREATEUSER语句创建用户.
请参见"CREATEUSER语句".
若要创建用空字符串作为口令的用户:GRANTCONNECTTOuseridIDENTIFIEDBY""如果您具有DBA或PERMSADMIN权限,可以更改任何现有用户的口令:SQL语句参考:语句和选项205GRANTCONNECTTOuseridIDENTIFIEDBYpassword您还可使用该命令添加新用户.
因此,如果您在本来要添加新用户时无意中输入了现有用户的用户ID,则实际上是在更改现有用户的口令.
您不会收到警告,因为这被视为正常操作.
此行为与SybaseIQ12版以前的版本有所不同.
为避免出现这种情况,请使用系统过程sp_addlogin和sp_adduser添加用户.
如果您尝试添加现有用户ID,与AdaptiveServerEnterprise和SybaseIQ12版之前的版本一样,这些过程会提示您出错.
注意:使用系统过程(而不是GRANT和REVOKE)来添加和删除用户ID.
若要创建没有口令的用户:GRANTCONNECTTOuserid用户ID不区分大小写.
没有口令的用户不能连接到数据库.
当您创建组且不希望任何人连接到相应的组用户ID时,这一限制颇为有用.
如《参考:构件块、表和过程》>"SQL语言元素">"标识符"中所述,口令必须为有效的标识符.
口令的最大长度为255个字节.
如果数据库选项VERIFY_PASSWORD_FUNCTION已设置为一个值而非空字符串,则GRANTCONNECTTOuseridIDENTIFIEDBYpassword语句将调用由此选项值标识的函数.
如函数返回NULL,则表明口令符合规则.
如果设置了VERIFY_PASSWORD_FUNCTION选项,则只能使用GRANTCONNECT语句指定一个userid和password.
请参见"VERIFY_PASSWORD_FUNCTION选项".
以下名称不能用作有效的数据库用户ID和口令:以空格、单引号或双引号开头的名称以空格结尾的名称包含分号的名称CREATEON子句–向指定的用户和/或组授予对指定的数据库空间的CREATE权限.
另请参见"REVOKE语句".
副作用:自动提交.
注意:这些参考指向SQLAnywhere文档.
标准SQL—语法3是初级功能.
语法4是持久存储模块功能.
其它语法是ISO/ANSISQL语法的供应商扩展.
SQL语句206SybaseIQSybase—AdaptiveServerEnterprise中支持语法1和3.
AdaptiveServerEnterprise和SybaseIQ中的安全模型不同,因此其它语法也不同.
权限对于语法1和2,必须满足以下条件之一:要向任何用户授予DBA权限,您必须具有DBA权限.
要执行GRANTGROUP、GRANTMEMBERSHIPINGROUP或向任何用户授予任何其它权限,您必须具有DBA或PERMSADMIN权限.
对于语法3,必须满足以下条件之一:相应表是您创建的.
已经用GRANTOPTION授予您对该表的权限.
您具有DBA或PERMSADMIN权限.
对于语法4,必须满足以下条件之一:相应过程是您创建的.
您具有DBA或PERMSADMIN权限.
对于语法5,您必须具有DBA或USERADMIN权限.
对于语法6,您必须具有DBA或USERADMIN权限.
对于语法7,必须满足以下条件之一:如果要创建新用户,您必须具有DBA或USERADMIN权限.
您要更改的是您自己的口令.
如果要更改其他用户的口令,您必须具有DBA或PERMSADMIN权限.
如果要更改其他用户的口令,则相应用户不可连接到数据库.
对于语法8,您必须具有DBA或SPACEADMIN权限.
另请参见CREATEUSER语句(第147页)REVOKE语句(第270页)VERIFY_PASSWORD_FUNCTION选项(第457页)IF语句用于按条件执行SQL语句.
语法IFsearch-conditionTHENstatement-list.
.
.
[ELSEIFsearch-conditionTHENstatement-list].
.
.
.
.
.
[ELSEstatement-list].
.
.
ENDIFSQL语句参考:语句和选项207示例示例1–下面的过程阐释了IF语句的用法:CREATEPROCEDURETopCustomer(OUTTopCompanyCHAR(35),OUTTopValueINT)BEGINDECLAREerr_notfoundEXCEPTIONFORSQLSTATE'02000';DECLAREcurThisCustCURSORFORSELECTCompanyName,CAST(sum(SalesOrderItems.
Quantity*Products.
UnitPrice)ASINTEGER)VALUEFROMCustomersLEFTOUTERJOINSalesOrdersLEFTOUTERJOINSalesOrsderItemsLEFTOUTERJOINProductGROUPBYCompanyName;DECLAREThisValueINT;DECLAREThisCompanyCHAR(35);SETTopValue=0;OPENcurThisCust;CustomerLoop:LOOPFETCHNEXTcurThisCustINTOThisCompany,ThisValue;IFSQLSTATE=err_notfoundTHENLEAVECustomerLoop;ENDIF;IFThisValue>TopValueTHENSETTopValue=ThisValue;SETTopCompany=ThisCompany;ENDIF;ENDLOOPCustomerLoop;CLOSEcurThisCust;END示例2–下面的过程阐释了ELSEIF语句的用法:BEGINDECLAREXINT;SETX=1;IFX=1THENPRINT'1';ELSEIFX=2THENPRINT'2';ELSEPRINT'somethingelse';ENDIFEND用法IF语句可用于按条件执行第一个search-condition计算结果为TRUE的SQL语句列表.
SQL语句208SybaseIQ如果没有search-condition计算为TRUE,并且存在ELSE子句,则执行ELSE子句中的statement-list.
如果没有search-condition计算为TRUE,并且不存在ELSE子句,则表达式将返回空值.
执行过程从ENDIF之后的第一个语句开始继续.
将变量与IF语句内的SELECT语句返回的单个值进行比较时,必须首先将SELECT的结果赋给另一变量.
注意:不要混淆IF语句和IF表达式的语法.
不能嵌套IF语句.
有关IF表达式的信息,请参见《参考:构件块、表和过程》>"SQL语言元素">"表达式".
标准SQL-符合ISO/ANSISQL标准.
Sybase—Transact-SQLIF语句的语法略有不同.
权限无另请参见BEGIN……END语句(第49页)IF语句[T-SQL]用于按条件执行Transact-SQL语句,可用作SybaseIQIF语句的替代项.
语法IFexpression.
.
.
statement.
.
.
[ELSE[IFexpression]statement].
.
.
示例示例1–Transact-SQLIF语句的用法:IF(SELECTmax(id)FROMsysobjects)"SQL函数".
语法3INSERT.
.
.
LOCATION是允许您从AdaptiveServerEnterprise或SybaseIQ数据库插入数据的语法2的另一种表现方式.
在LOCATION子句中指定的servername.
dbname用于标识FROM子句的表中的远程服务器和数据库.
要使用语法3,您要连接到的AdaptiveServerEnterprise或SybaseIQ远程服务器必须存在于本地计算机的SybaseOpenClientinterfaces或sql.
ini文件中.
在使用语法3的查询中,最多可以插入2147483647行.
SELECT可以使用大括号或多个直单引号分隔.
注意:在ODBC标准中,大括号表示转义序列的开头和结尾,在ODBC或SybaseCentral上下文中可能会导致错误.
解决方法是使用单引号来转义SELECT语句.
本地SybaseIQ服务器连接至您在LOCATION子句中指定的服务器和数据库.
将返回远程表的查询结果,本地服务器会将结果插入当前数据库中.
如果您没有在LOCATION子句中指定服务器名称,SybaseIQ将忽略您指定的任意数据库名称,因为本地服务器中的当前数据库是唯一的选择.
如果SybaseIQ连接到了远程服务器,且已使用CREATEEXTERNLOGIN创建远程登录,使用CREATESERVER语句定义远程服务器,INSERT.
.
.
LOCATION则将使用当前连接的用户ID的远程登录.
如果未定义远程服务器,或未对当前连接的用户ID创建远程登录,SybaseIQ则使用当前连接的用户ID和口令进行连接.
注意:如果您使用的是当前连接的用户ID和口令,并且用户更改了口令,则您必须停止并重新启动服务器,新的口令才能在远程服务器上生效.
更改缺省用户ID的口令不会影响使用CREATEEXTERNLOGIN创建的远程登录.
使用CREATEEXTERNLOGIN语句创建远程登录并使用CREATESERVER语句定义远程服务器可以针对INSERT.
.
.
LOCATION设置外部登录名和口令,从而任何用户均可SQL语句参考:语句和选项213在任何上下文中使用登录名和口令.
这可避免可能因难以获得登录名或口令而产生错误,并且是连接到远程服务器的推荐方式.
例如,用户russid连接到SybaseIQ数据库并执行下面的语句:INSERTlocal_SQL_TypesLOCATION'ase1.
ase1db'{SELECTint_colFROMSQL_Types};在ase1服务器上,存在口令为sybase的用户IDase1user.
ase1user是表SQL_Types的所有者.
在IQ服务器上,远程服务器的定义如下:CREATESERVERase1CLASS'ASEJDBC'USING'system1:4100';在IQ服务器上,外部登录的定义如下:CREATEEXTERNLOGINrussidTOase1REMOTELOGINase1userIDENTIFIEDBYsybase;INSERT.
.
.
LOCATION对于用户russid,使用用户IDase1user和口令sybase连接到远程服务器ase1.
使用ENCRYPTEDPASSWORD参数指定连接到远程服务器时OpenClientLibrary缺省口令加密的使用.
如果指定了ENCRYPTEDPASSWORD,但是远程服务器不支持OpenClientLibrary缺省口令加密,则会报告错误,指示使用了无效的用户ID或口令.
在用作远程服务器时,SybaseIQ支持TDS口令加密.
SybaseIQ服务器接受由客户端发送的使用加密口令的连接.
有关针对口令加密设置的连接属性的信息,请参见针对OpenServer15.
5的《软件开发工具包15.
5》>"OpenClientClient-Library/C参考手册">"Client-Library主题">"安全性功能">"AdaptiveServerEnterprise安全性功能">"安全握手:加密口令".
注意:口令加密需要OpenClient15.
0.
TDS口令加密需要OpenClient15.
0ESD#7或更高版本.
要使SybaseIQ服务器接受具有加密口令的jConnect连接,请将jConnectENCRYPT_PASSWORD连接属性设置为true.
PACKETSIZE参数指定TDS包的大小,以字节为单位.
在大多数平台上,TDS包大小缺省为512字节.
如果应用程序通过网络接收大量的text数据或批量数据时,则使用较大的包也许可以显著提高性能.
packet-size的值必须是512的倍数,等于缺省的网络包大小,或者介于缺省网络包大小和最大网络包大小之间.
最大网络包大小和缺省网络包大小是512的倍数,介于512–524288字节之间.
最大网络包大小始终大于或等于缺省网络包大小.
有关网络包大小的详细信息,请参见AdaptiveServerEnterprise《系统管理指南第一卷》.
如果未指定INSERT.
.
.
LOCATIONPACKETSIZEpacket-size或将其指定为零,则会使用相应平台的缺省包大小值.
SQL语句214SybaseIQ如果INSERT.
.
.
LOCATION在SybaseIQ服务器和远程SybaseIQ或AdaptiveServerEnterprise服务器之间传输数据,则INSERT.
.
.
LOCATIONTDSPACKETSIZE参数的值始终为512字节,即使您为PACKETSIZE指定了不同值也不例外.
注意:如果指定了错误的包大小(例如933,不是512的倍数),则连接尝试将失败,引发OpenClientct_connect"连接失败"错误.
任何不成功的连接尝试都会返回通用的"连接失败"消息.
AdaptiveServerEnterprise错误日志可能包含有关连接失败原因的更多具体信息.
使用QUOTED_IDENTIFIER指定远程服务器上的QUOTED_IDENTIFIER选项的设置.
缺省设置为"OFF".
仅在SELECT语句中的任一标识符用双引号引起的情况下(如下例中使用"c1"),才可将QUOTED_IDENTIFIER设置为"ON":INSERTINTOfooLOCATION'ase.
database'QUOTED_IDENTIFIERON{select"c1"fromxxx};使用ISOLATIONLEVEL指定远程服务器连接的隔离级别.
隔离级别特性READUNCOMMITTED隔离级别0允许读取有写锁定或无写锁定的行未应用读取锁定无法确保并发事务将不会修改行或回退对行所做的更改READCOMMITTED隔离级别1只允许读取没有写锁定的行仅为读取当前行获取并保持读取锁定,但当游标离开该行时释放读取锁定无法确保数据在事务执行过程中不发生更改SERIALIZABLE隔离级别3只允许读取结果中没有写锁定的行打开游标时获取读锁定,并一直保持到事务结束为止请参见"SQLAnywhereServer-SQL用法">"使用事务和隔离级别">"隔离级别和一致性".
注意:此参考指向SQLAnywhere文档.
SybaseIQ不支持AdaptiveServerEnterprise数据类型TEXT,但是,可从长度大于255个字节的IQCHAR或VARCHAR列以及数据类型为TEXT的ASE数据库列执行INSERT.
.
.
LOCATION(语法3).
如果SybaseIQ支持内部转换,可将ASETEXT和IMAGE列插入到其它SybaseIQ数据类型的列中.
缺省情况下,如果远程数据列包含2GB以上的数据,SybaseIQ则会以无提示方式将列值截断为2GB.
SQL语句参考:语句和选项215警告!
SybaseIQ不支持AdaptiveServerEnterprise数据类型UNICHAR、UNIVARCHAR或UNITEXT.
在ISO_BINENG归类中,从UNICHAR或UNITEXT到CHAR或CLOB列中的INSERT.
.
.
LOCATION命令可正确执行;如果发生这种情况,则这些列中的数据可能不一致.
只有转换失败时,这种情况下才会报告错误.
用户必须专门获得使用许可才能使用非结构化数据分析选件的大对象变量功能.
请参见《SybaseIQ中的非结构化数据分析》.
注意:如果使用INSERT.
.
.
LOCATION来插入从VARBINARY列中所选的数据,请将远程数据库的ASE_BINARY_DISPLAY设置为OFF.
INSERT.
.
.
LOCATION(语法3)不支持在SELECT语句中使用变量.
可以对视图执行插入,条件是定义相应视图的SELECT语句在FROM子句中只有一个表,且不含GROUPBY子句、集合函数或涉及UNION操作.
插入到表中的字符串始终按输入时的大小写存储,而不管数据库是否区分大小写.
因此,插入到表中的字符串"Value"在数据库中保存时V始终为大写,其余的字母为小写.
SELECT语句以Value形式返回该字符串.
但是,如果数据库不区分大小写,所有比较都会使Value与value、VALUE等相同.
而且,如果单列主键已经包含Value条目,则会拒绝对value执行INSERT,因为它会导致主键不唯一.
只要执行INSERT…LOCATION语句,SybaseIQ就会装载确定语言、归类序列、字符集和日期/时间格式所需的本地化信息.
如果数据库使用平台的非缺省区域设置,则必须在本地客户端设置环境变量以确保SybaseIQ装载正确的信息.
如果设置了LC_ALL环境变量,则SybaseIQ将该变量的值用作区域设置名.
如果未设置LC_ALL,SybaseIQ将使用LANG环境变量的值.
如果这两个变量均未设置,SybaseIQ将使用区域设置文件中的缺省条目.
有关示例,请参见《系统管理指南第一卷》>"国际语言和字符集">"为INSERT……LOCATION语句设置区域设置".
使用DEFAULTVALUES和VALUES子句可指定要插入的值.
要插入CREATETABLE语句中指定的缺省列值,请指定DEFAULTVALUES.
指定DEFAULTVALUES在语义上等同于指定以下显式语法:INSERT[INTO}VALUES(default,default,.
.
.
,default)其中,缺省条目数等于表中列数.
例如:INSERTINTOtable1DEFAULTVALUES也可以使用INSERTVALUES(DEFAULT.
.
.
)子句插入到NULL列.
LIMIT选项用于指定从查询插入表中的行的最大数目.
缺省值为0,表示无限制.
最大数量为2GB-1.
NOTIFY选项用于指定每次将多少行成功插入表中后,您将得到通知消息.
缺省值为每100,000行.
SQL语句216SybaseIQSKIP选项定义要在用于该插入操作的输入表开头处跳过的行数.
缺省值为0.
STARTROWID选项指定IQ表中应开始插入的行的记录标识号.
缺省情况下,在表中有空间的任何位置插入新行,并且每项插入操作都从新行开始执行.
不允许对分区表使用LOADTABLE和INSERT命令的STARTROWID子句.
有关insert-select-load-optionsWORDSKIP、IGNORECONSTRAINT、MESSAGELOG、ROWLOG和LOGDELIMITEDBY以及constrainttype和logwhat参数的信息,请参见"LOADTABLE语句".
用于多列索引的INSERT必须包含索引的所有列.
对于INSERT.
.
.
VALUES、INSERT.
.
.
SELECT和INSERT.
.
.
LOCATION,SybaseIQ支持列DEFAULT值.
如果为列指定了DEFAULT值,则此DEFAULT值将用作任一未指定列值的INSERT(或LOAD)语句中的列值.
有关在执行插入操作时如何使用列DEFAULT值的详细信息,请参见《系统管理指南第一卷》>"数据完整性">"列缺省值有助于保持数据完整性".
如果存储过程或函数使用COMMIT、ROLLBACK或一些ROLLBACKTOSAVEPOINT语句,则不允许从该存储过程或函数执行INSERT.
有关详细信息,请参见《系统管理指南第二卷》>"使用过程和批处理">"控制语句">"原子复合语句"以及《系统管理指南第2卷">"使用过程和批处理">"过程中的事务和保存点".
SELECT…FROM的结果可能略微不同于INSERT…SELECT…FROM的结果,原因是针对插入期间的优化而进行的不精确数据类型(如DOUBLE或NUMERIC)的内部数据转换.
如果需要更精确的结果,可能的解决方法是将列声明为具有较高精度的DOUBLE或NUMERIC数据类型.
另请参见《系统管理指南第一卷》>"导入和导出数据">"使用INSERT语句".
标准SQL-符合ISO/ANSISQL标准.
Sybase-受AdaptiveServerEnterprise支持(不含insert-load-options).
权限必须有表的INSERT权限.
另请参见CREATEEXTERNLOGIN语句(第89页)DELETE语句(第163页)LOADTABLE语句(第223页)SYNCHRONIZEJOININDEX语句(第300页)SQL语句参考:语句和选项217INSTALLJAVA语句使Java类可供在数据库中使用.
语法INSTALLJAVA[install-mode][JARjar-name]FROMsource参数install-mode:–{NEW|UPDATE}source:–{FILEfilename|URLurl-value}示例示例1–通过提供文件名和类的位置,安装用户创建的名为"Demo"的Java类:INSTALLJAVANEWFROMFILE'D:\JavaClass\Demo.
class'安装后,使用类的名称引用它,不再使用它的原始文件路径位置.
例如,下面的语句使用上一语句中安装的类:CREATEVARIABLEdDemo如果Demo类是软件包sybase.
work的成员,必须使用该类的完全限定名:CREATEVARIABLEdsybase.
work.
Demo示例2–安装zip文件中包含的所有类,并将数据库中的这些类与JAR文件名关联:INSTALLJAVAJAR'Widgets'FROMFILE'C:\Jars\Widget.
zip'不保留zip文件的位置,并且必须使用完全限定的类名(包名和类名)引用类.
用法安装模式–如果指定NEW安装模式,则引用的Java类必须是新类,而不是目前已安装好的类的更新.
如果数据库中存在同名的类而且使用NEW安装模式,则会出现错误.
UPDATE安装模式用于指定引用的Java类可以包含已安装在给定数据库中的Java类的替代类.
要更新类或JAR,您必须具有DBA权限,并且磁盘上的某个文件中要有较新版本的已编译的类文件或JAR文件.
SQL语句218SybaseIQ只有在安装类之后建立的新连接或者在安装类之后首次使用类的新连接才使用新定义.
一旦JavaVM装载了某个类定义,就会将其一直保留在内存中,直到连接关闭为止.
如果已使用基于当前连接中的某个类的Java类或对象,则必须断开连接并重新连接,才能使用新的类定义.
如果省略安装模式,则缺省安装模式为NEW.
JAR–JAR—指定file-name或text-pointer必须指定JAR文件或包含JAR的列.
JAR文件通常带扩展名.
jar或.
zip.
可对已安装好的JAR和zip文件进行压缩或解压缩.
但是,通过SunJDKjar实用程序生成的JAR文件不受支持.
但支持由其他zip实用程序生成的文件.
如果指定了JAR选项,则安装了JAR包含的类后,会以JAR的形式保留JAR.
该JAR是与这些类的每一个关联的JAR.
用JAR选项安装在数据库中的JAR称为数据库的保留JAR.
保留下来的JAR会在INSTALL和REMOVE语句中引用.
保留下来的JAR不影响其他Java-SQL类应用.
SQL系统用保留下来的JAR处理其他系统对与给定数据相关联的类的请求.
如果所请求的类具有关联JAR,则SQL系统可以直接提供该JAR,而不是单个类.
jar-name是一个字符串值,最长255个字节.
jar-name用于在后续INSTALL、UPDATE和REMOVE语句中标识保留下来的JAR.
源代码–用于指定Java类的安装位置.
对于file-name,受支持的格式包括完全限定文件名(如"c:\libs\jarname.
jar'"和"/usr/u/libs/jarname.
jar")和相对文件名(相对于数据库服务器的当前工作目录).
filename必须标识类文件或者JAR文件.
每个类的类定义都是在首次使用该类时由每个连接的VM载入的.
当您INSTALL类时,将隐式重新启动连接上的VM.
因此,无论INSTALL的install-mode是NEW还是UPDATE,都可以直接访问新类.
对于其他连接,VM下次第一次访问新类时会装入新类.
如果新类已由VM装入,则为该连接重新启动VM(例如,用STOPJAVA和STARTJAVA重新启动)后,才能用该连接看到新类.
标准SQL-ISO/ANSISQL语法的供应商扩展.
Sybase-不受AdaptiveServerEnterprise支持.
权限执行INSTALL语句需要DBA权限.
SQL语句参考:语句和选项219任何用户可以任何方式引用所有已安装的类.
另请参见REMOVE语句(第260页)IQUTILITIES语句收集有关SybaseIQ数据库缓冲区高速缓存的统计信息.
语法IQUTILITIES{MAIN|PRIVATE}[INTO]table-name{STARTMONITOR['monitor-options']|STOPMONITOR}参数monitor-options:–{-summary|{-append|-truncate}-bufalloc|-cache|-cache_by_type|-contention|-debug|-file_suffixsuffix|-io|-intervalseconds|-threads}.
.
.
示例示例1–启动缓冲区高速缓存监视器并记录IQ临时缓冲区高速缓存的活动:IQUTILITIESPRIVATEINTOmonitorSTARTMONITOR'-cache-interval20'用法STARTMONITOR启动IQ缓冲区高速缓存监控器.
对于START和STOPMONITOR,table_name为虚拟表.
可以指定任何IQ基表或临时表,但是最好准备一个表专用于监控.
结果将存储在一个文本文件中,对于MAIN缓冲区高速缓存结果,为dbname.
connection#-main-iqmon;对于PRIVATE(临时)缓冲区高速缓存结果,则为dbname.
connection#-temp-iqmon.
请从同一数据库再次运行监视器,连接数将覆盖以前的结果.
要设置监视器输出文件的目录位置,请设置MONITOR_OUTPUT_DIRECTORY选项.
monitor-options定义结果的内容和频率.
可以指定多个选项,且必须用引号将其引起来.
-summary显示主缓冲区高速缓存和临时(专用)缓冲区高速缓存的摘要信息.
此选项是缺省设置.
-append|-truncate分别附加到现有输出文件或截断现有输出文件.
Truncate是缺省值.
SQL语句220SybaseIQ-bufalloc显示有关主缓冲区分配器或临时缓冲区分配器的信息,该分配器可在缓冲区高速缓存中保留空间以供排序、散列和位图等对象使用.
-cache详细显示主缓冲区高速缓存或临时缓冲区高速缓存的活动.
-cache_by_type按IQ页面类型详细显示主缓冲区高速缓存或临时缓冲区高速缓存的活动.
该格式主要用于向Sybase技术支持部门提供信息.
-contention显示很多关键的缓冲区高速缓存和内存管理器锁.
-debug显示性能监视器可用的所有信息,而不考虑是否存在标准显示模式来显示同样的信息.
该选项主要用于向Sybase技术支持部门提供信息.
-file_suffixsuffix可创建名为.
--的监控输出文件.
缺省值为iqmon.
-io显示主缓冲区高速缓存或临时缓冲区高速缓存I/O速率和数据压缩比率.
-interval指定报告间隔(以秒为单位).
缺省值为每60秒.
最小值为每2秒.
-threads显示有关正在处理的线程的信息.
有关利用IQUTILITIES创建可扩展SybaseIQ系统存储过程功能的过程的高级应用,请参见《参考:构件块、表和过程》>"系统过程">"系统存储过程">"sp_iqsysmon过程"《性能和调优指南》>"监控和调优性能"《系统管理指南第二卷》>"使用过程和批处理".
标准SQL-ISO/ANSISQL语法的供应商扩展.
Sybase—AdaptiveServerEnterprise中不支持.
权限无另请参见MONITOR_OUTPUT_DIRECTORY选项(第407页)LEAVE语句退出复合语句或LOOP以继续执行.
语法LEAVEstatement-labelSQL语句参考:语句和选项221示例示例1–下面的代码段显示如何使用LEAVE语句退出循环:SETi=1;lbl:LOOPINSERTINTOCounters(number)VALUES(i);IFi>=10THENLEAVElbl;ENDIF;SETi=i+1ENDLOOPlbl示例2–下面的代码段在嵌套循环中使用LEAVE:outer_loop:LOOPSETi=1;inner_loop:LOOP.
.
.
SETi=i+1;IFi>=10THENLEAVEouter_loopENDIFENDLOOPinner_loopENDLOOPouter_loop用法LEAVE是控制语句,它允许您退出带标签的复合语句或带标签的循环.
执行在复合语句或循环之后的第一个语句处重新开始.
复合语句是过程的主体,它具有与过程同名的隐式标签.
标准SQL-符合ISO/ANSISQL标准.
Sybase-不受AdaptiveServerEnterprise支持.
BREAK语句为Transact-SQL兼容过程提供类似的功能.
权限无另请参见BEGIN……END语句(第49页)FOR语句(第191页)LOOP语句(第241页)SQL语句222SybaseIQLOADTABLE语句将数据从外部文件导入数据库表.
语法LOAD[INTO]TABLE[owner.
]table-name.
.
.
(load-specification[,…]).
.
.
{FROM|USING[CLIENT]FILE}{'filename-string'|filename-variable}[,…].
.
.
[CHECKCONSTRAINTS{ON|OFF}].
.
.
[DEFAULTS{ON|OFF}].
.
.
[QUOTESOFF].
.
.
ESCAPESOFF.
.
.
[FORMAT{ascii|binary|bcp}].
.
.
[DELIMITEDBY'string'].
.
.
[STRIP{ON|OFF|RTRIM}].
.
.
[WITHCHECKPOINT{ON|OFF}].
.
.
[BYTEORDER{NATIVE|HIGH|LOW}].
.
.
[LIMITnumber-of-rows].
.
.
[NOTIFYnumber-of-rows].
.
.
[ONFILEERROR{ROLLBACK|FINISH|CONTINUE}].
.
.
[PREVIEW{ON|OFF}].
.
.
[ROWDELIMITEDBY'delimiter-string'].
.
.
[SKIPnumber-of-rows].
.
.
[HEADERSKIPnumber[HEADERDELIMITEDBY'string']].
.
.
[WORDSKIPnumber].
.
.
[STARTROWIDnumber].
.
.
[ONPARTIALINPUTROW{ROLLBACK|CONTINUE}].
.
.
[IGNORECONSTRAINTconstrainttype[,…]].
.
.
[MESSAGELOG'string'ROWLOG'string'[ONLYLOGlogwhat[,…]].
.
.
[LOGDELIMITEDBY'string']参数load-specification:–{column-name[column-spec]|FILLER(filler-type)}column-spec:–{ASCII(input-width)|BINARY[WITHNULLBYTE]|PREFIX{1|2|4}|'delimiter-string'|DATE(input-date-format)|DATETIME(input-datetime-format)|ENCRYPTED(data-type'key-string'[,'algorithm-string'])|DEFAULTdefault-value}[NULL({BLANKS|ZEROS|'literal'filler-type:–{input-width|PREFIX{1|2|4}|'delimiter-string'}constrainttype:–{CHECKinteger|UNIQUEinteger|NULLinteger|FOREIGNKEYinteger|DATAVALUEinteger|ALLinteger}logwhat:–{CHECK|ALL|NULL|UNIQUE|DATAVALUE|FOREIGNKEY|WORD}SQL语句参考:语句和选项223示例示例1–将数据从一个文件装载到Windows系统上的Products表中.
使用制表符作为列分隔符,后跟Description和Color列.
LOADTABLEProducts(IDASCII(6),FILLER(1),NameASCII(15),FILLER(1),Description'\x09',SizeASCII(2),FILLER(1),Color'\x09',QuantityPREFIX2,UnitPricePREFIX2,FILLER(2))FROM'C:\\mydata\\source1.
dmp'QUOTESOFFESCAPESOFFBYTEORDERLOWNOTIFY1000示例2–从客户端计算机上的文件a.
inp装载数据:LOADTABLEt1(c1,c2,filler(30))USINGCLIENTFILE'c:\\client-data\\a.
inp'QUOTESOFFESCAPESOFFIGNORECONSTRAINTUNIQUE0,NULL0MESSAGELOG'c:\\client-data\\m.
log'ROWLOG'c:\\client-data\\r.
log'ONLYLOGUNIQUE示例3–将数据从两个文件装载到UNIX系统上的product_new表中(该表允许空值).
制表符为缺省的列分隔符,并且使用换行符作为行分隔符:LOADTABLEproduct_new(id,name,description,size,color'\x09'NULL('null','none','na'),quantityPREFIX2,unit_pricePREFIX2)FROM'/s1/mydata/source2.
dump','/s1/mydata/source3.
dump'QUOTESOFFESCAPESOFFFORMATasciiDELIMITEDBY'\x09'ONFILEERRORCONTINUEROWDELIMITEDBY'\n'示例4–忽略10字长度违规;出现第11字时,配置新错误并回退装载:loadtablePTAB1(ck1','null('NULL'),ck3fk2c2','null('NULL'),ck4','null('NULL'),ck5','null('NULL'),SQL语句224SybaseIQck6c1','null('NULL'),ck6c2','null('NULL'),rid','null('NULL'))FROM'ri_index_selfRI.
inp'rowdelimitedby'\n'LIMIT14SKIP10IGNORECONSTRAINTUNIQUE2,FOREIGNKEY8wordskip10quotesoffescapesoffstripoff示例5–使用FORMATBCP装载选项从BCP字符文件bcp_file.
bcp将数据装载到表t1:LOADTABLEt1(c1,c2,c3)FROM'bcp_file.
bcp'FORMATBCP.
.
.
示例6–使用DEFAULT装载选项,将缺省值12345装载到c1,并使用LoadConst04.
dat文件中的数据装载c2和c3:LOADTABLEt1(c1DEFAULT'12345',c2,c3,filler(1))FROM'LoadConst04.
dat'STRIPOFFQUOTESOFFESCAPESOFFDELIMITEDBY',';示例7–使用FORMATBCP装载选项,利用文件bcp_file.
bcp中的数据装载c1和c2,并将c3设置为值10:LOADTABLEt1(c1,c2,c3DEFAULT'10')FROM'bcp_file.
bcp'FORMATBCPQUOTESOFFESCAPESOFF;示例8–以下代码段在标题行用"&&"分隔的数据文件开头处会忽略一个标题行:LOADTABLE.
.
.
HEADERSKIP1HEADERDELIMITEDby'&&'示例9–以下代码段在每个标题行用"\n"分隔的数据文件开头处会忽略2个标题行:LOADTABLE.
.
.
HEADERSKIP2用法使用LOADTABLE语句允许从带有ASCII或二进制数据的文件到数据库表的高效批量插入.
使用LOADTABLE选项也可以控制违反完整性约束时的装载行为并且记录有关违规的信息.
SQL语句参考:语句和选项225对临时表可以使用LOADTABLE,但是该临时表必须是用ONCOMMITPRESERVEROWS声明的,否则下一条COMMIT将删除已装载的行.
您还可以指定多个文件来装载数据.
在FROM子句中,指定每个filename-string(各项之间以逗号分隔).
由于资源约束,SybaseIQ无法保证能够装载所有数据.
如果资源分配失败,整个装载事务将被回退.
一次读取一个文件,并按FROM子句中指定的顺序处理这些文件.
任何SKIP或LIMIT值都只在装载开始时应用,而不是针对每个文件应用.
注意:当装载Multiplex数据库时,请在所有文件名中使用绝对(完全限定)路径.
请不要使用相对路径名.
LOADTABLE支持装载大对象(LOB)数据.
请参见《SybaseIQ中的非结构化数据分析》.
SybaseIQ支持从ASCII和二进制数据装载,并且支持固定长度格式和可变长度格式.
要处理所有这些格式,您必须提供一个load-specification来通知SybaseIQ需要从源文件中的每个"列"或字段获得何种数据.
使用column-spec可以定义下列格式:固定字节长度的ASCII.
input-width值为表示每条记录中输入字段的固定宽度的整数值(单位为字节).
使用一定数量的PREFIX字节(1、2或4)指定二进制输入长度的二进制或非二进制字段.
PREFIX子句有两个相关部分:前缀值–始终为二进制值.
关联数据字节–始终为字符格式,永远不采用二进制格式.
如果使用提取功能卸载数据时将TEMP_EXTRACT_BINARY选项设置为ON,则在装载二进制数据时必须针对每个列使用BINARYWITHNULLBYTE参数.
由分隔符分隔的可变长度字符.
可以将终结符指定为十六进制ASCII字符.
delimiter-string可以是最多4个字符的任意字符串,包括可打印字符的任意组合以及表示不打印字符的任意8位十六进制ASCII代码.
例如,指定:'\x09',以将制表符表示为终结符.
'\x00',表示空终结符(如同"C"字符串中一样,没有可见终结符).
'\x0a',表示作为终结符的换行符.
还可以使用特殊字符组合"\n"作为换行符.
注意:分隔符字符串长度可为1到4个字符,不过,您在DELIMITEDBY子句中只能指定单个字符.
对于BCP,分隔符最多可达10个字符.
DATE或DATETIME字符串(ASCII字符形式).
您必须使用SybaseIQ支持的日期数据类型和日期时间数据类型的对应格式之一定义字符串的input-date-format或input-datetime-format.
使用DATE表示日期值,并使用DATETIME表示日期时间和时间值.
SQL语句226SybaseIQ表9.
日期和时间格式设置选项含义yyyy或YYYYyy或YY表示年份数字.
缺省为当前年份.
mm或MM表示月份数字.
适当情况下始终在月份数字中使用前导零或空白,例如,"05"表示5月.
DATE值必须包含月份.
例如,如果您输入的DATE值为1998,则会收到错误提示.
如果您输入"03",则SybaseIQ将应用缺省年份和日期,并将其转换为"1998-03-01".
dd或DDjjj或JJJ表示日期数字.
缺省日期为01.
适当情况下始终在日期数字中使用前导零,例如,"01"表示1号.
J或j表示一年中的儒略日(1至366).
hhHH表示小时.
小时基于24小时制.
请始终对小时使用前导零或空(如有必要),例如,"01"表示凌晨1点.
"00"也是有效值,表示中午12点.
nn表示分钟.
适当情况下始终在分钟中使用前导零,例如,"08"表示8分钟.
ss[.
ssssss]表示秒和秒的小数部分.
aa表示AM或PM指示.
pp仅当需要时表示p.
m.
标记.
(这与12.
0之前的SybaseIQ版本不兼容;先前"pp"与"aa"是同义词.
)hhSybaseIQ假设分钟和秒钟均为零.
例如,如果您输入的DATETIME值为"03",则SybaseIQ将该值转换为"03:00:00.
0000".
hh:nn或hh:mmSybaseIQ假设秒钟为零.
例如,如果您输入的时间值为"03:25",则SybaseIQ将该值转换为"03:25:00.
0000".
表10.
示例DATE和DATETIME格式选项输入数据格式规范12/31/98DATE('MM/DD/YY')19981231DATE('YYYYMMDD')123198140150DATETIME('MMDDYYhhnnss')14:01:5012-31-98DATETIME('hh:mm:ssMM-DD-YY')18:27:53DATETIME('hh:mm:ss')12/31/9802:01:50AMDATETIME('MM/DD/YYhh:mm:ssaa')SybaseIQ具有针对常用日期、时间和日期时间格式的装载优化.
如果您要装载的数据与其中一种格式匹配,则使用相应的格式可以显著缩短装载时间.
有关这些格式的列表以及有关装载日期和日期时间数据时优化性能的详细信息,请参见《系统管理指南第一卷》>"导入和导出数据".
SQL语句参考:语句和选项227还可以将日期/时间字段指定为ASCII固定宽度字段(如上所述),并使用FILLER(1)选项以跳过列分隔符.
有关指定日期和时间数据的详细信息,请参见《参考:构件块、表和过程》>"SQL数据类型">"日期和时间数据类型"或《系统管理指南第一卷》>"导入和导出数据".
装载到表列中时,column-spec的NULL部分指示如何将某些输入值视为NULL值.
这些字符可能包括BLANKS、ZEROS或您定义的任何其它文字列表.
指定空值或从源文件读取空值时,目标列必须能够包含NULL.
ZEROS含义如下:如果(并且仅当)输入数据(转换前,如果为ASCII)均为二进制零(而不为字符零),则此单元设置为NULL.
如果输入数据为字符零,则:1.
NULL(ZEROS)永远不会导致单元变为NULL.
2.
NULL('0')导致单元变为NULL.
如果输入数据为二进制零(清除所有位),则:1.
NULL(ZEROS)导致单元变为NULL.
2.
NULL('0')永远不会导致单元变为NULL.
例如,如果LOAD语句包含col1date('yymmdd')null(zeros)并且日期为000000,则会收到错误消息,指示000000无法转换为DATE(4).
若要使LOADTABLE在数据为000000时在col1中插入空值,请将NULL子句编写为null('000000'),或将数据修改为等同二进制零并使用NULL(ZEROS).
如果VARCHAR单元的长度为零并且该单元不为空值,则将获得一个零长度单元.
对于所有其它数据类型来说,如果单元长度为零,则SybaseIQ将插入NULL.
这是ANSI行为.
对于零长度字符数据的非ANSI处理,请设置NON_ANSI_NULL_VARCHAR数据库选项.
使用DEFAULT选项可指定装载缺省列值.
即使列未在表模式中定义缺省值,您仍可以向该列装载缺省值.
在装载时,此功能可提供更大的灵活性.
要使用LOADTABLEDEFAULTS语句中指定的缺省值,必须将LOADTABLE选项设置为ON.
如果DEFAULTS选项为OFF,则不会使用指定的装载缺省值,而会在列中插入空值.
LOADTABLE命令必须至少包含一个需要从LOADTABLE命令中指定的文件中进行装载的列.
否则将报告错误,并且不会执行装载.
指定的装载缺省值必须符合支持的列缺省值和缺省值限制,如《系统管理指南第一卷》>"数据完整性">"列缺省值有助于保持数据完整性"中描述的一样.
LOADTABLEDEFAULT选项不支持AUTOINCREMENT、IDENTITY或GLOBALAUTOINCREMENT作为装载缺省值.
LOADTABLEDEFAULTdefault-value必须与数据库的字符集相同.
对于在LOADTABLEDEFAULT子句中指定的装载缺省值,不支持对缺省值进行加密.
对于在表中插入的每个行,将计算因评估指定装载缺省值而引起的约束冲突的总数.
SQL语句228SybaseIQload-specification的另一重要部分是FILLER选项.
此选项指示您希望跳过源输入文件中的指定字段.
例如,在输入文件中的行末尾或整个字段可能会存在不希望添加到表中的字符.
与column-spec定义一样,使用FILLER可以指定ASCII固定字节长度、由分隔符分隔的可变长度字符,以及使用PREFIX字节的二进制字段.
filename-string以字符串的形式传递到服务器.
因此,该字符串遵循的格式要求与其它SQL字符串相同.
需要特别指出的是:要在Windows系统中指示目录路径,反斜杠字符\必须用两个反斜杠来表示.
因此,要将数据从文件c:\temp\input.
dat装载到Employees表的语句是:LOADTABLEEmployeesFROM'c:\\temp\\input.
dat'.
.
.
路径名对应于数据库服务器,而不是客户端应用程序.
如果在某一其它计算机的数据库服务器上运行此语句,则目录名是指服务器计算机上的目录,而不是指客户端计算机上的目录.
每个语句子句的说明跟在以下命令之后:USING—USINGFILE从服务器装载一个或多个文件.
此子句的作用等同于指定FROMfilename子句.
USINGCLIENTFILE从客户端批量装载一个或多个文件.
客户端上的文件的字符集必须与服务器归类的字符集相同.
SybaseIQ以串行方式处理文件列表中的文件.
每个文件在处理时将锁定为读取模式,然后解锁.
客户端批量装载不需要管理开销(如额外的磁盘空间、内存或网络监控守护程序要求).
批量装载大对象时,USINGCLIENTFILE子句同时适用于主文件和辅助文件.
(如果您有非结构化数据分析选件,请参见《SybaseIQ中的非结构化数据分析》了解详细信息.
)在客户端装载过程中,将在客户端主机上创建IGNORECONSTRAINT日志文件,创建日志文件过程中出现的任何错误会导致操作回退.
客户端批量装载受使用命令序列协议的InteractiveSQL和ODBC/JDBC客户端支持,而不受使用TDS协议的客户端支持.
为了确保网络数据安全,请使用传送层安全性.
要控制谁能够使用客户端批量装载,请使用安全功能(-sf)服务器启动开关、ALLOW_READ_CLIENT_FILE数据库选项和/或READCLIENTFILE访问控制.
请参见"SQLAnywhereServer-SQL用法">"远程数据和批量操作">"导入和导出数据">"访问客户端计算机上的数据">"客户端数据安全性"和"SQLAnywhereServer-SQL用法">"远程数据和批量操作">"导入和导出数据">"访问客户端计算机上的数据">"客户端数据安全性".
注意:这些参考指向SQLAnywhere文档.
LOADTABLEFROM子句已废弃,但可使用该子句指定服务器上存在的某个文件.
以下示例从客户端计算机上的文件a.
inp装载数据.
LOADTABLEt1(c1,c2,filler(30))USINGCLIENTFILE'c:\\client-data\\a.
inp'QUOTESOFFESCAPESOFFSQL语句参考:语句和选项229IGNORECONSTRAINTUNIQUE0,NULL0MESSAGELOG'c:\\client-data\\m.
log'ROWLOG'c:\\client-data\\r.
log'ONLYLOGUNIQUECHECKCONSTRAINTS—此选项缺省值为ON.
指定CHECKCONSTRAINTSON时,将评估检查约束,您可以任意忽略或记录评估结果.
设置CHECKCONSTRAINTSOFF将导致SybaseIQ忽略所有检查约束违规.
这很有用,例如在重建数据库时.
如果表的检查约束调用尚未创建的用户定义的函数,则重建将失败,除非此选项设置为OFF.
此选项与以下选项互斥.
如果在同一装载中指定了以下任何选项,将导致错误:IGNORECONSTRAINTALLIGNORECONSTRAINTCHECKLOGALLLOGCHECKDEFAULTS—如果DEFAULTS为ON(缺省值)并且列具有缺省值,则使用该值.
如果DEFAULTS选项为OFF,则将任何未在列表中显示的值指定为NULL.
DEFAULTS选项的设置适用于所有列DEFAULT值,包括AUTOINCREMENT.
有关列的DEFAULT值在装载和插入中的用法的详细信息,请参见《系统管理指南第一卷》>"数据完整性">"列缺省值有助于保持数据完整性".
QUOTES—此参数是可选的,缺省值为ON.
将QUOTES选项打开时,LOADTABLE要求将输入字符串引在引号字符内.
引号字符是撇号(单引号)或引号(双引号).

字符串中出现的第一个这样的字符将被视为该字符串的引号字符.
字符串数据必须以匹配的引号结束.
在QUOTESON的情况下,可以在列值中包括列或行分隔符.
假定前导引号字符和结尾引号字符不是值的一部分并从装载的数据值中排除.
要在使用QUOTESON的值中包括引用符号,必须使用两个引号.
例如,下面的行在第三列中包含一个单引号字符值:'123HighStreet,Anytown','(715)398-2354',''''在打开STRIP时(缺省情况),首先将从值中去除尾随空白,然后再插入这些值.
仅去除不带引号的字符串的尾随空白.
带引号的字符串保留其尾随空白.
仅当QUOTES设置为时,才会剪裁前导空白或TAB字符.
数据提取工具提供多个用于处理引号的选项(TEMP_EXTRACT_QUOTES、TEMP_EXTRACT_QUOTES_ALL和TEMP_EXTRACT_QUOTE).
如果您计划提取数据以便将其以缺省ASCII提取方式装载到IQ表以及包含列或行分隔符的字符串字段中,请使用TEMP_EXTRACT_BINARY选项提取并对LOADTABLE使用FORMATbinary和QUOTESOFF选项.
限制:SQL语句230SybaseIQQUOTESON仅适用于列分隔的ASCII字段.
在QUOTESON的情况下,列分隔符或行终结符的第一个字符不能是单引号或双引号.
QUOTES选项不适用于从辅助文件装载二进制大对象(BLOB)或字符大对象(CLOB)数据,而无论其设置如何.
前导或尾随引号将作为CLOB数据的一部分来装载.
使用QUOTESON选项,位于引号之间的两个连续引号将作为两个连续引号进行装载.
AdaptiveServerEnterpriseBCP不支持选项QUOTES.
拷入或拷出所有字段数据时等同于QUOTESOFF设置.
因为SybaseIQLOADTABLE语句的缺省设置是QUOTESON,所以在将ASE数据从BCP输出导入到SybaseIQ表时必须指定QUOTESOFF.
例外:如果LOADTABLE在引起来的字段的结尾引号字符之后遇到非空白字符,将报告以下错误并回退装载操作:在括起来的字段的结束引号字符后发现非空白文本.
SQLSTATE:QTA14SQLCODE:-1005014L在QUOTESON的情况下,如果将单引号或双引号指定为列分隔符的第一个字符,则将报告错误并且装载操作会失败:在QUOTES选项设置为ON的情况下,列分隔符或行终结符的第一个字符不能是单引号或双引号.
SQLSTATE:QCA90SQLCODE:-1013090L有关QUOTES选项的示例,请参见《系统管理指南第一卷》>"导入和导出数据">"使用LOADTABLE语句进行批量装载".
ESCAPES—如果省略输入字段的column-spec定义,则在ESCAPES为ON(缺省值)的情况下,跟在反斜杠字符后的字符将由数据库服务器识别并解释为特殊字符.
可以将换行符以组合形式\n包括在内,其它字符则可以作为十六进制ASCII代码包括在数据中,例如\x09表示制表符.
两个连续的反斜线字符(\\)被解释为单个反斜线.
对于SybaseIQ,必须设置ESCAPESOFF.
FORMAT—SybaseIQ支持ASCII和二进制输入字段.
此格式通常由上述column-spec定义.
如果省略列的此定义,缺省情况下,SybaseIQ使用此选项定义的格式.
假定输入行具有ascii(缺省值)或binary字段,每行各一个输入行,并使用列分隔符来分隔各个值.
有关SybaseIQ使用FORMATBINARY和BINARY列规范子句生成可供LOADTABLE语句读取的数据文件所使用的二进制格式的详细说明,请参见《系统管理指南第一卷》>"导入和导出数据">"二进制装载格式".
SybaseIQ还接受BCP字符文件中的数据作为LOADTABLE命令的输入.
使用LOADTABLEFORMATBCP语句装载到SybaseIQ表的BCP数据文件必须使用-c选项以跨平台文件格式导出(BCPOUT).
对于FORMATBCP,LOADTABLE语句的缺省列分隔符为,缺省行终结符为.
SQL语句参考:语句和选项231对于FORMATBCP,行中的最后一列必须以行终结符终止,而不能由列分隔符终止.
如果列分隔符位于行终结符之前,则将列分隔符视为数据的一部分.
装载规范中除最后一列以外的所有列中的数据只能以列分隔符分隔.
对于除最后一列以外的所有列,如果在列分隔符之前先遇到行终结符,则将行终结符视为列数据的一部分.
可通过DELIMITEDBY子句指定列分隔符.
对于FORMATBCP,分隔符的长度必须小于或等于10个字符.
如果分隔符长度大于10,则返回错误.
对于FORMATBCP,装载规范只能包含列名、NULL和ENCRYPTED.
如果在装载规范中指定了任何其它选项,则返回错误.
例如,以下LOADTABLE装载规范为有效规范:LOADTABLEx(c1,c2null(blanks),c3)FROM'bcp_file.
bcp'FORMATBCP.
.
.
LOADTABLEx(c1encrypted(bigint,'KEY-ONE','aes'),c2,c3)FROM'bcp_file.
bcp'FORMATBCP.
.
.
有关LOADTABLEENCRYPTED子句的信息,请参见"SybaseIQ中的高级安全性".
DELIMITEDBY—如果在column-spec定义中省略列分隔符,则缺省的列分隔符为逗号.
通过提供单个ASCII字符或十六进制字符表示形式可指定其它列分隔符.
DELIMITEDBY子句是:.
.
.
DELIMITEDBY'\x09'.
.
.
若要将换行符作为分隔符使用,您可以指定特殊组合"\n"或其ASCII值\"x0a".
虽然可以在column-specdelimiter-string中指定最多4个字符,但在DELIMITEDBY子句中只能指定单个字符.
STRIP—STRIP子句指定在插入不带引号的值之前是否应去除其尾随空白.
LOADTABLE命令接受以下STRIP关键字:STRIPOFF—不会去除尾随空白.
STRIPRTRIM—去除尾随空白.
STRIPON—不推荐使用.
等同于STRIPRTRIM.
在打开STRIP时(缺省情况),SybaseIQ首先将从值中去除尾随空白,然后再插入这些值.
这仅适用于VARCHAR数据.
STRIPOFF会保留尾随空白.
仅去除不带引号的字符串的尾随空白.
带引号的字符串保留其尾随空白.
如果不需要空白敏感性,可以使用FILLER选项作为替代选项,以使要跳过的字节数更加具体化,而不是指出要跳过所有尾随空格.
对于SybaseIQ,STRIPOFF会更有效,在处理尾随空白时,它将遵循ANSI标准.
(CHAR数据始终会填充补空,因此STRIP选项仅影响VARCHAR数据.
)STRIP选项仅适用于长度可变的非二进制数据,而不适用于ASCII固定宽度插入.
例如,假设以下模式:CREATETABLEt(c1VARCHAR(3));LOADTABLEt(c1STRIPRTRIM//trailingblanksSQL语句232SybaseIQtrimmedLOADTABLEt(c1STRIPOFF//trailingblanksnottrimmedLOADTABLEt(c1ASCII(3)).
.
.
STRIPRTRIM//trailingblanksnottrimmedLOADTABLEt(c1ASCII(3)).
.
.
STRIPOFF//trailingblankstrimmedLOADTABLEt(c1BINARY).
.
.
.
.
STRIPRTRIM//trailingblankstrimmedLOADTABLEt(c1BINARY).
.
.
.
.
STRIPOFF//trailingblankstrimmed始终剪裁二进制数据中的尾随空白.
WITHCHECKPOINT—此选项仅在在SybaseIQ数据库中装载SQLAnywhere表时才会有用.
此子句用于指定是否执行检查点.
缺省设置为OFF.
如果将此子句设置为ON,则会在成功完成并记录语句之后执行检查点操作.
如果服务器在提交连接后及下次检查点之前出现故障,则必须具有用来装载表的数据文件才能成功完成恢复.
不过,如果指定了WITHCHECKPOINTON,并且此后需要恢复,则在恢复时不必存在数据文件.
如果数据库损坏,需要使用备份并应用当前的日志文件,则无论此子句的设置情况如何,都需要数据文件.
警告!
如果将数据库选项CONVERSION_ERROR设置为OFF,则可能会将错误的数据装载到表中而得不到任何错误报告.
如果未指定WITHCHECKPOINTON,并且数据库需要恢复,则当恢复过程中CONVERSION_ERROR为ON(缺省值)时,恢复可能失败.
建议您不要在CONVERSION_ERROR设置为OFF且未指定WITHCHECKPOINTON的情况下装载表.
另请参见"CONVERSION_ERROR选项[TSQL]".
有关自动恢复SybaseIQ数据的信息,请参见《系统管理指南第一卷》>"系统恢复和数据库修复".
BYTEORDER—指定读取时的字节顺序.
此选项适用于所有二进制输入字段.
如果未定义,则此选项将会被忽略.
SybaseIQ始终以负责其运行的计算机的本机格式读取二进制数据(缺省值为NATIVE).
HIGH(当多字节数量以高位字节优先时[对于类似Sun、IBMAIX和HP之类的大型平台而言]).
LOW(当多字节数量以低位字节优先时[对于类似Windows之类的小型平台而言]).
LIMIT—指定要插入表中的最大行数.
缺省值为0,表示无限制.
最大值为231-1(2147483647)行.
SQL语句参考:语句和选项233NOTIFY—指定每次在表中成功插入指定行数时将通过消息通知您.
缺省值为每100,000行.
此选项的值将覆盖NOTIFY_MODULUS数据库选项的值.
ONFILEERROR—指定SybaseIQ在因为输入文件不存在或没有读取该文件的正确权限而不能打开此文件时应执行的操作.
您可以指定以下操作中的一个:ROLLBACK中止整个事务(缺省设置).
FINISH结束已完成的插入操作并终止装载操作.
CONTINUE返回一个错误但仅跳过该文件以继续执行装载操作.
只允许一个ONFILEERROR子句:PREVIEW—显示目标表中输入的布局,包括每列的起始位置、名称和数据类型.
SybaseIQ将在装载过程开始时显示此信息.
如果正在写入日志文件,此信息也包括在日志中.
ROWDELIMITEDBY—指定最大长度4字节的字符串,以指示输入记录的结尾.
仅当行中的所有字段为以下情形中任意一种情形时才能使用此选项:由列终结符分隔通过DATE或DATETIMEcolumn-spec选项定义数据ASCII固定长度字段如果任何输入字段包含二进制数据,则不能使用此选项.
使用此选项,行终结符将使任何缺失字段设置为NULL.
所有行均必须具有相同的行分隔符,并且必须区别于所有列分隔符.
行分隔符字符串和字段分隔符字符串彼此不能为初始子集.
例如,不能指定"*"作为字段分隔符并指定"*#"作为行分隔符,但可以与该行分隔符一起指定"#"作为字段分隔符.
如果行缺少其分隔符,则SybaseIQ返回一个错误并回退整个装载事务.
唯一的例外是回退该行并返回一条警告消息的文件的最后一条记录.
在Windows上,通常由换行符后跟回车符表示行分隔符.
对于此选项或FILLER,您可能需要将此指定为delimiter-string(请参见以上说明).
SKIP—定义此装载要从输入表的开头跳过的行数.
要跳过的最大行数为231-1(2147483647).
缺省值为0.
HEADERSKIP…HEADERDELIMITEDBY—指定LOADTABLE在数据文件开头要跳过的行数,包括标题行.
在跳过指定的行数之前,将忽略所有的LOADTABLE列规范及其它装载选项.
要跳过的行数大于或等于零.
行由HEADERDELIMITEDBY子句中指定的1到4个字符分隔符字符串确定.
缺省的HEADERDELIMITEDBY字符串为'\n'字符.
HEADERDELIMITEDBY字符串的最大长度为四个字符.
如果字符串长度大于4或小于1,将返回一个错误.
如果指定了非零HEADERSKIP值,则包括HEADERDELIMITEDBY分隔符的所有数据都将被忽略,直到分隔符的出现次数达到HEADERSKIP子句中指定的次数.
SQL语句234SybaseIQ在跳过指定的行数之前,将忽略所有的LOADTABLE列规范及其它装载选项.
在跳过指定的行数后,LOADTABLE列规范及其它装载选项将应用于剩余的数据.
仅在数据开头处忽略"标题"字节.
如果在USING子句中指定了多个文件,HEADERSKIP将只忽略从第一个文件的第一行开始的数据,直到跳过指定的标题行,即使这些行存在于后面的文件中.
LOADTABLE在开始解析实际数据后不会寻找标题.
如果LOADTABLE在跳过HEADERSKIP指定的行数之前处理所有输入数据,则不会报告错误.
WORDSKIP—遇到数据长度超过创建单词索引时指定的限制时,允许装载继续进行.

如果因为字超过最大允许大小而未能装载某一行,则会将一条警告写入.
iqmsg文件.
还可以选择将WORD大小违规记录到MESSAGELOG文件中,并将被拒绝的行记录到LOADTABLE语句中指定的ROWLOG文件.
如果未指定此选项,则LOADTABLE将在第一次遇到长度超过指定限制的字时报告错误并回退.
number指定了忽略"不支持超过最大允许字长的字度"错误的次数.
0(零)表示没有限制.
STARTROWID—指定SybaseIQ表中应开始插入的行的记录标识号.
不允许对分区表使用LOADTABLE和INSERT命令的STARTROWID子句.
ONPARTIALINPUTROW—指定在装载期间遇到部分输入行时采取的操作.
您可以指定以下各选项之一:CONTINUE发出一条警告并继续装载操作.
这是缺省设置.
ROLLBACK中止整个装载操作并报告错误.
PartialinputrecordskippedatEOF.
SQLSTATE:QDC32SQLSTATE:-1000232LIGNORECONSTRAINT—指定是否忽略装载期间发生的CHECK、UNIQUE、NULL、DATAVALUE和FOREIGNKEY完整性约束违约,以及在启动回退之前忽略的最大违约数.
指定每个constrainttype都具有以下结果:CHECKlimit—如果limit指定零值,将要忽略的CHECK约束违约次数为无限次.
如果未指定CHECK,则首次发生任何CHECK约束违约时将导致LOAD语句回退.
如果limit为非零,则limit+1次CHECK约束违约将导致装载回退.
UNIQUElimit—如果limit指定为零,则忽略的UNIQUE约束违约次数将为无限次.
如果limit为非零,则limit+1次UNIQUE约束违约将导致装载回退.
NULLlimit—如果limit指定为零,则忽略的NULL约束违约次数将为无限次.
如果limit为非零,则limit+1次NULL约束违约将导致装载回退.
FOREIGNKEYlimit—如果limit指定为零,则忽略的FOREIGNKEY约束违约次数将为无限次.
如果limit为非零,则limit+1次FOREIGNKEY约束违约将导致装载回退.
DATAVALUElimit—如果数据库选项CONVERSION_ERROR为ON,则将报告错误并且该语句将回退.
如果limit指定为零,则忽略的DATAVALUE约束违约(数SQL语句参考:语句和选项235据类型转换错误)次数将为无限次.
如果limit为非零,则limit+1次DATAVALUE约束违约将导致装载回退.
ALLlimit—如果数据库选项CONVERSION_ERROR=ON,则将报告错误并且该语句将回退.
如果limit指定为零,则忽略的所有完整性约束违约的累积总数将为无限次.
如果limit为非零,则所有忽略的UNIQUE、NULL、DATAVALUE和FOREIGNKEY完整性约束违约的累计总数超过limit值时,装载将回退.
例如,指定以下IGNORECONSTRAINT选项:IGNORECONSTRAINTNULL50,UNIQUE100,ALL200完整性约束违约的总数不能超过200,而NULL和UNIQUE约束违约的总数分别不能超过50和100.
只要超出这些限制中的任何一个,LOADTABLE语句便将回退.
注意:单个行可具有多个完整性约束违约.
每出现一次完整性约束违约,便计数一次,直至该类型违约的限定值.
如果要记录忽略的完整性约束违约,Sybase强烈建议将IGNORECONSTRAINT选项限制设置为非零值.
记录过多的违规数会影响装载性能.
如果在IGNORECONSTRAINT子句中未指定CHECK、UNIQUE、NULL或FOREIGNKEY,则在第一次发生这些完整性约束违约类型中的一种时,装载将回退.
如果未在IGNORECONSTRAINT子句中指定DATAVALUE,则当这种类型的完整性约束违约首次发生时,将会回退装载,但如果数据库选项CONVERSION_ERROR=OFF则例外.
如果CONVERSION_ERROR=OFF,则对于任何DATAVALUE约束违约,将报告警告并继续装载.
装载完成时,将在.
iqmsg文件中记录一条与完整性约束违约有关的信息性消息.
此消息包含装载时发生的完整性约束违约次数及跳过的行数.
MESSAGELOG—指定在其中记录完整性约束违约相关信息的文件的名称及要记录的违约类型.
时间戳表示记录在MESSAGELOG和ROWLOG文件中的装载开始和完成时间.
必须指定MESSAGELOG和ROWLOG,否则将不记录与完整性违约有关的信息.
如果未指定ONLYLOG子句,则不会记录有关完整性约束违约的任何信息.
只记录表示装载开始和完成时间的时间戳.
对于ONLYLOG子句中指定的所有完整性约束类型违约,或指定关键字WORD时的所有字索引长度违约,将记录相关违约信息.
如果正在记录约束违约,则每次发生完整性约束违约时,将在MESSAGELOG文件中正好生成一行信息.
MESSAGELOG文件中的行数(已报告错误)可能超出IGNORECONSTRAINT选项限制,因为装载是由并行运行的多个线程执行的.
多个线程可以报告约束违约次数已超出指定限定值.
如果正在记录约束违约,则对于某一给定行,将在ROWLOG文件中正好记录一行信息,而不考虑在该行发生的完整性约束违约的次数.
SQL语句236SybaseIQMESSAGELOG文件中的不同错误数可能与ROWLOG文件中的行数不完全匹配.
行数差是由于MESSAGELOG的上述并行装载处理造成的.
MESSAGELOG和ROWLOG文件不能为原始分区或命名管道.
如果MESSAGELOG或ROWLOG文件已经存在,则新信息会附加到文件.
如果为MESSAGELOG或ROWLOG文件指定了无效文件名,将产生错误.
如果为MESSAGELOG和ROWLOG文件指定了相同的文件名,将产生错误.
IGNORECONSTRAINT和MESSAGELOG选项的各种组合将导致不同的记录操作.
表11.
LOADTABLE记录操作已指定IGNORECONSTRAINT已指定MESSAGELOG操作yesyes回退之前,将记录所有被忽略的完整性约束违约(包括用户指定的限制).
noyes回退之前,将记录第一次完整性约束违约.
yesno不记录.
nono不记录.
第一次完整性约束违约将导致回退.
注意:如果要记录忽略的完整性约束违约,Sybase强烈建议将IGNORECONSTRAINT选项限制设置为非零值.
如果单行出现多次完整性约束违约,则将针对每次违约在MESSAGELOG文件中写入一行.
记录过多的违规数会影响装载性能.
LOGDELIMITEDBY—指定ROWLOG文件中各数据值之间的分隔符.
缺省分隔符为逗号.
有关MESSAGELOG和ROWLOG文件内容和格式的详细信息,请参见《系统管理指南第一卷》>"导入和导出数据">"使用LOADTABLE语句批量装载".
将FORMATBCP指定为LOADTABLE子句后,SybaseIQ不再返回错误消息.
此外,会检验以下情况,并返回正确的错误消息:如果指定装载格式不为ASCII、BINARY或BCP,SybaseIQ现在返回消息"只有ASCII、BCP和BINARY是受支持的LOAD格式.
"如果LOADTABLE列规范包含除列名、NULL或ENCRYPTED以外的任何内容,SybaseIQ返回错误消息"对于LOAD.
.
.
FORMATBCP无效的装载规范.
"如果FORMATBCP装载的列分隔符或行终结符大小大于10个字符,SybaseIQ返回消息"分隔符'%2'的长度必须为1到%3个字符"(其中%3等于10).
对于FORMATBCP和FORMATASCII出现的错误或警告情况,与这些情况相对应的消息对于两种格式而言都是相同的.
SQL语句参考:语句和选项237如果指定的装载缺省值为AUTOINCREMENT、IDENTITY或GLOBALAUTOINCREMENT,SybaseIQ返回错误"缺省值%2不能用作LOAD缺省值.
%1"如果LOADTABLE规范不包含需要从指定文件装载的任何列,SybaseIQ则报告错误"LOAD语句必须至少包含要从输入文件中装载的1列.
",并回退LOADTABLE语句.
如果装载超出了具有TEXT索引的文本文档的最大词语数限制,SybaseIQ返回错误"文本文档超出最大词语数.
每个文档最多支持4294967295个词语.
"标准SQL—ISO/ANSISQL语法的供应商扩展.
Sybase—不适用.
权限执行LOADTABLE语句所需的权限取决于数据库服务器的-gl命令行选项,如下所示:如果-gl选项设置为ALL,则您必须是表的所有者,拥有DBA权限或拥有ALTER权限.
如果-gl选项设置为DBA,则您必须拥有DBA权限.
如果-gl选项设置为NONE,则不允许执行LOADTABLE.
有关详细信息,请参见《实用程序指南》>"start_iq数据库服务器启动实用程序">"start_iq服务器选项"中的-gl命令行选项.
LOADTABLE表还需要对表拥有写入锁.
另请参见INSERT语句(第211页)LOAD_ZEROLENGTH_ASNULL选项(第392页)NON_ANSI_NULL_VARCHAR选项(第410页)存储大小字符数据的存储大小、给定的列定义大小和输入数据大小.
表12.
字符数据的存储大小数据类型列定义输入数据存储CHARACTER,CHAR(32K-1)字节的宽度(32K-1)字节(32K-1)字节VARCHAR,CHARACTERVARY-ING(32K-1)字节的宽度(32K-1)字节(32K-1)字节SQL语句238SybaseIQLOCKTABLE语句禁止其它并发事务在指定时间内访问或修改表.
语法LOCKTABLEtable-list[WITHHOLD]IN{SHARE|WRITE|EXCLUSIVE}MODE[WAITtime]参数table-list:–[owner.
]table-name[,[owner.
]table-name,…]time:string示例示例1–对Customers和Employees表获取WRITE锁(如果在5分3秒内可用):LOCKTABLECustomers,EmployeesINWRITEMODEWAIT'00:05:03'示例2–无限期等待,直到对Customers和Employees表的WRITE锁可用或发生中断为止:LOCKTABLECustomers,EmployeesINWRITEMODEWAIT用法table-name—该表必须为基表,而不能为视图.
WRITE模式仅对IQ基表有效.
LOCKTABLE要么锁定表列表中的所有表,要么不锁定任何表.
当针对SQLAnywhere表获取锁,或者当获取SHARE或EXCLUSIVE锁时,则只能指定一个表.
使用标准SybaseIQ对象限定规则分析table-name.
有关相关信息,请参见《参考:构件块、表和过程》>"SQL语言元素">"标识符"和《系统管理指南第一卷》>"数据库对象管理">"表管理">"表创建准则">"表类型".
WITHHOLD—如果指定该子句,锁一直保持到连接结束时.
如果没有指定该子句,则提交或回退当前事务时将释放锁.
SHARE—禁止其它事务修改表,但允许它们读取表.
在该模式下,只要没有其它的事务锁定所修改的行,就可以间接地或显式地使用LOCKTABLE更改表中的数据.
WRITE—禁止其它事务修改表的列表.
无条件提交连接最外面的事务.
事务的快照版本不是由LOCKTABLEINWRITEMODE语句建立的,而是通过执行SybaseIQ处理的下一命令建立的.
参与连接索引的IQ表上的WRITE模式锁还将锁定下列各项:SQL语句参考:语句和选项239当X为非顶层表时,将连接索引层次的顶层表锁定在WRITE模式中对应的连接虚拟表(JVT)当事务提交或回退时或者连接断开时,才能释放WRITE模式锁.
EXCLUSIVE—禁止其它事务访问表.
在此模式下,任何其它事务都不能对表执行任何种类的查询、更新或任何其它操作.
如果用LOCKTABLEtINEXCLUSIVEMODE排它性地锁定表t,则服务器的缺省行为是不获取t的行锁.
将SUBSUME_ROW_LOCKS选项设置为OFF可以禁用此行为.
请参见"SQLAnywhereServer-数据库管理">"配置数据库">"数据库选项">"按字母顺序排列的选项列表">"subsume_row_locks选项".
注意:此参考指向SQLAnywhere文档.
对协调器上的IQ主存储区中的表所运行的LOCKTABLE语句,不会影响从辅助服务器上的连接访问这些表.
例如:在协调器连接上,执行以下命令:LOCKTABLEcoord1WITHHOLDINEXCLUSIVEMODE协调器上的sp_iqlocks确认表coord1具有排它(E)锁.
在辅助服务器上的连接上运行的sp_iqlocks的结果不会显示表coord1上的排它锁.
此连接上的用户可可查看对协调器上的表coord1的更新.
协调器上的其它连接可查看coord1上的排它锁,并且尝试通过协调器上的其它连接从表coord1中进行选择将返回"用户DBA锁定了coord1中的行.
"WAITtime—Wait选项指定所有锁类型的最大阻塞时间.
当锁定模式为WRITE时,该选项是必需的.
给定时间参数后,仅当锁在指定时间内可用时,服务器才会锁定指定表.
可以采用hh:nn:ss:sss格式指定时间参数.
如果指定了日期部分,服务器将忽略此部分,并将此参数转换为时间戳.
如果未给定时间参数,服务器将无限期地等待,直到WRITE锁可用或发生中断为止.
LOCKTABLE不支持在视图上执行.
尝试锁定视图将获取共享模式锁,而不管命令中指定的模式如何.
共享模式锁阻止其它事务修改表模式.
Transact-SQL(T-SQL)存储过程语言不支持LOCKTABLE.
例如,以下语句返回SyntaxerrornearLOCK:CREATEPROCEDUREtproc()ASBEGINCOMMIT;LOCKTABLEt1INSHAREMODEINSERTINTOt1VALUES(30)ENDWatcom-SQL存储过程语言支持LOCKTABLE.
缺省命令分隔符为分号(;).
例如:CREATEPROCEDUREtproc()ASSQL语句240SybaseIQBEGINCOMMIT;LOCKTABLEt1INSHAREMODEINSERTINTOt1VALUES(30)END另请参见《参考:构件块、表和过程》>"系统过程">"系统存储过程">"sp_iqlocks过程".
标准SQL—ISO/ANSISQL语法的供应商扩展.
Sybase-AdaptiveServerEnterprise中支持.
AdaptiveServerEnterprise中不支持WITHHOLD子句.
AdaptiveServerEnterprise提供在SQLAnywhere中不受支持的WAIT子句.
权限若要以SHARE模式锁定表,需要SELECT权限.
若要以EXCLUSIVE模式锁定表,必须是表所有者或者有DBA权限.
另请参见SELECT语句(第277页)LOOP语句重复执行语句列表.
语法[statement-label:].
.
.
[WHILEsearch-condition]LOOP.
.
.
statement-list.
.
.
ENDLOOP[statement-label]示例示例1–过程中的WHILE循环:.
.
.
SETi=1;WHILEi=10THENLEAVElbl;ENDIF;SETi=i+1;ENDLOOPlbl用法WHILE和LOOP语句都是控制语句,当search-condition计算结果为TRUE时,使用这两个语句可以重复执行SQL语句列表.
LEAVE语句可在ENDLOOP语句后的第一个语句处用于重新开始执行.
如果指定结尾statement-label,它必须与开头statement-label匹配.
标准SQL—符合ISO/ANSISQL标准.
Sybase—在AdaptiveServerEnterprise中不受支持.
WHILE语句在Transact-SQL存储过程中提供了循环.
权限无另请参见FOR语句(第191页)LEAVE语句(第221页)WHILE语句[T-SQL](第312页)MESSAGE语句显示一条消息.
语法MESSAGEexpression,…[TYPE{INFO|ACTION|WARNING|STATUS}][TO{CONSOLE|CLIENT[FOR{CONNECTIONconn_id[IMMEDIATE]|ALL}]|[EVENT|SYSTEM]LOG}[DEBUGONLY]]SQL语句242SybaseIQ参数conn_id:–integer示例示例1–在数据库服务器消息窗口中显示字符串Thecurrentdateandtime,以及当前日期和时间:CREATEPROCEDUREmessage_test()BEGINMESSAGE'Thecurrentdateandtime:',Now();END;CALLmessage_test();示例2–若要在ODBC中注册回调,首先要声明消息处理程序:voidSQL_CALLBACKmy_msgproc(void*sqlca,unsignedcharmsg_type,longcode,unsignedshortlen,char*msg){…}通过调用SQLSetConnectAttr函数安装已声明的消息处理程序:rc=SQLSetConnectAttr(dbc,ASA_REGISTER_MESSAGE_CALLBACK,(SQLPOINTER)&my_msgproc,SQL_IS_POINTER);用法MESSAGE语句显示消息,该消息可以是任何表达式.
子句可指定显示消息的位置.
发布MESSAGE…TOCLIENT语句的过程必须与连接相关联.
例如,以下不显示消息框,因为事件发生在连接之外:CREATEEVENTCheckIdleTimeTYPEServerIdleWHEREevent_condition('IdleTime')>100HANDLERBEGINMESSAGE'Idleengine'typewarningtoclient;END;但是,在下面的示例中,消息被写入到服务器主控台:CREATEEVENTCheckIdleTimeTYPEServerIdleWHEREevent_condition('IdleTime')>100HANDLERBEGINMESSAGE'Idleengine'typewarningtoconsole;END;SQL语句参考:语句和选项243有效的表达式可以包含用引号引起来的字符串或其它常量、变量或函数.
但是,在MESSAGE语句的输出中不允许有查询,即使表达式定义包括查询,也是如此.
FOR子句可用于通知其它应用程序在服务器上检测到的事件,而不需要该应用程序显式地检查事件.
使用FOR子句后,接收者在下次执行SQL语句时会接收到该消息.
如果接收者当前正在执行SQL语句,则将在该语句完成后接收到消息.
如果正在执行的语句是存储过程调用,则在调用完成前便会接收到消息.
如果应用程序需要在消息发出不久和连接并未执行SQL语句时得到通知,可以使用第二个连接.
此连接可执行一条或多条WAITFORDELAY语句.
这些语句不消耗服务器或网络上的大量资源(而轮询方法则会消耗大量资源),但允许应用程序在消息发出后不久接收到通知.
ESQL和ODBC客户端通过消息回调函数接收消息.
在每种情况下,都必须注册这些函数.
若要注册ESQL消息处理程序,请使用db_register_callback函数.
ODBC客户端可以用SQLSetConnectAttr函数注册回调函数.
有关使用回调函数的详细信息,请参见"SQLAnywhereServer-编程">"数据库工具接口(DBTools)">"使用数据库工具接口">"使用回调函数".
注意:此参考指向SQLAnywhere文档.
TYPE—只有将消息发送到客户端时TYPE子句才有效.
客户端应用程序必须决定如何处理消息.
InteractiveSQL在以下位置显示消息:INFO–"消息"窗口(缺省值).
ACTION-含"确定"按钮的消息框.
WARNING–含"确定"按钮的消息框.
STATUS–"消息"窗格.
TO—指定消息的目标:CONSOLE–将消息发送到数据库服务器窗口.
CONSOLE是缺省设置.
CLIENT–将消息发送到客户端应用程序.
您的应用程序必须决定如何处理消息,您可以根据TYPE信息作出决定.
LOG–将消息发送到-o选项指定的服务器日志文件中.
FOR—对于消息TOCLIENT,此子句指定哪个连接接收关于消息的通知:CONNECTIONconn_id–指定消息接收者的连接ID.
IMMEDIATE–请参见"SQLAnywhereServer-SQL参考">"SQL语句">"MESSAGE语句".
ALL–指定所有打开的连接接收消息.
DEBUGONLY—用于控制是否通过更改DEBUG_MESSAGES选项的设置启用或禁用添加到存储过程中的调试消息.
如果指定了DEBUGONLY,则仅在DEBUG_MESSAGES选项设置为ON的情况下才执行MESSAGE语句.
SQL语句244SybaseIQ注意:DEBUGONLY将DEBUG_MESSAGES选项设置为Off时,消息并不占用大量资源,因此在生产系统中,通常可以将这些语句保留在存储过程中.
不过,在可能会频繁执行这些语句的地方应慎用它们;否则,它们可能会导致性能略微降低.

标准SQL—ISO/ANSISQL语法的供应商扩展.
Sybase—AdaptiveServerEnterprise中不支持.
Transact-SQLPRINT语句提供类似的功能,在SQLAnywhere中可用.
权限必须连接到数据库.
执行包含FOR子句的MESSAGE语句需要拥有DBA权限.
另请参见CREATEPROCEDURE语句(第112页)WAITFOR语句(第309页)DEBUG_MESSAGES选项(第358页)OPEN语句[ESQL][SP]用于打开以前声明的游标以访问数据库中的信息.
语法OPENcursor-name.
.
.
[USING[DESCRIPTOR{sqlda-name|host-variable.
.
.
[WITHHOLD]参数cursor-name:–标识符或宿主变量sqlda-name:–identifier示例示例1–在嵌入式SQL中使用OPEN:EXECSQLOPENemployee_cursor;和SQL语句参考:语句和选项245EXECSQLPREPAREemp_statFROM'SELECTEmployeeID,SurnameFROMEmployeesWHEREnamelike';EXECSQLDECLAREemployee_cursorCURSORFORemp_stat;EXECSQLOPENemployee_cursorUSING:pattern;示例2–来自过程的示例:BEGINDECLAREcur_employeeCURSORFORSELECTSurnameFROMEmployees;DECLAREnameCHAR(40);OPENcur_employee;LOOPFETCHNEXTcur_employeeintoname;.
.
.
ENDLOOPCLOSEcur_employee;END用法缺省情况下,在当前事务(COMMIT或ROLLBACK)结束时会自动关闭所有游标.
可选的WITHHOLD子句使游标对后面的事务保持打开.
游标一直保持打开,直到当前连接结束或执行了显式CLOSE语句.
终止连接时自动关闭游标.
游标位于第一行之前.
请参见《系统管理指南第二卷》>"使用过程和批处理".

当打开游标时,由游标声明的FORREADONLY查看声明该游标的表的版本,而不是在首次执行FETCH时查看表的版本.
USINGDESCRIPTORsqlda-name、host-variable和BLOCKn格式仅适用于嵌入式SQL.
如果游标名称是由标识符或字符串指定的,则相应的DECLARECURSOR语句在C程序中必须出现在OPEN之前;如果游标名称是由宿主变量指定的,则DECLARECURSOR语句必须在OPEN语句之前执行.
可选USING子句指定绑定到已为其声明游标的SELECT语句中占位符绑定变量的宿主变量.
成功执行OPEN语句之后,SQLCA(SQLIOESTIMATE)的sqlerrd[3]字段中将填入读取查询的所有行所需的输入/输出操作次数的一个估计值.
此外,SQLCA(SQLCOUNT)的sqlerrd[2]字段将填入游标中的实际行数(大于或等于0的值)或其估计值(绝对值为估计值的负数).
如果数据库服务器不统计行数即可计算出该值,则sqlerrd[2]字段就是实际行数.
标准SQL—符合ISO/ANSISQL标准.
Sybase-AdaptiveServerEnterprise支持简单的OPENcursor-name语法.
AdaptiveServerEnterprise存储过程不支持任何其它子句.
OpenClient/OpenServer支持USING描述符或主机名变量语法.
SQL语句246SybaseIQ权限必须有SELECT语句中所有表的SELECT权限,或者有CALL语句中的过程的EXECUTE权限.
当游标位于CALL语句上时,OPEN导致过程一直执行,直到遇到第一个结果集(不含INTO子句的SELECT语句)为止.
如果该过程结束时未找到任何结果集,则会设置SQLSTATE_PROCEDURE_COMPLETE警告.
另请参见CLOSE语句[ESQL][SP](第59页)DECLARECURSOR语句[ESQL][SP](第155页)FETCH语句[ESQL][SP](第188页)PREPARE语句[ESQL](第251页)RESUME语句(第267页)OUTPUT语句[InteractiveSQL]将当前查询结果写入文件.
语法OUTPUTTOfilename[APPEND][VERBOSE][FORMAToutput-format][ESCAPECHARACTERcharacter][DELIMITEDBYstring][QUOTEstring[ALL]][COLUMNWIDTHS(integer,…)][HEXADECIMAL{ON|OFF|ASIS}][ENCODINGencoding][WITHCOLUMNNAMES]参数output-format:–TEXT|FIXED|HTML|SQL|XMLencoding:–string或identifier示例示例1–将Employees表的内容放在文本文件中:SELECT*FROMEmployees;OUTPUTTOemployees.
txtFORMATTEXT示例2–将Employees表的内容放置在现有文件的末尾,同时还在此文件中包含有关查询的所有消息:SQL语句参考:语句和选项247SELECT*FROMEmployees;OUTPUTTOemployees.
txtAPPENDVERBOSE示例3–导出包含嵌入式换行符的值.
换行符的数值为10,在SQL语句中可以用字符串'\x0a'代替该值.
执行具有HEXADECIMALON的语句:SELECT'line1\x0aline2';OUTPUTTOfile.
txtHEXADECIMALON将会得到一个文件,其中的一行包含下列文字:line10x0aline2执行具有HEXADECIMALOFF的相同语句:line1\x0aline2如果将HEXADECIMAL设置为ASIS,您会得到含有两行的文件:'line1line2'使用ASIS时生成两行,这是因为已导出的嵌入式换行符没有转换成两位数的十六进制形式,也没有前缀.
用法OUTPUT语句将当前查询所检索的信息复制到文件中.
可以使用可选的FORMAT子句指定输出格式.
如果未指定FORMAT子句,则使用InteractiveSQLOUTPUT_FORMAT选项设置.
当前查询为SELECT或LOADTABLE语句,生成了显示在"结果"窗格的"结果"选项卡上的信息.
如果当前查询不存在,则OUTPUT语句将报告错误.
注意:OUTPUT在向另一个应用程序提供查询的结果或报告时尤为有用,但对于批量操作不建议使用该语句.
对于大容量数据移动,请使用SELECT语句的ASCII和BINARY数据提取功能.
提取功能提供更好的大规模数据移动性能,并创建可用于负载的输出文件.
APPEND—此可选关键字用于将查询结果附加到现有输出文件的末尾,但不覆盖文件以前的内容.
如果不使用APPEND子句,缺省情况下OUTPUT语句将覆盖输出文件的内容.
当输出格式为TEXT、FIXED或SQL时,APPEND关键字有效.
VERBOSE—当含有可选的VERBOSE关键字时,有关查询的错误消息、用于选择数据的SQL语句和数据本身写入输出文件.
如果省略VERBOSE(缺省设置),则只将数据写入文件.
当输出格式为TEXT、FIXED或SQL时,VERBOSE关键字有效.
FORMAT-允许的输出格式包括:TEXT—输出TEXT格式的文件,且文件中每行代表一数据行.
所有值都用逗号分隔,字符串用撇号(单引号)引起来.
可以使用DELIMITEDBY和QUOTE子句更改分隔符和引号字符串.
如果在QUOTE子句中指定ALL,则所有的值(不仅是字符串)都将用引号引起来.
TEXT是缺省的输出格式.
SQL语句248SybaseIQ还可以使用其它三种特殊序列.
两个字符\n代表换行符;\\代表单个\;而序列\xDD代表具有十六进制代码DD的字符.
如果要导出具有字符串返回值的Java方法,则必须使用HEXADECIMALOFF子句.
FIXED-输出结果是每列都有固定宽度的固定格式.
可以使用COLUMNWIDTHS子句为每一列指定宽度.
此格式不输出任何列标题.
如果省略COLUMNWIDTHS,则每列的宽度均由该列的数据类型计算得出,并且大小足以存放该数据类型的任意值.
例外是LONGVARCHAR和LONGBINARY数据缺省为32KB.
HTML-输出结果是超文本标记语言格式.
SQL-输出为重新创建表中信息所需的InteractiveSQLINPUT语句.
注意:SybaseIQ不支持INPUT语句.
您需要将此语句编辑为有效的LOADTABLE(或INSERT)语句以使用它将数据装载回文件.
XML-输出结果是以UTF-8编码且包含嵌入式DTD的XML文件.
二进制值以CDATA块进行编码,二进制数据显示为两位数十六进制字符串.
LOADTABLE语句不接受将XML作为文件格式.
ESCAPECHARACTER-以十六进制代码和符号存储的字符的缺省转义字符是反斜杠(\),例如\x0A是换行符.
使用ESCAPECHARACTER子句可以对此缺省值进行更改.
例如,要将感叹号用作转义字符,请输入:.
.
.
ESCAPECHARACTER'!
'DELIMITEDBY—DELIMITEDBY子句仅用于TEXT输出格式.
分隔符字符串放置在列之间(缺省为逗号).
QUOTE—QUOTE子句仅用于TEXT输出格式.
引号字符串放置在字符串值的两边.
缺省值为单引号字符.
如果在QUOTE子句中指定ALL,则引号字符串将被置于所有值的两边,而不仅仅是字符串的两边.
COLUMNWIDTHS-COLUMNWIDTHS子句用于为FIXED格式的输出指定列宽.
HEXADECIMAL—HEXADECIMAL子句指定如何仅为TEXT格式卸载二进制数据.
设置为ON时,以0xabcd格式卸载二进制数据.
设置为OFF时,二进制数据在卸载时转义(\xab\xcd).
设置为ASIS,值按原样写入,即不发生任何转义,即使值中包含控制字符也是如此.
ASIS对包含格式设置字符(如制表符或回车)的文本非常有用.
ENCODING—指定用于写入文件的编码.
ENCODING子句只能用于TEXT格式.
如果未指定encoding,InteractiveSQL按如下方式确定用于写文件的代码页,列表中位置靠前的代码页值优先于位置靠后的值:使用DEFAULT_ISQL_ENCODING选项指定的代码页(如果设置此选项)运行InteractiveSQL的计算机的缺省代码页副作用SQL语句参考:语句和选项249在InteractiveSQL中,"结果"选项卡仅显示当前查询的结果.
所有先前的查询结果都替换为当前查询结果.
标准SQL-ISO/ANSISQL语法的供应商扩展.
Sybase-不适用.
权限无另请参见SELECT语句(第277页)DEFAULT_ISQL_ENCODING选项[InteractiveSQL](第362页)PARAMETERS语句[InteractiveSQL]指定InteractiveSQL(dbisql)命令文件的参数.
语法PARAMETERSparameter1,parameter2,…示例示例1–以下dbisql命令文件具有两个参数:PARAMETERSdepartment_id,file;SELECTSurnameFROMEmployeesWHEREDepartmentID={department_id}>#{file}.
dat;用法PARAMETERS指定命令文件中有多少个参数,并命名这些参数以便将来可在命令文件中引用它们.
通过将参数放到命令文件中您要替代命名参数的位置来引用参数:{parameter1}括号和参数名之间不能有空格.
如果用少于所需数目的参数调用命令文件,dbisql将提示您提供缺少参数的值.
SQL语句250SybaseIQ标准SQL-ISO/ANSISQL语法的供应商扩展.
Sybase-不适用.
权限无另请参见READ语句[InteractiveSQL](第258页)PREPARE语句[ESQL]准备要稍后执行的语句或用于游标的语句.
语法PREPAREstatement-nameFROMstatement[FOR{READONLY|UPDATE[OFcolumn-name-list]}].
.
.
[DESCRIBEdescribe-typeINTO[[SQL]DESCRIPTOR]descriptor].
.
.
[WITHEXECUTE]参数statement-name:–标识符或宿主变量statement:–字符串或宿主变量describe-type:–{ALL|BINDVARIABLES|INPUT|OUTPUT|SELECTLIST}.
.
.
{LONGNAMES[[OWNER.
]TABLE.
]COLUMN]|WITHVARIABLERESULT}示例示例1–准备简单查询:EXECSQLPREPAREemployee_statementFROM'SELECTSurnameFROMEmployees';用法PREPARE语句准备statement中指定的SQL语句,并使准备好的语句与statement-name关联.
在执行语句或者打开游标(如果是SELECT语句的话)时,引用上述的语句名称.
statement-name可以是自动包含的sqlca.
h头文件中定义的a_sql_statement_number类型的宿主变量.
如果用标识符替换statement-name,则每个模块只有一个语句可以使用该statement-name进行.
SQL语句参考:语句和选项251如果用宿主变量替换statement-name,它的类型必须是shortint.
sqlca.
h中含有此类型的类型定义,名为a_sql_statement_number.
SQL预处理器识别此类型,因此可在DECLARE节中使用.
在执行PREPARE语句期间,宿主变量由数据库填充,不必由程序员进行初始化.
FORUPDATE|FORREADONLY定义游标可更新性,如果游标使用该语句.
FORREADONLY游标不能用于UPDATE(定位)或DELETE(定位)操作中.
缺省值为FORREADONLY.
为响应指定FORUPDATE的游标的任何请求,SybaseIQ提供了对值敏感的游标或敏感性未定型的游标.
不敏感的游标或者敏感性未定型游标不能更新.
如果使用了DESCRIBEINTODESCRIPTOR,则会在指定的描述符中对准备好的语句进行说明.
说明类型可能是DESCRIBE语句所允许的任何说明类型.
如果使用了WITHEXECUTE子句,则当且仅当此语句不是CALL或SELECT语句且不含任何宿主变量时才会执行.
成功执行此语句后,立即将其删除.
如果PREPARE和DESCRIBE(如果有)成功,但此语句无法执行,则会设置警告"SQLCODE111,SQLSTATE01W08",但并不删除此语句.
DESCRIBEINTODESCRIPTOR和WITHEXECUTE子句可能会提高性能,因为它们减少所需的客户端/服务器通信.
WITHVARIABLERESULT子句用于描述可以有一个以上结果集(具有不同列数或列类型)的过程.
如果使用WITHVARIABLERESULT,则数据库服务器将DESCRIBE子句之后的SQLCOUNT值设置为下列值之一:0—结果集可能更改:应该在每个OPEN语句后重新描述过程调用.
1—结果集是固定的.
不需要重新描述.
可以准备以下语句:ALTERCALLCOMMENTONCREATEDELETEDROPGRANTINSERTREVOKESELECTSETOPTION支持准备COMMIT、PREPARETOCOMMIT和ROLLBACK语句是为了兼容性.
但是,Sybase建议用静态嵌入式SQL执行所有的事务管理操作,因为某些应用程序环境可能要求使用它.
另外,其它嵌入式SQL系统不支持动态事务管理操作.
SQL语句252SybaseIQ注意:请确保在使用后用DROP删除相应语句.
否则,不释放与此语句关联的内存.
副作用此前使用同一名称准备的所有语句都会丢失.
标准SQL—符合ISO/ANSISQL标准.
Sybase—受OpenClient/OpenServer支持.
权限无另请参见DECLARECURSOR语句[ESQL][SP](第155页)DESCRIBE语句[ESQL](第166页)DROP语句(第170页)EXECUTE语句[ESQL](第182页)OPEN语句[ESQL][SP](第245页)PRINT语句[T-SQL]在数据库服务器的消息窗口中显示一则消息.
语法PRINTformat-string[,arg-list]示例示例1–在服务器消息窗口中显示一则消息:CREATEPROCEDUREprint_testASPRINT'Procedurecalledsuccessfully'下面的语句向客户端返回字符串"过程已成功调用":EXECUTEprint_test示例2–使用PRINT语句中的占位符;执行过程内的以下语句:DECLARE@var1INT,@var2INTSELECT@var1=3,@var2=5PRINT'Variable1=%1!
,Variable2=%2!
',@var1,@var2示例3–使用RAISERROR禁止连接:SQL语句参考:语句和选项253CREATEprocedureDBA.
login_check()begin//Allowamaximumof3concurrentconnectionsIF(db_property('ConnCount')>3)thenraiserror28000'User%1!
isnotallowedtoconnect--therearealready%2!
usersloggedon',currentuser,cast(db_property('ConnCount')asint)-1;ELSEcallsp_login_environment;endif;endgograntexecuteonDBA.
login_checktoPUBLICgosetoptionPUBLIC.
Login_procedure='DBA.
login_check'go有关禁止连接的其它方法,请参见"LOGIN_PROCEDURE选项"或《参考:构件块、表和过程》>"系统过程">"系统存储过程">"sp_iqmodifylogin过程".
用法如果从OpenClient应用程序或JDBC应用程序连接,则PRINT语句将消息返回到客户端窗口.
如果从嵌入式SQL或ODBC应用程序连接,则消息显示在数据库服务器窗口上.
对于可选参数列表中的参数,格式字符串可以包含占位符.
这些占位符的形式为%nn!
,其中nn是介于1和20之间的整数.
标准SQL—ISO/ANSISQL语法的Transact-SQL扩展.
Sybase-受AdaptiveServerEnterprise支持.
权限必须连接到数据库.
另请参见MESSAGE语句(第242页)LOGIN_PROCEDURE选项(第395页)SQL语句254SybaseIQPUT语句[ESQL]在指定的游标中插入行.
语法PUTcursor-name[USINGDESCRIPTORsqlda-name|FROMhostvar-list][INTO{DESCRIPTORinto-sqlda-name|into-hostvar-list}][ARRAY:nnn]参数cursor-name:–identifier或hostvarsqlda-name:–identifierhostvar-list:–可以包含指示符变量示例示例1–在嵌入式SQL中使用PUT:EXECSQLPUTcur_employeeFROM:EmployeeID,:Surname;用法在指定的游标中插入行.
列的值从第一个SQLDA或宿主变量列表中获取,与INSERT语句中的列(对于INSERT游标)或选择列表中的列(对于SELECT游标)是一一对应的关系.
PUT语句只能在满足以下条件的INSERT或SELECT语句的游标上使用:此语句的FROM子句引用单个表,或引用由单个基表组成的可更新视图.
如果SQLDA中的sqldata指针为空指针,则表示没有为该列指定任何值.
如果有DEFAULTVALUE与该列关联,则使用缺省值;否则使用空值.
第二个SQLDA或宿主变量列表包含PUT语句的结果.
可选的ARRAY子句可用于执行大范围放入,即一次插入多行,这样可以提高性能.
值nnn是要插入的行数.
SQLDA必须包含nnn*(columnsperrow)变量.
第一行放在SQLDA变量0和(columnsperrow)-1之间,依此类推.
SQL语句参考:语句和选项255注意:对于滚动(对值敏感)游标,如果新行与WHERE子句匹配并且键集游标未完成填充,则显示插入的行.
对于动态游标,如果插入的行与WHERE子句匹配,则可能显示该行.
不敏感游标不能更新.
有关将LONGVARCHAR或LONGBINARY值放进数据库的信息,请参见"SET语句[ESQL]".
副作用当用对值敏感的游标(即键设置驱动的游标)插入行时,插入的行出现在结果集的末尾处,即使它们和查询的WHERE子句不匹配,或者当ORDERBY子句将它们正常地放置在结果集的其它位置时也是如此.
有关详细信息,请参见"SQLAnywhereServer-编程">"在应用程序中使用SQL">"SQLAnywhere游标">"对值敏感的游标".
注意:此参考指向SQLAnywhere文档.
标准SQL—符合ISO/ANSISQL标准.
Sybase—受OpenClient/OpenServer支持.
权限必须有INSERT权限.
另请参见DELETE(定位)语句[ESQL][SP](第165页)INSERT语句(第211页)SET语句[ESQL](第285页)UPDATE语句(第304页)UPDATE(定位)语句[ESQL][SP](第308页)RAISERROR语句[T-SQL]发出错误信号并向客户端发送消息.
语法RAISERRORerror-number[format-string][,arg-list]示例示例1–引发错误99999(该错误在用户定义的错误范围内)并向客户端发送消息:SQL语句256SybaseIQRAISERROR99999'Invalidentryforthiscolumn:%1!
',@val用法RAISERROR语句允许发出用户定义的错误并向客户端发送消息.
error-number是大于17000的五位整数.
错误号存储在全局变量@@error中.
error-number和format-string参数之间没有逗号.
逗号后的第一项解析为参数列表中的第一项.
如果未提供format-string或者其为空,则使用错误号在系统表中查找错误消息.
AdaptiveServerEnterprise从SYSMESSAGES表获取消息17000-19999.
在SybaseIQ中,此表为空视图,因此这个范围内的错误消息应该提供格式字符串.
错误号大于或等于20000的消息从SYS.
SYSUSERMESSAGES表中获取.
format-string的长度最大为255字节.
这与AdaptiveServerEnterprise中相同.
SQLServer或AdaptiveServerEnterpriseRAISERROR语句支持的扩展值在SybaseIQ中不受支持.
对于可选参数列表中的参数,格式字符串可以包含占位符.
这些占位符的形式为%nn!
,其中nn是介于1和20之间的整数.
中间RAISERROR状态和代码信息在过程终止后会丢失.
如果在返回时伴随RAISERROR发生了错误,则返回错误信息,而RAISERROR信息将丢失.
应用程序可以通过在不同的执行点检查@@error全局变量来查询中间RAISERROR状态.
标准SQL—ISO/ANSISQL语法的Transact-SQL扩展.
Sybase-受AdaptiveServerEnterprise支持.
权限必须连接到数据库.
另请参见CONTINUE_AFTER_RAISERROR选项[TSQL](第345页)ON_TSQL_ERROR选项[TSQL](第412页)SQL语句参考:语句和选项257READ语句[InteractiveSQL]从文件中读取InteractiveSQL(dbisql)语句.
语法READfilename[parameter]…示例示例1–READstatus.
rpt'160'示例2–READbirthday.
sql[>='1988-1-1'][READtest1.
sql123'041028'PAR1Value:123PAR2Value:041028注意:第二个参数值041028必须用引号引起来,因为v_par2声明为字符数据类型.
用法READ语句从指定的文件中读取dbisql语句序列.
此文件可以包含任何有效的dbisql语句,包括可以嵌套至任何深度的其它READ语句.
当查找命令文件时,dbisql首先搜索当前目录,再搜索环境变量SQLPATH中指定的目录,然后搜索环境变量PATH中指定的目录.
如果命名文件没有文件扩展名,dbisql还会搜索每个目录以查找具有扩展名.
sql的相同文件名.
SQL语句258SybaseIQ可以在命令文件的名称后面列出参数.
这些参数对应于语句文件开头处PARAMETERS语句上指定的参数(请参见"PARAMETERS语句").
dbisql随后会在源文件中包含以下内容的位置替换相应参数:{parameter-name}其中parameter-name是相应参数的名称.
传递给命令文件的参数可以是标识符、数字、带引号的标识符或字符串.
如果用引号将参数括起来,则在替换时引号也放到文本中.
不是标识符、数字或字符串(包含空格或制表符)的参数必须用中括号([])括起来.
这允许在命令文件中执行任意文本替换.
作为参数传递到READ语句的SQL字符文字(包括字符数据)应用引号引起来.
如果没有足够的参数传递到命令文件,dbisql会提示您提供缺少参数的值.
READ语句也支持ENCODING子句,可让您指定用于读取文件的编码.
请参见"SQLAnywhereServer-SQL参考">"SQL语句">"SQL语句">"READ语句[InteractiveSQL]".
注意:此参考指向SQLAnywhere文档.
标准SQL-ISO/ANSISQL语法的供应商扩展.
Sybase-不适用.
权限无另请参见DEFAULT_ISQL_ENCODING选项[InteractiveSQL](第362页)PARAMETERS语句[InteractiveSQL](第250页)RELEASESAVEPOINT语句释放当前事务内的保存点.
语法RELEASESAVEPOINT[savepoint-name]用法savepoint-name是在当前事务内的SAVEPOINT语句上指定的标识符.
如果省略savepoint-name,则释放最近的保存点.
SQL语句参考:语句和选项259有关保存点的说明,请参见《系统管理指南第二卷》>"使用过程和批处理".
释放保存点不执行任何类型的COMMIT,它只是从当前活动保存点的列表中删除相应保存点.
标准SQL—ISO/ANSISQL语法的供应商扩展.
Sybase—不受AdaptiveServerEnterprise支持.
通过使用嵌套事务,可以采用AdaptiveServerEnterprise兼容的方式实现类似的功能.
权限当前事务中必须有相应的SAVEPOINT.
另请参见ROLLBACKTOSAVEPOINT语句(第273页)SAVEPOINT语句(第275页)REMOVE语句从数据库删除类、软件包或JAR文件.
删除的类不再可供用作变量类型.
语法REMOVEJAVAclasses_to_remove参数classes_to_remove:–{CLASSjava_class_name[,java_class_name]…|PACKAGEjava_package_name[,java_package_name]…|JARjar_name[,jar_name]…[RETAINCLASSES]}jar_name:–character_string_expression示例示例1–从当前数据库中删除名为"Demo"的Java类:REMOVEJAVACLASSDemo用法任何要删除的类、软件包或JAR必须已安装.
java_class_name—要删除的一个或多个Java类的名称.
这些类必须是当前数据库中已安装的类.
SQL语句260SybaseIQjava_package_name—要删除的一个或多个Java软件包的名称.
这些软件包的名称必须为当前数据库中的软件包的名称.
jar_name—最大长度为255的字符串值.
每个jar_name必须与当前数据库中保留的JAR的jar_name相等.
jar_name的等同性由SQL系统的字符串比较规则确定.
如果指定了JAR.
.
.
RETAINCLASSES,则指定的JAR将不再保留在数据库中,并且保留的类没有与之关联的JAR.
如果指定了RETAINCLASSES,则这是REMOVE语句的唯一操作.
标准SQL—ISO/ANSISQL语法的供应商扩展.
Sybase—不受AdaptiveServerEnterprise支持.
通过使用嵌套事务,可以采用AdaptiveServerEnterprise兼容的方式实现类似的功能.
权限必须拥有DBA权限或必须拥有相应对象.
RESIGNAL语句重新发出异常情况的信号.
语法RESIGNAL[exception-name]示例示例1–下面这段代码向应用程序返回除"未找到列"外的所有异常:.
.
.
DECLARECOLUMN_NOT_FOUNDEXCEPTIONFORSQLSTATE'52003';.
.
.
EXCEPTIONWHENCOLUMN_NOT_FOUNDTHENSETmessage='Columnnotfound';WHENOTHERSTHENRESIGNAL;用法在异常处理程序中,使用RESIGNAL可在异常仍处于活动状态时退出复合语句,或停止报告另一个指定的异常.
异常将由其它异常处理程序处理或返回给应用程序.
异常处理程序在RESIGNAL之前的任何操作都被撤消.
SQL语句参考:语句和选项261标准SQL—符合ISO/ANSISQL标准.
Sybase—在AdaptiveServerEnterprise中不受支持.
Transact-SQL过程中的错误处理是用RAISERROR语句完成的.
权限无另请参见BEGIN……END语句(第49页)SIGNAL语句(第295页)RESTORE语句从一个或多个存档设备恢复SybaseIQ数据库备份.
语法语法1RESTOREDATABASE'db_file'FROM'archive_device'[FROM'archive_device']……[CATALOGONLY]…[KEYkey_spec]…[[RENAMElogical-dbfile-nameTO'new-dbspace-path'].
.
.
|VERIFY[COMPATIBLE]]语法2RESTOREDATABASE'database-name'[restore-option.
.
.
]FROM'archive_device'.
.
.
参数db_file:–要恢复的数据库的相对路径或绝对路径.
可以是初始位置,也可以是目录存储文件的新位置.
key_spec:–用引号括起来的包含大小写字符、数字、字母和特殊字符的字符串.
防止该键受到命令解释器的解释或更改可能非常有必要.
restore-option:–READONLYdbspace-or-file[,…]KEYkey_specRENAMEfile-nameTOnew-file-path.
.
.
SQL语句262SybaseIQ示例示例1–此UNIX示例从SunSolaris平台上的磁带设备/dev/rmt/0和/dev/rmt/2中恢复iqdemo数据库.
在Solaris上,设备名后面的字母n指定"关闭时不回绕".
若要随RESTORE指定此功能,请使用适用于您的UNIX平台的命名约定.
(Windows不支持此功能.
)RESTOREDATABASE'iqdemo'FROM'/dev/rmt/0n'FROM'/dev/rmt/2n'示例2–恢复名为marvin的加密数据库,该数据库用密钥is!
seCret进行了加密:RESTOREDATABASE'marvin'FROM'marvin_bkup_file1'FROM'marvin_bkup_file2'FROM'marvin_bkup_file3'KEY'is!
seCret'示例3–以下示例显示了BACKUP语句和两种可能的RESTORE语句的语法.
(此示例使用iqdemo数据库中的对象仅是为了进行说明.
请注意,iqdemo包括一个名为iq_main的用户数据库空间示例,您的数据库中可能不包括该示例.
)给定以下BACKUP语句:BACKUPDATABASEREADONLYDBSPACESiq_mainTO'/system1/IQ15/demo/backup/iqmain'可以使用下面任意一种RESTORE语句来恢复数据库空间iq_main:RESTOREDATABASE'iqdemo'READONLYDBSPACESiq_mainFROM'/system1/IQ15/demo/backup/iqmain'或RESTOREDATABASE'iqdemo'FROM'/system1/IQ15/demo/backup/iqmain'选择性备份会备份所有READWRITE数据库空间或特定只读数据库空间或dbfile.
选择性备份是完整备份或增量备份的子类型.
注意:可以执行READONLY选择性备份,并从该备份中恢复所有对象(如以上第二个示例中所示).
也可以执行包括全部内容的备份,并选择性地恢复只读文件和数据库空间.

可以执行多个只读文件和数据库空间的READONLY选择性备份,并选择性地恢复只读文件和数据库空间的子集.
请参见"权限".
只有只读文件自备份以来尚未发生更改的情况下,才可以恢复只读备份.
一旦再次将数据库空间设置为读写模式,只读备份将无效,除非将数据库的整个读写部分恢复为只读数据库空间原为只读模式的点上.
SQL语句参考:语句和选项263Sybase建议您坚持选择性或非选择性备份子类型中的一种.
如果必须要从非选择性备份转换为选择性备份(反之亦然),请始终在转换为新的子类型之前执行一次非选择性完整备份以确保涵盖了所有变更.
示例4–在不执行任何写入操作的情况下使用VERIFY子句来验证数据库存档的语法:RESTOREDATABASEFROM'/sys1/dump/dmp1'FROM'/sys1/dump/dmp2'VERIFY在使用验证时,请指定不同的数据库名以避免出现"数据库名不唯一"错误.
例如,如果原始数据库为iqdemo.
db,请改用iq_demo_new.
db:RESTOREDATABASEiqdemo_new.
dbFROMiqdemo.
bkpVERIFY用法RESTORE命令要求DBA对数据库独占访问.
通过对DBA设置-gd开关可以获得此独占访问权,这是启动服务器引擎时的缺省设置.
在启动数据库之前发出RESTORE命令(必须连接到utility_db数据库).
完成对相应类型的备份指定RESTORE命令之后,该数据库即可使用.
数据库将处于上次恢复备份后第一个隐式CHECKPOINT结束时所存在的状态.
现在,可以指定STARTDATABASE以允许其他用户访问恢复后的数据库.
包括所有子句的完整RESTORE命令的最大大小是32KB.
当恢复至原始设备时,请确保设备的容量足以容纳您要恢复的数据库空间.
如果裸设备大小不足以恢复数据库空间,IQRESTORE会检查裸设备的大小并返回错误.
请参见《系统管理指南第一卷》>"数据备份、恢复和存档">"恢复数据库">"RESTORE语句">"移动数据库文件">"恢复至原始设备".
BACKUP允许指定完整备份或增量备份.
有两种增量备份.
INCREMENTAL仅备份那些自上次执行任意类型(增量或完全)的备份之后已发生更改并已提交的块.

INCREMENTALSINCEFULL备份自上次完全备份后进行了更改的所有块.
如果在用RESTORE执行完全备份恢复后执行一次或多次增量备份(任一类型),则在连续的RESTORE命令之间不允许对数据库进行任何更改.
此规则防止从需要进行崩溃恢复的数据库或已进行更改的数据库的增量备份执行RESTORE.
您仍可以使用RESTORE从完全备份恢复以覆盖这样的数据库.
在开始完全恢复之前,您必须删除以下两个文件:目录存储文件(缺省名为dbname.
db)和事务日志文件(缺省名为dbname.
log).
如果对增量备份进行恢复,则RESTORE可以确保以恰当的顺序访问备份介质集.
此顺序为:首先恢复最后的完全备份磁带集,接着是第一个增量备份磁带集,然后是更近一些的磁带集,以此类推,最后是最近的增量备份磁带集.
如果DBA生成了INCREMENTALSINCEFULL备份,则只需要完全备份磁带集和最近的INCREMENTALSINCEFULL备份磁带集;不过,如果自执行INCREMENTALSINCEFULL备份后又执行了INCREMENTAL备份,则还必须应用此备份.
SQL语句264SybaseIQSybaseIQ确保恢复顺序是正确的,否则它会显示错误.
在恢复期间发生任何其它错误均会导致将数据库标记为损坏并将使数据库不可用.
若要清除损坏的数据库,请从完全备份执行RESTORE,然后再恢复任一附加增量备份.
由于很可能是这些备份之一损坏,因此您可能需要忽略较晚的备份集而使用较早的备份集.
要从存档备份恢复只读文件或数据库空间,当发出RESTORE语句时,数据库可以正在运行,管理员可以连接到数据库.
如果只读文件路径名与数据库系统表信息匹配,则无需与备份中的名称相匹配.
数据库必须处于未运行状态,才能对READWRITEFILESONLY或所有文件备份执行FULL、INCREMENTALSINCEFULL或INCREMENTAL恢复.
要恢复只读文件的备份,数据库可以正在运行,也可以未在运行.
当恢复只读数据库空间中的特定文件时,该数据库空间必须处于脱机状态.
当恢复读写数据库空间中的只读文件时,该数据库空间可处于联机或脱机状态.
恢复将关闭只读文件,恢复文件,并在恢复结束时重新打开这些文件.
可使用选择性恢复来恢复只读数据库空间,条件是该数据库空间仍处于相同的只读状态.
FROM-指定要用于恢复的archive_device的名称,并用单引号分隔.
如果要使用多个存档设备,请使用单独的FROM子句指定它们.
不允许使用逗号分隔的列表.
存档设备必须是不同的.
FROM子句的数量决定了与输出设备有关的并行SybaseIQ尝试的数量.
使用备份/还原APIDLL实现可以指定要在打开存档设备时传递给DLL的参数.
对于第三方实现,archive_device字符串具有以下格式:'DLLidentifier::vendor_specific_information'以下是一个特定示例:'spsc::workorder=12;volname=ASD002'archive_device字符串的长度最长为1023个字节.
DLLidentifier部分的长度必须为1到30个字节且只能包含字母数字和下划线字符.
字符串的vendor_specific_information部分将传递给第三方实现,而不检查其内容.
注意:只有某些第三方产品才可用SybaseIQ通过使用此语法进行认证.
有关其它用法说明或限制,请参见"发行公告".
在使用任意第三方产品备份SybaseIQ数据库之前,请确保该产品已获得认证.
请参见"发行公告"或"技术文档"中SybaseIQ产品的Sybase认证报告.
对于备份/恢复API的Sybase实现,无需指定磁带设备名或文件名以外的信息.
不过,如果您使用的是磁盘设备,则必须在RESTORE上指定与执行备份时给定的数量相同的存档设备;否则,您用于执行恢复的设备的数量会与用于执行备份的设备的数量不同.
指定UNIX系统的非回绕磁带设备的SybaseAPIDLL存档设备的特定示例如下:'/dev/rmt/0n'SQL语句参考:语句和选项265CATALOGONLY—仅从存档介质恢复备份标头记录.
RENAME—将一个或多个SybaseIQ数据库文件恢复到一个新位置.
指定每个您要移动的dbspace-name(按其在SYSFILE表中的显示方式).
将new-dbspace-path指定为该数据库空间的新原始分区,或者新的完整路径名或相对路径名.
如果创建数据库文件时使用的是相对路径,则缺省情况下这些文件将恢复至相对于目录存储文件(SYSTEM数据库空间)的位置,并且不需要使用重命名子句.
如果创建数据库文件时使用的是绝对路径且未为文件指定重命名子句,则将其恢复至其初始位置.
RENAME子句中的相对路径名的工作方式与创建数据库或数据库空间时相同:主IQ存储数据库空间、临时存储数据库空间和消息日志将恢复至db_file(目录存储)位置的相对位置;用户创建的IQ存储数据库空间将恢复至包含主IQ数据库空间的目录的相对目录.
请勿使用RENAME子句移动保存目录存储的SYSTEM数据库空间.
若要移动目录存储及任何相对于它创建且未在RENAME子句中指定的文件,请在db_file参数中指定新位置.
VERIFY[COMPATIBLE]—指令服务器检验指定的SybaseIQ数据库备份存档以进行完整、增量、基于完整的增量或虚拟备份.
备份必须是SybaseIQ12.
6版或更高版本.
检验过程会检查指定的存档有无恢复过程检查的错误,但不执行写入操作.
所有状态信息和检测到的错误都会被写入服务器日志文件中.
不能将RENAME子句与VERIFY子句一起使用;将报告错误.
备份检验过程可以在数据库所在主机之外的主机上运行.
您必须具有DBA、BACKUP或OPERATOR权限才可运行RESTOREVERIFY.
如果在使用VERIFY时指定了COMPATIBLE子句,则会对现有的数据库文件进行增量存档的兼容性检查.
如果数据库文件不存在于调用RESTORE…VERIFYCOMPATIBLE的系统上,就会返回错误.
如果在检验完整备份时指定了COMPATIBLE,此关键字就会被忽略;在恢复完整备份时不需要进行兼容性检查.
必须具有数据库和日志文件(.
db和.
log),才能验证完整备份中只读数据库空间的备份.
如果没有这些文件,就请在不使用READONLYdbspace子句的情况下运行RESTORE…VERIFY来验证整个备份.
请参见《系统管理指南第一卷》>"数据备份、恢复和存档">"恢复数据库">"RESTORE语句">"在恢复后验证数据库".
注意:备份存档的检验不同于数据库一致性检查程序(DBCC)验证模式(sp_iqcheckdb'verify.
.
.
').
RESTOREVERIFY验证备份存档的一致性,以确保它可以恢复,而DBCC验证数据库数据的一致性.
在开始备份之前先运行sp_iqcheckdb'verify.
.
.
'.
如果备份了不一致的数据库,然后从同一备份存档进行恢复,则数据会继续处于不一致状态,即使RESTOREVERIFY报告检验成功也是如此.
SQL语句266SybaseIQ其它RESTORE问题:RESTORE恢复至磁盘时,不支持将原始设备用作存档设备.
SybaseIQ在使用磁带之前不会回绕磁带;当回绕磁带设备时,它只是在使用磁带之后回绕磁带.
必须在启动RESTORE之前将每个磁带放在SybaseIQ数据的开始处.
在执行BACKUP和RESTORE操作过程中,如果SybaseIQ无法打开存档设备(例如,当它需要装载介质时)并且ATTENDED选项为ON,则SybaseIQ会等待十秒钟,以让您将下一磁带放入驱动器然后重试.
它将无限期地继续这些尝试,直至成功或使用Ctrl+C终止操作.
如果按Ctrl+C,RESTORE将失败并将数据库返回至其在恢复开始前的状态.
如果使用磁盘条带化,则经过分条的磁盘将被视为单个设备.
在恢复过程中,SYSTEM数据库空间的SYSFILE系统表中的file_name列不会更新.
对于SYSTEM数据库空间,创建数据库时,file_name列始终显示其名称.
SYSTEM数据库空间的文件名是数据库文件的名称.
另请参见《系统管理指南第一卷》>"数据备份、恢复和存档".
标准SQL—ISO/ANSISQL语法的供应商扩展.
Sybase—AdaptiveServerEnterprise不支持.
权限必须具有DBA权限.
当-gu服务器启动选项设置为值DBA(缺省值)时,具有SPACEADMIN权限的用户可以执行只读选择性恢复.
另请参见BACKUP语句(第44页)RESUME语句在查询后重新开始过程.
语法语法1RESUMEcursor-name语法2RESUME[ALL]SQL语句参考:语句和选项267参数cursor-name:–identifiercursor-name:–标识符或宿主变量示例示例1–嵌入式SQL示例:EXECSQLRESUMEcur_employee;和EXECSQLRESUME:cursor_var;示例2–dbisql例如:CALLsample_proc();RESUMEALL;用法RESUME语句重新执行返回结果集的过程.
该过程一直执行,直到遇见下一个结果集(不带INTO子句的SELECT语句)为止.
如果该过程结束时未找到任何结果集,则会设置SQLSTATE_PROCEDURE_COMPLETE警告.
使用RESUME重新开始SELECT语句的游标时,也会设置此警告.
注意:dbisqlc中支持语法1RESUME语句,但此语句在dbisql(InteractiveSQL)中无效或当使用SQLAnywhereJDBC驱动程序连接至数据库时无效.
dbisqlRESUME语句(语法2)重新开始当前过程.
如果未指定ALL,则执行RESUME将显示下一结果集,或者,如果不再返回任何结果集,则结束过程.
dbisqlRESUMEALL语句将遍历过程中的所有结果集而不显示这些结果集,然后结束过程.
这主要在测试过程时有用.
标准SQL—ISO/ANSISQL语法的供应商扩展.
Sybase—不受AdaptiveServerEnterprise支持.
权限游标在此前必须已打开.
另请参见DECLARECURSOR语句[ESQL][SP](第155页)SQL语句268SybaseIQRETURN语句无条件地退出函数或过程,并根据需要提供返回值.
RETURN之后的语句不再执行.
语法RETURN[(expression)]示例示例1–返回三个数字的乘积:CREATEFUNCTIONproduct(anumeric,bnumeric,cnumeric)RETURNSnumericBEGINRETURN(a*b*c);END示例2–计算三个数字的乘积:SELECTproduct(2,3,4)product(2,3,4)24示例3–避免执行复杂查询(如果这样做没有意义的话):CREATEPROCEDUREcustomer_products(incustomer_idintegerDEFAULTNULL)RESULT(idinteger,quantity_orderedinteger)BEGINIFcustomer_idNOTIN(SELECTIDFROMCustomers)ORcustomer_idISNULLTHENRETURNELSESELECTID,sum(SalesOrderItems.
Quantity)FROMProducts,SalesOrderItems,SalesOrdersWHERESalesOrders.
CustomerID=customer_idANDSalesOrders.
ID=SalesOrderItems.
IDANDSalesOrderItems.
ProductID=Products.
DGROUPBYProducts.
IDENDIFEND用法如果提供了expression,则expression的值作为函数或过程的值返回.
在函数中,表达式的数据类型应当与函数的RETURN的数据类型相同.
SQL语句参考:语句和选项269RETURN在过程中使用是为了与Transact-SQL兼容,并且它用于返回整数错误代码.
标准SQL—符合ISO/ANSISQL标准.
Sybase—Transact-SQL过程使用返回语句返回整数错误代码.
权限无另请参见BEGIN……END语句(第49页)CREATEPROCEDURE语句(第112页)REVOKE语句删除指定用户的权限.
语法语法1REVOKE{BACKUP|CONNECT|DBA|GROUP|INTEGRATEDLOGIN|KERBEROSLOGIN|MEMBERSHIPINGROUPuserid[,…]|MULTIPLEXADMIN|OPERATOR|PERMSADMIN|PROFILE|RESOURCE|SPACEADMIN|USERADMIN}|VALIDATE…FROMuserid[,…]语法2REVOKE{…ALL[PRIVILEGES]|ALTER|DELETE|INSERT|REFERENCE|SELECT[(column-nameUPDATE[(column-name,…)]}…ON[owner.
]table-nameFROMuserid[,…]语法3SQL语句270SybaseIQREVOKEEXECUTEON[owner.
]procedure-nameFROMuserid[,…]语法4REVOKECREATEONdbspace-nameFROMuserid[,…]示例示例1–阻止用户dave插入到Employees表中:REVOKEINSERTONEmployeesFROMdave示例2–撤消用户Jim的资源权限:REVOKERESOURCEFROMJim示例3–阻止用户dave更新Employees表:REVOKEUPDATEONEmployeesFROMdave示例4–撤消用户配置文件名Administrator的集成登录映射:REVOKEINTEGRATEDLOGINFROMAdministrator示例5–禁止Finance组执行sp_customer_list过程:REVOKEEXECUTEONsp_customer_listFROMfinance示例6–从数据库中删除用户IDfranw:REVOKECONNECTFROMfranw示例7–撤消用户Smith对数据库空间DspHist的CREATE特权:REVOKECREATEONDspHistFROMSmith示例8–从数据库中撤消用户IDfionat对数据库空间DspHist的CREATE权限:REVOKECREATEONDspHistFROMfionat用法REVOKE语句用于删除使用GRANT语句赋予的权限.
语法1用于撤消特殊的用户权限,语法2用于撤消表权限.
语法3用于撤消执行过程的权限.
REVOKECONNECT用于从数据库删除用户ID.
注意:使用系统过程(而不是GRANT和REVOKE)来添加和删除用户ID.
REVOKEGROUP自动撤消组内所有成员的成员资格.
REVOKECREATE删除指定用户ID对特定数据库空间的CREATE权限.
不能针对组中的特定用户撤消权限.
如果不希望某个特定用户访问特定的表、视图或过程,则不要使该用户成为对该对象拥有权限的组的成员.
注意:如果用户拥有数据库对象(例如表),则不能撤消该用户的连接权.
使用REVOKE语句或sp_dropuser过程尝试执行此操作会返回错误,如"不能删除在运行时系统中拥有表的用户.
"SQL语句参考:语句和选项271副作用自动提交标准SQL—语法1是ISO/ANSISQL语法的供应商扩展.
语法2是初级功能.
语法3是持久存储模块功能.
Sybase—AdaptiveServerEnterprise支持语法2和语法3.
AdaptiveServerEnterprise不支持语法1.
SybaseIQ和AdaptiveServerEnterprise的用户管理和安全模型不同.
权限必须是要撤消的权限的授予者,或者是有DBA权限的用户.
对于语法1,REVOKECONNECT、REVOKEINTEGRATEDLOGIN和REVOKEKERBEROSLOGIN需要DBA或USERADMIN权限.
REVOKEGROUP、REVOKE(权限,DBA除外)和REVOKEMEMBERSHIPINGROUP需要DBA或PERMSADMIN权限.
只有DBA可以撤消DBA权限.
如果撤消其他用户的CONNECT权限或表权限,则该用户不能连接到数据库.
对于语法2,REVOKE、REVOKEALTER、REVOKEDELETE、REVOKEINSERT、REVOKEREFERENCE、REVOKESELECT和REVOKEUPDATE需要DBA或PERMSADMIN权限.
对于语法3,您必须具有DBA或PERMSADMIN权限.
对于语法4,您必须具有DBA或SPACEADMIN权限.
另请参见GRANT语句(第202页)ROLLBACK语句撤消自上次COMMIT或ROLLBACK以来所做的任何更改.
语法ROLLBACK[WORK]用法ROLLBACK结束一个逻辑工作单元(事务),并撤消该事务期间内对数据库进行的所有更改.
事务是指在一次数据库连接中COMMIT或ROLLBACK语句所做的数据库工作.
SQL语句272SybaseIQ副作用关闭所有不以WITHHOLD方式打开的游标.
释放由发出ROLLBACK的事务所持有的锁.
标准SQL—符合ISO/ANSISQL标准.
Sybase-受AdaptiveServerEnterprise支持.
权限必须连接到数据库.
另请参见COMMIT语句(第63页)ROLLBACKTOSAVEPOINT语句(第273页)ROLLBACKTOSAVEPOINT语句取消自SAVEPOINT以来进行的所有更改.
语法ROLLBACKTOSAVEPOINT[savepoint-name]用法ROLLBACKTOSAVEPOINT语句撤消自SAVEPOINT建立以来所做的所有更改.
不撤消在SAVEPOINT之前所做的更改;它们仍然处于待执行状态.
有关保存点的说明,请参见《系统管理指南第二卷》>"使用过程和批处理".
savepoint-name是在当前事务内的SAVEPOINT语句上指定的标识符.
如果省略savepoint-name,则释放最近的保存点.
指定保存点之后的所有保存点都自动释放.

标准SQL—ISO/ANSISQL语法的供应商扩展.
Sybase-AdaptiveServerEnterprise不支持保存点.
若要用AdaptiveServerEnterprise兼容的方式实现类似的功能,可使用嵌套事务.
权限当前事务中必须有相应的SAVEPOINT.
SQL语句参考:语句和选项273另请参见RELEASESAVEPOINT语句(第259页)ROLLBACK语句(第272页)SAVEPOINT语句(第275页)ROLLBACKTRANSACTION语句[T-SQL]取消自SAVETRANSACTION以来进行的所有更改.
语法ROLLBACKTRANSACTION[savepoint-name]示例示例1–返回五行,值分别为10、20等.
ROLLBACKTRANSACTION语句撤消DELETE(而不是先前的INSERT或UPDATE)的结果.
BEGINSELECTrow_numINTO#tmpFROMsa_rowgenerator(1,5)UPDATE#tmpSETrow_num=row_num*10SAVETRANSACTIONbefore_deleteDELETEFROM#tmpWHERErow_num>=3ROLLBACKTRANSACTIONbefore_deleteSELECT*FROM#tmpEND用法ROLLBACKTRANSACTION撤消自使用SAVETRANSACTION建立保存点以来所做的所有更改.
不撤消在SAVETRANSACTION之前所做的更改;它们仍然处于待执行状态.
savepoint-name是在当前事务内的SAVETRANSACTION语句上指定的标识符.
如果省略savepoint-name,所有未完成的更改都会被回退.
指定保存点之后的所有保存点都自动释放.
请参见"SQLAnywhereServer-SQL参考">"SQL语句">"ROLLBACKTRANSACTION语句[T-SQL]".
注意:此参考指向SQLAnywhere文档.
SQL语句274SybaseIQ标准ISO/ANSISQL语法的供应商扩展.
权限当前事务中必须有相应的SAVETRANSACTION.
另请参见BEGINTRANSACTION语句[T-SQL](第53页)SAVETRANSACTION语句[T-SQL](第276页)SAVEPOINT语句在当前事务中建立保存点.
语法SAVEPOINT[savepoint-name]用法savepoint-name是可用于RELEASESAVEPOINT或ROLLBACKTOSAVEPOINT语句的标识符.
事务结束后,所有保存点都自动释放.
请参见《系统管理指南第二卷》>"使用过程和批处理".
执行触发器或原子复合语句时建立的保存点在原子操作结束时自动释放.

标准SQL—ISO/ANSISQL语法的供应商扩展.
Sybase—在AdaptiveServerEnterprise中不受支持.
若要用AdaptiveServerEnterprise兼容的方式实现类似的功能,可使用嵌套事务.
权限无另请参见RELEASESAVEPOINT语句(第259页)ROLLBACKTOSAVEPOINT语句(第273页)SQL语句参考:语句和选项275SAVETRANSACTION语句[T-SQL]在当前事务中建立保存点.
语法SAVETRANSACTION[savepoint-name]示例示例1–返回五行,值分别为10、20等.
ROLLBACKTRANSACTION语句撤消DELETE(而不是先前的INSERT或UPDATE)的结果.
BEGINSELECTrow_numINTO#tmpFROMsa_rowgenerator(1,5)UPDATE#tmpSETrow_num=row_num*10SAVETRANSACTIONbefore_deleteDELETEFROM#tmpWHERErow_num>=3ROLLBACKTRANSACTIONbefore_deleteSELECT*FROM#tmpEND请参见"SQLAnywhereServer-SQL参考">"SQL语句">"SAVETRANSACTION语句[T-SQL]".
注意:此参考指向SQLAnywhere文档.
用法在当前事务中建立保存点.
savepoint-name是可在ROLLBACKTRANSACTION语句中使用的标识符.
事务结束后,所有保存点都自动释放.
标准SQL—ISO/ANSISQL语法的供应商扩展.
权限无另请参见BEGINTRANSACTION语句[T-SQL](第53页)ROLLBACKTRANSACTION语句[T-SQL](第274页)SQL语句276SybaseIQSELECT语句从数据库检索信息.
语法SELECT[ALL|DISTINCT][FIRST|TOPnumber-of-rows]select-list…[INTO{host-variable-list|variable-list|table-name}]…[INTOLOCALTEMPORARYTABLE{table-name}]…[FROMtable-list]…[WHEREsearch-condition]…[GROUPBY[expression[,…]|ROLLUP(expression[,…])|CUBE(expression…[HAVINGsearch-condition]…[ORDERBY{expression|integer}[ASC|DESC…[row-limitation-option]参数select-list:–{column-name|expression[[AS]alias-name]|*}row-limitation-option:–LIMIT{[offset-expression,]limit-expression|limit-expressionOFFSEToffset-expression}limit-expression:–simple-expressionoffset-expression:–simple-expressionsimple-expression:–integer|variable|(simple-expression)|(simple-expressionsimple-expression)示例示例1–列出系统目录中的所有表和视图:SELECTtnameFROMSYS.
SYSCATALOGWHEREtnameLIKE'SYS%';示例2–列出所有客户及其订单总值:SELECTCompanyName,CAST(sum(SalesOrderItems.
Quantity*Products.
UnitPrice)ASINTEGER)VALUEFROMCustomersSQL语句参考:语句和选项277LEFTOUTERJOINSalesOrdersLEFTOUTERJOINSalesOrderItemsLEFTOUTERJOINProductsGROUPBYCompanyNameORDERBYVALUEDESC示例3–列出雇员人数:SELECTcount(*)FROMEmployees;示例4–嵌入式SQLSELECT语句:SELECTcount(*)INTO:sizeFROMEmployees;示例5–按年份、模型和颜色列出总销售额:SELECTyear,model,color,sum(sales)FROMsales_tabGROUPBYROLLUP(year,model,color);示例6–选择所有具有一定折扣的项目,放入临时表:SELECT*INTO#TableTempFROMlineitemWHEREl_discount"SQL语句">"FROM子句".
注意:此参考指向SQLAnywhere文档.
有关在存储过程内影响从临时表进行选择的限制,请参见《系统管理指南第二卷》>"使用过程和批处理">"过程简介">"在结果集内返回过程结果".
ALL或DISTINCT—如果二者都未指定,则将检索满足SELECT语句的子句的所有行.
如果指定DISTINCT,则会消除重复的输出行.
这叫做语句结果的投影.
在许多SQL语句参考:语句和选项279情况下,当指定DISTINCT时,很多语句的执行时间会显著延长,因此请仅在必要时才使用DISTINCT.
如果使用DISTINCT,则该语句不能包含使用DISTINCT参数的集合函数.
FIRST或TOPnumber-of-rows—指定从查询返回的行数.
FIRST返回从查询选择的第一行.
TOP从查询返回指定的行数,其中number-of-rows的范围为1–2147483647,可以是整数常量或整数变量.
FIRST和TOP主要与ORDERBY子句一起使用.
如果没有与ORDERBY子句一起使用这些关键字,则同一查询每次运行的结果可能会不同,因为优化程序可能会选择不同的查询计划.
FIRST和TOP只允许在查询的顶级SELECT中使用,因此它们不能用于派生表或视图定义.
在视图定义中使用FIRST或TOP可能会导致在视图上运行查询时忽略该关键字.
使用FIRST等同于将ROW_COUNT数据库选项设置为1.
使用TOP等同于将ROW_COUNT选项设置为相同的行数.
如果TOP和ROW_COUNT都进行了设置,则TOP的值优先.
在涉及全局变量、系统函数或代理表的查询中使用时,ROW_COUNT选项可能会产生不一致的结果.
有关详细信息,请参见"ROW_COUNT选项".
select-list—select-list是一个由逗号分隔的表达式列表,用于指定从数据库检索的内容.
如果指定一个星号(*),将选中FROM子句(table-name指定表的所有列)中的所有表的所有列.
select-list中允许使用集合函数和解析函数.
请参见《参考:构件块、表和过程》>"SQL函数".
注意:在SybaseIQ中,顶级SELECT的选择列表中允许标量子查询(嵌套的select),这与在SQLAnywhere和AdaptiveServerEnterprise中一样.
子查询不能用在条件值表达式中(例如CASE语句中).
子查询还可以在WHERE或HAVING子句谓词(支持的谓词类型之一)中使用.
但在WHERE或HAVING子句中,子查询不能用在值表达式中,也不能用在CONTAINS或LIKE谓词中.
外部链接的ON子句或GROUPBY子句中不允许子查询.
有关子查询的用法的详细信息,请参见《参考:构件块、表和过程》>"SQL语言元素">"表达式">"表达式中的子查询"以及《参考:构件块、表和过程》>"SQL语言元素">"搜索条件">"搜索条件中的子查询".
alias-names在整个查询中都可以用来表示带别名的表达式.
InteractiveSQL还在SELECT语句的每个输出列的顶部显示别名.
如果表达式后面没有指定可选的alias-name,InteractiveSQL将显示该表达式.
如果为列别名使用与列名一样的名称或表达式,该名称将处理为带别名的列,而不是表列名.
INTOhost-variable-list—仅用于嵌入式SQL.
它指定SELECT语句结果的位置.
select-list中的每一项都必须有一个host-variable.
选择列表中的项依次放入宿主变量中.
每个SQL语句280SybaseIQhost-variable还可以有一个指示符宿主变量,以便程序可以判定选择列表项是否为NULL.
INTOvariable-list—仅用在过程中.
它指定SELECT语句结果的位置.
选择列表中的每一项都必须有一个变量.
选择列表中的项依次放入变量中.
INTOtable-name—用于创建表并用数据填充表.
如果表名以#开头,则该表创建为临时表.
否则,该表创建为永久基表.
对于所要创建的永久表,查询必须满足以下条件:select-list中包含多个项目,INTO目标是单个table-name标示符,或select-list包含一个*,INTO目标指定为owner.
table.
若要创建有一列的永久表,表名必须指定为owner.
table.
可忽略临时表的所有者说明.
作为创建表的副作用,此语句会在执行前导致COMMIT.
执行此语句需要具有RESOURCE权限.
新表未被授予任何权限:该语句是后接INSERT.
.
.
SELECT的CREATETABLE简写形式.
不允许在存储过程或函数中执行SELECTINTO,因为SELECTINTO为原子语句,无法在原子语句中执行COMMIT、ROLLBACK或某些ROLLBACKTOSAVEPOINT语句.
有关详细信息,请参见《系统管理指南第二卷》>"使用过程和批处理">"控制语句">"原子复合语句"和《系统管理指南第二卷》>"使用过程和批处理">"过程中的事务和保存点".
用此语句创建的表没有定义主键.
可以使用ALTERTABLE添加主键.
在对表应用任何UPDATE或DELETE之前应添加主键;否则,这些操作会使受影响的行的所有列值记录在事务日志中.
该子句仅限于在有效的SQLAnywhere查询中使用.
不支持SybaseIQ扩展.
INTOLOCALTEMPORARYTABLE—创建本地临时表并用查询结果对其进行填充.
使用此子句时,临时表名不必以#开头.
FROMtable-list—行是从table-list指定的表和视图中检索的.
连接可使用连接运算符进行指定.
有关详细信息,请参见"FROM子句".
不带FROM子句的SELECT语句可用于显示不是从表中派生的表达式的值.
例如:SELECT@@version显示全局变量@@version的值.
这等效于:SELECT@@versionFROMDUMMY注意:如果省略FROM子句,或者查询中的所有表都在SYSTEM数据库空间中,则查询将由SQLAnywhere而非SybaseIQ处理且行为可能不同,特别是关于语法和语义限制和选项设置的影响方面.
有关可能应用于处理的规则,请参见SQLAnywhere文档.
SQL语句参考:语句和选项281如果您的查询不需要FROM子句,则可以通过添加"FROMiq_dummy"子句强制SybaseIQ处理查询,在这种情况下,iq_dummy表示在数据库中创建的包含一行和一列的表.
WHEREsearch-condition—指定从FROM子句命名的表选择哪些行.
还用于在多个表之间进行连接.
这是通过在WHERE子句中放置一个条件来完成的,该条件将一个表中的一列或一组列与另一个表中的一列或一组列相关.
两个表都必须在FROM子句中列出.
一组列的SELECT和WHERE子句中不允许使用相同的CASE语句.
请参见《参考:构件块、表和过程》>"SQL语言元素">"搜索条件".
SybaseIQ还支持对子查询谓词执行析取.
每个子查询可以与其它谓词一起显示在WHERE或HAVING子句内,并可使用AND或OR运算符进行组合.
请参见《参考:构件块、表和过程》>"SQL语言元素">"搜索条件">"搜索条件中的子查询">"分离子查询谓词".
GROUPBY—可以按列、别名或函数进行分组.
GROUPBY表达式也必须出现在选择列表中.
指定列、别名或函数的每个不同的值集在查询结果均可以找到与之相对应的一行.
结果行通常称为组,因为对于表列表中的每组行,结果中均有一行.
如果是GROUPBY,所有空值都视为完全相同.
然后可将集合函数应用于这些组以获得有意义的结果.
GROUPBY必须含有一个以上的常量.
不需向GROUPBY子句添加常量即可选择分组查询中的常量.
如果GROUPBY表达式只含有一个常量,则会返回错误,查询也会被拒绝.
如果使用GROUPBY,选择列表、HAVING子句和ORDERBY子句则无法引用除GROUPBY子句中之外的任何标示符.
但有以下例外:select-list和HAVING子句可以包含集合函数.
ROLLUP运算符—ROLLUP子句中的GROUPBY运算符可用不同的详尽程度来分析小计.
它可以创建从详细级别一直累计到总计的小计.
ROLLUP运算符要求以参数的方式提供分组表达式的有序列表.
ROLLUP首先计算GROUPBY中指定的标准集合值.
然后,ROLLUP在整个分组列的列表中从右侧移到左侧,并以累积方式创建更高级别的小计.
在结尾处创建总计.
如果n代表分组列数,则ROLLUP会创建n+1个级别的小计.
对ROLLUP运算符的限制如下:ROLLUP支持可用于GROUPBY子句的所有集合函数,但ROLLUP目前支持COUNTDISTINCT和SUMDISTINCT.
ROLLUP仅可用于SELECT语句;在SELECT子查询中不可使用ROLLUP.
当前不支持将多个ROLLUP、CUBE和GROUPBY列组合在同一个GROUPBY子句中的分组规范.
不支持以常量表达式作为GROUPBY键.
SQL语句282SybaseIQGROUPING可与ROLLUP运算符配合使用来区分存储空值和ROLLUP创建的查询结果中的空值.
ROLLUP语法:SELECT…[GROUPING(column-name)…]…GROUPBY[expression[,…]|ROLLUP(expression有关运算符表达式的格式,请参见《参考:构件块、表和过程》>"SQL语言元素">"表达式".
GROUPING采用列名作为参数并返回布尔值:表13.
使用ROLLUP运算符时GROUPING返回的值如果结果值是GROUPING返回由ROLLUP运算创建的空值1(TRUE)指示该行是小计所在行的空值1(TRUE)并非由ROLLUP运算创建0(FALSE)存储的NULL0(FALSE)有关ROLLUP示例,请参见《系统管理指南第二卷》>"使用OLAP".
CUBE运算符—TheoperatorintheCUBE子句中的GROUPBY运算符可将数据分布到具有多个维度的分组中,并以此来分析数据.
CUBE需要分组表达式(维度)的有序列表作为参数,并让SELECT语句计算所有可能维度组的组合的小计.
对CUBE运算符的限制如下:CUBE支持可用于GROUPBY子句的所有集合函数,但CUBE目前不支持COUNTDISTINCT或SUMDISTINCT.
CUBE目前不支持逆分布解析函数PERCENTILE_CONT和PERCENTILE_DISC.
CUBE仅可用于SELECT语句;在SELECT子查询中不可使用CUBE.
当前不支持将多个ROLLUP、CUBE和GROUPBY列组合在同一个GROUPBY子句中的GROUPING规范.
不支持以常量表达式作为GROUPBY键.
GROUPING可与CUBE运算符配合使用来区分存储空值和CUBE创建的查询结果中的空值.
CUBE语法:SELECT…[GROUPING(column-name)…]…GROUPBY[expression[,…]|CUBE(expressionGROUPING采用列名作为参数并返回布尔值:SQL语句参考:语句和选项283表14.
使用CUBE运算符时GROUPING返回的值如果结果值是GROUPING返回由CUBE运算创建的空值1(TRUE)指示该行是小计所在行的空值1(TRUE)并非由CUBE运算创建0(FALSE)存储的NULL0(FALSE)生成查询计划时,SybaseIQ优化程序会估计通过GROUPBYCUBE散列运算生成的组的总数.
MAX_CUBE_RESULTS数据库选项对优化程序视为可以运行的散列算法的估计行数设置一个上限.
如果实际行数超过MAX_CUBE_RESULT选项值,优化程序将停止处理查询,并返回错误消息"估计数目:nnn超过GROUPBYCUBE或ROLLUP的DEFAULT_MAX_CUBE_RESULT",其中nnn是IQ优化程序估计的数值.
有关设置MAX_CUBE_RESULT选项的信息,请参见"MAX_CUBE_RESULT选项".
有关CUBE示例,请参见《系统管理指南第二卷》>"使用OLAP".
HAVINGsearch-condition—根据组值而不是各行值.
只有当此语句有GROUPBY子句或选择列表只包括集合函数时,才能使用HAVING子句.
HAVING子句中引用的任何列名都必须位于GROUPBY子句中或用作HAVING子句中的集合函数的参数.
ORDERBY—排序查询结果.
ORDERBY列表中的每一项均可标记为ASC以按升序排序,或者标记为DESC以按降序排序.
如果两者都未指定,则假定为升序.
如果表达式是整数n,则查询结果按选择列表中的第n项排序.
在嵌入式SQL中,SELECT语句用于从数据库中检索结果,并通过INTO子句将值放入宿主变量.
SELECT语句必须只返回一行.
对于多行查询,必须使用游标.
不能在SELECT列表中包含Java类,但可以创建一个充当Java类的包装的函数或变量,然后选择它.
row-limitation子句-行限制子句允许您只返回满足WHERE子句的行的子集.
一次只能指定一个row-limitation子句.
如果指定该子句,以一种有意义的方式对这些行进行排序需要使用ORDERBY子句.
LIMIT和OFFSET参数可以是针对宿主变量、整数常量或整数变量的简单算术表达式.
LIMIT参数的结果值必须是大于或等于0的值.
OFFSET参数的结果值必须是大于或等于0的值.
如果未指定offset-expression,缺省值是0.
行限制子句LIMIToffset-expression,limit-expression等同于LIMITlimit-expressionOFFSEToffset-expression.
缺省情况下禁用LIMIT选项.
使用RESERVED_KEYWORDS选项以启用LIMIT关键字.
SQL语句284SybaseIQ标准SQL—符合ISO/ANSISQL标准.
Sybase-受AdaptiveServerEnterprise支持,有一些语法差异.
权限必须有指定表和视图的SELECT权限.
另请参见CREATEVIEW语句(第151页)DECLARECURSOR语句[ESQL][SP](第155页)FETCH语句[ESQL][SP](第188页)FROM子句(第194页)MAX_CUBE_RESULT选项(第398页)OPEN语句[ESQL][SP](第245页)UNION操作(第303页)RESERVED_KEYWORDS选项(第428页)ROW_COUNT选项(第430页)SUBQUERY_CACHING_PREFERENCE选项(第435页)SET语句[ESQL]为SQL变量赋值.
语法SETidentifier=expression示例示例1–下面这段代码可向数据库中插入一个大文本值:EXECSQLBEGINDECLARESECTION;charbuffer[5001];EXECSQLENDDECLARESECTION;EXECSQLCREATEVARIABLEhold_textVARCHAR;EXECSQLSEThold_text='';for(;;){/*readsomedataintobuffer.
.
.
*/size=fread(buffer,1,5000,fp);if(size"SQL语言元素">"搜索条件".
标准SQL—符合ISO/ANSISQL标准.
Sybase—不支持.
在AdaptiveServerEnterprise中,用不带表的SELECT语句给变量赋值,这是一种Transact-SQL语法,SybaseIQ也支持该语法.
在AdaptiveServerEnterprise中,SET语句用于设置数据库选项.
权限无SQL语句286SybaseIQ另请参见CREATEVARIABLE语句(第149页)DROPVARIABLE语句(第181页)SET语句[T-SQL]以与AdaptiveServerEnterprise兼容的方式设置数据库选项.
语法SEToption-nameoption-value用法在SybaseIQ中,用SETOPTION语句设置数据库选项.
不过,SybaseIQ还支持用AdaptiveServerEnterpriseSET语句设置对兼容性特别有用的选项集.
表15.
Transact-SQLSET选项选项名选项值ANSINULLON|OFFANSI_PERMISSIONSON|OFFCLOSE_ON_ENDTRANSONQUOTED_IDENTIFIERON|OFFROWCOUNTintegerSTRING_RTRUNCATIONON|OFFTRANSACTIONISOLATIONLEVEL0|1|2|3您可以使用SybaseIQ和AdaptiveServerEnterprise中的Transact-SQLSET语句来设置以下选项:SETANSINULL{ON|OFF}—在SybaseIQ和AdaptiveServerEnterprise中,比较值与NULL的缺省行为是不同的.
将ANSINULL设置为OFF可提供与Transact-SQL兼容的NULL比较.
SETANSI_PERMISSIONS{ON|OFF}—在SybaseIQ和AdaptiveServerEnterprise中,关于执行含有列引用的DELETE所需权限的缺省行为是不同的.
将ANSI_PERMISSIONS设置为OFF可提供与Transact-SQL兼容的DELETE权限.
SETCLOSE_ON_ENDTRANS{ON}—当CLOSE_ON_ENDTRANS设置为ON(缺省及唯一允许的值)时,游标在事务结束时关闭.
当选项设置为ON时,CLOSE_ON_ENDTRANS提供Transact-SQL兼容的行为.
SQL语句参考:语句和选项287SETQUOTED_IDENTIFIER{ON|OFF}—控制用双引号括起来的字符串是被解释为标识符(ON)还是普通字符串(OFF).
SETROWCOUNTinteger—Transact-SQLROWCOUNT选项将为所有游标读取的行数限制为指定的整数.
这包括通过重新定位游标读取的行.
超出此最大值的所有读取操作都返回警告.
当应OPEN请求返回游标的行数估计值时应考虑该选项设置.
注意:SybaseIQ支持@@rowcount全局变量.
SELECT、INSERT、DELETE和UPDATE语句影响ROWCOUNT选项的值.
ROWCOUNT选项不影响游标操作、IF语句或创建/删除表或过程.
在SybaseIQ中,如果ROWCOUNT设置比dbisql可显示的行数大,dbisql可能会执行额外的读取以重新定位游标.
实际显示的行数可能比请求的数目少.
另外,如果由于截断警告而重新读取任何行,计数可能不准确.
如果值为零,则重置该选项以获取所有行.
SETSTRING_RTRUNCATION{ON|OFF}—在SybaseIQ和AdaptiveServerEnterprise中,指定SQL字符串数据时截断非空格字符的缺省行为是不同的.
将STRING_RTRUNCATION设置为ON可提供与Transact-SQL兼容的字符串比较,其中包括十六进制字符串(二进制数据类型)比较.
SETTRANSACTIONISOLATIONLEVEL{0|1|2|3}—设置当前连接的锁定隔离级别,如《系统管理指南第一卷》>"事务和版本控制"中所述.
对于AdaptiveServerEnterprise,只有1和3是有效的选项.
对于SybaseIQ,只有3是有效选项.
此外,出于兼容性考虑,SybaseIQ也允许以下SET语句,但它不起作用:SETPREFETCH{ON|OFF}标准SQL—ISO/ANSISQL语法的Transact-SQL扩展.
Sybase—SybaseIQ支持AdaptiveServerEnterprise数据库选项的子集.
权限无另请参见SETOPTION语句(第291页)SQL语句288SybaseIQSETCONNECTION语句[ESQL][InteractiveSQL]更改活动的数据库连接.
语法SETCONNECTION[connection-name]参数connection-name:–标识符、字符串或宿主变量示例示例1–在嵌入式SQL中:EXECSQLSETCONNECTION:conn_name示例2–在dbisql中,将当前连接设置为名为"conn1"的连接:SETCONNECTIONconn1用法当前连接状态被保存起来,并在重新成为活动连接时恢复.
如果省略connection-name,并且存在未命名的连接,则该连接将成为活动连接.
注意:当在嵌入式SQL中打开游标时,它们与当前连接关联.
连接更改后,游标名不再能访问.
这些游标在原地保持活动,并在关联的连接再次成为活动连接时恢复可访问性.
标准SQL-dbisql用法是ISO/ANSISQL语法的供应商扩展.
嵌入式SQL是完整级别特性.
Sybase-受OpenClient/OpenServer支持.
权限无另请参见CONNECT语句[ESQL][InteractiveSQL](第65页)DISCONNECT语句[InteractiveSQL](第169页)SQL语句参考:语句和选项289SETDESCRIPTOR语句[ESQL]描述SQL描述符区中的变量,将数据放入描述符区.
语法SETDESCRIPTORdescriptor-name…{COUNT={integer|hostvar}|VALUEnassignment[,…]}参数assignment:–{{TYPE|SCALE|PRECISION|LENGTH|INDICATOR}={integer|hostvar}|DATA=hostvar}示例示例1–请参见ALLOCATEDESCRIPTOR语句[ESQL].
用法SET.
.
.
COUNT设置描述符区内所描述变量的数目.
此数值不能超过分配描述符区时指定的变量数.
值n指定对其上执行赋值操作的描述符区中的变量.
在执行SET.
.
.
DATA时会进行类型检查,以确保描述符区中的变量类型与宿主变量相同.
如果发生错误,SQLCA中会返回代码.
标准SQL—符合ISO/ANSISQL标准.
Sybase—受OpenClient/OpenServer支持.
权限无另请参见ALLOCATEDESCRIPTOR语句[ESQL](第5页)DEALLOCATEDESCRIPTOR语句[ESQL](第152页)SQL语句290SybaseIQSETOPTION语句更改数据库选项.
语法SET[EXISTING][TEMPORARY]OPTION…[userid.
|PUBLIC.
]option-name=[option-value]参数userid:–标识符、字符串或宿主变量option-name:–标识符、字符串或宿主变量option-value:–宿主变量(允许使用指示符)、字符串、标识符或数字示例示例1–设置DATE_FORMAT选项:SETOPTIONpublic.
date_format='Mmmddyyyy'示例2–将WAIT_FOR_COMMIT选项设置为on:SETOPTIONwait_for_commit='on'示例3–嵌入式SQL示例:EXECSQLSETOPTION:user.
:option_name=:value;EXECSQLSETTEMPORARYOPTIONDate_format='mm/dd/yyyy';用法SETOPTION语句用于更改影响数据库行为以及数据库与Transact-SQL兼容性的选项.
设置选项的值可更改所有用户或单个用户的行为,作用域可以是临时的,也可以是永久的.
选项的分类如下:常规数据库选项Transact-SQL兼容性数据库选项指定某个用户ID或PUBLIC用户ID可确定该选项是为单个用户、为由userid表示的用户组,还是为PUBLIC用户ID(所有用户都是其成员的用户组)设置的.
如果选项适用于组用户ID,选项设置就不由组的成员继承—更改仅应用到组用户ID.
如果未指定用户组,则所做选项更改应用于发出SETOPTION语句的当前登录用户ID.
例如,以下语句对PUBLIC用户ID应用选项更改:SETOPTIONPublic.
login_mode=standardSQL语句参考:语句和选项291只有拥有DBA特权的用户才有权设置PUBLIC用户ID的选项.
在嵌入式SQL中,只有数据库选项可以临时设置.
为PUBLIC用户ID更改选项的值,相当于为没有设置该值的所有用户设置此选项的值.
如果某选项没有PUBLIC用户ID设置,则无法为单个用户ID设置此选项的值.
用户不能设置其他用户的选项,除非拥有DBA权限.
用户可使用SETOPTION语句来更改其自己用户ID的值.
只有在具有DBA权限的情况下才允许为其他用户ID设置选项的值.
如果使用EXISTING关键字,则无法为个别用户ID设置选项值,除非已经有该选项的PUBLIC用户ID设置.
将TEMPORARY关键字添加到SETOPTION语句中会改变更改生效的持续时间.
如果没有TEMPORARY关键字,则对选项的更改将是永久性更改:在使用SETOPTION显式地更改之前,它不会变化.
当使用单个用户ID应用SETTEMPORARYOPTION时,新选项值在该用户登录到数据库后即生效.
如果对PUBLIC用户ID使用SETTEMPORARYOPTION,则更改在数据库运行时间内一直生效.
当数据库关闭时,PUBLIC用户ID的TEMPORARY选项恢复为其永久值.
相对于永久性地设置选项的值,临时设置PUBLIC用户ID的选项更具安全优势.
例如,在启用LOGIN_MODE选项时,数据库依赖于其所在的系统的登录安全性.
临时启用该选项意味着,对于依赖于Windows域的安全性的数据库,如果关闭该数据库并将它复制到本地计算机,它的安全不会受到威胁.
在这种情况下,临时启用的LOGIN_MODE恢复为它的永久值,这可能是"标准"(一种不允许集成登录的模式).
如果忽略option-value,将从数据库中删除指定的选项设置.
如果它是个人选项设置,则所用的值会恢复为PUBLIC设置.
如果删除一个TEMPORARY选项,则选项设置会恢复为永久设置.
注意:对于所有接受整数值的数据库选项,SybaseIQ会截去option-value设置的任何小数部分,只保留整数值.
例如,值3.
8将被截断为3.
当设置为字符串时,option-value的最大长度为127个字节.
警告!
不支持从游标中读取行时更改选项设置,因为这会导致意外的行为.
例如,在从游标中读取时更改DATE_FORMAT设置会在结果集的行中返回不同的日期格式.
不要在读取行时更改选项设置.
有关特定数据库选项的信息,请参见"数据库选项".
标准SQL—ISO/ANSISQL语法的供应商扩展.
SQL语句292SybaseIQSybase-AdaptiveServerEnterprise不支持.
SybaseIQ通过SET语句支持某些AdaptiveServerEnterprise选项.
权限设置自己的选项不需要任何权限.
必须有DBA权限才能为其他用户或PUBLIC设置数据库选项.
另请参见数据库选项(第315页)SETOPTION语句[InteractiveSQL]更改InteractiveSQL(dbisql)选项.
语法语法1SET[TEMPORARY]OPTION…[userid.
|PUBLIC.
]option-name=[option-value]语法2SETPERMANENT语法3SET参数userid:–标识符、字符串或宿主变量option-name:–标识符、字符串或宿主变量option-value:–宿主变量(允许使用指示符)、字符串、标识符或数字用法SETPERMANENT(语法2)在SYSOPTION系统表中存储所有当前的dbisql选项.
每次为当前用户ID启动dbisql时,都会自动建立这些设置.
语法3用于显示所有当前选项设置.
如果为dbisql或数据库服务器设置了临时选项,将显示这些设置;否则,将显示永久选项设置.
如果在设置选项时错误地键入该选项的名称,该错误名称将保存在SYSOPTION表中.
可以通过使用选项名称后跟等号但不带值的形式设置选项PUBLIC,来从SYSOPTION表中删除错误键入的名称:SETOPTIONPUBLIC.
a_mistyped_name=;SQL语句参考:语句和选项293另请参见数据库选项(第315页)SETSQLCA语句[ESQL]指示SQL预处理器使用缺省全局sqlca以外的SQLCA.
语法SETSQLCAsqlca参数Sqlca:–标识符或字符串示例示例1–该函数位于WindowsDLL中.
每个使用DLL的应用程序都有自己的SQLCA.
an_sql_codeFARPASCALExecuteSQL(an_application*app,char*com){EXECSQLBEGINDECLARESECTION;char*sqlcommand;EXECSQLENDDECLARESECTION;EXECSQLSETSQLCA"&app->.
sqlca";sqlcommand=com;EXECSQLWHENEVERSQLERRORCONTINUE;EXECSQLEXECUTEIMMEDIATE:sqlcommand;return(SQLCODE);}用法当前SQLCA指针隐式传递给各嵌入式SQL语句中的数据库接口库.
C源文件中位于此语句后的所有嵌入式SQL语句都使用新的SQLCA.
仅当编写重入代码时才需要使用此语句.
sqlca应该引用局部变量.
任何全局变量或模块静态变量都可能会由另一线程修改.
请参见"SQLAnywhereServer–编程">"嵌入式SQL">"SQL通信区域(SQLDA)".
注意:此参考指向SQLAnywhere文档.
SQL语句294SybaseIQ标准SQL—ISO/ANSISQL语法的供应商扩展.
Sybase—不受OpenClient/OpenServer支持.
权限无SIGNAL语句发出例外情况的信号.
语法SIGNALexception-name用法SIGNAL可让您引发异常.
有关如何处理异常的说明,请参见《系统管理指南第二卷》>"使用过程和批处理".
标准SQL—符合ISO/ANSISQL标准.
Sybase—AdaptiveServerEnterprise不支持SIGNAL.
权限无另请参见BEGIN……END语句(第49页)RESIGNAL语句(第261页)STARTDATABASE语句[InteractiveSQL]启动指定数据库服务器上的数据库.
语法STARTDATABASEdatabase-file…[ASdatabase-name]…[ONengine-name]SQL语句参考:语句和选项295…[AUTOSTOP{YES|NO}]…[KEYkey]示例示例1–在UNIX系统上,启动当前服务器上的数据库文件/s1/sybase/sample_2.
db:STARTDATABASE'/s1/sybase/sample_2.
db'示例2–在Windows系统上,作为sam2启动服务器eng1上的数据库文件c:\sybase\sample_2.
db:STARTDATABASE'c:\sybase\sample_2.
db'ASsam2ONeng1用法数据库服务器必须正在运行.
必须指定数据库文件的完整路径,除非此文件位于当前目录中.
STARTDATABASE语句不会将dbisql连接到指定的数据库:必须发出CONNECT语句才能进行连接.
如果未指定database-name,则为数据库分配缺省名.
此缺省名是数据库文件的根.
例如,为文件c:\sybase\IQ_15\demo\iqdemo.
db中的数据库赋予缺省名iqdemo.
如果未指定engine-name,则假定采用缺省数据库服务器.
缺省数据库服务器是当前运行的服务器之中首先启动的服务器.
AUTOSTOP子句的缺省设置为YES.
如果将AUTOSTOP设置为YES,则在删除连接数据库的最后一个连接时将卸载数据库.
如果将AUTOSTOP设置为NO,则不卸载数据库.
如果数据库是强加密的,请使用KEY子句输入KEY值(口令).
Sybase建议仅启动给定SybaseIQ数据库服务器上的一个数据库.
标准SQL-ISO/ANSISQL语法的供应商扩展.
Sybase-不适用.
权限必须具有DBA权限.
SQL语句296SybaseIQSTARTENGINE语句[InteractiveSQL]启动数据库服务器.
语法STARTENGINEASengine-name[STARTLINEcommand-string]示例示例1–启动名为eng1的数据库服务器,而不启动其上的任何数据库:STARTENGINEASeng1示例2–STARTLINE子句的用法:STARTENGINEASeng1STARTLINE'start_iq-c8096'用法若要为服务器指定一组选项,请在命令字符串中使用STARTLINE关键字.
符合《实用程序指南》>"start_iq数据库服务器启动实用程序"中的数据库服务器命令行说明的命令字符串即为有效.
注意:需要使用几个服务器选项才能使SybaseIQ良好地工作.
为了确保使用正确的选项集,Sybase建议通过使用SybaseCentral或具有start_iq命令的配置文件来启动服务器.
标准SQL-ISO/ANSISQL语法的供应商扩展.
Sybase-不适用.
权限无另请参见STOPENGINE语句[InteractiveSQL](第299页)SQL语句参考:语句和选项297STARTJAVA语句启动JavaVM.
语法STARTEXTERNALENVIRONMENTJAVA示例示例1–启动JavaVM.
STARTEXTERNALENVIRONMENTJAVA用法可在方便的时候使用STARTEXTERNALENVIRONMENTJAVA装载JavaVM,这样如果用户开始使用Java功能,则装载JavaVM时一开始不会出现暂停.
标准SQL—ISO/ANSISQL语法的供应商扩展.
Sybase—不适用.
权限必须具有DBA权限.
另请参见STOPJAVA语句(第300页)STOPDATABASE语句[InteractiveSQL]停止指定数据库服务器上的数据库.
语法STOPDATABASEdatabase-name…[ONengine-name]…[UNCONDITIONALLY]示例示例1–停止缺省服务器上名为sample的数据库:SQL语句298SybaseIQSTOPDATABASEsample用法如果未指定engine-name,则在所有运行的引擎中搜索具有指定名称的数据库.
启动数据库时-n参数或DBN(DatabaseName)连接参数中指定的名称是database-name.
此名称通常是保存Catalog存储的数据库文件的文件名,不带.
db扩展名,但也可以是用户定义的任何名称.
如果提供了UNCONDITIONALLY,则数据库即使存在连接也会停止.
如果未指定UNCONDITIONALLY,则当数据库存在连接时不停止数据库.
标准SQL-ISO/ANSISQL语法的供应商扩展.
Sybase-不适用.
权限必须具有DBA权限.
另请参见DISCONNECT语句[InteractiveSQL](第169页)STARTDATABASE语句[InteractiveSQL](第295页)STOPENGINE语句[InteractiveSQL]停止数据库服务器.
语法STOPENGINEengine-name[UNCONDITIONALLY]示例示例1–停止名为sample的数据库服务器:STOPENGINEsample用法如果提供了UNCONDITIONALLY,则数据库即使存在连接也会停止.
如果未指定UNCONDITIONALLY,则当数据库存在连接时不停止数据库.
SQL语句参考:语句和选项299标准SQL-ISO/ANSISQL语法的供应商扩展.
Sybase-不适用.
权限无另请参见STARTENGINE语句[InteractiveSQL](第297页)STOPJAVA语句用于释放与JavaVM相关联的资源.
语法STOPEXTERNALENVIRONMENTJAVA用法STOPEXTERNALENVIRONMENTJAVA的主要用途是减少系统资源用量.
标准SQL—ISO/ANSISQL语法的供应商扩展.
Sybase—不适用.
权限DBA授权另请参见STARTJAVA语句(第298页)SYNCHRONIZEJOININDEX语句在更新一个或多个连接索引的基表中的某个基表后同步相应索引.
语法SYNCHRONIZEJOININDEX[join-index-name[,join-index-name]…]SQL语句300SybaseIQ示例示例1–同步连接索引emp_dept_join1和emp_dept_join2:SYNCHRONIZEJOININDEXemp_dept_join1,emp_dept_join2用法当更新某连接索引对应的基表时,SybaseIQ会将此连接索引标记为不可用.
先前利用此连接索引的查询将改为执行即席连接,这可能会影响这些查询的性能.
使用SYNCHRONIZEJOININDEX命令可以更新此连接索引,以使其可供查询使用.
注意:连接索引定义两个表列之间的一对多关系(亦称作主键对外键).
如果在"一个"(或主键)列中插入内容导致出现一个或多个重复值,则连接索引将变为无效且无法同步.
必须先删除包含重复值的行,然后SYNCHRONIZEJOININDEX才能使其重新有效.
同步连接索引可能会非常耗时,具体取决于组成连接的基表的大小.
何时使用此命令的决定权在您手中.
您可以将其作为批处理作业安排在您预期系统工作量较少的晚间或周未进行.
您可以在SybaseIQ提交一系列插入和删除之后立即执行此命令,以使连接索引尽早可供使用.
但是,请勿每次插入或删除之后都同步连接索引,这是因为更新连接索引的时间取决于针对表的更新的顺序.
SYNCHRONIZEJOININDEX允许您指定多个join-index-name,以逗号分隔.
您必须是每个连接索引的所有者或者是DBA.
如果不指定join-index-name,则SybaseIQ将同步您拥有的所有连接索引(如果您是DBA,则同步数据库中的所有连接索引),这可能会对系统性能造成不利影响.
标准SQL—ISO/ANSISQL语法的供应商扩展.
Sybase—不适用.
权限必须是连接索引的所有者或者是DBA.
另请参见CREATEJOININDEX语句(第104页)TRIGGEREVENT语句触发指定事件.
事件可以是为事件触发器定义的事件,或是调度事件.
SQL语句参考:语句和选项301语法TRIGGEREVENTevent-name[(parm=value,用法操作与特定的触发器条件或CREATEEVENT语句的调度有关.
即使没有到达预定时间或出现触发器条件,您也可以使用TRIGGEREVENT强制执行事件处理程序.
TRIGGEREVENT不执行已禁用的事件处理程序触发条件导致执行事件处理程序时,数据库服务器可以使用event_parameter函数为事件处理程序提供上下文信息.
使用TRIGGEREVENT可以显式提供这些参数,以模拟事件处理程序的上下文.
当触发事件时,指定事件名称.
通过查询系统表SYSEVENT,可以列出事件名称.
例如:SELECTevent_id,event_nameFROMSYS.
SYSEVENT请参见《系统管理指南第二卷》>"使用日程表和事件自动完成任务".
权限必须具有DBA权限.
另请参见ALTEREVENT语句(第13页)CREATEEVENT语句(第82页)TRUNCATETABLE语句从表中删除所有行,而不删除表定义.
语法语法1TRUNCATETABLE[owner.
]table-name语法2TRUNCATETABLE[owner.
]table[PARTITIONpartition-name]示例示例1–删除Sale表的所有行:TRUNCATETABLESaleSQL语句302SybaseIQ用法TRUNCATETABLE等效于不带WHERE子句的DELETE语句,只不过不在事务日志中记入各个行的删除情况.
执行TRUNCATETABLE语句后,表结构及所有索引仍然存在,直至发出DROPTABLE语句.
列定义和约束保持不变,且权限仍然有效.
与数据定义语句一样,TRUNCATETABLE语句作为单个语句记入事务日志.
每个删除的行不记入事务日志.
分区子句指定要截断哪个分区.
它不会影响其它分区中的数据.
另请参见《系统管理指南第一卷》>"事务和版本控制".
标准SQL—ISO/ANSISQL语法的供应商扩展.
Sybase-受AdaptiveServerEnterprise支持.
权限必须是表的所有者或者有DBA权限.
对于临时表和基表,可以执行TRUNCATETABLE,而其他用户则对这样的表具有读取访问权限.
此行为有别于SQLAnywhere,在其中需要具有独占访问权限才能截断基表.
SybaseIQ表版本控制确保在进行TRUNCATETABLE时其他用户具有读取访问权限;但是,这些用户看到的表的版本取决于读取和写入事务的提交时间.
另请参见DELETE语句(第163页)UNION操作合并两个或多个select语句的结果.
语法select-without-order-by…UNION[ALL]select-without-order-by…[UNION[ALL]select-without-order-by]……[ORDERBYinteger[ASC|DESC示例示例1–列出雇员和客户的所有不重复的姓:SELECTSurnameFROMEmployeesSQL语句参考:语句和选项303UNIONSELECTSurnameFROMCustomers用法使用UNION可将多个SELECT语句的结果合并成一个较大的结果.
各构成的SELECT语句在选择列表中必须有相同的项目数,并且不能包含ORDERBY子句.
请参见"FROM子句".
UNIONALL的结果是合并各构成的SELECT语句的结果.
UNION的结果与UNIONALL的结果相同,但会删除重复的行.
删除重复的行需要额外的处理,所以应尽量使用UNIONALL而不是UNION.
如果两个选择列表中的相应项具有不同的数据类型,SybaseIQ将为结果中的相应列选择数据类型,并自动相应地转换各构成的SELECT语句中的列.
如果使用ORDERBY,则仅允许按照列表顺序使用整数.
这些整数指定要排序的列的位置.
显示的列名称与第一个SELECT语句显示的列名称相同.
注意:当SELECT语句包括常量值和UNIONALL视图,但省略了FROM子句时,使用iq_dummy可避免发生错误.
有关详细信息,请参见"FROM子句".
标准SQL—符合ISO/ANSISQL标准.
Sybase-受AdaptiveServerEnterprise支持,还支持COMPUTE子句.
权限必须具有各构成的SELECT语句的SELECT权限.
另请参见FROM子句(第194页)SELECT语句(第277页)UPDATE语句修改单个表的现有行,或修改仅包含一个表的视图的现有行.
语法UPDATEtable.
.
.
SET[column-name=expression,….
.
.
[FROMtable-expression,]SQL语句304SybaseIQ.
.
.
[WHEREsearch-condition].
.
.
[ORDERBYexpression[ASC|DESC],…]FROMtable-expression参数table-expression:–table-spec|table-expressionjoin-typetable-spec[ONcondition]|table-expression,…示例示例1–将雇员PhilipChin(雇员129)从销售部转移到市场部:UPDATEEmployeesSETDepartmentID=400WHEREEmployeeID=129;示例2–市场部(400)将奖金从每位雇员基本薪水的4%提高到6%:UPDATEEmployeesSETbonus=base*6/100WHEREDepartmentID=400;示例3–每位雇员由于获得部门奖金而增加了收入:UPDATEEmployeesSETemp.
Salary=emp.
Salary+dept.
bonusFROMEmployeesemp,DepartmentsdeptWHEREemp.
DepartmentID=dept.
DepartmentID;示例4–另一种由于部门奖金而增加每位雇员收入的方法:UPDATEEmployeesSETemp.
salary=emp.
salary+dept.
bonusFROMEmployeesempJOINDepartmentsdeptONemp.
DepartmentID=dept.
DepartmentID;用法您对其使用UPDATE的表可能是基表或临时表.
注意:基表不能构成任何连接索引.
每个指定列被设置为等号右边表达式的值.
表达式中甚至可以使用column-name-将使用旧值.
FROM子句可以包含多个表及连接条件,并返回由连接条件和/或WHERE条件指定和过滤的所有表的所有列.
在FROM子句中使用错误的连接条件会导致不可预料的结果.
如果FROM子句指定一对多连接且SET子句引用连接"多"侧的某单元,则从选择的第一个值更新此单元.
换句话说,如果连接条件导致按照行ID更新表的多个行,则返回的第一个行将成为更新结果.
例如:SQL语句参考:语句和选项305UPDATET1SETT1.
c2=T2.
c2FROMT1JOINTOT2ONT1.
c1=T2.
c1如果表T2依照T2.
c1具有多个行,则结果可能如下:T2.
c1T2.
c2T2.
c3143181164152如果不带ORDERBY子句,则T1.
c2可能为4、6、8或9.
如果带有ORDERBYT2.
c3,T1.
c2则更新为8.
如果带有ORDERBYT2.
c3DESC,T1.
c2则更新为6.
SybaseIQ拒绝要更新的表在外部连接的空值提供方的任何UPDATE语句.
换句话说:在左外部连接中,连接左侧的表不能缺少有关连接列的任何行.
在右外部连接中,连接右侧的表不能缺少有关连接列的任何行.
在完全外部连接中,两侧的表均不能缺少有关连接列的任何行.
例如,在下面的语句中,表T1在左外部连接的左侧,因此不能缺少任何行:UPDATET1SETT1.
c2=T2.
c4FROMT1LEFTOUTERJOINT2ONT1.
rowid=T2.
rowid通常情况下,行以什么顺序更新并不重要.
但是,与NUMBER(*)函数一起使用时,排序可用于按指定的顺序在行中添加递增的编号.
如果不使用NUMBER(*)函数,请避免使用ORDERBY子句,因为UPDATE语句在不使用此子句的情况下性能会更好.
在UPDATE语句中,如果在SET子句中使用NUMBER(*)函数且FROM子句指定一对多连接,则NUMBER(*)将生成增加但由于删除行而不按顺序递增的唯一编号.
有关NUMBER(*)函数的详细信息,请参见《参考:构件块、表和过程》>"SQL函数">"按字母顺序排列的函数列表">"NULLIF函数[杂项]".
当FROM子句包含多个连接的表时,可以使用ORDERBY子句控制UPDATE的结果.
SybaseIQ忽略搜索的UPDATE中的ORDERBY子句,并返回指示相应语法不是有效ANSI语法的消息.
如果未指定WHERE子句,则更新所有行.
如果指定WHERE子句,则SybaseIQ仅更新满足搜索条件的行.
每个SET子句的左侧均必须是基表中的列.
SQL语句306SybaseIQ如果定义视图的SELECT语句不包含GROUPBY子句、集合函数或不涉及UNION子句,则可以更新视图.
视图应仅包含一个表.
插入到表中的字符串始终按输入时的大小写存储,而不管数据库是否区分大小写.
因此,用字符串Value更新的字符数据类型列在数据库中保存的形式始终是V为大写,其它字母均为小写.
SELECT语句以Value形式返回该字符串.
但是,如果数据库不区分大小写,所有比较都会使Value与value、VALUE等相同.
IQ服务器可以大小写字母的任意组合返回结果,因此,不区分大小写的数据库中的结果不能区分大小写(CASEIGNORE).
而且,如果单列主键已经包含Value条目,则会拒绝value的INSERT,因为它会导致主键不唯一.
如果更新违背任何检查约束,则将回退整个语句.
SybaseIQ支持在SET子句中使用标量子查询,例如:UPDATErSETr.
o=(SELECTMAX(t.
o)FROMt.
.
.
WHEREt.
y=r.
y),r.
s=(SELECTSUM(x.
s)FROMx.
.
.
WHEREx.
x=r.
x)WHEREr.
a=10SybaseIQ支持在UPDATE语句中使用DEFAULT列值.
如果某列具有DEFAULT值,则在未显式修改此列的值的任何UPDATE语句中,该DEFAULT值将用作此列的值.
有关列的DEFAULT值用法的详细信息,请参见《系统管理指南第一卷》>"数据完整性">"列缺省值有助于数据完整性".
有关更新作为其它类型DEFAULT列的IDENTITY/AUTOINCREMENT列的详细信息,请参见"CREATETABLE语句".
标准SQL—ISO/ANSISQL语法的供应商扩展.
Sybase-除下列例外情形之外,IQUPDATE语句的语法通常与AdaptiveServerEnterpriseUPDATE语句的语法1兼容:SybaseIQ支持在FROM子句中使用多个表及连接条件.
远程表的更新受限于CIS支持的SybaseIQ语法,如《系统管理指南第二卷》>"访问远程数据"和《系统管理指南第二卷》>"用于远程数据访问的服务器类"所述.
权限必须具有所修改列的UPDATE权限.
另请参见CREATETABLE语句(第136页)SQL语句参考:语句和选项307UPDATE(定位)语句[ESQL][SP]修改位于游标当前位置的数据.
语法UPDATEtable-listSETset-item,…WHERECURRENTOFcursor-name参数cursor-name:–identifier|hostvarset-item:–column-name[.
field-name…]=scalar-value示例示例1–使用WHERECURRENTOF游标的UPDATE语句:UPDATEEmployeesSETsurname='Jones'WHERECURRENTOFemp_cursor用法这种形式的UPDATE语句更新指定游标的当前行.
当前行被定义为从游标中最近成功读取的一行,对游标的最后一项操作不能是定位DELETE语句.
SET—set-item中引用的列必须位于更新的基表中.
它们不能引用别名或其它表或视图中的列.
如果要更新的表在游标说明中被赋予了一个相关名,那么在SET子句中必须使用此相关名.
SET子句右侧的表达式可能引用查询的SELECT子句中的列、常量、变量和表达式.
set-item表达式不能包含函数或表达式.
在指定查询的当前行中,请求的列被设置为该行的指定值.
这些列必须位于指定的打开游标的选择列表中.
定位UPDATE语句影响的更改在游标结果集中是可见的,除非客户端缓存阻止看到这些更改.
已进行更新以使其不再满足打开的游标的WHERE子句的行仍然可见.
Sybase不建议在WHERECURRENTOF子句中使用ORDERBY.
可能会更新ORDERBY列,但结果集不会重新排序.
结果似乎未按顺序提取并且似乎是错误的.
SQL语句308SybaseIQ由于SybaseIQ不支持CREATEVIEW.
.
.
WITHCHECKOPTION,所以定位UPDATE不支持此选项.
WITHCHECKOPTION不允许将创建无法通过视图看到的行的更新.
定位UPDATE无法更新rowid列.
SybaseIQ支持重复更新结果集中的同一行.
另请参见《参考:构件块、表和过程》>"系统过程">"系统存储过程">"sp_iqcursorinfo过程".
标准TherangeofcursorsthatcanbeupdatedmaycontainvendorextensionstoISO/ANSISQLgrammariftheANSI_UPDATE_CONSTRAINTSoptionissettoOFF.
OpenClient/OpenServer支持使用嵌入式SQL,SQLAnywhere支持使用过程和触发器.
权限必须有所修改的列的UPDATE权限.
另请参见DECLARECURSOR语句[ESQL][SP](第155页)DELETE语句(第163页)DELETE(定位)语句[ESQL][SP](第165页)UPDATE语句(第304页)WAITFOR语句将对当前连接的处理延迟指定的时间长度或延迟到一个给定时间.
语法WAITFOR{DELAYtime|TIMEtime}[CHECKEVERYinteger}[AFTERMESSAGEBREAK]参数Time:–stringSQL语句参考:语句和选项309示例示例1–等待3秒钟:WAITFORDELAY'00:00:03'示例2–等待0.
5秒钟(500毫秒):WAITFORDELAY'00:00:00:500'示例3–一直等待直到晚上8点:WAITFORTIME'20:00'用法WAITFOR语句定期唤醒(缺省情况下每5秒钟一次),以检查是否语句已取消或消息已接收.
如果这两种情况均未发生,该语句会继续等待.
如果使用DELAY,处理将暂停特定的时间长度.
如果指定TIME,处理将一直暂停到服务器时间到达指定的时间.
如果当前服务器时间大于指定的时间,则处理将一直暂停到第二天的这个时间.

WAITFOR提供了替代以下语句的另一种方法,对于选择不在数据库中启用Java的客户可能很有用:calljava.
lang.
Thread.
sleep()在许多情况下,使用预定事件比使用WAITFORTIME要好,因为预定事件在它们自己的连接中执行.
CHECKEVERY子句—此可选子句控制WAITFOR语句唤醒的频率.
缺省情况下,WAITFOR每5秒钟唤醒一次.
该值以毫秒为单位,最小值为250毫秒.
AFTERMESSAGEBREAK子句—WAITFOR语句可用于等待来自另一连接的消息.
大多数情况下,当接收到消息时,将消息转发到执行WAITFOR语句的应用程序,同时WAITFOR语句继续等待.
如果指定了AFTERMESSAGEBREAK子句,当接收到来自另一连接的消息时,WAITFOR语句完成.
未将消息文本转交给应用程序,但是可通过获取MessageReceived连接属性的值来访问该消息.
副作用此语句的实现在等待时使用工作线程.
这最多使用由-gn服务器命令行选项指定的线程中的一个线程.
标准SQL—ISO/ANSISQL语法的供应商扩展.
Sybase-AdaptiveServerEnterprise也实现此语句.
权限无SQL语句310SybaseIQ另请参见CREATEEVENT语句(第82页)WHENEVER语句[ESQL]在嵌入式SQL程序中指定错误处理方式.
语法WHENEVER{SQLERROR|SQLWARNING|NOTFOUND}…{GOTOlabel|STOP|CONTINUE|Ccode;}参数label:–标识符示例示例1–EXECSQLWHENEVERNOTFOUNDGOTOdone;示例2–EXECSQLWHENEVERSQLERROR{PrintError(&sqlca);return(FALSE);};用法WHENEVER可将此语句放置在嵌入式SQLC程序中的任何位置,它不生成任何代码.
预处理器在每个连续的SQL语句后生成代码.
错误操作对WHENEVER语句源行中的所有嵌入式SQL语句一直保持有效,直到发生下一个具有相同错误条件的WHENEVER语句或者直到源文件结束.
缺省操作为CONTINUE.
WHENEVER提供语句是为了在简单程序中方便使用.
多数情况下,检查错误的最简单方法是直接检查SQLCA(SQLCODE)的sqlcode字段.
在这种情况下,不使用WHENEVER.
WHENEVER语句使预处理器在每个语句后生成if(SQLCODE)测试.
注意:错误条件的生效依据是C语言源文件的位置,而不是语句的执行时间.
标准SQL—ISO/ANSISQL语法的供应商扩展.
SQL语句参考:语句和选项311Sybase—受OpenClient/OpenServer支持.
权限无WHILE语句[T-SQL]重复执行某语句或复合语句.
语法WHILEexpression.
.
.
statement示例示例1–WHILE(SELECTAVG(unit_price)FROMProducts)"导入和导出数据">"从数据库导出数据的方法">"数据提取功能">"提取选项".
Transact-SQL兼容性选项Transact-SQL兼容性选项使SybaseIQ行为能够与AdaptiveServerEnterprise兼容,或既支持旧行为又允许使用ISOSQL92行为.
为实现与AdaptiveServerEnterprise的进一步兼容,可使用Transact-SQLSET语句替代SybaseIQSETOPTION语句在当前连接期间设置部分选项.
数据库选项参考:语句和选项327表17.
Transact-SQL兼容性选项选项允许值缺省设置ALLOW_NULLS_BY_DEFAULTON、OFFONANSI_BLANKS*ON、OFFOFFANSI_CLOSE_CURSORS_ON_ROLLBACKONONANSI_INTEGER_OVERFLOW*ANSI_PERMISSIONSON、OFFONANSINULLON、OFFONANSI_SUBSTRINGON、OFFONANSI_UPDATE_CONSTRAINTSOFF、CURSORS、STRICTCURSORSASE_BINARY_DISPLAYON、OFFOFFASE_FUNCTION_BEHAVIORON、OFFOFFCHAINEDON、OFFONCLOSE_ON_ENDTRANSONONCONTINUE_AFTER_RAISERRORON、OFFONCONVERSION_ERRORON、OFFONDIVIDE_BY_ZERO_ERRORON、OFFONESCAPE_CHARACTER*保留保留FIRE_TRIGGERS*ON、OFFONNEAREST_CENTURY0–10050NON_KEYWORDS以逗号分隔的关键字列表不关闭任何关键字ON_TSQL_ERRORSTOP、CONTINUE、CONDITIONALCONDITIONALQUERY_PLAN_ON_OPEN*QUOTED_IDENTIFIERON、OFFONRI_TRIGGER_TIME*数据库选项328SybaseIQ选项允许值缺省设置SQL_FLAGGER_ERROR_LEVELE、I、F、W、OFF、SQL:1992/Entry、SQL:1992/Intermediate、SQL:1992/Full、SQL:1999/Core、SQL:1999/Package、SQL:2003/Core、SQL:2003/PackageOFFSQL_FLAGGER_WARNING_LEVELE、I、F、W、OFF、SQL:1992/Entry、SQL:1992/Intermediate、SQL:1992/Full、SQL:1999/Core、SQL:1999/Package、SQL:2003/Core、SQL:2003/PackageOFFSTRING_RTRUNCATIONON、OFFONTEXTSIZE*TSQL_HEX_CONSTANT*TSQL_VARIABLESON、OFFOFF注意:选项名称旁边的星号(*)表示SybaseIQ目前不支持该选项.
另请参见常规数据库选项(第320页)InteractiveSQL选项(第330页)按字母顺序排列的选项列表(第332页)SET语句[T-SQL](第287页)Transact-SQL为实现AdaptiveServerEnterprise兼容性的选项设置有一些选项的缺省设置与AdaptiveServerEnterprise的缺省设置不同.
为确保兼容行为,应显式设置这些选项.
在使用OpenClient或JDBC接口进行连接时,为使当前连接与AdaptiveServerEnterprise兼容,会显式设置某些选项设置.
有关如何进行设置的信息,请参见《参考:构件块、表和过程》.
表18.
为实现ASE兼容性需要显式设置的Transact-SQL选项选项ASE兼容设置ALLOW_NULLS_BY_DEFAULTOFFANSINULLOFFCHAINEDOFF数据库选项参考:语句和选项329选项ASE兼容设置CONTINUE_AFTER_RAISERRORONDATE_FORMATYYYY-MM-DDDATE_ORDERMDYESCAPE_CHARACTEROFFISOLATION_LEVEL1ON_TSQL_ERRORCONDITIONALQUOTED_IDENTIFIEROFFTIME_FORMATHH:NN:SS.
SSSTIMESTAMP_FORMATYYYY-MM-DDHH:NN:SS.
SSSTSQL_VARIABLESOFFInteractiveSQL选项InteractiveSQL选项可用于更改InteractiveSQL与数据库的交互方式.
语法1SET[TEMPORARY]OPTION.
.
.
[userid.
|PUBLIC.
]option-name=[option-value]语法2SETPERMANENT语法3SET参数userid:identifier,stringorhost-variable数据库选项330SybaseIQoption-name:identifier,stringorhost-variableoption-value:host-variable(indicatorallowed),string,identifier,ornumber描述包含TEMPORARY关键字的语法1不能在复合语句的BEGIN和END关键字之间使用.
语法2SETPERMANENT在SYSOPTIONS系统表中存储所有当前的InteractiveSQL选项.
每次针对当前用户ID启动InteractiveSQL时,都会自动确定这些设置.
语法3用于显示所有当前选项设置.
如果存在为InteractiveSQL或数据库服务器设置的临时选项,则会显示这些临时选项;否则显示永久选项设置.
表19.
InteractiveSQL选项选项允许值缺省设置DEFAULT_ISQL_ENCOD-ING标识符或字符串空字符串(使用系统代码页)NULLS*字符串NULLON_ERRORSTOP、CONTINUE、PROMPT、EXIT、NOTIFY_CONTINUE、NOTIFY_STOP、NOTIFY_EXITPROMPTOUTPUT_FORMAT*ASCII、DBASEII、DBASEIII、EXCEL、FIXED、FOXPRO、HTML、LOTUS、SQL、XMLASCIIOUTPUT_LENGTH*非负整数0(没有截断)OUTPUT_NULLS*字符串'NULL'STATISTICS*0,3,4,5,63TRUNCATION_LENGTH*整数256注意:选项名称旁边的星号(*)表示SybaseIQ目前不支持该选项.
另请参见常规数据库选项(第320页)数据库选项参考:语句和选项331Transact-SQL兼容性选项(第327页)按字母顺序排列的选项列表(第332页)按字母顺序排列的选项列表常规、Transact-SQL兼容性和InteractiveSQL数据库选项说明.
某些选项名称的后面有一个类指示符(括在中括号内).
数据库选项类指示符是:–该选项用于更改InteractiveSQL与数据库交互的方式.
[TSQL][TSQL]–该选项允许SybaseIQ行为变得与AdaptiveServerEnterprise兼容,或既支持旧行为又允许ISOSQL92行为.
另请参见数据库选项简介(第315页)常规数据库选项(第320页)Transact-SQL兼容性选项(第327页)InteractiveSQL选项(第330页)AGGREGATION_PREFERENCE选项控制用于处理集合的算法的选择.
允许值-3到3默认值0范围设置此选项无需DBA权限.
可针对单个连接或PUBLIC组进行临时设置.
设置将立即生效.
描述对于查询中的集合(GROUPBY、DISTINCT、SET函数),SybaseIQ优化程序可以选择使用多种算法对该集合进行相应处理.
AGGREGATION_PREFERENCE使您可以覆盖优化程序在选择算法时的开销决策.
该选项不会覆盖用于确定算法在查询引擎内是否合法的内部规则.
此选项通常用于内部测试,以及优化程序处理不好的手动调优查询.
只有经验丰富的DBA才能使用.
如果需要设置AGGREGATION_PREFERENCE,请通知Sybase技术支持部门,因为设置此选项可能意味着需要更改优化程序.
数据库选项332SybaseIQ表20.
AGGREGATION_PREFERENCE的值值操作0让优化程序选择1选用已进行排序的集合2选用采用IQ索引的集合3选用具有散列的集合-1不选用已进行排序的集合-2不选用采用IQ索引的集合-3不选用具有散列的集合ALLOW_NULLS_BY_DEFAULT选项[TSQL]控制是否允许创建时未指定是NULL还是NOTNULL的新列包含空值.
允许值ON、OFF默认值ONOFF(对于OpenClient和JDBC连接)描述包括ALLOW_NULLS_BY_DEFAULT选项是为了与Transact-SQL兼容.
ANSI_CLOSE_CURSORS_ON_ROLLBACK选项[TSQL]控制执行ROLLBACK时是否关闭使用WITHHOLD打开的游标.
允许值ON默认值ON描述ANSISQL/3标准要求在事务回退时关闭所有游标.
此选项强制执行该行为,而且不能更改.
CLOSE_ON_ENDTRANS选项将覆盖此选项.
数据库选项参考:语句和选项333ANSI_PERMISSIONS选项[TSQL]为DELETE和UPDATE语句控制权限检查.
允许值ON、OFF默认值ON描述在ANSI_PERMISSIONS为ON的情况下,将检查DELETE和UPDATE语句的SQL92权限要求.
AdaptiveServerEnterprise中的缺省值为OFF.
下表简要介绍了其中的差别:表21.
ANSI_PERMISSIONS选项的作用SQL语句ANSI_PERMISSIONS为OFF时所需的权限ANSI_PERMISSIONS为ON时所需的权限UPDATE正在对其设置值的列上的UPDATE权限正在对其设置值的列上的UPDATE权限.
出现在WHERE子句中的所有列上的SELECT权限.
SET子句右侧的所有列上的SELECT权限.
DELETE对表的DELETE权限对表的DELETE权限.
SELECTpermissiononallcolumnsappearingintheWHEREclause.
只能为PUBLIC组设置ANSI_PERMISSIONS选项.
不允许使用专用设置.
ANSINULL选项[TSQL]控制对将=和!
=与NULL结合使用的解释.
允许值ON、OFF默认值ON描述在ANSINULL为ON的情况下,使用"="或"!
="与NULL进行比较的结果是未知结果.
其中包括其它运算(如CASE)隐含的比较的结果.
将ANSINULL设置为OFF可允许与NULL的比较产生已知结果,以实现与AdaptiveServerEnterprise的兼容.
数据库选项334SybaseIQ注意:与SQLAnywhere不同,对于包含空值的列中集合函数,SybaseIQ不会生成警告"集合函数中的空值已消除"(SQLSTATE=01003).
ANSI_SUBSTRING选项[TSQL]控制在为start或length参数提供负值时SUBSTRING(SUBSTR)函数的行为.
允许值ON、OFF默认值ON描述ANSI_SUBSTRING选项设置为On时,SUBSTRING函数的行为相当于ANSI/ISOSQL/2003行为.
对零或负的start偏移量的处理方式就好像用"非字符"对字符串左侧进行了填充,而且在length为负值时会给出错误.
当此选项设置为OFF时,SUBSTRING函数的行为与先前版本的SybaseIQ的行为相同:负的起始偏移表示从字符串末尾开始的偏移,而负的长度表示所需的子串在起始偏移左侧结束的字符长度.
使用为0的起始偏移量等同于起始偏移量为1.
避免在SUBSTRING函数中使用非正起始偏移量或负的length.
请尽可能改用LEFT或RIGHT函数.
示例以下示例显示根据SUBSTRING选项的设置,ANSI_SUBSTRING函数返回值的不同:SUBSTRING('abcdefgh',-2,4);ansi_substring=Off==>'gh'//substringstartsatsecond-lastcharacteransi_substring=On==>'a'//takesthefirst4charactersof//abcdefghanddiscardsallSUBSTRING('abcdefgh',4,-2);ansi_substring=Off==>'cd'ansi_substring=On==>value-2outofrangefordestinationSUBSTRING('abcdefgh',0,4);ansi_substring=Off==>'abcd'ansi_substring=On==>'abc'ANSI_UPDATE_CONSTRAINTS选项控制允许的更新的范围.
允许值OFF、CURSORS、STRICT数据库选项参考:语句和选项335默认值CURSORS描述SybaseIQ提供了几种扩展,它们允许进行ANSISQL标准所不允许的更新.
这些扩展为执行更新提供了高效且功能强大的机制.
然而,在某些情况下,它们会导致非直觉行为.
如果在设计用户应用程序时未预计使用这些扩展行为,此行为可能会导致异常(如丢失更新).
ANSI_UPDATE_CONSTRAINTS控制是否将更新限制在SQL92标准允许的范围内.
如果将此选项设置为STRICT,将无法进行以下更新:对包含JOINS的游标的更新对出现在ORDERBY子句中的列的更新不允许在UPDATE语句中出现FROM子句.
如果将此选项设置为CURSORS,则相同的限制会生效,但只用于游标.
如果游标不是使用FORUPDATE或FORREADONLY打开的,数据库服务器将根据SQL92标准确定是否允许更新.
如果ANSI_UPDATE_CONSTRAINTS设置为CURSORS或STRICT,则包含ORDERBY子句的游标缺省为FORREADONLY;否则,它们缺省为FORUPDATE.
示例根据ANSI_UPDATE_CONSTRAINTS设置的不同,以下代码会产生不同的作用:CREATETABLEmmg(aCHAR(3));CREATETABLEmmg1(bCHAR(3));INSERTINTOmmgVALUES('001');INSERTINTOmmgVALUES('002');INSERTINTOmmgVALUES('003')INSERTINTOmmg1VALUES('003');SELECT*FROMmmg;SELECT*FROMmmg1;选项1:将ANSI_UPDATE_CONSTRAINTS设置为STRICT:SETOPTIONpublic.
Ansi_update_constraints='strict';DELETEMMGFROMMMG1WHEREA=B;这样会产生错误,指示不允许进行所尝试的更新操作.
选项2:将ANSI_UPDATE_CONSTRAINTS设置为CURSORS或OFF:SETOPTIONpublic.
Ansi_update_constraints='CURSORS';//or'OFF'DELETEmmgFROMmmg1WHEREA=B;在这种情况下,删除操作可以完成而不会出现错误.
数据库选项336SybaseIQ另请参见UPDATE语句(第304页)ALLOW_READ_CLIENT_FILE选项启用客户端数据传输.
请参见"SQLAnywhereServer–数据库管理">"配置数据库">"数据库选项">"数据库选项简介">"按字母顺序排列的选项列表">"allow_read_client_file选项[数据库]".
注意:这些参考指向SQLAnywhere文档.
APPEND_LOAD选项帮助减少版本控制页的空间使用情况.
允许值ON、OFF默认值OFF范围设置此选项无需DBA权限.
可针对单个连接或PUBLIC组进行临时设置.
设置将立即生效.
描述APPEND_LOAD选项应用于LOAD、INSERT.
.
.
SELECT和INSERT.
.
.
VALUES语句并将在下次执行该语句时生效.
当APPEND_LOAD选项为OFF时,SybaseIQ将重新使用已删除行的行ID.
将此选项设置为ON可将新数据附加到表的末尾.
APPEND_LOAD对于分区表和未分区的表,行为有所不同.
分区表中的每个分区都指派有行ID范围.
对于分区表,当APPEND_LOAD为ON时,新行将附加到相应分区的末尾.
如果APPEND_LOAD为OFF,装载则重新使用已删除的行中的第一个可用行ID和空格.
对于未分区的表,当APPEND_LOAD为ON时,新行将添加到位于表行末尾的最大行ID后面.
当APPEND_LOAD为OFF时,装载操作将重新使用已删除行的ID.
对于非分区表,还可以使用LOAD或INSERTSTARTROWID子句指定插入的开始行,以控制插入行的位置.
数据库选项参考:语句和选项337ASE_BINARY_DISPLAY选项指定SybaseIQ二进制列的显示与AdaptiveServerEnterprise二进制列的显示一致.
允许值ON、OFF默认值OFF范围设置此选项无需DBA权限.
可针对单个连接或PUBLIC组进行临时设置.
设置将立即生效.
描述ASE_BINARY_DISPLAY会使SELECT语句的输出受到影响.
此选项只影响IQ存储中的列.
而不会影响变量、目录存储列或SQLAnywhere列.
当此选项为ON时,SybaseIQ将以可读的ASCII格式显示列;例如0x1234567890abcdef.
当此选项为OFF时,SybaseIQ会将列显示为二进制输出(而非ASCII).
将ASE_BINARY_DISPLAY设置为OFF可支持对二进制数据库类型执行批量复制操作.
SybaseIQ支持通过LOADTABLEUSINGCLIENTFILE语句批量装载远程数据.
另请参见LOADTABLE语句(第223页)ASE_FUNCTION_BEHAVIOR选项指定SybaseIQ函数(包括INTTOHEX和HEXTOINT)的输出与AdaptiveServerEnterprise函数的输出一致.
允许值ON、OFF默认值OFF范围设置此选项无需DBA权限.
可针对单个连接或PUBLIC组进行临时设置.
设置将立即生效.
描述在ASE_BEHAVIOR_FUNCTION处于ON的情况下,一些SybaseIQ数据类型转换函数(包括HEXTOINT和INTTOHEX)返回的输出与AdaptiveServerEnterprise函数的输数据库选项338SybaseIQ出一致.
ASE输出与SybaseIQ输出在格式和长度方面存在差异,ASE主要使用有符号32位作为缺省设置,SybaseIQ则主要使用无符号64位作为缺省设置.
SybaseIQ不支持64位整数,因为ASE没有64位整数的数据类型.
有关INTTOHEX和HEXTOINT函数行为的详细信息,请参见《参考:构件块、表和过程》.
示例在此示例中,根据ASE_FUNCTION_BEHAVIOR选项是ON还是OFF,HEXTOINT函数将返回不同的值.
HEXTOINT函数在ASE_FUNCTION_BEHAVIOR设置为OFF的情况下返回4294967287:selecthextoint('fffffff7')fromiq_dummyHEXTOINT函数在ASE_FUNCTION_BEHAVIOR设置为ON的情况下返回-9:selecthextoint('fffffff7')fromiq_dummy另请参见CONVERSION_ERROR选项[TSQL](第346页)AUDITING选项[database]在数据库中启用和禁用审计.
允许值ON、OFF默认值OFF范围只能为PUBLIC组设置.
设置将立即生效.
需要具有DBA权限.
描述此选项用于打开和关闭审计功能.
审计是事务日志中有关数据库中许多事件的详细信息的记录.
审计可提供一些安全功能,但会降低一些性能.
打开数据库的审计功能时,无法停止使用事务日志.
必须关闭审计功能才能关闭事务日志.
无法以只读模式启动打开审计功能的数据库.

为使AUDITING选项起作用,必须将审计选项设置为ON,并使用sa_enable_auditing_type系统过程指定要审计的信息的类型.
如果满足下列任一条件,则不会进行审计:数据库选项参考:语句和选项339AUDITING选项设置为OFF审计选项已禁用如果将AUDITING选项设置为ON但不指定审计选项,则会记录所有类型的审计信息.
或者,您可以使用sa_enable_auditing_type记录以下任意组合:权限检查、连接尝试、DDL语句、公共选项和触发器.
请参见《参考:构件块、表和过程》.
BIT_VECTOR_PINNABLE_CACHE_PERCENT选项持久位矢量对象在用户临时内存中可以固定的最大百分比.
允许值0–100默认值40范围设置此选项无需DBA权限.
可针对单个连接或PUBLIC组进行临时设置.
设置将立即生效.
描述BIT_VECTOR_PINNABLE_CACHE_PERCENT用于控制用户临时内存分配中任一持久位矢量对象可以固定的内存百分比.
其缺省值为40%,通常用户不应更改该值.
此选项主要供Sybase技术支持部门使用.
如果更改BIT_VECTOR_PINNABLE_CACHE_PERCENT的值,应当谨慎行事;首先要分析将会对多种查询产生的影响.
另请参见HASH_PINNABLE_CACHE_PERCENT选项(第375页)SORT_PINNABLE_CACHE_PERCENT选项(第432页)BLOCKING选项控制响应锁定冲突的行为.
允许值OFF默认值OFF范围可针对单个连接或PUBLIC组进行设置.
设置将立即生效.
数据库选项340SybaseIQ描述当BLOCKING设置为OFF时,如果某个事务尝试执行写入操作但被另一事务的读取锁阻止,则会收到一条错误.
BT_PREFETCH_MAX_MISS选项控制SybaseIQ确定是否继续针对给定查询预取B-tree页的方式.
允许值0–1000默认值2范围可针对单个连接或PUBLIC组进行设置.
设置将立即生效.
描述只有在Sybase技术支持部门的指导下执行此操作时才使用.
对于使用HG(High_Group)索引的查询,SybaseIQ将按顺序预取B-tree页,直到确定不再需要预取为止.
对于某些查询,此选项可能会提早关闭预取功能.
增大BT_PREFETCH_MAX_MISS的值将使SybaseIQ更有可能会继续进行预取,但与此同时,也可能会不必要地增加I/O.
如果使用HG索引的查询的运行速度比预期慢很多,请尝试逐步增大BT_PREFETCH_MAX_MISS的值.
可尝试使用不同的设置以找出可实现最佳性能的设置.
对于大多数查询,实用的设置范围为从1到10.
另请参见BT_PREFETCH_SIZE选项(第341页)PREFETCH_BUFFER_LIMIT选项(第417页)BT_PREFETCH_SIZE选项限制用于High_GroupB-tree的预先读取缓冲区的大小.
允许值0–100.
设置为0将禁用B-tree预取.
默认值10数据库选项参考:语句和选项341范围只能针对单个用户进行设置.
设置将立即生效.
描述对于任何对High_Group索引的顺序访问(如INSERT、大型DELETE、范围谓词和DBCC(数据库一致性检查程序)),缺省情况下均已激活B-tree预取.
BT_PREFETCH_SIZE可限制用于B-tree页的预先读取缓冲区的大小.
减少预取大小可节省缓冲区空间,但有时也会降低性能.
增加预取大小则可能带来边际收益.
对于非唯一的High_Group索引,此选项应与选项PREFETCH_GARRAY_PERCENT、GARRAY_INSERT_PREFETCH_SIZE和GARRAY_RO_PREFETCH_SIZE结合使用.
另请参见GARRAY_INSERT_PREFETCH_SIZE选项(第373页)GARRAY_RO_PREFETCH_SIZE选项(第374页)PREFETCH_GARRAY_PERCENT选项(第418页)BTREE_PAGE_SPLIT_PAD_PERCENT选项确定在对B-Tree结构进行页面拆分的过程中每页的填充因子.
允许值0–90默认值50范围设置此选项无需DBA权限.
可针对单个连接或PUBLIC组进行临时设置.
设置将立即生效.
描述HG、LF、DT、TIME和DTTM索引使用B-Tree结构.
B-Tree页的拆分会尝试将指定的百分比留空,以避免当新键插入索引时进行拆分.
索引在页级保留存储空间,插入附加数据时可将这些存储空间分配给新键.
保留空间会消耗额外的磁盘空间,但对增量插入的性能有所帮助.
如果计划进行增量插入,而且这些新行不包含索引中已经存在的值,那么为GARRAY_PAGE_SPLIT_PAD_PERCENT选项设置一个非零值可提高增量插入的性能.
如果未计划逐步更新索引,则可以减少此选项的值以节省磁盘空间.
另请参见GARRAY_FILL_FACTOR_PERCENT选项(第373页)数据库选项342SybaseIQGARRAY_PAGE_SPLIT_PAD_PERCENT选项(第374页)CACHE_PARTITIONS选项设置要用于主缓冲区高速缓存和临时缓冲区高速缓存的分区数.
允许值0,1,2,4,8,16,32,640:SybaseIQ自动将分区数计算为number_of_cpus/8,并舍入为最接近的2的乘方(最大为64次方).
1:只有1个分区;此值将禁用分区操作.
2–64:分区数;必须是2的乘方.
默认值0(SybaseIQ自动计算分区数).
范围只能为PUBLIC组设置.
下次启动数据库服务器时将对当前数据库起作用.
描述通过减少锁争用,对缓冲区高速缓存进行分区有时可以提高具有多个CPU系统的性能.
通常,应当信赖SybaseIQ自动计算的值,该值是以系统中的CPU数为依据的.
但是,如果您发现多CPU配置中的装载或查询性能比预期低,则可以通过为CACHE_PARTITIONS设置其它值来提高装载或查询性能.
请参见《系统管理指南第一卷》>"事务和版本控制">"管理锁的工具">"调查锁争用的工具".

CPU数和平台都可能对理想的分区数产生影响.
可尝试使用不同的值以确定适用于您的配置的最佳设置.
您为CACHE_PARTITIONS设置的值同时适用于主缓冲区高速缓存和临时缓冲区高速缓存.
对于每个缓冲区高速缓存,绝对最大分区数都是64.
-iqpartition服务器选项用于在服务器级设置分区限制.
如果在服务器启动时指定了-iqpartition,该选项将始终覆盖CACHE_PARTITIONS设置.
请参见《实用程序指南》.
分区数不会影响其它缓冲区高速缓存设置.
而且,也不会影响IQ监视器收集的统计信息;所有分区的统计信息均作为单个值进行累计和报告.
示例在具有100个CPU的系统中,如果您不设置CACHE_PARTITIONS,SybaseIQ会自动将分区数设置为16:100个CPU/8=12,舍入为16.
在这种设置中,共有16个分区用于main高速缓存,16个分区用于临时高速缓存.
数据库选项参考:语句和选项343在具有100个CPU的相同系统中,要将分区数显式设置为8,请指定:SETOPTION"PUBLIC".
CACHE_PARTITIONS=8CHAINED选项[TSQL]控制在缺少BEGINTRANSACTION语句时的事务模式.
允许值ON、OFFOFF(对于OpenClient和JDBC连接)默认值ON描述控制Transact-SQL事务模式.
在非链式模式(CHAINED=OFF)中,除非执行显式BEGINTRANSACTION语句来启动事务,否则每个语句都是单独提交的.
在链式模式(CHAINED=ON)中,事务是在任何数据检索或修改语句之前隐式启动的.
对于AdaptiveServerEnterprise,缺省设置为OFF.
CHECKPOINT_TIME选项设置数据库服务器在不进行检查点操作的情况下运行的最大时长(以分钟为单位).

允许值整数默认值60范围只能为PUBLIC组设置.
设置此选项需要具有DBA权限.
必须关闭并重新启动数据库服务器,才能使更改生效.
描述此选项与RECOVERY_TIME一起使用,以决定应在何时进行检查点操作.
另请参见RECOVERY_TIME选项(第428页)数据库选项344SybaseIQCIS_ROWSET_SIZE选项设置每次读取从远程服务器返回的行数.
允许值整数默认值50范围可针对单个连接或PUBLIC组进行设置.
在与远程服务器建立新连接时生效.
描述此选项会在您使用ODBC连接到远程数据库服务器时设置ODBCFetchArraySize的值.
有关远程数据访问的信息,请参见《系统管理指南第二卷》.
CLOSE_ON_ENDTRANS选项[TSQL]控制在事务结束时关闭游标.
允许值ON默认值ON描述当CLOSE_ON_ENDTRANS设置为ON(缺省值及唯一允许值)时,游标将在事务结束时关闭,该行为与Transact-SQL兼容.
CONTINUE_AFTER_RAISERROR选项[TSQL]控制RAISERROR语句后面跟随的行为.
允许值ON、OFF默认值ON描述RAISERROR语句用在过程中以产生错误.
如果CONTINUE_AFTER_RAISERROR设置为OFF,当遇到RAISERROR语句时将停止执行过程.
数据库选项参考:语句和选项345如果CONTINUE_AFTER_RAISERROR设置为ON,RAISERROR语句将不再发出有关执行结束错误的信号.
而是在过程完成时存储RAISERROR状态码和消息并返回最新的RAISERROR.
如果导致RAISERROR的过程是从其它过程调用的,则在最外层的调用过程结束之前,不会返回RAISERROR.
过程终止后,中间RAISERROR状态和代码将会丢失.
如果在返回时伴随RAISERROR发生了错误,则返回错误信息,而RAISERROR信息将丢失.
应用程序可以通过在不同的执行点检查@@error全局变量来查询中间RAISERROR状态.
只有在ON_TSQL_ERROR选项设置为CONDITIONAL(缺省设置)时,才使用CONTINUE_AFTER_RAISERROR的设置来控制RAISERROR语句后面的行为.
如果将ON_TSQL_ERROR选项设置为STOP或CONTINUE,ON_TSQL_ERROR设置会优先于CONTINUE_AFTER_RAISERROR设置.
另请参见ON_TSQL_ERROR选项[TSQL](第412页)CONVERSION_ERROR选项[TSQL]控制从数据库读取信息时对数据类型转换错误的报告.
允许值ON、OFF默认值ON描述当从数据库读取数据或向数据库中插入数据时,此选项用于控制数据库是将数据类型转换故障报告为错误(CONVERSION_ERROR设置为ON)还是报告为警告(CONVERSION_ERROR设置为OFF).
当CONVERSION_ERROR设置为ON时,产生SQLE_CONVERSION_ERROR错误.
如果此选项设置为OFF,则生成警告SQLE_CANNOT_CONVERT.
为LOAD语句执行数据转换的每个线程最多可以向.
iqmsg文件写入一条警告消息.
如果只以警告的形式报告转换错误,则使用NULL值代替不能进行转换的值.
在嵌入式SQL中,对于导致错误的列,指示符变量将被设置为-2.
CONVERSION_MODE选项针对各种操作限制二进制数据类型(BINARY、VARBINARY和LONGBINARY)与其它非二进制数据类型(BIT、TINYINT、SMALLINT、INT、UNSIGNEDINT、BIGINT、UNSIGNEDBIGINT、CHAR、VARCHAR和LONGVARCHAR)之间的隐式转换.
数据库选项346SybaseIQ允许值0,1默认值0范围可以进行公开设置,也可以进行临时设置.
设置此选项无需DBA权限.
描述缺省值0将保留12.
7版之前的隐式转换行为.
将CONVERSION_MODE设置为1,可限制在执行INSERT、UPDATE操作以及查询时将二进制数据类型隐式转换为任何其它非二进制数据类型.
这种限制二进制转换模式还适用于LOADTABLE缺省值和CHECK约束.
使用此选项可防止对加密数据进行隐式数据类型转换(这种转换会产生在语义上无意义的操作).
有关数据类型转换的详细信息,请参见《系统管理指南第一卷》.
有关列加密的详细信息,请参见"SybaseIQ中的高级安全性".
用户必须获得专门许可,才能使用SybaseIQ中的"高级安全性"选项的加密列功能.
隐式转换限制CONVERSION_MODE选项限制二进制模式值1(CONVERSION_MODE=1)将限制以下操作的隐式转换:LOADTABLE(具有CHECK约束或缺省值)INSERT.
.
.
SELECT、INSERT.
.
.
VALUE和INSERT.
.
.
LOCATION特定类型的UPDATE通过可更新游标进行的特定类型的INSERT和UPDATE一般查询的各个方面限制LOADTABLE的隐式二进制转换模式这种限制隐式二进制转换模式(CONVERSION_MODE设置为1)适用于具有CHECK约束或缺省值的LOADTABLE.
示例CREATETABLEt3(c1INT,csiSMALLINT,cvbVARBINARY(2),CHECK(csi"系统恢复和数据库修复">"数据库检验">"运行sp_iqcheckdb的问题".
DEBUG_MESSAGES选项控制是否执行包含DEBUGONLY子句的MESSAGE语句.
允许值ON、OFF数据库选项358SybaseIQ默认值OFF描述此选项可用于控制在包含指定了DEBUGONLY子句的MESSAGE语句的存储过程中调试消息的行为.
缺省情况下,此选项设置为Off,在执行MESSAGE语句时不显示调试消息.
通过将DEBUG_MESSAGES设置为ON,可以启用所有存储过程中的调试消息.
注意:DEBUGONLY将DEBUG_MESSAGES选项设置为OFF时,消息并不占用大量资源,因此在生产系统中,通常可以将这些语句保留在存储过程中.
不过,在可能会频繁执行这些语句的地方应慎用它们;否则,它们可能会导致性能略微降低.

另请参见MESSAGE语句(第242页)DEDICATED_TASK选项将请求处理任务专用于处理来自单个连接的请求.
允许值ON、OFF默认值OFF范围在当前连接的整个期间只能设置为临时选项.
设置此选项需要具有DBA权限.
描述DEDICATED_TASK连接选项设置为ON时,一个请求处理任务将专门处理一个连接的请求.
通过在启用此选项的情况下预先建立连接,可以在数据库服务器意外地不响应时收集有关其状态的信息.
DEFAULT_DBSPACE选项更改在其中创建了表或连接索引的缺省数据库空间.
允许值包含数据库空间名称的字符串默认值''(空字符串)数据库选项参考:语句和选项359范围可针对单个连接或PUBLIC组进行设置.
设置会立即生效.
需要具有DBA权限才能针对组或除了当前用户以外的用户设置此选项.
设置将立即生效.
描述DEFAULT_DBSPACE允许管理员设置组或用户的缺省数据库空间,或允许用户设置自己的缺省数据库空间.
IQ_SYSTEM_TEMP将始终用于全局临时表,除非使用了指定SYSTEM的表IN子句,在这种情况下将创建SA全局临时表.
创建数据库时,当PUBLIC.
DEFAULT_DBSPACE选项设置为空或显式设置为IQ_SYSTEM_MAIN时,将创建和暗示系统数据库空间IQ_SYSTEM_MAIN.
Sybase建议管理员在创建数据库后,立即创建第二个主数据库空间,从PUBLIC调用数据库空间IQ_SYSTEM_MAIN中的CREATE特权,将新主数据库空间的数据库空间中的CREATE授予选定用户或PUBLIC,并将PUBLIC.
DEFAULT_DBSPACE设置为新主数据库空间.
例如:CREATEDBSPACEuser_mainUSINGFILEuser_main'user_main1'SIZE10000;GRANTCREATEONuser_mainTOPUBLIC;REVOKECREATEONIQ_SYSTEM_MAINFROMPUBLIC;SETOPTIONPUBLIC.
DEFAULT_DBSPACE='user_main';示例在此示例中,将所有数据库空间中的CONNECT和RESOURCE特权授予用户usrA和usrB,并对每一用户授予对特定数据库空间的CREATE特权:GRANTCONNECT,RESOURCETOusrA,usrBIDENTIFIEDBYpwdA,pwdB;GRANTCREATEONdbsp1TOusrA;GRANTCREATEONdbsp3TOusrB;SETOPTION"usrA".
default_dbspace='dbsp1';SETOPTION"usrB".
default_dbspace='dbsp3';SETOPTION"PUBLIC".
default_dbspace=dbsp2;CREATETABLE"DBA".
t1(c1int,c2int);INSERTINTOt1VALUES(1,1);INSERTINTOt1VALUES(2,2);COMMIT;UsrA连接:CREATETABLE"UsrA".
t1(c1int,c2int);INSERTINTOt1VALUES(1,1);INSERTINTOt1VALUES(2,2);COMMIT;UsrB连接:数据库选项360SybaseIQCREATETABLE"UsrB".
t1(c1int,c2int);INSERTINTOt1VALUES(1,1);INSERTINTOt1VALUES(2,2);COMMIT;DBA连接:SELECTObject,DbspaceName,ObjSizeFROMsp_iqindexinfo();sp_iqindexinfo结果:DBA.
t1dbsp2200kDBA.
t1.
ASIQ_IDX_T730_C1_FPdbsp2288kDBA.
t1.
ASIQ_IDX_T730_C2_FPdbsp2288kusrA.
t1dbsp1200kusrA.
t1.
ASIQ_IDX_T731_C1_FPdbsp1288kusrA.
t1.
ASIQ_IDX_T731_C2_FPdbsp1288kusrB.
t1dbsp3200kusrB.
t1.
ASIQ_IDX_T732_C1_FPdbsp3288kusrB.
t1.
ASIQ_IDX_T732_C2_FPdbsp3288kDEFAULT_DISK_STRIPING选项设置所有数据库空间的缺省磁盘条带化值.
允许值ON、OFF默认值ON范围只能为PUBLIC组设置.
需要具有DBA权限.
描述缺省情况下,IQmain存储中所有数据库空间的磁盘条带化都为ON.
如果CREATEDBSPACE未定义条带化,此选项仅用于CREATEDBSPACE和定义缺省条带化值.
另请参见CREATEDBSPACE语句(第77页)DEFAULT_HAVING_SELECTIVITY_PPM选项为大部分HAVING子句的优化程序提供缺省选择性估计值(以百万分率表示).
允许值0–1000000默认值0数据库选项参考:语句和选项361范围可针对单个连接或PUBLIC组进行设置.
设置将立即生效.
描述DEFAULT_HAVING_SELECTIVITY_PPM为HAVING子句设置选择性,覆盖优化程序估计值.
HAVING子句可过滤GROUPBY子句的结果或选择列表中只包含集合函数的查询的结果.
当DEFAULT_HAVING_SELECTIVITY_PPM设置为缺省值0时,优化程序将估计HAVING子句过滤的行数.
有时IQ优化程序获得的信息不全面,无法选择精确的选择性,在这种情况下会选择通用估计值40%.
DEFAULT_HAVING_SELECTIVITY_PPM使用户可以替换查询中所有HAVING谓词的优化程序估计值.
用户还可以指定查询中各个HAVING子句的选择性,如《参考:构件块、表和过程》中所述.
DEFAULT_ISQL_ENCODING选项[InteractiveSQL]指定READ和OUTPUT语句使用的代码页.
允许值identifier或string缺省值使用系统代码页(空字符串)范围在当前连接的整个期间只能设置为临时选项.
描述DEFAULT_ISQL_ENCODING用于指定读取或写入文件时使用的代码页.
不能永久设置此选项.
缺省代码页是所运行平台的缺省代码页.
在英语版Windows计算机上,缺省代码页为1252.
InteractiveSQL按以下方法确定用于特定OUTPUT或READ语句的代码页,其中,列表中位置靠前的代码页值优先于位置靠后的代码页值:在OUTPUT或READ语句的ENCODING子句中指定的代码页使用DEFAULT_ISQL_ENCODING选项指定的代码页(如果设置此选项)运行InteractiveSQL的计算机的缺省代码页有关支持的代码页的列表,请参见"SQLAnywhereServer–数据库管理">"配置数据库">"国际语言和字符集">"字符集和归类参考信息">"支持的归类和替代归类".
另请参见"SQLAnywhereServer–数据库管理">"配置数据库">"国际语言和字符集">"了解字符集">"了解字符集".
数据库选项362SybaseIQ注意:这些参考指向SQLAnywhere文档.
示例将编码设置为UTF-16(用于读取Unicode文件):SETTEMPORARYOPTIONDEFAULT_ISQL_ENCODING='UTF-16'另请参见OUTPUT语句[InteractiveSQL](第247页)READ语句[InteractiveSQL](第258页)DEFAULT_KB_PER_STRIPE选项设置在写入操作移至下一个带区以前数据写入的带区量上限(以KB为单位).
此设置是IQmain存储中所有数据库空间的缺省大小.
允许值1到最大整数默认值1范围只能为PUBLIC组设置.
需要具有DBA权限.
描述缺省值为1KB意味着压缩一页,且压缩的页作为单一操作写入磁盘.
无论选择的页面大小如何,下一操作将写入该数据库空间的下一数据库文件.
要在移至下一带区前向同一带区写入多页,请更改DEFAULT_KB_PER_STRIPE设置.
例如,如果页大小为128KB,并且DEFAULT_KB_PER_STRIPE设置为512KB,SybaseIQ将对页写入排队并在压缩页达到512KB的最小值后写入磁盘.
如果CREATEDBSPACE不指定条带化大小,此选项仅用于CREATEDBSPACE和定义IQmain存储中数据库空间的缺省磁盘条带化大小.
另请参见CREATEDBSPACE语句(第77页)DEFAULT_LIKE_MATCH_SELECTIVITY_PPM选项为大部分LIKE谓词的优化程序提供缺省选择性估计值(以百万分率表示).
允许值0到1000000数据库选项参考:语句和选项363默认值150000范围可针对单个连接或PUBLIC组进行设置.
设置将立即生效.
描述DEFAULT_LIKE_MATCH_SELECTIVITY_PPM可为一般LIKE为此设置缺省选择性,例如LIKE'string%string',其中%是通配符.
如果未提供其它选择性信息,并且匹配字符串不是以一组常量字符后跟单个通配符开头,则优化程序会使用此选项.
如果该列包含LF索引或单字节、双字节或三字节的FP索引,则优化程序可以获得准确的信息且不需要使用该值.
用户还可以指定查询中的选择性.
有关用户提供的条件提示,请参见《参考:构件块、表和过程》.
另请参见DEFAULT_LIKE_RANGE_SELECTIVITY_PPM选项(第364页)FP_LOOKUP_SIZE选项(第370页)DEFAULT_LIKE_RANGE_SELECTIVITY_PPM选项为前导常量LIKE谓词的优化程序提供缺省选择性估计值(以百万分率表示).
允许值1到1000000默认值150000范围可针对单个连接或PUBLIC组进行设置.
设置将立即生效.
描述DEFAULT_LIKE_RANGE_SELECTIVITY_PPM可为LIKE谓词设置缺省选择性,格式为LIKE'string%',其中匹配字符串是一组常量字符后跟一个通配符(%).
如果未提供其它选择性信息,优化程序会使用此选项.
如果该列包含LF索引或单字节、双字节或三字节的FP索引,则优化程序可以获得准确的信息且不需要使用该值.
用户还可以指定查询中的选择性.
有关用户提供的条件提示,请参见《参考:构件块、表和过程》.
数据库选项364SybaseIQ另请参见DEFAULT_LIKE_MATCH_SELECTIVITY_PPM选项(第363页)FP_LOOKUP_SIZE选项(第370页)DEFAULT_PROXY_TABLE_ROW_COUNT选项让您能够覆盖从代理表返回的行数的缺省估计值.
允许值0到4294967295缺省值200000范围设置此选项需要具有DBA权限.
只能为PUBLIC组临时设置.
DEFAULT_TABLE_UDF_ROW_COUNTOption使您得以替换表UDF(C、C++或Java表UDF)所返回的默认行数估计.
允许值0至4294967295缺省值200000范围设置此选项需要具有DBA权限.
只能为PUBLIC组临时设置.
描述表UDF可以使用DEFAULT_TABLE_UDF_ROW_COUNT选项为查询处理器提供估计行数(表UDF将返回该值).
这是Java表UDF传递此信息的唯一方法.
然而,对于使用C/C++编写的表UDF,UDF开发人员应该考虑在describe阶段发布此信息,即使用EXTFNAPIV4_DESCRIBE_PARM_TABLE_NUM_ROWS描述参数发布它所期望返回的行数.
EXTFNAPIV4_DESCRIBE_PARM_TABLE_NUM_ROWS的值始终会覆盖DEFAULT_PROXY_TABLE_UDF_ROW_COUNT选项的值.
DELAYED_COMMIT_TIMEOUT选项确定服务器在执行一条COMMIT后何时将控制返回应用程序.
允许值整数(以毫秒为单位).
数据库选项参考:语句和选项365默认值500描述此选项将被SybaseIQ忽略,因为DELAYED_COMMITS只能设置为OFF.
DELAYED_COMMITS选项确定服务器在执行一条COMMIT后何时将控制返回应用程序.
允许值OFF默认值OFF.
此值对应于ISOCOMMIT行为.
描述如果设置为OFF(SybaseIQ允许的唯一值),应用程序必须等到COMMIT写入磁盘.
对于ANSI/ISOCOMMIT行为,必须将此选项设置为OFF.
DISABLE_RI_CHECK选项允许装载、插入、更新或删除操作绕过参照完整性检查,以提高性能.
允许值ON、OFF默认值OFF范围设置此选项无需DBA权限.
可针对单个连接或PUBLIC组进行临时设置.
设置将立即生效.
描述当DISABLE_RI_CHECK设置为ON时,用户需要确保请求过程中不发生破坏参照完整性的情况.
DIVIDE_BY_ZERO_ERROR选项[TSQL]控制对以零为除数这一情况的报告.
允许值ON、OFF数据库选项366SybaseIQ默认值ON范围此选项指示是否以错误形式报告以零为除数这一情况.
如果此选项设置为ON,以零为除数会产生一个SQLSTATE22012错误.
如果此选项设置为OFF,则以零为除数不是错误;会返回NULL.
DQP_ENABLED选项使用临时数据库选项dqp_enabled,您可以在连接级别启用或禁用DQP.
您可以将临时数据库选项dqp_enabled设置为OFF以禁用当前连接的DQP.
您可以将该选项设置为ON(缺省值)以启用当前连接的DQP,但前提是当前连接的逻辑服务器的用户登录策略为该用户启用了DQP.
用户必须获得MultiplexGridOption使用许可才能运行辅助服务器.
有关dqp_enabled语法和完整说明,请参见《使用SybaseIQMultiplex》.
EARLY_PREDICATE_EXECUTION选项控制是否在查询优化之前执行简单本地谓词.
允许值ON、OFF默认值ON范围设置此选项无需DBA权限.
可针对单个连接或PUBLIC组进行临时设置.
设置将立即生效.
描述如果此选项为ON(缺省设置),优化程序会在查询优化(包括连接排序、连接算法选择和分组算法选择)之前查找、准备和执行只包含本地列和约束的谓词,以提高查询计划中"估计结果行数"值的精度.
如果此选项为OFF,优化程序将查找并准备简单谓词,但不会在查询优化之前执行这些简单谓词.
如果不执行谓词,产生的"估计结果行数"值的精度将比较低.
一般来讲,EARLY_PREDICATE_EXECUTION应始终保持为ON,因为这样会改善很多查询的查询计划.
数据库选项参考:语句和选项367请注意,如果EARLY_PREDICATE_EXECUTION为ON,SybaseIQ会在生成查询计划之前为所有查询执行本地谓词,即使NOEXEC选项为ON也是如此.
生成的查询计划与运行时计划相同.
根节点的查询计划中包括以下信息:用于执行本地不变谓词的线程数:如果大于1,表示并行执行本地不变谓词Early_Predicate_Execution:指示该选项是否为OFF游标创建时间:游标创建的时间简单谓词(其执行受此选项控制)在查询计划中称为不变谓词.
如果叶节点有任何本地不变谓词,该节点的查询计划将包括以下信息:执行不变谓词后生成的行数:执行本地不变谓词后产生的实际结果执行不变谓词后的估计行数:使用估计的本地不变谓词选择性计算得出条件开始时间:执行本地不变谓词的开始时间条件完成时间:执行本地不变谓词的结束时间条件经历时间:执行本地不变谓词经历的时间ENABLE_LOB_VARIABLES选项控制大对象变量的数据类型转换.
用户必须获得非结构化数据分析选件的使用许可才能使用大对象变量.
有关ENABLE_LOB_VARIABLES语法和完整说明,请参见《SybaseIQ中的非结构化数据分析》.
EXTENDED_JOIN_SYNTAX选项控制对于包含多表连接的不明确语法的查询,是允许使用还是报告为错误.

允许值ON、OFF默认值ON描述此选项针对包含具有不明确语法(原因是具有空值的表存在重复相关名)的外部连接的查询报告语法错误.
以下连接子句显示了满足C1条件时报告的查询类型:(RleftouterjoinT,TjoinSon(C1))如果EXTENDED_JOIN_SYNTAX选项设置为ON,此查询的解释如下(其中满足C1和C2条件):(RleftouterjoinTon(C1))joinSon(C2)数据库选项368SybaseIQFORCE_DROP选项使SybaseIQ在执行DROP命令的过程中泄漏(而不是回收)数据库磁盘空间.
允许值ON、OFF默认值OFF范围设置此选项需要具有DBA权限.
可针对单个连接或PUBLIC组进行临时设置.
设置将立即生效.
描述必须删除已损坏的索引、连接索引、列或表,并将FORCE_DROP选项设置为ON.
这样可以避免使用所删除对象中的不正确或可疑的文件空间分配信息对空闲列表进行不正确的更新.
删除损坏的对象后,可以使用-iqfrec和-iqdroplks服务器开关回收文件空间.
在强制删除对象时,必须确保只有DBA连接到数据库.
强制删除后,必须立即重新启动服务器.
除非Sybase技术支持部门指导您强制删除对象,否则不要尝试该操作.
FORCE_DROP有关系统恢复和数据库修复的过程,请参见《系统管理指南:第一卷》.
FORCE_NO_SCROLL_CURSORS选项强制所有游标成为非滚动游标.
允许值ON、OFF默认值OFF范围设置此选项无需DBA权限.
可针对单个连接或PUBLIC组进行临时设置.
设置将立即生效.
描述缺省情况下,所有游标均为滚动游标.
如果滚动游标未声明任何宿主变量,将使SybaseIQ创建用于临时存储结果的缓冲区.
结果集中的每一行都存储为允许向后滚动.
数据库选项参考:语句和选项369将FORCE_NO_SCROLL_CURSORS设置为ON会降低临时存储需求.
如果正在检索的行数非常庞大(数百万),则选项可能会很有用.
但如果前端应用程序经常使用向后滚动游标操作,将此选项设置为OFF会提高速度.
如果前端应用程序很少执行向后滚动,请将FORCE_NO_SCROLL_CURSORS='ON'作为永久PUBLIC选项以使用更少内存,并提高查询性能.
FORCE_UPDATABLE_CURSORS选项控制是否可对尚未声明为可更新游标的游标进行更新.
允许值ON、OFF默认值OFF范围可针对单个连接或PUBLIC组进行临时设置.
不需要DBA权限.
设置将立即生效.
描述当FORCE_UPDATABLE_CURSORS选项为ON时,可以对尚未声明为可更新游标的游标进行更新.
此选项允许在前端应用程序中使用可更新游标,而无需指定FORUPDATE语句的DECLARECURSOR子句.
除非有绝对的必要,否则Sybase不建议您使用FORCE_UPDATABLE_CURSORS.
FP_LOOKUP_SIZE选项指定SybaseIQ中使用的最大查找页数和控制分配给创建查找FP索引的高速缓存量,尤其是FP(3)索引.
允许值1MB–4096MB默认值16MB范围设置此选项需要具有DBA权限.
可针对单个连接或PUBLIC组进行临时设置.
设置将立即生效.
描述FP_LOOKUP_SIZE控制最大查找页数.
FP_LOOKUP_SIZE必须设置为Public,因此允许的语法为:数据库选项370SybaseIQSETOPTIONpublic.
FP_LOOKUP_SIZE=1以下数据库选项支持3字节索引:INDEX_ADVISORMINIMIZE_STORAGEFP_LOOKUP_SIZE_PPM以下存储过程支持3字节索引:sp_iqcheckdbsp_iqcolumnsp_iqindexadvicesp_iqindexmetadatasp_iqindexsizesp_iqindexsp_iqindexfragmentationsp_iqrebuildindexsp_iqrowdensity另请参见FP_LOOKUP_SIZE_PPM选项(第371页)MINIMIZE_STORAGE选项(第405页)FP_LOOKUP_SIZE_PPM选项将SybaseIQ中FP查找的存储大小限制在此主内存的值(以百万分率表示)之内.
允许值1到1000000默认值2500范围设置此选项需要具有DBA权限.
可针对单个连接或PUBLIC组进行临时设置.
设置将立即生效.
描述FP_LOOKUP_SIZE_PPM控制为所有FP查找索引(尤其是为FP(3)索引)创建查找FP索引时所分配的main高速缓存量.
此选项控制最大查找页数,并将该数字限制在主内存的值(以百万分率表示)之内,即FP_LOOKUP_SIZE_PPM*sizeofmainmemory/1,000,000的值,其中主内存大小由-iqmc服务器启动参数确定.
数据库选项参考:语句和选项371以下选项支持3字节索引:FP_LOOKUP_SIZEINDEX_ADVISORMINIMIZE_STORAGE另请参见FP_LOOKUP_SIZE选项(第370页)MINIMIZE_STORAGE选项(第405页)FP_PREDICATE_WORKUNIT_PAGES选项指定缺省索引中使用的并行度.
允许值整数默认值200范围设置此选项无需DBA权限.
可针对单个连接或PUBLIC组进行临时设置.
设置将立即生效.
描述缺省索引以并行方式计算某些谓词,如SUM、RANGE、MIN、MAX和COUNTDISTINCT.
FP_PREDICATE_WORKUNIT_PAGES通过指定每个线程处理的页数对所使用的并行度产生影响.
要提高并行度,应减少此选项的值.
FPL_EXPRESSION_MEMORY_KB选项控制对涉及函数表达式(针对包含枚举存储的列)的查询的优化的内存使用情况.

允许值0–20000默认值1024千字节范围可针对单个连接或PUBLIC组进行临时设置.
设置将立即生效.
描述FPL_EXPRESSION_MEMORY_KB控制对涉及函数表达式(针对包含枚举存储的列)的查询的优化的内存使用情况.
此选项使DBA可以约束该优化占用的内存,并与其它SybaseIQ内存需求(如高速缓存)进行平衡.
将此选项设置为0将关闭优化功能.
数据库选项372SybaseIQGARRAY_FILL_FACTOR_PERCENT选项指定每个HGGArray页要保留以供将来向现有组进行增量插入的空间百分比.
允许值0–1000默认值25范围设置此选项无需DBA权限.
可针对单个连接或PUBLIC组进行临时设置.
设置将立即生效.
描述GArray将尝试拉长每个组以容纳该值所设置的一块空闲空间.
这部分空间用于添加到现有索引组的行.
HG索引可针对每个组保留一些存储空间(将组定义为具有相等值的一组行).
保留空间会消耗额外的磁盘空间,但对向HG索引进行增量插入的性能有所帮助.
如果计划将来向HG索引进行增量插入,而且这些新行的值已存在于索引中,那么为此选项设置一个非零值可提高增量插入的性能.
如果未计划逐步更新索引,则可以减少此选项的值以节省磁盘空间.
另请参见GARRAY_PAGE_SPLIT_PAD_PERCENT选项(第374页)GARRAY_INSERT_PREFETCH_SIZE选项指定用于预取的页数.
允许值0–100默认值3范围设置此选项无需DBA权限.
可针对单个连接或PUBLIC组进行临时设置.
设置将立即生效.
描述此选项定义在对具有HG索引的列进行插入的过程中,预先读取的数据库页数.
除非有Sybase技术支持部门的指导,否则不要设置此选项.
数据库选项参考:语句和选项373另请参见GARRAY_FILL_FACTOR_PERCENT选项(第373页)GARRAY_PAGE_SPLIT_PAD_PERCENT选项确定在对Garray进行页面拆分的过程中每页的填充因子,并指定每个HGGarray页要保留用于将来增量插入的空间百分比.
允许值0–100默认值25范围设置此选项无需DBA权限.
可针对单个连接或PUBLIC组进行临时设置.
设置将立即生效.
描述GArray页的拆分会尝试将该百分比留空.
这部分空间用于添加到新索引组的行.

HG索引可以在页级保留存储空间,插入附加行时可将这些存储空间分配给新组.
保留空间会消耗额外的磁盘空间,但对向HG索引进行增量插入的性能有所帮助.
如果计划将来向HG索引进行增量插入,而且这些新行不包含索引中已经存在的值,那么为GARRAY_PAGE_SPLIT_PAD_PERCENT选项设置一个非零值可提高增量插入的性能.
如果未计划逐步更新索引,则可以减少此选项的值以节省磁盘空间.
另请参见GARRAY_FILL_FACTOR_PERCENT选项(第373页)GARRAY_RO_PREFETCH_SIZE选项指定用于预取的页数.
允许值0–100默认值10范围设置此选项无需DBA权限.
可针对单个连接或PUBLIC组进行临时设置.
设置将立即生效.
数据库选项374SybaseIQ描述此选项定义在对具有HG索引的列进行查询的过程中,预先读取的数据库页数.
除非有Sybase技术支持部门的指导,否则不要设置此选项.
HASH_PINNABLE_CACHE_PERCENT选项控制散列对象在用户临时内存中可以固定的最大百分比.
允许值0–100默认值20范围设置此选项无需DBA权限.
可针对单个连接或PUBLIC组进行临时设置.
设置将立即生效.
描述HASH_PINNABLE_CACHE_PERCENT用于控制用户临时内存分配中任何一个散列对象可以固定的内存百分比.
缺省值为20%,但在运行复杂查询时应将此数字减少为10%,或在使用只需一个大型散列对象即可运行的简单查询(如大型IN子查询)时将其增加至50%.
HASH_PINNABLE_CACHE_PERCENT主要供Sybase技术支持部门使用.
如果更改该选项的值,应当谨慎行事;首先要分析将会对多种查询产生的影响.
另请参见BIT_VECTOR_PINNABLE_CACHE_PERCENT选项(第340页)SORT_PINNABLE_CACHE_PERCENT选项(第432页)HASH_THRASHING_PERCENT选项指定对于包括涉及散列算法的查询的语句,在其执行过程中允许的硬盘I/O数百分比,达到该百分比后将回退语句并报告错误消息.
允许值0–100默认值10范围可针对单个连接或PUBLIC组进行设置.
设置将立即生效.
数据库选项参考:语句和选项375描述如果某个使用散列算法的查询产生过大的硬盘I/O数(从内存到磁盘的分页缓冲数),则会对查询性能产生负面影响,还可能使服务器的性能受到影响.
HASH_THRASHING_PERCENT可以控制在语句回退并返回错误消息之前允许的硬盘I/O百分比.
错误消息的文本为Hashinsertthrashingdetected(检测到散列插入抖动)或Hashfindthrashingdetected(检测到散列查找抖动).
HASH_THRASHING_PERCENT的缺省值为10%.
增大此值将允许在回退之前对磁盘进行更多分页,而减小此值将减少在回退之前允许的分页.
有关控制过多分页和使用HASH_THRASHING_PERCENT的详细信息,请参见《系统管理指南第一卷》>"故障排除提示">"特定情况的解决方案">"处理问题">"意外的长期装载或查询".
另请参见HASH_PINNABLE_CACHE_PERCENT选项(第375页)HG_DELETE_METHOD选项指定在HG索引中进行删除时所使用的算法.
允许值0–3默认值0范围设置此选项无需DBA权限.
可针对单个连接或PUBLIC组进行临时设置.
设置将立即生效.
描述此选项用于选择HG索引在删除操作过程中使用的算法.
开销模型在选择相应的删除算法时会考虑CPU相关开销以及I/O相关开销.
开销模型考虑下列各项:删除行索引大小索引数据类型的宽度索引数据的基数可用临时高速缓存与计算机相关的I/O和CPU特性可用CPU和线程参照完整性开销数据库选项376SybaseIQ要强制实施"小型"方法,则将此选项设置为1.
要强制实施"大型"方法,则将此选项设置为2.
要强制实施"中型"方法,则将此选项设置为3.
HG_SEARCH_RANGE选项指定在对HG索引中的范围谓词进行评估时使用的BTree页数的上限.
允许值整数默认值10范围可针对单个连接或PUBLIC组进行设置.
设置将立即生效.
描述此选项的缺省设置适用于大多数查询.
此选项可有效地控制优化程序在搜索要用于范围谓词的最佳索引所用的时间.
为此选项设置更高的值可能会导致在优化程序中的查询时间更长,但这样可能会选择一个更好的索引来解决范围谓词问题.
HTTP_SESSION_TIMEOUT选项指定客户端放弃之前等待HTTP会话超时的时间(以分钟为单位).
允许值整数(0–525600)默认值30范围需要具有DBA权限.
只能为PUBLIC组设置.
描述此选项为Web服务应用程序提供可变会话超时控制.
Web服务应用程序可以在任何拥有HTTP会话的请求内更改超时值,但对超时值的更改可能会在HTTP会话超时后影响队列中的后续请求.
Web应用程序必须包含逻辑以检测客户端是否尝试访问已不存在的HTTP会话.
这可以通过检查SessionCreateTime连接属性值以确定时间戳是否有效来完成:如果HTTP请求与当前HTTP会话不相关联,则SessionCreateTime连接属性包含空字符串.
数据库选项参考:语句和选项377另请参见另请参见"SQLAnywhereServer-编程">"HTTPWeb服务">"使用SQLAnywhere作为HTTPWeb服务器".
请参见"SQLAnywhereServer–数据库管理">"配置数据库">"连接属性、数据库属性和数据库服务器属性">"连接属性"中的SessionCreateTime和http_session_timeout属性.
注意:这些参考指向SQLAnywhere文档.
IDENTITY_ENFORCE_UNIQUENESS选项针对每个IDENTITY/AUTOINCREMENT列创建唯一的HG索引(前提是该列尚未成为主键).
允许值ON、OFF默认值OFF范围只能针对用户或PUBLIC组进行临时设置(对于连接).
设置将立即生效.
描述当此选项设置为ON时,会针对将来的标识列创建HG索引.
只有满足以下条件才能删除索引:进行删除的用户是唯一使用该表的用户,且该表不是本地临时表.

另请参见QUERY_PLAN选项(第421页)IDENTITY_INSERT选项使用户可以在IDENTITY或AUTOINCREMENT列中插入值或对该列进行更新.
允许值='tablename'默认值选项未设置.
范围只能针对用户或PUBLIC组进行临时设置(对于连接).
设置将立即生效.
注意:如果为当前选项设置用户级选项,则还会设置相应的临时选项.
请参见"数据库选项的作用域和持续时间".
数据库选项378SybaseIQ描述设置IDENTITY_INSERT后,可以进行插入/更新.
必须指定表名才能标识要插入或更新的列.
如果您不是表的所有者,请将表名限定为所有者名称.
要删除包含IDENTITY列的表,IDENTITY_INSERT不能设置为指向该表.
示例如果使用表Employees来运行显示插入:SETTEMPORARYOPTIONIDENTITY_INSERT='Employees'要禁用此选项,请指定等号和空字符串:SETTEMPORARYOPTIONIDENTITY_INSERT=''在以DBA身份连接到数据库的情况下,演示用户级选项对临时选项的影响(请参见"注释"):SETOPTIONIDENTITY_INSERT='Customers'对于用户DBA,该选项的值设置为Customers,该值是当前连接的临时设置.
对于随后以DBA身份连接到该数据库的其他用户,其IDENTITY_INSERT选项值也为Customers.
另请参见数据库选项的作用域和持续时间(第317页)QUERY_PLAN选项(第421页)INDEX_ADVISOR选项生成相应消息,这些消息建议增加列索引以提高一个或多个查询的性能.

允许值ON、OFF默认值OFF范围可针对用户或PUBLIC组进行临时设置(对于连接).
设置将立即生效.
描述当此选项设置为ON时,索引顾问会在SybaseIQ查询计划中打印索引建议,如果未启用查询计划,则将其作为SybaseIQ消息日志文件中单独的消息进行打印.
这些消息以字符串"IndexAdvisor:"开头,并且您可以使用该字符串在SybaseIQ消息文件中对其进行搜索和过滤.
输出格式为OWNER.
TABLE.
COLUMN.
设置INDEX_ADVISOR和INDEX_ADVISOR_MAX_ROWS可累计索引建议.
数据库选项参考:语句和选项379注意:当INDEX_ADVISOR_MAX_ROWS设置为ON时,索引建议不会作为单独的消息写入SybaseIQ消息文件.
但SybaseIQ消息文件中的查询计划中仍会显示建议.
表25.
索引顾问情况建议单列中的本地谓词(根据情况需要HG、LF、HNG、DATE、TIME或DATETIME索引).
建议将索引添加到列中单列连接键(适用LF或HG索引).
将LF或HG索引添加到连接键中单列候选键索引(存在一个HG,但可以更改为唯一的HG或)LF将连接键更改为唯一的LF或HG索引连接键的数据类型不匹配,重新生成具有匹配数据类型的一列会有所帮助.
使连接键和的数据类型相同子查询谓词列(适用LF或HG索引).
将LF或HG索引添加到子查询列中分组列(适用LF或HG索引).
为分组列创建LF或HG索引单表列间比较(两列的数据类型相同,建议使用CMP索引).
为、创建CMP索引若干列(存在一个LF或HG索引,不同值的数量符合要求,建议将FP转换为一个或两个字节的FP索引).
使用"optimizestorage=on"的设置重建要支持查找宽度为3个字节的缺省索引使用IQUNIQUE约束值65537重建FP索引作为3字节的FP您可以自行决定从附加索引中获益的查询的数量,以及创建并维护索引的开销是否值得.
在某些情况下,无法确定添加建议的索引会带来多少性能上的提高(如果有).

例如,假定有若干用作连接键的列.
SybaseIQ大量使用HG或LF索引提供的元数据来生成更好/更快的查询计划以执行查询.
在没有HG或LF索引的连接列中放置这样一个索引会使IQ优化程序更有希望选择更快的连接计划,但如果不添加索引而再次运行查询,将很难确定查询性能是保持不变还是因新索引而有所提高.
示例查询计划设置为OFF时的索引顾问输出:I.
03/3014:18:45.
0000000002Advice:AddHGorLFindexonDBA.
ta.
c1Predicate:(ta2.
c1"配置数据库">"数据库选项">"按字母顺序排列的选项列表">"javavm选项".
注意:此参考指向SQLAnywhere文档.
另请参见JAVA_LOCATION选项(第386页)JOIN_EXPANSION_FACTOR选项控制在少见的复杂情况中对优化程序的连接结果进行估计的保守程度.

允许值1–100默认值30数据库选项参考:语句和选项387范围可针对单个连接或PUBLIC组进行临时设置.
设置将立即生效.
描述此选项控制在对特定连接的输入已经经过了至少一个可以导致行的多个副本从正在连接的表中凸显出来的中间连接的情况下,对连接优化程序的结果大小进行估计时的保守程度.
零级别指示优化程序应当使用与如果没有中间扩展连接则会使用的估计方法相同的、在中间扩展连接以上的估计方法.
这将导致最积极(小)的估计连接结果大小.
100级别指示一旦有中间扩展连接则优化程序应当在估计时更保守,并且这将导致最保守(大)的估计连接结果大小.
通常,不需要更改该值.
如果更改,则Sybase建议将JOIN_EXPANSION_FACTOR设置为临时或用户选项.
JOIN_OPTIMIZATION选项启用或禁用连接顺序的优化.
允许值ON、OFF默认值ON范围设置此选项无需DBA权限.
可针对单个连接或PUBLIC组进行临时设置.
设置将立即生效.
描述当JOIN_OPTIMIZATION选项是ON时,SybaseIQ将优化连接顺序,以减少中间结果和排序的大小,并平衡系统负载.
当选项是OFF时,连接顺序由SELECT语句的FROM中的包的顺序决定.
JOIN_OPTIMIZATION应始终设置为ON.
JOIN_OPTIMIZATION控制连接的顺序,但不控制表的顺序.
为了显示差别,以下面有四个表的FROM子句为例:FROMA,B,C,D缺省情况下,此FROM子句将创建还可以显式表示为以下示例的连接的左深计划:FROM(((A,B),C),D)数据库选项388SybaseIQ如果关闭JOIN_OPTIMIZATION,则会按照FROM子句中指定的顺序准确保持这些连接在表集合上的顺序.
因此A和B必须首先连接,然后该结果必须连接到表C,最终连接到表D.
此选项不会控制每个连接的左/右方向.
甚至在JOIN_OPTIMIZATION关闭时,在假定有上面的FROM子句时,优化程序也可以产生像下面这样的连接计划:FROM((C,(A,B)),D)或FROM(((B,A),C),D)或FROM(D,((A,B),C))在所有这些情况中,A和B首先连接,然后该结果连接到C,最终该结果连接到表D.
连接的顺序保持不变,但表的出现顺序不同.
通常,如果关闭JOIN_OPTIMIZATION,则可能应当在FROM子句中使用圆括号(与上面的示例一样),以确保获取所需的连接顺序.
如果要将A和B连接到C和D的连接结果,则可以通过使用圆括号指定此连接:FROM((A,B),(C,D))注意,即使所有表以相同顺序出现,上面的FROM子句的连接顺序也不同于原始FROM子句示例.
JOIN_OPTIMIZATION仅仅是为了诊断模糊连接性能问题,或为了手动优化少量预定义的查询,就应当将设置为OFF.
在JOIN_OPTIMIZATION关闭时,查询可以连接最多128个表,但也可能遭受严重的性能降级.
警告!
如果关闭JOIN_OPTIMIZATION,则SybaseIQ无法确保包含连接的查询有最佳性能.
Y您要对查询的性能方面完全负责.
JOIN_PREFERENCE选项控制处理连接时的算法选择.
允许值-7到7默认值0范围无需DBA权限.
可针对单个连接或PUBLIC组进行临时设置.
设置将立即生效.
数据库选项参考:语句和选项389描述对于查询中的连接,IQ优化程序有几个用于处理连接的算法可供选择.
JOIN_PREFERENCE允许您在选择要使用的算法时覆盖优化程序的基于成本的决策.
它不会覆盖用于确定算法在查询引擎内是否合法的内部规则.
如果将它设置为任何非零值,则查询中的每个连接都会受影响;您不能在查询中使用它有选择地修改几个连接中的某一个.
此选项通常用于内部测试,只有经验丰富的DBA才能使用.
表28.
JOIN_PREFERENCE有效值值操作0让优化程序选择1首选排序合并2首选嵌套循环3首选嵌套循环叠加4首选散列5首选散列叠加6首选预连接7首选排序合并叠加-1避免排序合并-2避免嵌套循环-3避免嵌套循环叠加-4避免散列-5避免散列叠加-6避免预连接-7避免排序合并叠加简单的等同性连接谓词可使用谓词提示标记,该提示支持仅针对该连接指定连接首选项.
如果同一连接具有多个带有本地连接首选项的连接条件,并且如果这些提示不是相同值,那么,将忽略该连接的所有本地首选项.
本地连接首选项不会影响优化程序选择的连接顺序.
以下示例请求散列连接:AND(T.
X=10*R.
x,'J:4')数据库选项390SybaseIQJOIN_SIMPLIFICATION_THRESHOLD选项控制在应用任何连接优化程序简化机制之前被连接在一起的最小表数.

允许值1–64默认值15范围可针对单个连接或PUBLIC组进行临时设置.
设置将立即生效.
描述通过分别处理查找表(即非选择性维度表)和有效的笛卡儿乘积的表,查询优化程序可简化对连接顺序的优化.
在简化之后,它将优化剩余表的连接顺序,直到达到由MAX_JOIN_ENUMERATION设置的限制.
如果将此选项设置为大于MAX_JOIN_ENUMERATION的当前值的其它某个值,则操作无效.
将此值设置为小于MAX_JOIN_ENUMERATION的值,可能改进在优化那些包含很多连接的查询时所需要的时间,但也可能阻止优化程序找到最佳的可能连接计划.

通常,不需要更改该值.
如果更改,则Sybase建议将JOIN_SIMPLIFICATION_THRESHOLD设置为临时或用户选项,并设置为至少为9的某个值.
另请参见MAX_JOIN_ENUMERATION选项(第401页)LARGE_DOUBLES_ACCUMULATOR选项控制使用哪个累计器计算浮点数字的SUM或AVG.
允许值ON、OFF默认值OFF范围设置此选项无需DBA权限.
可针对单个连接或PUBLIC组进行临时设置.
设置将立即生效.
数据库选项参考:语句和选项391描述浮点型和双精度型的小型累计器在处理1e-20到1e20的幅度范围内的加数时准确度很高.
在此范围以外它会失去一些准确性,但对很多应用程序仍然足够好.
小型累计器允许优化程序选择散列,以便更容易获得比大型累计器更快的性能.
大型累计器对所有浮点型和双精度型的准确性都很高,但其大小通常会妨碍对散列优化的使用.
缺省是小型累计器.
LF_BITMAP_CACHE_KB选项指定将用于装载到LF索引中的内存数量.
允许值1–8默认值4范围设置此选项无需DBA权限.
可针对单个连接或PUBLIC组进行临时设置.
设置将立即生效.
描述LF_BITMAP_CACHE_KB定义在装载到LF索引中时每个非重复值所使用的堆内存数量(KB).
缺省分配4KB.
如果特定表的所有LF索引的离散值个数之和相对较高(大于10,000),那么堆内存使用量可能增加到由于系统页错误而会影响装载性能的程度.

如果是这种情况,请减少LF_BITMAP_CACHE_KB的值.
以下公式显示如何计算在装载期间特定LF索引所使用的堆内存(字节):Heap-memory-used=(lf_bitmap_cache_kb*1024)*lf-distinct-count-for-column如果使用缺省值4KB,则具有1000条非重复值的LF索引可以在装载期间使用最多4MB堆内存.
LOAD_ZEROLENGTH_ASNULL选项指定LOAD语句在某些情况下的行为.
允许值ON、OFF无需DBA权限.
可针对单个连接或PUBLIC组进行临时设置.
设置将立即生效.
默认值OFF数据库选项392SybaseIQ描述此选项指定LOAD语句在以下情况下的行为:将零长度数据值插入数据类型为CHAR、VARCHAR、LONGVARCHAR、BINARY、VARBINARY或LONGBINARY的列中NULLcolumn-spec;例如,还为该相同列提供NULL(ZEROS)或NULL(BLANKS)将LOAD_ZEROLENGTH_ASNULL设置为ON会在符合上面的条件时装载零长度值作为NULL.
如果将LOAD_ZEROLENGTH_ASNULL设置为OFF,则会装载零长度值作为零长度,并服从于选项NON_ANSI_NULL_VARCHAR的设置.
另请参见NON_ANSI_NULL_VARCHAR选项(第410页)LOADTABLE语句(第223页)LOCKED选项如果设置登录策略,则防止具有该策略的用户建立新连接.
有关详细信息,请参见《系统管理指南第一卷》>"管理用户ID和权限".
另请参见CREATELOGINPOLICY语句(第108页)ALTERLOGINPOLICY语句(第19页)LOG_CONNECT选项控制用户连接的记录.
允许值ON、OFF默认值ON范围只能为PUBLIC组设置.
设置将立即生效.
描述此选项是ON时,每次用户连接到SybaseIQ数据库或与其断开时,将在IQ消息日志(.
iqmsg文件)中记录一条消息.
数据库选项参考:语句和选项393注意:如果用户连接时将此选项设置为OFF(禁用连接记录),然后在该用户断开连接之前将其打开,则消息日志将显示该用户断开但未连接.
LOG_CURSOR_OPERATIONS选项控制游标操作的记录.
允许值ON、OFF默认值OFF范围设置此选项无需DBA权限.
可针对单个连接或PUBLIC组进行临时设置.
设置将立即生效.
描述此选项是ON时,每次您打开或关闭游标时,将在IQ消息日志中记录一条消息.
正常情况下,此选项应当是OFF,这是缺省值.
仅当遇到问题并且必须向Sybase技术支持部门提供调试数据时,才应打开它.
LOGIN_MODE选项控制对数据库的集成登录的使用.
允许值Standard、Mixed或Integrated默认值标准范围只能为PUBLIC组设置.
设置将立即生效.
描述此选项指定是否允许集成登录.
值不区分大小写:Standard–缺省设置,它不允许集成登录.
如果尝试集成登录连接,则会发生错误.
Mixed–允许集成登录和标准登录.
Integrated–如果使用此设置,则必须使用集成登录执行所有登录到数据库的操作.
数据库选项394SybaseIQ警告!
如果将LOGIN_MODE设置为Integrated,则只有那些已被授予集成登录映射的用户才能进行连接.
试图使用用户ID和口令进行连接时生成错误.
这种情况的唯一例外是具有DBA授权(完全管理权限)的用户.
LOGIN_PROCEDURE选项指定在启动时设置连接兼容性选项的登录过程.
允许值字符串默认值sp_login_environment系统过程范围可针对单个连接或PUBLIC组进行设置.
设置此选项需要具有DBA权限.
设置将立即生效.
描述初始连接兼容性选项设置可使用LOGIN_PROCEDURE选项进行控制,该选项在执行所有检查验证连接是否有效后调用.
LOGIN_PROCEDURE选项命名了一个存储过程以在用户连接时使用.
缺省设置为使用sp_login_environment系统存储过程.
您可以指定不同的存储过程.
对于事件连接,不执行LOGIN_PROCEDURE选项指定的过程.
sp_login_environment过程将检查是否正在通过TDS建立连接.
如果通过TDS建立连接,则sp_login_environment调用sp_tsql_environment过程,该过程会针对当前连接将几个选项设置为新的缺省值.
有关LOGIN_PROCEDURE选项和示例的详细信息,请参见"SQLAnywhereServer–数据库管理">"配置数据库">"数据库选项">"数据库选项简介">"按字母顺序排列的选项列表">"按字母顺序排列的选项列表">"login_procedure选项".
注意:此参考指向SQLAnywhere文档.
另请参见初始选项设置(第319页)MAIN_RESERVED_DBSPACE_MB选项控制SybaseIQ在IQmain存储中保留的空间数量.
允许值大于或等于200的整数(以兆字节为单位)数据库选项参考:语句和选项395默认值200;SybaseIQ实际保留IQ_SYSTEM_MAIN中最后一个读写文件的最多50%和最少1%范围只能为PUBLIC组设置.
设置此选项需要具有DBA权限.
设置将立即生效.
不需要重新启动服务器即可更改保留空间大小.
描述MAIN_RESERVED_DBSPACE_MB控制SybaseIQ在IQmain存储中为在发布保存点、提交和检查点操作期间所使用的某些小型但关键的数据结构留出的空间数量.
对于生产数据库,请将该值设置为介于200MB和1GB之间的值.
IQ页大小和并发连接数越大,需要的保留空间就越多.
保留的空间大小是通过计算IQ_SYSTEM_MAIN中最后一个读写文件的最多50%和最少1%得出的.
MAX_CARTESIAN_RESULT选项限制从笛卡儿连接产生的行数.
允许值任意整数可以为用户或PUBLIC组进行临时设置(对于连接).
设置将立即生效.
默认值100000000范围设置此选项无需DBA权限.
可针对单个连接或PUBLIC组进行临时设置.
设置将立即生效.
描述MAX_CARTESIAN_RESULT可以限制从包含笛卡儿连接(通常是创建查询时丢失一个或多个连接条件的结果)的查询所得到的结果行数.
如果SybaseIQ找不到包含在此限制以下的估计结果的笛卡儿连接的查询计划,则它会拒绝查询并返回错误.
如果将MAX_CARTESIAN_RESULT设置为0,则会禁用对笛卡儿连接的结果行数的检查.
数据库选项396SybaseIQMAX_CLIENT_NUMERIC_PRECISION选项控制发送到客户端的数值数据的最大精度.
允许值0–126默认值0范围可由任何用户在任何级别进行设置.
此选项会立即生效.
描述SybaseIQ执行其计算时,会将数据类型提升到合适大小,以确保准确性.
所提升的数据类型的大小可能超过OpenClient和某些ODBC应用程序可以正确处理的范围.
当MAX_CLIENT_NUMERIC_PRECISION是非零值时,SybaseIQ将检查数字结果列是否超过此值.
如果结果列大于MAX_CLIENT_NUMERIC_PRECISION允许的值,并且SybaseIQ无法将它转换到指定的精度,则查询会返回以下错误:"DataException-datatypeconversionisnotpossible%1SQLCODE=-1001006"("数据例外–无法执行数据类型转换%1SQLCODE=-1001006")注意:在SQLAnywhere中,数值函数支持的最大值是255.
如果数值函数的精度超过支持的最大值,则会出现以下错误:"函数'_funcname'的结果数据类型超过支持的最大数值精度255.
请为数值函数'location'的精度设置正确的值另请参见MAX_CLIENT_NUMERIC_SCALE选项(第397页)PRECISION选项(第416页)MAX_CLIENT_NUMERIC_SCALE选项控制发送到客户端的数值数据的最大标度.
允许值0–126默认值0范围可由任何用户在任何级别进行设置.
此选项会立即生效.
数据库选项参考:语句和选项397描述SybaseIQ执行其计算时,会将数据类型提升到合适的标度和大小,以确保准确性.
所提升的数据类型可能大于原始定义的数据大小.
可以将此选项设置为要为数字结果指定的标度.
乘、除、加、减和集合函数都可以有超过最大精度和标度的结果.
例如,将DECIMAL(59,2)乘以DECIMAL(88,2),结果可能需要DECIMAL(147,4).
如果MAX_CLIENT_NUMERIC_PRECISION是126,则仅在结果中保留126位数.
如果MAX_CLIENT_NUMERIC_SCALE是4,则结果作为DECIMAL(126,4)返回.
如果MAX_CLIENT_NUMERIC_SCALE是2,则结果作为DECIMAL(126.
2)返回.
在这两种情况中,都有溢出的可能性.
另请参见MAX_CLIENT_NUMERIC_PRECISION选项(第397页)SCALE选项(第430页)MAX_CONNECTIONS选项指定用户允许的最大并发连接数.
有关详细信息,请参见《SQLAnywhereServer-数据库管理》.
MAX_CUBE_RESULT选项设置IQ优化程序为GROUPBYCUBE算法考虑的最大行数.
允许值0–4294967295默认值10000000范围可由任何用户在任何级别进行设置.
此选项会立即生效.
描述生成查询计划时,IQ优化程序会估计通过GROUPBYCUBE散列运算生成的组的总数.
IQ优化程序使用散列算法执行GROUPBYCUBE操作.
此选项设置优化程序为可以运行的散列算法考虑的估计行数的上限.
如果实际行数超过MAX_CUBE_RESULT值,优化程序将停止处理查询,并返回错误"Estimatenumber:nnnexceedsthedefaultMAX_CUBE_RESULTofGROUPBYCUBEorROLLUP"(估计数目:超过GROUPBYCUBE或ROLLUP的缺省DEFAULT_MAX_CUBE_RESULT),其中nnn是IQ优化程序估计的数值.
数据库选项398SybaseIQ将MAX_CUBE_RESULT设置为零将覆盖缺省值.
将此选项设置为零时,IQ优化程序将不检查行限制,并允许查询运行.
建议不要将MAX_CUBE_RESULT设置为零,因为查询可能不成功.
MAX_CURSOR_COUNT选项指定资源调控器,以限制连接可以一次使用的最大游标数.
允许值整数默认值50范围可针对单个连接或PUBLIC组进行设置.
设置将立即生效.
需要具有DBA权限才能针对所有连接设置此选项.
描述所指定的资源调控器允许DBA限制用户可以拥有的每个连接上的游标数.
如果某个操作超过对连接的限制,则会生成一个错误,指示已超过该限制.
如果连接执行一个存储过程,则该过程会在过程所有者的权限下执行.
然而,由该过程所用的资源将分配给当前连接.
通过将MAX_CURSOR_COUNT设置为0(零),可以删除资源限制.
MAX_DAYS_SINCE_LOGIN选项指定同一用户在两次连续登录之间经过的最大天数.
有关详细信息,请参见"SQLAnywhereServer–数据库管理">"配置数据库">"管理用户ID和权限">"管理登录策略".
注意:此参考指向SQLAnywhere文档.
MAX_FAILED_LOGIN_ATTEMPTS选项指定自上一次成功尝试以来,要在锁定帐户前登录到用户帐户的最大失败尝试次数.

有关详细信息,请参见"SQLAnywhereServer–数据库管理">"配置数据库">"管理用户ID和权限">"管理登录策略".
注意:此参考指向SQLAnywhere文档.
对于指定用户,Multiplex环境中的每个节点都会保留其自己的失败登录计数和最后一次失败登录时间.
数据库选项参考:语句和选项399在SybaseIQ中,MAX_FAILED_LOGIN_ATTEMPTS适用于所有用户,包括具有DBA权限的用户.
SybaseIQ服务器在最后一次失败登录尝试15分钟之后,会自动解锁具有DBA权限的用户帐户.
在以下情况下,具有DBA权限的用户无法登录:登录次数超出用户登录策略允许的最多失败登录尝试次数;以及用户当前登录时间和最后一次失败登录时间差距少于15分钟.
重新启动数据库后,允许具有DBA权限的用户再进行一次成功登录尝试,即使失败登录尝试次数已超出登录策略允许的最大次数也是如此.
MAX_HASH_ROWS选项设置IQ优化程序为散列算法考虑的最大行数.
允许值从1到4294967295之间的整数默认值2500000范围可针对单个连接或PUBLIC组进行临时设置.
设置此选项无需DBA权限.
此选项会立即生效.
描述生成查询计划时,IQ优化程序可能在处理查询的特定部分时有几个可供选择的算法(散列、排序、索引).
这些选项通常取决于要由该部分查询处理或生成的估计行数.

此选项设置有多少估计行考虑使用散列算法的上限.
例如,如果在两个表之间有连接,并且从两个表进入连接的估计行数超过MAX_HASH_ROWS的值,则优化程序不会考虑散列连接.
在每个用户有超过50MB临时缓冲区高速缓存空间的系统上,可能需要考虑让此选项有更高的值.
MAX_IQ_THREADS_PER_CONNECTION选项控制每个连接的线程数.
允许值3–10000默认值144数据库选项400SybaseIQ范围可以是临时的,也可以是永久的.
设置此选项不需要DBA权限.
只能为PUBLIC组设置.
设置将立即生效.
描述允许您对在连接上执行的命令所使用的线程数(以及由此导致的系统资源数量)进行约束.
对于大多数应用程序,请使用缺省值.
MAX_IQ_THREADS_PER_TEAM选项控制为执行在连接中执行的单个操作(例如针对列的LIKE谓词)而分配的线程数.
允许值1–10000默认值144范围可以是临时的,也可以是永久的.
设置此选项不需要DBA权限.
只能为PUBLIC组设置.
设置将立即生效.
描述允许您约束分配到单个操作的线程数(以及由此导致的系统资源数量).
此连接的所有同时执行的团队总数受相关选项MAX_IQ_THREADS_PER_CONNECTION的限制.
对于大多数应用程序,请使用缺省值.
另请参见MAX_IQ_THREADS_PER_CONNECTION选项(第400页)MAX_JOIN_ENUMERATION选项控制在已应用优化程序简化之后要为连接顺序优化的最大表数.
允许值1–64每个FROM子句限制为最多只能具有64个表.
但是实际上,FROM子句中有效的表数限制通常低于该值,而且部分取决于这些表之间连接关系的复杂性.
有效限制受MAX_JOIN_ENUMERATION的设置约束.
优化程序将尝试简化FROM子句内连接关系的设置.
如果这些简化无法将必须同步考虑的连接设置降低到不高于MAX_JOIN_ENUMERATION的当前设置,则查询将返回错误.
警告!
将MAX_JOIN_ENUMERATION设置为高于缺省值16应谨慎执行,特别是在具有深度连接关系的查询导致优化程序所需的时间量大幅增加的情况下.
对于仅使用线数据库选项参考:语句和选项401性链连接关系的查询,MAX_JOIN_ENUMERATION设置为64仍能提供合理的优化时间.
默认值15范围可针对单个连接或PUBLIC组进行临时设置.
设置将立即生效.
描述通过分别处理查找表(即非选择性维度表)和有效的笛卡儿乘积的表,查询优化程序可简化对连接顺序的优化.
在简化之后,它将继续优化剩余表的连接顺序,直到达到由MAX_JOIN_ENUMERATION设置的限制.
如果超过此限制,则拒绝查询,并返回错误.
然后,用户可以简化查询,或尝试增加限制.
通常,不需要更改该值.
如果更改,则Sybase建议将MAX_JOIN_ENUMERATION设置为临时或用户选项.
MAX_PREFIX_PER_CONTAINS_PHRASE选项指定在文本搜索表达式中允许的前缀词语数目.
用户必须获得非结构化数据分析选件的使用许可才能使用TEXT索引以及执行全文本搜索.
有关MAX_PREFIX_PER_CONTAINS_PHRASE语法和完整说明,请参见《SybaseIQ中的非结构化数据分析》.
MAX_QUERY_PARALLELISM选项设置GROUPBY操作的并行执行以及UNION的分支的上限.
允许值小于、大于或等于CPU数的整数.
默认值64范围可针对单个连接或PUBLIC组进行临时设置.
设置将立即生效.
描述此参数设置限制优化程序将允许查询运算符进行并行程度的上限.
该选项可能影响许多查询连接、GROUPBY、UNION、ORDERBY和其它查询运算符的CPU使用情况.
数据库选项402SybaseIQ具有超过64个CPU核心的系统通常受益于较大值,最多可达到系统上CPU核心的总数(即最大值512);您可以通过不断尝试来找出此参数适用于您的系统和查询的最佳值.
具有64个或更少CPU核心的系统不需要减少此值,除非显示了过多的系统时间.
在这种情况下,您可以尝试减少此值以确定这种调整是否能够降低CPU系统时间、缩短查询响应时间和提高总体系统吞吐量.
MAX_QUERY_TIME选项设置时间限制,以便优化程序可以禁止非常长的查询.
允许值0到232-1分钟默认值0(禁用)范围可以在会话(临时)、用户或PUBLIC级别进行设置.
描述如果查询运行时间超过MAX_QUERY_TIME设置,则SybaseIQ会停止查询,并将消息发送到用户和IQ消息文件.
例如:Theoperationhasbeencancelled--Max_Query_Timeexceeded.
MAX_QUERY_TIME仅应用于查询,不应用于正在修改数据库内容的任何SQL语句.
MAX_STATEMENT_COUNT选项指定资源调控器,以限制连接可以一次使用的最大准备语句数.
允许值整数默认值100范围可针对单个连接或PUBLIC组进行设置.
设置将立即生效.
需要具有DBA权限才能针对所有连接设置此选项.
描述所指定的资源调控器允许DBA限制用户可以拥有的每个连接的准备语句数.
如果某个操作超过对连接的限制,则会生成一个错误,指示已超过该限制.
数据库选项参考:语句和选项403如果连接执行一个存储过程,则该过程会在过程所有者的权限下执行.
然而,由该过程所用的资源将分配给当前连接.
通过将MAX_STATEMENT_COUNT设置为0(零),可以删除资源限制.
MAX_TEMP_SPACE_PER_CONNECTION选项限制每个连接使用的临时存储空间.
允许值整数(以MB为单位)默认值0(不限制临时存储使用情况)范围设置此选项需要具有DBA权限.
可针对单个连接或PUBLIC组进行临时设置.
设置将立即生效.
描述通过控制每个连接的空间,DBA利用该选项可管理对空间的装载和查询.
如果连接超过MAX_TEMP_SPACE_PER_CONNECTION指定的运行时间限额,SybaseIQ会回退当前语句并将该消息返回到IQ消息文件或客户端用户:Thecurrentoperationhasbeencancelled:Max_Temp_Space_Per_Connectionexceeded可能填充缓冲区高速缓存的情况包括:读取或写入错误、主或临时空间不足或内存不足.
SybaseIQ可能返回在这些情况中遇到的第一个错误,DBA必须确定相应的解决方案.
有关详细信息,请参见"错误消息"和《系统管理指南第一卷》>"故障排除提示".
在分布式查询处理事务中,SybaseIQ将通过限制参与分布式查询的所有节点使用的共享空间和本地临时空间总量对于共享临时存储使用为QUERY_TEMP_SPACE_LIMIT和MAX_TEMP_SPACE_PER_CONNECTION选项设置的值.
这意味着无论有多少节点参与,任何单一查询都不能超过临时空间总量限制(来自IQ_SYSTEM_TEMP和IQ_SHARED_TEMP数据库空间).
例如,如果限制为100,四个节点中每个使用25个单位量的临时空间,则查询位于限制内.
不过,如果任一节点使用的空间总量超过100,则查询将回退.
示例为所有连接设置限制500GB:SETOPTIONPUBLIC.
MAX_TEMP_SPACE_PER_CONNECTION=512000为所有连接设置限制10TB:数据库选项404SybaseIQSETOPTIONPUBLIC.
MAX_TEMP_SPACE_PER_CONNECTION=10485760为用户wilson设置限制5000MB:SETOPTIONwilson.
MAX_TEMP_SPACE_PER_CONNECTION=5000另请参见QUERY_TEMP_SPACE_LIMIT选项(第426页)MAX_WARNINGS选项控制允许的最大警告数.
允许值任意整数默认值248-1范围设置此选项无需DBA权限.
可针对单个连接或PUBLIC组进行临时设置.
设置将立即生效.
描述此选项可以限制在DDL命令期间有关拒绝的值、行不匹配等的警告数.
缺省值不限制可以接收的数字.
MINIMIZE_STORAGE选项最小化最近创建列的磁盘空间使用量.
允许值ON、OFF默认值OFF范围可以为PUBLIC组或临时使用而设置该选项.
设置此选项无需DBA授权.
此选项会立即生效.
描述当MINIMIZE_STORAGE是ON时,IQ将通过在只要合适则每行可仅使用一字节的磁盘空间,以优化对新列的存储.
缺省情况下,此选项对PUBLIC组是OFF,对所数据库选项参考:语句和选项405有最近创建的列不执行专用的存储优化;当MINIMIZE_STORAGE对PUBLIC组是OFF但作为临时用户选项是ON时,对该用户ID创建的新列使用一字节存储.
将MINIMIZE_STORAGE设置为ON等同于在每个新列上放IQUNIQUE255子句,但某些一字节存储天生太宽的数据类型除外.
当MINIMIZE_STORAGE设置为ON时,不必指定IQUNIQUE,具有65536个以上唯一值的列除外.
注意:IQUNIQUE值大于65536可以允许创建3字节索引,而以前当MINIMIZE_STORAGE是ON时此类值用于防止这种情况.
如果当MINIMIZE_STORAGE是ON时想阻止专用的存储优化,请赋予IQUNIQUE一个大于16777216的约束值.
当主内存与列数量的比值较大时,将MINIMIZE_STORAGE设为ON会有所帮助.
否则,新列的存储通常受益于将此选项设为OFF.
在IQUNIQUE或CREATETABLE中显式指定ALTERTABLEADDCOLUMN将覆盖该列的MINIMIZE_STORAGE设置.
另请参见FP_LOOKUP_SIZE选项(第370页)INDEX_ADVISOR选项(第379页)MIN_PASSWORD_LENGTH选项设置数据库中新口令的最小长度.
允许值大于或等于零的整数值以字节为单位.
对于单字节字符集,它与字符数相等.
默认值0个字符范围可以为PUBLIC组设置.
设置将立即生效.
设置此选项需要具有DBA权限.
描述此选项允许DBA限制所有新口令的最小长度,以获得更大安全性.
现有口令不受影响.
示例将新口令的最小长度设置为6个字节:SETOPTIONPUBLIC.
MIN_PASSWORD_LENGTH=6数据库选项406SybaseIQMONITOR_OUTPUT_DIRECTORY选项控制IQ缓冲区高速缓存监视器的输出文件的位置.
允许值字符串.
默认值与数据库所在目录相同.
范围可以为PUBLIC组设置.
设置将立即生效.
设置此选项需要具有DBA权限.
描述MONITOR_OUTPUT_DIRECTORY控制在其中创建IQ监视器输出文件的目录,不管正在监视什么或使用什么监视模式.
用于启动监视器的虚表可以是临时表,也可以是永久表.
目录可以在任何物理计算机上.
所有监视器输出文件都在监视器运行时段内使用,该时段不能超过连接的生命周期.

在监视器运行停止之后,输出文件仍然存在.
连接可以同时运行最多两个性能监视器,一个用于main高速缓存,另一个用于临时高速缓存.
连接可以连续地运行监视器任意次数.
DBA可以使用PUBLIC设置将所有监视器输出放在相同目录中,也可以为单个用户设置不同的目录.
示例此示例显示如何声明监视器输出的临时表,并设置其位置,然后让监视器开始将主和临时缓冲区高速缓存的文件发送到该位置.
注意:在此示例中,输出目录字符串被设置为"/tmp"和"tmp/".
后面的斜杠("/")是正确的,并受接口支持.
该示例演示缓冲区高速缓存监视器不需要永久表;可以使用临时表.
declarelocaltemporarytabledummy_monitor(dummy_columninteger)setoptionMonitor_Output_Directory="/tmp"iqutilitiesmainintodummy_monitorstartmonitor'-debug-interval2'setoptionMonitor_Output_Directory="tmp/"iqutilitiesprivateintodummy_monitorstartmonitor'-debug-interval2'数据库选项参考:语句和选项407MPX_AUTOEXCLUDE_TIMEOUT选项指定自动排除协调节点上辅助节点的超时时间.
0表示将不自动排除节点.
此选项不适用于指定的故障切换节点.
用户必须获得MultiplexGridOption使用许可才能运行辅助节点.
有关MPX_AUTOEXCLUDE_TIMEOUT语法和完整说明,请参见《使用SybaseIQMultiplex》.
MPX_HEARTBEAT_FREQUENCY选项指定heartbeat线程唤醒和清除辅助节点上连接归集之前的间隔.
用户必须获得MultiplexGridOption使用许可才能运行辅助节点.
有关MPX_HEARTBEAT_FREQUENCY语法和完整说明,请参见《使用SybaseIQMultiplex》.
MPX_IDLE_CONNECTION_TIMEOUT选项指定辅助节点上连接归集中未使用的连接将在多长时间之后关闭.
用户必须获得MultiplexGridOption使用许可才能运行辅助节点.
有关MPX_IDLE_CONNECTION_TIMEOUT语法和完整说明,请参见《使用SybaseIQMultiplex》.
MPX_MAX_CONNECTION_POOL_SIZE选项指定辅助节点上连接归集中允许的最大连接数.
用户必须获得MultiplexGridOption使用许可才能运行辅助节点.
有关MPX_MAX_CONNECTION_POOL_SIZE语法和完整说明,请参见《使用SybaseIQMultiplex》.
MPX_MAX_UNUSED_POOL_SIZE选项指定辅助节点上连接归集中未使用的最大连接数.
用户必须获得MultiplexGridOption使用许可才能运行辅助节点.
有关MPX_MAX_UNUSED_POOL_SIZE语法和完整说明,请参见《使用SybaseIQMultiplex》.
MPX_WORK_UNIT_TIMEOUT选项MultiplexDQP领导节点将分布式工作单元重新分配到另一个DQP工作节点之前的时间,以秒为单位.
用户必须获得MultiplexGridOption使用许可才能运行辅助节点.
有关MPX_WORK_UNIT_TIMEOUT语法和完整说明,请参见《使用SybaseIQMultiplex》.
数据库选项408SybaseIQNEAREST_CENTURY选项[TSQL]控制在字符串到日期转换中对两位数表示的年份的解释.
允许值0–100默认值50描述NEAREST_CENTURY控制在从字符串转换到日期或时间戳时对两位数表示的年份的处理.
NEAREST_CENTURY设置为一个用作切换点的数字值.
小于该值的两位数表示的年份将转换成20yy,而大于或等于该值的年份则转换成19yy.
AdaptiveServerEnterprise和SybaseIQ的行为是使用最近的世纪,以便如果年份值yy小于50,则将年份设置为20yy.
NOEXEC选项生成优化程序查询计划,而不是执行计划.
允许值ON、OFF默认值OFF范围设置此选项无需DBA权限.
可针对单个连接或PUBLIC组进行临时设置.
设置将立即生效.
描述在确定如何处理查询时,IQ优化程序将生成查询计划,以映射它如何计划让查询引擎处理查询.
如果将此选项设置为ON,则优化程序会将查询的计划发送到IQ消息文件,而不是将它提交给查询引擎.
NOEXEC影响查询和包括查询的命令.
将NOEXEC设置为ON还会阻止执行INSERT.
.
.
VALUES、INSERT.
.
.
SELECT、INSERT.
.
.
LOCATION、SELECT.
.
.
INTO、LOADTABLE、UPDATE、TRUNCATETABLE、DELETE、SYNCHRONIZEJOININDEX,以及可更新的游标操作.
当EARLY_PREDICATE_EXECUTION选项设置为ON时,SybaseIQ会在生成查询计划之前为所有查询执行本地谓词,即使NOEXEC选项设置为ON也是如此.
生成的查询计划与运行时计划相同.
数据库选项参考:语句和选项409另请参见EARLY_PREDICATE_EXECUTION选项(第367页)NON_ANSI_NULL_VARCHAR选项控制是否出于插入/装载/更新操作而将零长度的VARCHAR数据视为NULL.
允许值ON、OFF默认值OFF范围设置此选项无需DBA权限.
可针对单个连接或PUBLIC组进行临时设置.
设置将立即生效.
描述NON_ANSI_NULL_VARCHAR允许您在装载或更新操作期间在处理零长度VARCHAR数据时恢复到非ANSI(版本12.
03.
1)行为.
如果将此选项设置为OFF,则在装载、插入或更新期间,零长度VARCHAR作为零长度进行存储.
如果将此选项设置为ON,则零长度VARCHAR数据在装载、插入或更新时作为NULL进行存储.
NON_KEYWORDS选项[TSQL]关闭单个关键字,允许将其用作标识符.
允许值字符串默认值''(空字符串)描述NON_KEYWORDS关闭单个关键字.
如果在数据库中有一个标识符,而它现在是关键字,则可以在所有应用程序或脚本中在该标识符两侧添加双引号,也可以使用NON_KEYWORDS选项关闭该关键字.
以下语句阻止将TRUNCATE和SYNCHRONIZE识别为关键字:SETOPTIONNON_KEYWORDS='TRUNCATE,SYNCHRONIZE'此选项的每个新设置都会替换以前的设置.
此语句清除所有以前设置:SETOPTIONNON_KEYWORDS=该选项的副作用是不能使用那些使用关闭关键字的SQL语句;它们会产生语法错误.
数据库选项410SybaseIQNOTIFY_MODULUS选项控制由某些命令发出的通知消息的缺省频率.
允许值任意整数默认值100000范围设置此选项无需DBA权限.
可针对单个连接或PUBLIC组进行临时设置.
设置将立即生效.
描述此选项设置SybaseIQ为某些产生通知消息的命令所发出的缺省通知消息数.
用于某些命令(如CREATEINDEX、LOADTABLE和DELETE)的NOTIFY子句将覆盖此值.
不支持NOTIFY子句(如SYNCHRONIZEJOININDEX)的其它命令始终使用此值.
缺省值不限制您可以接收的消息数.
ODBC_DISTINGUISH_CHAR_AND_VARCHAR选项控制SybaseIQ和SQLAnywhereODBC驱动程序如何描述CHAR列.
允许值ON、OFF默认值OFF描述当打开连接时,SybaseIQ和SQLAnywhereODBC驱动程序将使用此选项的设置来确定如何描述CHAR列.
如果ODBC_DISTINGUISH_CHAR_AND_VARCHAR设置为OFF(缺省值),则CHAR列描述为SQL_VARCHAR.
如果此选项设置为ON,则CHAR列描述为SQL_CHAR.
VARCHAR列始终描述为SQL_VARCHAR.
ON_CHARSET_CONVERSION_FAILURE选项控制在字符转换期间遇到错误时要采取的操作.
允许值String.
有关允许值,请参见"说明".
默认值IGNORE数据库选项参考:语句和选项411描述ON_CHARSET_CONVERSION_FAILURE控制在字符转换期间遇到错误时要采取的操作:字符转换错误操作IGNORE不会出现错误和警告.
WARNING将替代和非法字符报告为警告.
不转换非法字符.
ERROR将替代和非法字符报告为错误.
单字节到单字节的转换器无法报告替代和非法字符,且必须设置为IGNORE.
ON_ERROR选项[InteractiveSQL]控制在InteractiveSQL中执行语句期间遇到错误时要采取的操作.
允许值字符串.
有关允许值,请参见"说明".
缺省值PROMPT描述控制在执行语句期间遇到错误时要采取的操作:STOP-InteractiveSQL停止从文件执行语句,并返回到语句窗口等待输入.
PROMPT-InteractiveSQL提示用户查看是否要继续.
CONTINUE–错误显示在"Messages"窗格,并且InteractiveSQL继续执行语句.
EXIT-InteractiveSQL终止.
NOTIFY_CONTINUE-报告错误,并提示用户按Enter键或单击"确定"继续.
NOTIFY_STOP-报告错误,并提示用户按Enter键或单击"确定"停止执行语句.
NOTIFY_EXIT-报告错误,并提示用户按Enter键或单击"确定"终止InteractiveSQL.
在执行.
SQL文件时,STOP和EXIT这两个值是等效的.
ON_TSQL_ERROR选项[TSQL]控制存储过程中的错误处理.
允许值字符串.
有关允许值,请参见"说明".
数据库选项412SybaseIQ默认值CONDITIONAL描述ON_TSQL_ERROR控制存储过程中的错误处理:STOP–发现错误时立即停止执行.
CONDITIONAL–如果过程使用ONEXCEPTIONRESUME,则错误后面的语句将处理该错误,并继续执行,否则退出.
CONTINUE–继续执行,不管下面是什么语句.
如果有多个错误,则返回存储过程中所遇到的第一个错误.
此选项最近似地镜像了AdaptiveServerEnterprise行为.
使用ON_TSQL_ERROR的CONDITIONAL和CONTINUE设置的目的都是为了与AdaptiveServerEnterprise兼容,而CONTINUE可最近似地模拟AdaptiveServerEnterprise的行为.
建议使用CONDITIONAL设置(尤其是在开发新的Transact-SQL存储过程时),因为CONDITIONAL允许早一些报告错误.
《参考:构件块、表和过程》中对AdaptiveServerEnterprise兼容性进行了说明.
当此选项设置为STOP或CONTINUE时,它会取代CONTINUE_AFTER_RAISERROR选项的设置.
然而,当此选项设置为CONDITIONAL(缺省值)时,RAISERROR语句后的行为由CONTINUE_AFTER_RAISERROR选项的设置决定.
另请参见CREATEPROCEDURE语句(第112页)CREATEPROCEDURE语句[T-SQL](第118页)RAISERROR语句[T-SQL](第256页)CONTINUE_AFTER_RAISERROR选项[TSQL](第345页)OS_FILE_CACHE_BUFFERING选项控制文件系统缓冲针对IQ主数据库空间的使用.
允许值ON、OFF默认值OFF;缺省值仅影响最近创建的数据库.
范围只能为PUBLIC组设置.
数据库必须关闭并重新启动,才能使更改生效.
设置此选项需要具有DBA权限.
数据库选项参考:语句和选项413描述如果将OS_FILE_CACHE_BUFFERING设置为OFF,将阻止文件系统对IQ主存储文件进行缓冲.
如果关闭文件系统缓冲,则将数据副本从文件系统缓冲区高速缓存保存到IQ的主缓冲区高速缓存.
通常,这会减少由IQ缓冲区管理器和操作系统的文件系统缓冲区竞争内存而导致的分页.
当OS_FILE_CACHE_BUFFERING减少分页时,此选项会改进性能;但是,如果数据库的IQ页大小小于文件系统的块大小(通常仅在测试情况中),那么,尤其是在多用户操作期间,性能会降低.
尝试使用此选项以确定不同情况的最佳设置.
必须重新启动数据库才能使新设置生效.
此直接I/O性能选项仅在SunSolarisUFS、Linux、LinuxIBM、AIX和Windows文件系统上可用.
此选项对于HP-UX和HP-UXi不起作用,并且不影响原始磁盘上的数据库.
在Linux,直接I/O在内核版本2.
6.
x中受支持.
要在Linux内核版本2.
6和AIX上启用直接I/O,还要将环境变量IQ_USE_DIRECTIO设置为1.
缺省情况下,直接I/O在Linux内核版本2.
6和AIX上处于禁用状态.
IQ_USE_DIRECTIO对SunSolaris和Windows不起作用.
注意:在Linux内核版本2.
4上,SybaseIQ不支持直接I/O.
如果在Linux内核版本2.
4上设置了IQ_USE_DIRECTIO环境变量,则SybaseIQ服务器不启动.
报告错误"错误:块I/O参数无效,可能是目录,或者它超过平台的最大文件大小限制,或者您正尝试在不被支持的OS上使用直接IO".
OS_FILE_CACHE_BUFFERING_TEMPDB控制IQ临时存储文件的文件系统缓冲.
另请参见OS_FILE_CACHE_BUFFERING_TEMPDB选项(第414页)OS_FILE_CACHE_BUFFERING_TEMPDB选项控制文件系统缓冲针对IQ临时数据库空间的使用.
允许值ON、OFF默认值OFF范围只能为PUBLIC组设置.
数据库必须关闭并重新启动,才能使更改生效.
设置此选项需要具有DBA权限.
描述如果将OS_FILE_CACHE_BUFFERING_TEMPDB设置为OFF,将阻止IQ临时存储文件的文件系统缓冲.
如果关闭文件系统缓冲,则将数据副本从文件系统缓冲区高速数据库选项414SybaseIQ缓存保存到IQ的主缓冲区高速缓存.
通常,这会减少由IQ缓冲区管理器和操作系统的文件系统缓冲区竞争内存而导致的分页.
当OS_FILE_CACHE_BUFFERING_TEMPDB减少分页时,此选项会改进性能;但是,如果数据库的IQ页大小小于文件系统的块大小(通常仅在测试情况中),那么,尤其是在多用户操作期间,性能会降低.
尝试使用此选项以确定不同情况的最佳设置.
必须重新启动数据库才能使新设置生效.
此直接I/O性能选项仅在SunSolarisUFS、Linux、LinuxIBM、AIX和Windows文件系统上可用.
此选项对于HP-UX和HP-UXi不起作用,并且不影响原始磁盘上的数据库.
在Linux,直接I/O在内核版本2.
6.
x中受支持.
要在Linux内核版本2.
6和AIX上启用直接I/O,还要将环境变量IQ_USE_DIRECTIO设置为1.
缺省情况下,直接I/O在Linux内核版本2.
6和AIX上处于禁用状态.
IQ_USE_DIRECTIO对SunSolaris和Windows不起作用.
注意:在Linux内核版本2.
4上,SybaseIQ不支持直接I/O.
如果在Linux内核版本2.
4上设置了IQ_USE_DIRECTIO环境变量,则SybaseIQ服务器不启动.
报告错误"错误:块I/O参数无效,可能是目录,或者它超过平台的最大文件大小限制,或者您正尝试在不被支持的OS上使用直接IO".
OS_FILE_CACHE_BUFFERING控制IQ主存储文件的文件系统缓冲.
另请参见OS_FILE_CACHE_BUFFERING选项(第413页)PASSWORD_EXPIRY_ON_NEXT_LOGIN选项如果为用户分配登录策略并将该策略的选项设置为ON,则下次登录时立即将用户的口令标记为到期.
有关详细信息,请参见"SQLAnywhereServer–SQL参考">"SQL语句">"CREATELOGINPOLICY语句".
注意:此参考指向SQLAnywhere文档.
PASSWORD_GRACE_TIME选项指定在口令到期前剩余的天数,在此期间允许登录,但缺省登录后过程将发出警告.

有关详细信息,请参见"SQLAnywhereServer–SQL参考">"SQL语句">"CREATELOGINPOLICY语句".
注意:此参考指向SQLAnywhere文档.
数据库选项参考:语句和选项415PASSWORD_LIFE_TIME选项指定必须更改口令前的最大天数.
有关详细信息,请参见"SQLAnywhereServer–SQL参考">"SQL语句">"CREATELOGINPOLICY语句".
注意:此参考指向SQLAnywhere文档.
POST_LOGIN_PROCEDURE选项指定其结果集包含在用户成功登录后客户端应用程序立即显示的消息的登录过程.

允许值字符串默认值dbo.
sa_post_login_procedure范围可针对单个连接或PUBLIC组进行设置.
设置此选项需要具有DBA权限.
设置将立即生效.
描述用户成功登录后,将立即执行缺省登录后过程dbo.
sa_post_login_procedure.
如果您拥有DBA授权,则可以通过新建过程并设置POST_LOGIN_PROCEDURE以调用新过程来自定义登录后操作.
不要编辑dbo.
sa_post_login_procedure.
必须在使用的每个数据库中创建自定义登录后过程.
登录后过程支持客户端应用程序InteractiveSQL、InteractiveSQLClassic和用于SybaseCentral的IQ插件.
另请参见LOGIN_PROCEDURE选项(第395页)PRECISION选项指定在任何十进制算法的结果中的最大数字位数,仅用于在目录存储上的查询.

允许值126默认值126数据库选项416SybaseIQ范围仅允许PUBLIC设置.
描述精度是小数点左右两侧的数字总数.
缺省PRECISION值固定在126.
{SCALE选项指定当算法结果被截断到PRECISION所指定的最大长度时在小数点之后的最小位数,仅用于在目录存储上的查询.
注意:在SQLAnywhere中,数值函数支持的最大值是255.
如果数值函数的精度超过支持的最大值,则会出现以下错误:"函数'_funcname'的结果数据类型超过支持的最大数值精度255.
请为数值函数'location'的精度设置正确的值"另请参见SCALE选项(第430页)MAX_CLIENT_NUMERIC_PRECISION选项(第397页)PREFETCH选项允许打开或关闭提取,或使用ALWAYS值预取甚至SENSITIVE游标类型的游标结果,以及涉及代理表的游标的游标结果.
允许值ON、OFF、ALWAYS默认值ON范围可针对单个连接或PUBLIC组进行设置.
设置将立即生效.
描述仅对于目录存储,PREFETCH控制是否在行对客户端应用程序可用之前将其提取到客户端.
即使当客户端应用程序一次请求一行时(例如,当在游标的行上循环时),也会一次读取多行,这样做会通过限制对数据库的请求数量而最大程度减少响应时间,并提高总吞吐量.
OpenClient和JDBC连接以及对于IQ存储会忽略PREFETCH的设置.
PREFETCH_BUFFER_LIMIT选项指定用于预取的内存量.
允许值整数数据库选项参考:语句和选项417默认值0范围只能为PUBLIC组设置.
设置此选项需要具有DBA授权.
关闭并重新启动数据库服务器,以使更改生效.
描述PREFETCH_BUFFER_LIMIT定义SybaseIQ可用于执行预取(对数据库页的提前读取)的高速缓存页数.
除非有Sybase技术支持部门的指导,否则不要设置此选项.
另请参见PREFETCH_BUFFER_PERCENT选项(第418页)PREFETCH_BUFFER_PERCENT选项指定用于预取的内存百分比.
允许值0–100默认值40范围只能为PUBLIC组设置.
设置此选项需要具有DBA授权.
关闭并重新启动数据库服务器,以使更改生效.
描述PREFETCH_BUFFER_PERCENT是PREFETCH_BUFFER_LIMIT的替代选项,因为它指定预取可以使用的高速缓存的百分比.
除非有Sybase技术支持部门的指导,否则不要设置此选项.
另请参见PREFETCH_BUFFER_LIMIT选项(第417页)PREFETCH_GARRAY_PERCENT选项指定为插入到HG索引而分配的预取资源的百分比.
允许值0–100数据库选项418SybaseIQ默认值60范围设置此选项无需DBA权限.
可针对单个连接或PUBLIC组进行临时设置.
设置将立即生效.
描述与PREFETCH_SORT_PERCENT相似,此选项指定在插入到HG索引中时要使用的预取资源的百分比.
除非有Sybase技术支持部门的指导,否则不要设置此选项.
PREFETCH_SORT_PERCENT选项指定为排序对象而分配的预取资源的百分比.
允许值0–100默认值20范围设置此选项无需DBA权限.
可针对单个连接或PUBLIC组进行临时设置.
设置将立即生效.
描述PREFETCH_SORT_PERCENT指定单个排序对象所使用的预取资源的百分比.
增加此值可以改进插入和删除的单用户性能,但在多用户操作时可能有不良效果.

除非有Sybase技术支持部门的指导,否则不要设置此选项.
PRESERVE_SOURCE_FORMAT选项[database]控制是否在系统文件中保存过程、视图和事件处理程序的原始源定义.
如果保存,则它将保存在SYSTABLE、SYSPROCEDURE和SYSEVENT中的源列中.
允许值ON、OFF默认值ON数据库选项参考:语句和选项419范围仅允许PUBLIC设置.
描述当PRESERVE_SOURCE_FORMAT为ON时,数据库服务器会保存来自过程、视图和事件上的CREATE和ALTER语句的格式化源代码,并将原源定义置于相应系统表的source列.
未格式化的源文本存储在同一系统表中的proc_defn和view_defn列内.
然而,这些定义在SybaseCentral中并不容易读取.
格式化的源列允许您使用自选的空格、注释和大小写来查看这些定义.
可以将此选项关闭以减少用于保存数据库中对象定义的空间.
只能为PUBLIC组设置此选项.
QUERY_DETAIL选项指定是否包括查询计划中"查询详细信息"部分的其它查询信息.
允许值ON、OFF默认值OFF范围设置此选项无需DBA权限.
可针对单个连接或PUBLIC组进行临时设置.
设置将立即生效.
描述当QUERY_DETAIL和QUERY_PLAN(或QUERY_PLAN_AS_HTML)都打开时,SybaseIQ将在产生其查询计划时显示有关查询的其它信息.
当QUERY_PLAN和QUERY_PLAN_AS_HTML为OFF时,则忽略此选项.
当QUERY_PLAN是ON(缺省值)时,尤其是如果QUERY_DETAIL也是ON时,可能需要启用消息日志回卷或消息日志存档,以避免填满消息日志文件.
有关消息日志回卷,请参见《系统管理指南第一卷》.
另请参见QUERY_PLAN选项(第421页)QUERY_PLAN_AS_HTML选项(第422页)数据库选项420SybaseIQQUERY_NAME选项对所执行的查询在其查询计划中命名.
允许值最多80个字符的以引号分隔的字符串.
默认值''(空字符串)范围设置此选项无需DBA权限.
可针对单个连接或PUBLIC组进行临时设置.
设置将立即生效.
描述可以为QUERY_NAME选项指定任何以引号分隔的字符串值,最多80个字符.
例如:settemporaryoptionQuery_Name='mythirdquery'设置此选项时,在发送到.
iqmsg文件或.
html文件的查询计划中,在靠近计划开头处将包括一行类似下面的句子:Query_Name:'mythirdquery'如果在脚本中在每个查询之前将该选项设置为其它值,将更容易标识特定查询的正确查询计划.
查询名称也将添加到HTML查询计划的文件名中.
此选项对查询没有其它影响.
QUERY_PLAN选项指定是否将其它查询计划输出到SybaseIQ消息文件.
允许值ON、OFF默认值ON范围设置此选项无需DBA权限.
可针对单个连接或PUBLIC组进行临时设置.
设置将立即生效.
描述打开此选项时,SybaseIQ将在IQ消息文件中产生文本查询计划.
这些查询计划显示查询树结构以及有关优化和执行的详细信息.
关闭此选项时,不显示这些消息.
该信息将发送到.
iqmsg文件.
数据库选项参考:语句和选项421另请参见QUERY_DETAIL选项(第420页)QUERY_PLAN_AFTER_RUN选项(第422页)QUERY_PLAN_AS_HTML选项(第422页)QUERY_PLAN_AFTER_RUN选项在执行完查询之后,打印整个查询计划.
允许值ON、OFF默认值OFF范围设置此选项无需DBA权限.
可针对单个连接或PUBLIC组进行临时设置.
设置将立即生效.
描述打开QUERY_PLAN_AFTER_RUN时,在已经运行完查询之后,将打印查询计划.
这将允许查询计划包括其它信息,例如从查询的每个节点传递过来的实际行数.

要让此选项工作,必须将QUERY_PLAN选项设置为ON(缺省值).
可以将此选项与QUERY_DETAIL一起使用,以便在查询计划报告中生成其它信息.
另请参见QUERY_DETAIL选项(第420页)QUERY_PLAN选项(第421页)QUERY_PLAN_AS_HTML选项(第422页)QUERY_PLAN_AS_HTML选项以HTML格式生成图形化的查询计划,以便在Web浏览器中查看.
允许值ON、OFF默认值OFF范围设置此选项无需DBA权限.
可针对单个连接或PUBLIC组进行临时设置.
设置将立即生效.
数据库选项422SybaseIQ描述QUERY_PLAN_AS_HTML导致以HTML格式生成图形化查询计划.
设置此选项时,还应当为每个查询设置QUERY_NAME选项,以便知道哪个查询与该查询计划关联.
SybaseIQ会将计划写入与.
iqmsg文件相同的目录内的文件中,该文件名为:user-name_query-name_YYYYMMDD_HHMMSS_query-number.
html例如,如果用户DBA将临时选项QUERY_NAME设置为'Query_1123',则在2011年5月18日早上8:30分创建的文件将命名为DBA_Query_1123_20110518_083000_1.
html.
日期、时间和唯一编号将自动追加到文件名的末尾,以确保不会覆盖现有文件.
注意:如果使用此功能,请监视磁盘空间使用情况,以便能留下足够空间供.
iqmsg和日志文件增长.
启用IQ消息日志回卷或消息日志存档可避免填满消息日志文件.
有关消息日志回卷,请参见《系统管理指南第一卷》.
QUERY_PLAN_AS_HTML独立操作QUERY_PLAN选项的设置.
换句话说,如果QUERY_PLAN_AS_HTML是ON,则无论QUERY_PLAN是否是ON,您都会获得HTML格式的查询计划.
很多常用浏览器的较新版本都支持此功能.
对于非常复杂的查询所生成的计划,某些浏览器可能会遇到问题.
另请参见QUERY_NAME选项(第421页)QUERY_PLAN选项(第421页)QUERY_PLAN_AFTER_RUN选项(第422页)QUERY_PLAN_AS_HTML_DIRECTORY选项指定SybaseIQ将在其中写入HTML查询计划的目录.
允许值包含目录路径名称的字符串默认值''(空字符串)范围可针对单个连接或PUBLIC组进行临时设置.
设置此选项需要具有DBA授权.
设置将立即生效.
数据库选项参考:语句和选项423描述打开QUERY_PLAN_AS_HTML选项并用QUERY_PLAN_AS_HTML_DIRECTORY选项指定了一个目录时,SybaseIQ会将HTML查询计划写入该指定目录中.
此选项通过允许HTML查询计划在服务器目录以外生成提高了安全性.
如果未使用QUERY_PLAN_AS_HTML_DIRECTORY选项,则将查询计划发送到缺省目录(.
iqmsg文件目录)中.
如果QUERY_PLAN_AS_HTML选项为ON并将QUERY_PLAN_AS_HTML_DIRECTORY设置为不存在的目录,则SybaseIQ不会保存HTML查询计划,并且不会生成错误.
在这种情况下,将继续运行查询,并向IQ消息文件中记录一条消息,以便DBA知道HTML查询计划尚未写入.
如果指定的目录路径或对该目录的权限不正确,则会将消息"打开HTML查询计划时出错:file-name被写入.
iqmsg文件".
示例创建示例目录/system1/users/DBA/html_plans,并设置对该目录的正确权限.
然后,设置选项并运行查询:SETTEMPORARYOPTIONQUERY_PLAN_AS_HTML='ON';SETTEMPORARYOPTIONQUERY_PLAN_AS_HTML_DIRECTORY='/system1/users/DBA/html_plans';SELECTcol1FROMtab1;HTML查询计划将写入指定目录/system1/users/DBA/html_plans中的文件.
另请参见QUERY_PLAN_AS_HTML选项(第422页)QUERY_PLAN_TEXT_ACCESS选项允许或阻止用户从InteractiveSQL客户端访问查询计划或使用SQL函数获取计划.
允许值ON、OFF默认值OFF范围修改此选项需要DBA权限.
可针对单个连接或PUBLIC组进行临时设置.
设置将立即生效.
描述当QUERY_PLAN_TEXT_ACCESS选项为ON时,用户可以从InteractiveSQL客户端查看、保存和打印查询计划.
当该选项为OFF时,则不会对查询计划进行高速缓存,并且与查询计划相关的其它数据库选项对InteractiveSQL客户端的查询计划显示不起任何作用.
将会显示以下错误消息:数据库选项424SybaseIQ"Noplanavailable.
ThedatabaseoptionQUERY_PLAN_TEXT_ACCESSisOFF.
"(计划不可用.
数据库选项QUERY_PLAN_TEXT_ACCESS为OFF.
)另请参见QUERY_DETAIL选项(第420页)QUERY_PLAN_AFTER_RUN选项(第422页)QUERY_PLAN_AS_HTML选项(第422页)QUERY_PLAN_TEXT_CACHING选项(第425页)OUTPUT语句[InteractiveSQL](第247页)QUERY_PLAN_TEXT_CACHING选项允许用户指定SybaseIQ是否针对用户所执行的查询生成IQ计划并对其进行高速缓存.
允许值ON、OFF默认值OFF范围修改此选项无需DBA权限.
可针对单个连接或PUBLIC组进行临时设置.
设置将立即生效.
描述IQ查询计划的大小会发生变化,对于复杂查询可能会变得非常大.
用于InteractiveSQL客户端显示的高速缓存计划可能有较高的资源要求.
QUERY_PLAN_TEXT_CACHING选项为用户提供了控制对计划进行高速缓存的资源的机制.
如果关闭该选项(缺省值),查询计划将不会对该用户连接进行高速缓存.
注意:如果关闭QUERY_PLAN_TEXT_ACCESS,则对于来自该用户的连接,无论QUERY_PLAN_TEXT_CACHING如何设置都不会对查询计划进行高速缓存.
另请参见QUERY_DETAIL选项(第420页)QUERY_PLAN_AFTER_RUN选项(第422页)QUERY_PLAN_AS_HTML选项(第422页)QUERY_PLAN_TEXT_ACCESS选项(第424页)OUTPUT语句[InteractiveSQL](第247页)数据库选项参考:语句和选项425QUERY_ROWS_RETURNED_LIMIT选项根据结果集的估计大小设置拒绝查询的行阈值.
允许值任意整数默认值0范围设置此选项无需DBA权限.
可针对单个连接或PUBLIC组进行临时设置.
设置将立即生效.
描述如果SybaseIQ所接收查询的结果行的估计数目大于QUERY_ROWS_RETURNED_LIMIT的值,会拒绝该查询并显示如下消息:Queryrejectedbecauseitexceedsresource:Query_Rows_Returned_Limit(由于超过资源,查询被拒绝:Query_Rows_Returned_Limit)如果将此选项设置为零(缺省值),则不存在限制,因而不会根据其输出中的行数拒绝任何查询.
QUERY_TEMP_SPACE_LIMIT选项指定拒绝查询前临时空间的最大估计量.
允许值任意整数默认值0(无限制)范围设置此选项无需DBA权限.
可针对单个连接或PUBLIC组进行临时设置.
设置将立即生效.
描述如果SybaseIQ所接收的查询估计要求临时结果空间大于此选项的值,会拒绝该查询并显示如下消息:Queryrejectedbecauseitexceedstotalspaceresourcelimit(由于超过总空间资源限制,查询被拒绝)将此选项设置为零(缺省值)时,对查询使用的临时存储没有限制.
数据库选项426SybaseIQ用户可能在自己的环境中覆盖此选项来运行可能填满整个临时存储的查询.
要防止失控的查询填满临时存储,DBA可以设置选项MAX_TEMP_SPACE_PER_CONNECTION.
MAX_TEMP_SPACE_PER_CONNECTION选项将监控和限制所有DML语句(而不仅仅是查询)的实际临时存储使用情况.
在分布式查询处理事务中,SybaseIQ将通过限制参与分布式查询的所有节点使用的共享空间和本地临时空间总量对于共享临时存储使用为QUERY_TEMP_SPACE_LIMIT和MAX_TEMP_SPACE_PER_CONNECTION选项设置的值.
这意味着无论有多少节点参与,任何单一查询都不能超过临时空间总量限制(来自IQ_SYSTEM_TEMP和IQ_SHARED_TEMPdbspace).
例如,如果限制为100,四个节点中每个使用25个单位量的临时空间,则查询位于限制内.
不过,如果任一节点使用的空间总量超过100,则查询将回退.
另请参见MAX_TEMP_SPACE_PER_CONNECTION选项(第404页)QUERY_TIMING选项确定是否收集特定的计时统计信息并在查询计划中显示出来.
允许值ON、OFF默认值OFF范围设置此选项无需DBA权限.
可针对单个连接或PUBLIC组进行临时设置.
设置将立即生效.
描述此选项控制对查询引擎中有关子查询及其它某些重复函数的计时统计信息的收集.
此参数通常应为OFF(缺省值),因为对于很短的相关子查询,对每个子查询执行进行计时可能会减慢查询速度.
查询计时在查询计划详细信息中表示为一系列时间戳.
这些时间戳对应于查询运算符阶段(条件、准备、提取、完成).
HTML和InteractiveSQL查询计划以图形方式将查询计时显示为时间轴.
QUOTED_IDENTIFIER选项[TSQL]控制对用双引号括起的字符串的解释.
允许值ON、OFF数据库选项参考:语句和选项427OFF(对于OpenClient连接).
默认值ON描述QUOTED_IDENTIFIER控制用双引号括起来的字符串是被解释为标识符(ON)还是普通字符串(OFF).
包括此选项是为了与Transact-SQL兼容.
如果QUOTED_IDENTIFER设置为OFF,SybaseCentral和InteractiveSQL会暂时将其设置为ON.
此时系统会显示一条消息,以通知您这一更改.
此更改仅对SybaseCentral或InteractiveSQL连接有效.
JDBC驱动程序也会将QUOTED_IDENTIFIER临时设置为ON.
RECOVERY_TIME选项设置数据库服务器从系统失败中恢复可花费的最长时间(以分钟为单位).

允许值整数(以分钟为单位)默认值2范围只能为PUBLIC组设置.
设置将在重新启动服务器后生效.
描述此选项与CHECKPOINT_TIME选项一起使用时,可决定应在何时执行检查点操作.
试探法根据自上次检查点操作之后执行的操作来计算恢复时间.
因此,恢复时间并不精确.
另请参见CHECKPOINT_TIME选项(第344页)RESERVED_KEYWORDS选项启用缺省情况下禁用的各个关键字.
允许值字符串缺省值空字符串数据库选项428SybaseIQ描述该选项只能为PUBLIC组设置.
不允许用户和临时设置.
该选项将启用缺省情况下禁用的各个关键字.
只能启用LIMIT关键字.
示例以下语句允许将LIMIT关键字识别为关键字:SETOPTIONRESERVED_KEYWORDS='LIMIT';不能启用关键字SET、OPTION和OPTIONS.
通过以下方式可确定某个字是否会确认为关键字(按优先顺序排列):出现在SQLAnywhere保留字列表中通过RESERVED_KEYWORDS选项启用通过NON_KEYWORDS选项禁用此选项的每个设置都会替换以前的设置.
以下语句会清除所有以前的设置:SETOPTIONRESERVED_KEYWORDS=;RETURN_DATE_TIME_AS_STRING选项控制在查询时如何将日期、时间或时间戳值传递给客户端应用程序.
允许值ON、OFF默认值OFF范围在当前连接的整个期间只能设置为临时选项.
描述RETURN_DATE_TIME_AS_STRING指示日期、时间和时间戳值是作为日期或时间数据类型还是作为字符串返回应用程序.
当此选项设置为ON时,服务器会在将日期、时间或时间戳值发送到客户端之前将其转换为字符串,以便保留TIMESTAMP_FORMAT、DATE_FORMAT或TIME_FORMAT选项设置.
SybaseCentral和InteractiveSQL会自动将RETURN_DATE_TIME_AS_STRING选项设置为ON.
另请参见DATE_FORMAT选项(第355页)TIME_FORMAT选项(第453页)数据库选项参考:语句和选项429TIMESTAMP_FORMAT选项(第454页)ROW_COUNT选项限制从查询返回的行数.
允许值整型.
默认值0(不限制返回的行数)范围设置此选项无需DBA权限.
可针对单个连接或PUBLIC组进行临时设置.
设置将立即生效.
描述当此运行期选项设置为非零值时,查询处理会在返回指定行数后停止.
此选项仅影响带有关键字SELECT的语句,且不会影响UPDATE和DELETE语句.
SELECT语句的关键字FIRST和TOP也限制从查询返回的行数.
使用FIRST等同于将ROW_COUNT数据库选项设置为1.
使用TOP等同于将ROW_COUNT选项设置为相同的行数.
如果TOP和ROW_COUNT都进行了设置,则TOP的值优先.
在涉及全局变量、系统函数或代理表的查询中使用时,ROW_COUNT选项可能会产生不确定性的结果.
此类查询部分使用CIS(组件集成服务)执行.
在这种情况下,应使用SELECTTOPn代替设置ROW_COUNT,或将全局变量设置为局部变量并在查询中使用该局部变量.
另请参见QUERY_ROWS_RETURNED_LIMIT选项(第426页)SELECT语句(第277页)SCALE选项指定按照最大PRECISION截断算术结果时小数点后的最少位数,仅适用于对目录存储的查询.
允许值最大值为126的整数.
默认值38范围只能为PUBLIC设置.
数据库选项430SybaseIQ描述此选项指定按照最大PRECISION截断算术结果时小数点后的最少位数,适用于对目录存储的查询.
乘、除、加、减和集合函数的结果都可以超过最大精度.
另请参见MAX_CLIENT_NUMERIC_SCALE选项(第397页)PRECISION选项(第416页)SIGNIFICANTDIGITSFORDOUBLEEQUALITY选项指定指数记数法中小数点右侧的有效位数,这些位数用于两个复杂算术表达式之间的相等测试.
允许值0–15默认值0范围设置此选项无需DBA权限.
可针对单个连接或PUBLIC组进行临时设置.
设置将立即生效.
描述由于双精度型值以二进制(以2为基数)而不是十进制(以10为基数)形式存储,因此此设置提供的所用有效小数位数是近似的.
如果此选项设置为0,则使用所有位数.
例如,当SIGNIFICANTDIGITSFORDOUBLEEQUALITY设置为12时,以下两个数字的比较结果相等;当设置为13时,其比较结果就不等:1.
234567890123451.
23456789012389SIGNIFICANTDIGITSFORDOUBLEEQUALITY影响两个复杂算术表达式之间的相等测试,而对按指数计算的表达式没有影响.
SORT_COLLATION选项允许在SORTKEY表达式上隐式使用ORDERBY函数.
允许值Internal、collation_name或collation_id数据库选项参考:语句和选项431默认值Internal范围设置此选项无需DBA权限.
可针对单个连接或PUBLIC组进行临时设置.
设置将立即生效.
描述当SORT_COLLATION的值为Internal,ORDERBY子句保持不变.
.
如果将此选项的值设置为有效的归类名称或归类ID,则ORDERBY子句中的任何字符串表达式作为SORTKEY函数已调用处理.
有关函数,请参见《参考:构件块、表和过程》.
示例将排序归类设置为二进制:SETTEMPORARYOPTIONsort_collation='binary';将排序归类设置为二进制将转换以下查询:SELECTName,IDFROMProductsORDERBYName,ID;SELECTName,IDFROMProductsORDERBY1,2;查询将被转换为:SELECTName,IDFROMProductsORDERBYSORTKEY(Name,'binary'),ID;SORT_PINNABLE_CACHE_PERCENT选项指定排序对象尝试固定的缓冲区可占当前可用缓冲区的最大百分比.
允许值0–100默认值20范围设置此选项无需DBA权限.
可针对单个连接或PUBLIC组进行临时设置.
设置将立即生效.
数据库选项432SybaseIQ描述对于非常大的排序,选择较大的值可能有助于减少排序所需的合并阶段数.
但较大的值可能会影响在系统上运行的其他用户的排序和散列.
如果更改此选项,请尝试找到最佳值以提高性能,因为选择错误的值可能会导致性能降低.
Sybase建议您使用SORT_PINNABLE_CACHE_PERCENT的缺省值.
此选项主要供Sybase技术支持部门使用.
如要更改SORT_PINNABLE_CACHE_PERCENT的值,则请谨慎操作.
SQL_FLAGGER_ERROR_LEVEL选项[TSQL]控制对未包含在指定标准中的任何SQL代码进行响应的行为.
允许值OFFSQL:1992/EntrySQL:1992/IntermediateSQL:1992/FullSQL:1999/CoreSQL:1999/PackageSQL:2003/CoreSQL:2003/Package默认值OFF描述将所有不是指定标准组成部分的SQL代码都标记为错误.
例如,指定SQL:2003/Package会导致数据库服务器标记不是完整级SQL/2003语法的语法.
为了与以前的SybaseIQ版本兼容,也接受该表中的值,而且按照指定进行映射.
表29.
SQL_FLAGGER_ERROR_LEVEL兼容性值值操作E标记不是入门级SQL92语法的语法.
对应于SQL:1992/Entry.
I标记不是中间级SQL92语法的语法.
对应于SQL:1992/Intermediate.
F标记不是完整级SQL92语法的语法.
对应于SQL:1992/Full.
W允许所有支持的语法.
对应于OFF.
数据库选项参考:语句和选项433SQL_FLAGGER_WARNING_LEVEL选项[TSQL]控制对任何未包含在指定标准中的SQL进行的响应.
允许值OFFSQL:1992/EntrySQL:1992/IntermediateSQL:1992/FullSQL:1999/CoreSQL:1999/PackageSQL:2003/CoreSQL:2003/Package默认值OFF描述将所有不是指定标准组成部分的SQL代码都标记为警告.
例如,指定SQL:2003/Package会导致数据库服务器标记不是完整级SQL/2003语法的语法.
缺省行为OFF会关闭警告标记.
为了与以前的SybaseIQ版本兼容,也接受该表中的值,而且按照指定进行映射.
表30.
SQL_FLAGGER_WARNING_LEVEL兼容性值值操作E标记不是入门级SQL92语法的语法.
对应于SQL:1992/Entry.
I标记不是中间级SQL92语法的语法.
对应于SQL:1992/Intermediate.
F标记不是完整级SQL92语法的语法.
对应于SQL:1992/Full.
W允许所有支持的语法.
对应于OFF.
STRING_RTRUNCATION选项[TSQL]确定当INSERT或UPDATE截断CHAR或VARCHAR字符串时是否会出现错误.
允许值ON、OFF默认值ON数据库选项434SybaseIQ描述如果截断的字符均为空格,则不会引发例外.
如果设置为ON,则与SQL92行为相对应.
如果STRING_RTRUNCATION为OFF,则不会引发异常,并以无提示方式截断字符串.
如果该选项为ON,则会引发错误,并执行ROLLBACK.
在SybaseIQ15.
0之前,缺省情况下该选项为OFF.
可以将其安全地设置为OFF以便向后兼容.
但是,ON设置比标识在其中进行截断可能导致数据丢失的语句更可取.
SUBQUERY_CACHING_PREFERENCE选项控制用于处理相关子查询谓词的算法.
允许值-3到3值操作1将基于排序的处理用于第一个子查询谓词.
其它没有相同排序键的子查询谓词将使用散列表处理以高速缓存子查询结果.
2使用散列表高速缓存合法时所有子查询谓词的结果.
如果可用的临时高速缓存不能容纳所有子查询结果,性能可能会下降.
3高速缓存一个以前的子查询结果.
切勿使用SORT和HASH.
0让优化程序选择.
-1不要使用SORT.
如果合法,IQ优化程序将选择HASH.
-2不要使用HASH.
如果合法,IQ优化程序将选择SORT或高速缓存的值.
-3不要使用高速缓存的值.
如果合法,IQ优化程序将选择HASH或SORT.
默认值0范围设置此选项无需DBA权限.
可针对单个连接或PUBLIC组进行临时设置.
设置将立即生效描述对于相关子查询谓词,IQ优化程序提供了高速缓存外部引用和降低子查询执行开销的子查询结果的选项.
SUBQUERY_CACHING_PREFERENCE允许您在选择要使用的算法时覆盖优化程序的开销决策.
它不会覆盖用于确定算法在查询引擎内是否合法的内部规则.
数据库选项参考:语句和选项435非零值的设置将影响查询中的每个子查询谓词.
无法选择性地将非零值用于查询中的某一个子查询谓词.
请参见《参考:构件块、表和过程》>"SQL语言元素">"搜索条件">"搜索条件中的子查询">"分离子查询谓词".
SUBQUERY_CACHING_PREFERENCE通常用于内部测试,只有经验丰富的DBA才能使用.
它不适用于IN子查询.
另请参见IN_SUBQUERY_PREFERENCE选项(第383页)SUBQUERY_FLATTENING_PERCENT选项允许用户更改优化程序决定将标量子查询转换为连接处的阈值.
允许值0到(232-1)值操作0让优化程序成本模型决定1到(232-1)平展的引用百分比默认值100范围此选项仅适用于相关标量子查询.
设置SUBUERY_FLATTENING_PERCENT无需DBA权限.
此选项可由任何用户在任何级别进行设置,并会立即生效.
如果将SUBUERY_FLATTENING_PERCENT设置为非缺省值,查询中的每个标量子查询谓词都将受影响;无法选择性地将此选项用于查询中的某一个标量子查询谓词.

描述SybaseIQ查询优化程序可以将相关标量子查询转换为等同的连接操作以提高查询性能.
SUBQUERY_FLATTENING_PERCENT选项选项允许用户调整执行优化处的阈值.
SCALAR_FLATTENING_PERCENT表示标量子查询中估计内部非重复值与估计外部非重复值的百分比.
因为估计的百分比接近100%,所以评估子查询作为连接的开销可能小于使用单独的索引探查.
可以将该值设置为大于100%,因为不保证估计内部重复值小于估计外部重复值.
另请参见SUBQUERY_FLATTENING_PREFERENCE选项(第437页)数据库选项436SybaseIQSUBQUERY_FLATTENING_PREFERENCE选项允许用户覆盖优化程序将标量或EXISTS子查询转换(平展)为连接时的决定.
允许值-3到3值操作-3避免将EXISTS和标量子查询平展为连接操作.
-2避免将标量子查询平展为连接操作.
-1避免将EXISTS子查询平展为连接操作.
0允许IQ优化程序决定平展子查询.
1忽略平展EXIST的开销(如有可能).
2忽略平展标量的开销(如有可能).
3忽略EXISTS和标量子查询的开销.
默认值0范围设置此选项无需DBA权限.
SUBQUERY_FLATTENING_PREFERENCE可由任何用户在任何级别进行设置.
此选项会立即生效.
如果将此选项设置为非零值,查询中的每个子查询谓词都将受影响;无法选择性地将此选项用于查询中的某一个子查询谓词.

描述SybaseIQ优化程序可以将相关标量子查询或或EXISTS或NOTEXISTS子查询转换为等同的连接操作以提高查询性能.
该优化称为子查询平展.
SUBQUERY_FLATTENING_PREFERENCE允许您在选择要使用的算法时覆盖优化程序的开销决策.
将SUBQUERY_FLATTENING_PREFERENCE设置为0(允许IQ优化程序决定平展子查询)等同于将SybaseIQ早期版本中目前已不受支持的FLATTEN_SUBQUERIES选项设置为ON.
另请参见SUBQUERY_FLATTENING_PERCENT选项(第436页)数据库选项参考:语句和选项437SUBQUERY_PLACEMENT_PREFERENCE选项控制查询计划中相关子查询谓词运算符的位置.
允许值-1到1值操作-1选择查询计划中尽可能靠前的位置,从而尽可能先执行查询中的子查询.

0让优化程序选择.
1选择查询计划中尽可能靠后的位置,从而尽可能地延迟执行查询中的子查询.

默认值0范围可针对任何范围、任何用户进行设置,设置将立即生效.
描述对于查询中的相关子查询运算符,IQ优化程序可以在相应查询计划中选择多个不同的有效位置.
SUBQUERY_PLACEMENT_PREFERENCE允许在选择放置位置时覆盖优化程序的基于开销的决策.
它不能覆盖用于确定位置是否有效的内部规则,而在有些查询中,可能只有一个位置可供选择.
如果将此选项设置为非零值,则会影响查询中的每个相关子查询谓词;此选项不能用于从查询的多个子查询中有选择性地修改一个子查询的位置.
此选项通常用于内部测试,只有经验丰富的DBA才能使用.
此选项的缺省设置几乎总是适用的.
有时,Sybase技术支持部门可能会要求您更改该值.
SUPPRESS_TDS_DEBUGGING选项确定是否在服务器窗口中显示TDS调试信息.
允许值ON、OFF默认值OFF描述在以-z选项启动服务器时,会在服务器窗口中显示调试信息,其中包括有关TDS协议的调试信息.
数据库选项438SybaseIQSUPPRESS_TDS_DEBUGGING会限制出现在数据库服务器窗口中的有关TDS的调试信息.
当此选项设置为OFF(缺省值)时,会在服务器窗口中显示TDS调试信息.
SWEEPER_THREADS_PERCENT选项指定用于清理缓冲区高速缓存的SybaseIQ线程所占百分比.
允许值1–40默认值10范围只能为PUBLIC组设置.
设置此选项需要具有DBA授权.
必须关闭并重新启动数据库服务器,才能使更改生效.
描述SybaseIQ使用一少部分处理线程作为清理程序线程.
这些清理程序线程用于清除主和临时缓冲区高速缓存中的脏页.
在IQ监视器-cache报告中,GDirty列显示在"脏"(已修改)状态下发生的LRU缓冲区争夺次数.
如果GDirty已有一段时间值大于0,可能需要增加SWEEPER_THREADS_PERCENT或WASH_AREA_BUFFERS_PERCENT.
此选项的缺省设置几乎总是适用的.
有时,Sybase技术支持部门可能会要求您增加该值.
另请参见WASH_AREA_BUFFERS_PERCENT选项(第458页)TDS_EMPTY_STRING_IS_NULL选项[database]控制为TDS连接返回的空字符串为NULL还是包含一个空白字符的字符串.
允许值ON,OFF默认值OFF描述TDS_EMPTY_STRING_IS_NULL缺省情况下,被设置为OFF,并且TDS连接会将空字符串作为包含一个空白字符的字符串返回.
当此选项设置为ON时,为TDS连接返回的空字符串为NULL字符串.
非TDS连接会对空字符串和NULL字符串加以区分.
数据库选项参考:语句和选项439TEMP_EXTRACT_APPEND选项指定将数据提取功能所提取的所有行添加到输出文件的末尾.
允许值ON、OFF默认值OFF范围可针对单个连接进行设置.
设置将立即生效.
描述此选项指定将数据提取功能所提取的所有行添加到输出文件的末尾.
可在您对其具有WRITE/EXECUTE权限的目录中创建输出文件,并为用于启动SybaseIQ的用户名(例如,sybase)设置对该目录和输出文件的WRITE权限.
您可以根据需要为其他用户授予对输出文件的权限.
在TEMP_EXTRACT_NAME1选项中指定输出文件的名称.
如果尚不存在输出文件,则数据提取功能会创建该文件.
TEMP_EXTRACT_APPEND与TEMP_EXTRACT_SIZEn选项不兼容.
如果您尝试限制提取追加输出文件的大小,SybaseIQ将报告错误.
有关数据提取功能及如何使用提取选项的详细信息,请参见《系统管理指南第一卷》>"导入和导出数据">"从数据库导出数据的方法">"数据提取功能".
另请参见TEMP_EXTRACT_NAMEn选项(第443页)TEMP_EXTRACT_BINARY选项与TEMP_EXTRACT_SWAP选项合并使用,用于指定数据提取功能所执行的提取的类型.
允许值ON、OFF默认值OFF范围可针对单个连接进行设置.
设置将立即生效.
数据库选项440SybaseIQ描述此选项与TEMP_EXTRACT_SWAP选项一起使用,用于指定数据提取功能所执行的提取的类型.
表31.
与提取类型对应的提取选项设置提取类型TEMP_EXTRACT_BINARYTEMP_EXTRACT_SWAPbinaryONOFF二进制/交换ONONASCIIOFFOFF缺省提取类型为ASCII.
有关数据提取功能及如何使用提取选项的详细信息,请参见《系统管理指南第一卷》>"导入和导出数据">"从数据库导出数据的方法">"数据提取功能".
另请参见TEMP_EXTRACT_SWAP选项(第450页)TEMP_EXTRACT_COLUMN_DELIMITER选项指定用于ASCII提取的数据提取功能的输出中各列之间的分隔符.
允许值字符串默认值','范围可针对单个连接进行设置.
设置将立即生效.
描述使用TEMP_EXTRACT_COLUMN_DELIMITER可指定数据提取功能的输出中各列之间的分隔符.
就ASCII提取而言,缺省用逗号分隔各列值.
缺省情况下,字符串不带引号.
该分隔符必须占1至4字节;如果使用的是多字节归类顺序,该分隔符必须在当前使用的归类顺序中有效.
应选择一个任何数据输出字符串自身中不存在的分隔符.

对于ASCII提取,如果将此选项设置为空字符串'',则将用不带列分隔符的固定宽度ASCII写入所提取的数据.
数值数据类型和二进制数据类型在具有n个空白的字段上右对齐,其中n为该类型的任何值所需的最大字节数.
字符数据类型在具有n个空白的字段上左对齐.
数据库选项参考:语句和选项441注意:固定宽度ASCII提取中的最小列宽为4字节,以允许字符串"NULL"表示空值.
例如,如果所提取的列为CHAR(2)并且TEMP_EXTRACT_COLUMN_DELIMITER设置为空字符串'',则提取的数据后面会有两个空格.
有关数据提取功能及如何使用提取选项的详细信息,请参见《系统管理指南第一卷》>"导入和导出数据">"从数据库导出数据的方法">"数据提取功能".
另请参见TEMP_EXTRACT_QUOTE选项(第447页)TEMP_EXTRACT_QUOTES选项(第447页)TEMP_EXTRACT_QUOTES_ALL选项(第448页)TEMP_EXTRACT_ROW_DELIMITER选项(第449页)TEMP_EXTRACT_DIRECTORY选项控制是否允许用户使用数据提取功能.
还控制放置临时提取文件的目录并覆盖在TEMP_EXTRACT_NAMEn选项中指定的目录路径.
允许值string默认值''(空字符串)范围可针对单个连接或PUBLIC组进行临时设置.
设置此选项需要具有DBA授权.
此选项会立即生效.
描述如果针对某一用户将TEMP_EXTRACT_DIRECTORY选项设置为字符串FORBIDDEN(不区分大小写),则禁止该用户执行数据提取.
该用户尝试使用数据提取功能将生成错误:YoudonothavepermissiontoperformExtracts(您无权执行提取).
如果TEMP_EXTRACT_DIRECTORY组的PUBLIC设置为FORBIDDEN,则任何人均无法运行数据提取.
如果将TEMP_EXTRACT_DIRECTORY设置为有效目录路径,则将临时提取文件放置到该目录中,并覆盖在TEMP_EXTRACT_NAMEn选项中指定的路径.
如果将TEMP_EXTRACT_DIRECTORY设置为无效目录路径,则会发生错误:FilesdoesnotexistFile:(文件不存在文件:)如果TEMP_EXTRACT_DIRECTORY为空,则根据在TEMP_EXTRACT_NAMEn中的相应指定,将临时提取文件放置到目录中.
如果TEMP_EXTRACT_NAMEn中未指定任何路径,缺省情况下,提取文件将放置到服务器启动目录中.
数据库选项442SybaseIQ此选项可限制在用户对其具有写入访问权限的目录中创建大型数据提取文件的操作,从而增强了安全性并有助于控制磁盘管理.
有关数据提取功能及如何使用提取选项的详细信息,请参见《系统管理指南第一卷》>"导入和导出数据">"从数据库导出数据的方法">"数据提取功能".
另请参见TEMP_EXTRACT_NAMEn选项(第443页)TEMP_EXTRACT_ESCAPE_QUOTES选项指定在用于ASCII提取的数据提取工具的输出中,是否包含引号的字段中的所有引号都进行转义.
允许值ON、OFF默认值OFF范围可针对单个连接进行设置.
设置将立即生效.
描述除非以下条件成立,否则将忽略此选项:TEMP_EXTRACT_QUOTE为缺省值或设置为'"'(双引号)值,TEMP_EXTRACT_BINARY为OFF,且TEMP_EXTRACT_QUOTES或TEMP_EXTRACT_QUOTES_ALL为ON.
另请参见TEMP_EXTRACT_BINARY选项(第440页)TEMP_EXTRACT_QUOTES选项(第447页)TEMP_EXTRACT_QUOTES_ALL选项(第448页)TEMP_EXTRACT_NAMEn选项指定数据提取功能所使用的输出文件或命名管道的名称.
有8个选项:TEMP_EXTRACT_NAME1通过TEMP_EXTRACT_NAME8.
允许值string默认值''(空字符串)数据库选项参考:语句和选项443范围可针对单个连接进行设置.
设置将立即生效.
描述TEMP_EXTRACT_NAME1到TEMP_EXTRACT_NAME8指定数据提取功能所使用的输出文件的名称.
必须按顺序使用这些选项.
例如,除非事先已设置TEMP_EXTRACT_NAME3和TEMP_EXTRACT_NAME1选项,否则TEMP_EXTRACT_NAME2将无效.
在这些选项中,最重要的选项就是TEMP_EXTRACT_NAME1.
如果TEMP_EXTRACT_NAME1设置为其缺省设置(空字符串''),则将禁用提取并且不重定向输出.
要启用提取,请将TEMP_EXTRACT_NAME1设置为路径名称.
提取功能即开始将相应数据提取至具有该名称的文件中.
为该文件选择一个未在别处使用的路径名称.
Sybase建议将TEMP_EXTRACT_NAME1选项设置为TEMPORARY.
当TEMP_EXTRACT_APPEND选项设置为ON时,YoucanalsouseTEMP_EXTRACT_NAME1指定输出文件的名称.
在这种情况下,请在执行SELECT语句之前,为用于启动SybaseIQ的用户名(例如,sybase)设置对包含该已命名文件的目录或文件夹以及该已命名文件的WRITE权限.
在附加模式中,数据提取功能向文件末尾添加提取的行并且不会覆盖文件中的已有数据.
如果尚不存在输出文件,则数据提取功能会创建该文件.
警告!
如果选择一个现有文件的路径名称,并将TEMP_EXTRACT_APPEND选项设置为OFF(缺省值),则该文件的内容将被覆盖.
例如,如果该文件是周报告文件,而不是某一数据库文件,则这可能正是您所需要的.
除了TEMP_EXTRACT_NAME2之外,还可以使用TEMP_EXTRACT_NAME8到TEMP_EXTRACT_NAME1选项指定多个输出文件的名称.
如果要提取到单个磁盘文件或单个命名管道,请将选项TEMP_EXTRACT_NAME2到TEMP_EXTRACT_NAME8以及TEMP_EXTRACT_SIZE1到TEMP_EXTRACT_SIZE8保留为缺省值.
如果设置了TEMP_EXTRACT_NAME1,则不能执行下列这些操作:针对连接中顶层表的LOAD、DELETE、INSERT,或INSERT.
.
.
LOCATION操作SYNCHRONIZEJOININDEX(显式发出或作为CREATEJOININDEX的一部分执行)INSERT.
.
.
SELECT此外,还应注意对数据提取功能的下列限制:仅能对IQ存储中存储的数据进行提取操作.
对系统表或跨数据库连接无法进行提取.
对于使用用户定义的函数或除suser_id()和suser_name()以外的系统函数的查询,不能使用提取功能.
数据库选项444SybaseIQ如果运行带有-q(安静模式)选项的InteractiveSQL,并且数据提取命令位于命令文件中,则必须首先永久设置InteractiveSQL选项"显示多个结果集"(Showmultipleresultsets).
如果此选项未设置,则不会创建输出文件.
要设置"显示多个结果集"选项,请在InteractiveSQL窗口中依次选择"工具">"选项",然后选中"显示多个结果集"(Showmultipleresultsets)框并单击"设为永久"(Makepermanent).
可用TEMP_EXTRACT_NAMEn选项覆盖使用TEMP_EXTRACT_DIRECTORY选项指定的目录路径.
有关数据提取功能及如何使用提取选项的详细信息,请参见《系统管理指南第一卷》>"导入和导出数据">"从数据库导出数据的方法">"数据提取功能".
另请参见TEMP_EXTRACT_APPEND选项(第440页)TEMP_EXTRACT_DIRECTORY选项(第442页)TEMP_EXTRACT_SIZEn选项(第449页)TEMP_EXTRACT_NULL_AS_EMPTY选项控制在用于ASCII提取的数据提取功能的输出中,空值的表示形式.
允许值ON、OFF默认值OFF范围可针对单个连接进行设置.
设置将立即生效.
描述TEMP_EXTRACT_NULL_AS_EMPTY控制在用于ASCII提取的数据提取功能的输出中,空值的表示形式.
当TEMP_EXTRACT_NULL_AS_EMPTY选项设置为ON时,对于所有数据类型,空值的表示形式均为''(空字符串).
提取输出文件中不包含上述引号.
当TEMP_EXTRACT_NULL_AS_EMPTY选项设置为OFF时,则在所有情况下均使用字符串'NULL'表示空值.
OFF为缺省值.
有关数据提取功能及如何使用提取选项的详细信息,请参见《系统管理指南第一卷》>"导入和导出数据">"从数据库导出数据的方法">"数据提取功能".
数据库选项参考:语句和选项445TEMP_EXTRACT_NULL_AS_ZERO选项控制在用于ASCII提取的数据提取功能的输出中,空值的表示形式.
允许值ON、OFF默认值OFF范围可针对单个连接进行设置.
设置将立即生效.
描述TEMP_EXTRACT_NULL_AS_ZERO控制在用于ASCII提取的数据提取功能的输出中,空值的表示形式.
当TEMP_EXTRACT_NULL_AS_ZERO设置为ON,空值的表示形式如下:'0',表示算术类型''(空字符串),表示CHAR和VARCHAR字符类型''(空字符串),表示日期''(空字符串),表示时间''(空字符串),表示时间戳提取输出文件中不包含上述引号.
当TEMP_EXTRACT_NULL_AS_ZERO选项设置为OFF时,则在所有情况下均使用字符串'NULL'表示空值.
OFF为缺省值.
注意:在SybaseIQ12.
5中,从表的CHAR或VARCHAR列执行的ASCII提取始终至少向输出文件返回四个字符串.
如果TEMP_EXTRACT_NULL_AS_ZERO设置为OFF,则需要这样做,因为SybaseIQ需要向包含空值的列中的所有行写出词语NULL.
如果TEMP_EXTRACT_NULL_AS_ZERO设置为ON,则无需保留四个字符的空间.
在SybaseIQ12.
6中,如果TEMP_EXTRACT_NULL_AS_ZERO设置为ON,则ASCII提取向文件的CHAR或VARCHAR列所写入的字符数等于该列中的字符数,即使该数字小于4也是如此.
有关数据提取功能及如何使用提取选项的详细信息,请参见《系统管理指南第一卷》>"导入和导出数据">"从数据库导出数据的方法">"数据提取功能".
数据库选项446SybaseIQTEMP_EXTRACT_QUOTE选项在TEMP_EXTRACT_QUOTES选项或TEMP_EXTRACT_QUOTES_ALL选项设置为ON时指定要用作引号的字符串,该引号括起用于ASCII提取的数据提取功能的输出中的字段.
允许值字符串默认值''(空字符串)范围可针对单个连接进行设置.
设置将立即生效.
描述此选项在缺省值不适用时指定要用作引号的字符串,引号括起用于ASCII提取的数据提取功能的输出中的字段.
TEMP_EXTRACT_QUOTE与TEMP_EXTRACT_QUOTES和TEMP_EXTRACT_QUOTES_ALL选项一起使用.
在TEMP_EXTRACT_QUOTE选项中指定的引号字符串与行和列分隔符具有相同的限制.
此选项的缺省值是空字符串,SybaseIQ会将其转换为单引号.
TEMP_EXTRACT_QUOTE选项中所指定的字符串必须占1至4(最大值)字节;如果使用的是多字节归类顺序,则该字符串必须在当前使用的归类顺序中有效.
请务必选择一个任何数据输出字符串自身中不存在的字符串.
有关数据提取功能及如何使用提取选项的详细信息,请参见《系统管理指南第一卷》>"导入和导出数据">"从数据库导出数据的方法">"数据提取功能".
另请参见TEMP_EXTRACT_COLUMN_DELIMITER选项(第441页)TEMP_EXTRACT_QUOTES选项(第447页)TEMP_EXTRACT_QUOTES_ALL选项(第448页)TEMP_EXTRACT_ROW_DELIMITER选项(第449页)TEMP_EXTRACT_QUOTES选项指定在用于ASCII提取的数据提取功能的输出中,字符串字段用引号括起.
允许值ON、OFF默认值OFF数据库选项参考:语句和选项447范围可针对单个连接进行设置.
设置将立即生效.
描述此选项指定在用于ASCII提取的数据提取功能的输出中,字符串字段用引号括起.
如果缺省值不适用,则在TEMP_EXTRACT_QUOTE选项中指定用作引号的字符串.
有关数据提取功能及如何使用提取选项的详细信息,请参见《系统管理指南第一卷》>"导入和导出数据">"从数据库导出数据的方法">"数据提取功能".
另请参见TEMP_EXTRACT_COLUMN_DELIMITER选项(第441页)TEMP_EXTRACT_QUOTES_ALL选项(第448页)TEMP_EXTRACT_ROW_DELIMITER选项(第449页)TEMP_EXTRACT_QUOTES_ALL选项指定在用于ASCII提取的数据提取功能的输出中,所有字段都用引号括起.
允许值ON、OFF默认值OFF范围可针对单个连接进行设置.
设置将立即生效.
描述TEMP_EXTRACT_QUOTES_ALL指定在用于ASCII提取的数据提取功能的输出中,所有字段都用引号括起.
如果缺省值不适用,则在TEMP_EXTRACT_QUOTE中指定用作引号的字符串.
有关数据提取功能及如何使用提取选项的详细信息,请参见《系统管理指南第一卷》>"导入和导出数据">"从数据库导出数据的方法">"数据提取功能".
另请参见TEMP_EXTRACT_COLUMN_DELIMITER选项(第441页)TEMP_EXTRACT_QUOTES选项(第447页)TEMP_EXTRACT_QUOTES_ALL选项(第448页)TEMP_EXTRACT_ROW_DELIMITER选项(第449页)数据库选项448SybaseIQTEMP_EXTRACT_ROW_DELIMITER选项指定用于ASCII提取的数据提取功能的输出中,各行之间的分隔符.
允许值字符串默认值''(空字符串)范围可针对单个连接进行设置.
设置将立即生效.
描述TEMP_EXTRACT_ROW_DELIMITER指定数据提取功能的输出中各行之间的分隔符.
就ASCII提取而言,缺省情况下以换行符作为行结尾(对于UNIX平台)或以回车/换行符对作为行结尾(对于Windows平台).
该分隔符必须占1至4字节;如果使用的是多字节归类顺序,该分隔符必须在当前使用的归类顺序中有效.
应选择一个任何数据输出字符串中不存在的分隔符.
TEMP_EXTRACT_ROW_DELIMITER选项的缺省值是空字符串.
SybaseIQ会将此选项的缺省空字符串转换为换行符(对于UNIX平台)或回车/换行符对(对于Windows平台).
有关数据提取功能及如何使用提取选项的详细信息,请参见《系统管理指南第一卷》>"导入和导出数据">"从数据库导出数据的方法">"数据提取功能".
另请参见TEMP_EXTRACT_COLUMN_DELIMITER选项(第441页)TEMP_EXTRACT_QUOTES选项(第447页)TEMP_EXTRACT_QUOTES_ALL选项(第448页)TEMP_EXTRACT_SIZEn选项指定数据提取功能所使用的对应输出文件的最大大小.
有8个选项:TEMP_EXTRACT_SIZE1到TEMP_EXTRACT_SIZE8.
默认值0范围可针对单个连接进行设置.
设置将立即生效.
数据库选项参考:语句和选项449描述TEMP_EXTRACT_SIZE1到TEMP_EXTRACT_SIZE8用于指定数据提取功能所使用的对应输出文件的最大大小.
TEMP_EXTRACT_SIZE1指定TEMP_EXTRACT_NAME1所指定的输出文件的最大大小,TEMP_EXTRACT_SIZE2指定TEMP_EXTRACT_NAME2所指定的输出文件的最大大小,依此类推.
数据提取大小选项的缺省值为0.
SybaseIQ可将此缺省值转换为以下各值:设备类型Size磁盘文件AIX和HP-UX:0–64GBSunSolaris和Linux:0–512GBWindows:0–128GB磁带*524288KB(0.
5GB)其它9007199254740992KB(8192PB"无限制")*目前不支持磁带设备.
如果大型文件系统(如JFS2)所支持的文件大小大于缺省值,请将TEMP_EXTRACT_SIZEn设置为该文件系统允许的值.
例如,要支持1TB设置选项:TEMP_EXTRACT_SIZE1=1073741824KB如果要提取到单个磁盘文件或单个命名管道,请将选项TEMP_EXTRACT_NAME2到TEMP_EXTRACT_NAME8以及TEMP_EXTRACT_SIZE1到TEMP_EXTRACT_SIZE8保留为缺省值.
TEMP_EXTRACT_SIZEn与TEMP_EXTRACT_APPEND选项不兼容.
如果您尝试限制提取追加输出文件的大小,SybaseIQ将报告错误.
有关数据提取功能及如何使用提取选项的详细信息,请参见《系统管理指南第一卷》>"导入和导出数据">"从数据库导出数据的方法">"数据提取功能".
另请参见TEMP_EXTRACT_NAMEn选项(第443页)TEMP_EXTRACT_SWAP选项与TEMP_EXTRACT_BINARY选项合并使用,用于指定数据提取功能所执行的提取的类型.
允许值ON、OFF数据库选项450SybaseIQ默认值OFF范围可针对单个连接进行设置.
设置将立即生效.
描述此选项与TEMP_EXTRACT_BINARY选项一起使用,用于指定数据提取功能所执行的提取的类型.
表32.
与提取类型对应的提取选项设置提取类型TEMP_EXTRACT_BINARYTEMP_EXTRACT_SWAPbinaryONOFF二进制/交换ONONASCIIOFFOFF缺省提取类型为ASCII.
有关数据提取功能及如何使用提取选项的详细信息,请参见《系统管理指南第一卷》>"导入和导出数据">"从数据库导出数据的方法">"数据提取功能".
另请参见TEMP_EXTRACT_BINARY选项(第440页)TEMP_RESERVED_DBSPACE_MB选项控制SybaseIQ在临时IQ存储中保留的空间量.
允许值大于或等于200的整数(以兆字节为单位)默认值200;SybaseIQ实际保留IQ_SYSTEM_TEMP中最后一个读写文件的最多50%和最少1%范围只能为PUBLIC组设置.
设置此选项需要具有DBA授权.
设置将立即生效.
不需要重新启动服务器即可更改保留空间大小.
描述TEMP_RESERVED_DBSPACE_MB用于控制SybaseIQ在临时IQ存储中,为释放保存点、提交和检查点操作期间使用的某些小型但极为重要的数据结构所留出的空间量.

数据库选项参考:语句和选项451对于生产数据库,请将该值设置为介于200MB和1GB之间的值.
IQ页大小和并发连接数越大,需要的保留空间就越多.
保留的空间大小是通过计算IQ_SYSTEM_TEMP中最后一个读写文件的最多50%和最少1%得出的.
TEMP_SPACE_LIMIT_CHECK选项对每个连接检查目录存储临时空间.
允许值ON、OFF(不执行限制检查)默认值ON范围只能为PUBLIC组设置.
需要具有DBA权限.
描述当TEMP_SPACE_LIMIT_CHECK为ON时,数据库服务器会检查连接所使用的目录存储临时文件空间量.
当此选项设置为OFF时,如果连接请求的临时文件空间量超出限额,则会发生致命错误.
当此选项设置为ON时,如果连接请求的临时文件空间量超出限额,请求将失败并返回"超出了临时空间限制"错误.
有两个因素可用来确定连接的临时文件限额:临时文件的最大大小和活动数据库连接的数量.
临时文件的最大大小是该文件当前大小与该文件所在分区上可用磁盘空间量之和.
打开限制检查功能后,如果临时文件已达到其最大大小的80%或更多,且连接请求更多的临时文件空间,则服务器会检查连接是否超出了其限额.
一旦发生这种情况,如果任何连接使用的临时文件空间量超出最大临时文件空间量和活动连接数的比值,该连接将会失败.
注意:此选项与IQ临时存储空间无关.
要对IQ临时空间的增大进行约束,请使用QUERY_TEMP_SPACE_LIMIT选项和MAX_TEMP_SPACE_PER_CONNECTION选项.
您可以使用sa_disk_free_spacesystem过程来获取有关临时文件的可用空间信息.
有关详细信息,请参见"SQLAnywhereServer–SQL参考">"系统对象">"系统过程">"按字母顺序排列的系统过程列表">"sa_disk_free_space系统过程".
注意:此参考指向SQLAnywhere文档.
示例数据库启动时,其临时文件所在的驱动器上尚有100MB的可用空间,且该驱动器上没有任何其它活动文件.
因此,该临时文件的可用空间为100MB.
DBA输入:SETOPTIONPUBLIC.
TEMP_SPACE_LIMIT_CHECK='ON'数据库选项452SybaseIQ只要临时文件保持不超过80MB,服务器的行为就会和以前一样.
一旦该文件达到80MB,就可能会产生新的行为.
如果运行10个查询,则临时文件将需要增大.
当服务器发现有一个查询在使用超过8MB的临时文件空间时,该查询将失败.
TEXT_DELETE_METHOD选项指定在TEXT索引中进行删除时所使用的算法.
用户必须获得非结构化数据分析选件的使用许可才能使用TEXT索引.
有关TEXT_DELETE_METHOD语法和完整说明,请参见《SybaseIQ中的非结构化数据分析》.
TIME_FORMAT选项设置从数据库中检索到的时间所使用的格式.
允许值由符号HH、NN、MM、SS组成的一个字符串,这些符号之间用冒号分隔.
默认值'HH:NN:SS.
SSS'对于OpenClient和JDBC连接,缺省值也设置为HH:NN:SS.
SSS.
描述该格式是使用以下符号的字符串:hh–两位数表示的小时数(24小时制).
nn–两位数表示的分钟数.
mm–如果跟在冒号后面(如"hh:mm"这样的格式),则为两位数表示的分钟数.
ss[.
s.
.
.
s]–两位数表示的秒数加可选的小数部分.
每个符号都会替换为与要设置格式的日期对应的数据.
任何表示字符而不是数字输出的格式符号都可以采用大写形式,这样会使替换的字符也显示为大写.
对于数字,在格式字符串中使用混合的大小写会取消前导零的显示.
不能在格式字符串中使用多字节字符.
即使数据库的归类顺序是多字节归类顺序(如932JPN),也只能使用单字节字符.

另请参见DATE_FORMAT选项(第355页)RETURN_DATE_TIME_AS_STRING选项(第429页)数据库选项参考:语句和选项453TIMESTAMP_FORMAT选项设置从数据库中检索到的时间戳所使用的格式.
允许值由下面所列符号组成的字符串.
默认值'YYYY-MM-DDHH:NN:SS.
SSS'描述该格式是使用以下符号的字符串:表33.
TIMESTAMP_FORMAT字符串符号符号描述yy2位数表示的年份.
yyyy4位数表示的年份.
mm2位数表示的月份,如果跟在冒号后面(如'hh:mm'这样的格式)则为两位数表示的分钟数.
mmm月份名称的3字符简写形式mmmm[m.
.
.
]月份名称的字符长格式:有多少个m,就有多少个字符,直至指定的m个数超过相应月份名称中的字符数为止.
dd两位数表示的日期.
ddd星期天数的3字符简写形式dddd[d.
.
.
]星期名称的字符长格式:有多少个d,就有多少个字符,直至指定的d个数超过相应星期名称中的字符数为止.
hh2位数表示的小时.
nn2位数表示的分钟.
ss.
SSS秒(ss)和秒的小数部分(SSS),最多可有六个小数位.
并非所有的平台都支持精确到小数点后第六位的时间戳.
aa上午或下午(12小时制).
pp根据需要表示下午(12小时制).
每个符号都会替换为与要设置格式的日期对应的数据.
任何表示字符而不是数字输出的格式符号都可以采用大写形式,这样会使替换的字符也显示为大写.
对于数字,在格式字符串中使用混合的大小写会取消前导零的显示.
数据库选项454SybaseIQ不能在格式字符串中使用多字节字符.
即使数据库的归类顺序是多字节归类顺序(如932JPN),也只能使用单字节字符.

另请参见DATE_FORMAT选项(第355页)RETURN_DATE_TIME_AS_STRING选项(第429页)TOP_NSORT_CUTOFF_PAGES选项设置结果大小阈值,以选择TOPN算法.
允许值1–1000默认值1描述TOP_NSORT_CUTOFF_PAGES选项设置阈值(以页为单位),在此种情况下,对包含TOP子句和ORDERBY子句的查询所执行的评估将算法从基于有序列表的处理切换到基于排序的处理.
当TOPN值小于结果行数时,有序列表处理的执行效果更佳.
对于较大的TOPN值,基于排序的处理的执行效果更佳.
在某些情况下,增加TOP_NSORT_CUTOFF_PAGES可避免基于排序的处理,进而提高性能.
另请参见SELECT语句(第277页)TRIM_PARTIAL_MBC选项允许自动剪裁部分多字节字符数据.
允许值ON、OFF默认值OFF范围设置此选项无需DBA权限.
只能为PUBLIC组设置.
设置将立即生效.
描述为同时包含单字节和多字节字符的归类提供一致的数据装载.
如果TRIM_PARTIAL_MBC为ON:数据库选项参考:语句和选项455在装载到CHAR列时,将部分多字节字符替换为空格.
在装载到VARCHAR列时,截断部分多字节字符.
如果TRIM_PARTIAL_MBC为OFF,则常规CONVERSION_ERROR语义有效.
另请参见CONVERSION_ERROR选项[TSQL](第346页)TSQL_VARIABLES选项[TSQL]控制@符号是否可以用作嵌入式SQL宿主变量名的前缀.
允许值ON、OFFON(对于OpenClient和JDBC连接)默认值OFF描述当TSQL_VARIABLES设置为ON时,可以使用@符号代替冒号作为嵌入式SQL中宿主变量名的前缀.
此选项主要用于OpenServerGateway.
USER_RESOURCE_RESERVATION选项调整用于当前用户数的内存使用量.
允许值整数范围设置此选项无需DBA权限.
可针对单个连接或PUBLIC组进行临时设置.
设置将立即生效.
默认值1描述SybaseIQ可跟踪打开的游标数,并相应地分配内存.
在某些情况下,可以使用此选项调整SybaseIQ认为当前在使用产品的当前游标的最小数量,从而节省从临时高速缓存中分配的内存.
只有经过仔细分析后确定确实有此需要时,才应设置此选项.
如果需要设置此参数,请与Sybase技术支持部门联系以了解详细信息.
数据库选项456SybaseIQVERIFY_PASSWORD_FUNCTION选项指定可用于执行口令规则的用户提供的鉴定函数.
允许值字符串范围可针对单个连接或PUBLIC组进行临时设置.
设置此选项需要具有DBA授权.
此选项会立即生效.
默认值''(空字符串).
(不对GRANTCONNECT调用函数.
)描述当VERIFY_PASSWORD_FUNCTION选项值设置为有效字符串时,语句GRANTCONNECTTOuseridIDENTIFIEDBYpassword将调用该选项值所指定的函数.
该选项值需要使用owner.
function_name格式,以防止用户覆盖该函数.
该函数具有两个参数:user_nameVARCHAR(128)new_pwdVARCHAR(255)返回的值类型为VARCHAR(255).
注意:请对该函数执行ALTERFUNCTIONfunction-nameSETHIDDEN,以确保用户不会使用过程调试工具单步执行该函数.
如果设置了VERIFY_PASSWORD_FUNCTION,则无法使用GRANTCONNECT语句指定多个用户ID和口令.
示例下面的语句创建一个要求口令不同于用户名的函数:CREATEFUNCTIONDBA.
f_verify_pwd(user_namevarchar(128),new_pwdvarchar(255))RETURNSvarchar(255)BEGIN--enforcepasswordrulesIFnew_pwd=user_namethenRETURN('Passwordcannotbethesameastheusername');ENDIF;--returnsuccessRETURN(NULL);END;ALTERFUNCTIONDBA.
f_verify_pwdsethidden;数据库选项参考:语句和选项457GRANTEXECUTEonDBA.
f_verify_pwdtoPUBLIC;SETOPTIONPUBLIC.
VERIFY_PASSWORD_FUNCTION='DBA.
f_verify_pwd';要关闭该选项,请将其设置为空字符串:SETOPTIONPUBLIC.
VERIFY_PASSWORD_FUNCTION=''另请参见ALTERFUNCTION语句(第14页)GRANT语句(第202页)WASH_AREA_BUFFERS_PERCENT选项指定清洗标记上方的缓冲区高速缓存所占百分比.
允许值1–100默认值20范围只能为PUBLIC组设置.
设置此选项需要具有DBA授权.
关闭并重新启动数据库服务器,以使更改生效.
描述SybaseIQ缓冲区高速缓存组织为一个长MRU/LRU链.
在清洗标记上方的区域用于将脏页清理(即写入)到磁盘.
在IQ监视器-cache报告中,GDirty列显示在"脏"(已修改)状态下发生的LRU缓冲区争夺次数.
如果GDirty已有一段时间值大于0,可能需要增加SWEEPER_THREADS_PERCENT或WASH_AREA_BUFFERS_PERCENT.
此选项的缺省设置几乎总是适用的.
有时,Sybase技术支持部门可能会要求您增加该值.
另请参见SWEEPER_THREADS_PERCENT选项(第439页)WAIT_FOR_COMMIT选项确定在处理数据时检查外键完整性的时间.
允许值ON、OFF默认值OFF数据库选项458SybaseIQ范围可针对单个连接或PUBLIC组进行设置.
设置将立即生效.
描述如果此选项设置为ON,则在下一条COMMIT语句之前,数据库并不检查外键完整性.
否则,在插入、更新或删除所有不是使用CHECKONCOMMIT选项创建的外键时,都会对其进行检查.
WD_DELETE_METHOD选项指定在WD索引中进行删除时所使用的算法.
允许值0–30:开销模型选择删除方法.
开销模型仅选择中型删除方法或大型删除方法.

SoftShellWeb:台湾(台北)VPS年付49美元起,荷兰VPS年付24美元起

SoftShellWeb是一家2019年成立的国外主机商,商家在英格兰注册,提供的产品包括虚拟主机和VPS,其中VPS基于KVM架构,采用SSD硬盘,提供IPv4+IPv6,可选美国(圣何塞)、荷兰(阿姆斯特丹)和台湾(台北)等机房。商家近期推出台湾和荷兰年付特价VPS主机,其中台湾VPS最低年付49美元,荷兰VPS年付24美元起。台湾VPSCPU:1core内存:2GB硬盘:20GB SSD流量...

VoLLcloud(月付低至2.8刀)香港vps大带宽,三网直连

VoLLcloud LLC是一家成立于2020年12月互联网服务提供商企业,于2021年1月份投入云计算应用服务,为广大用户群体提供云服务平台,已经多个数据中心部署云计算中心,其中包括亚洲、美国、欧洲等地区,拥有自己的研发和技术服务团队。现七夕将至,VoLLcloud LLC 推出亚洲地区(香港)所有产品7折优惠,该产品为CMI线路,去程三网163,回程三网CMI线路,默认赠送 2G DDoS/C...

香港云服务器最便宜价格是多少钱一个月、一年?

香港云服务器最便宜价格是多少钱一个月/一年?无论香港云服务器推出什么类型的配置和活动,价格都会一直吸引我们,那么就来说说香港最便宜的云服务器类型和香港最低的云服务器价格吧。香港云服务器最便宜最低价的价格是多少?香港云服务器只是服务器中最受欢迎的产品。香港云服务器有多种配置类型,如1核1G、2核2G、2核4G、8到16核32G等。这些配置可以满足大多数用户的需求,无论是电商站、视频还是游戏、小说等。...

关闭空间申请为你推荐
美国vps主机听说美国vps主机性能不错,没用过,想听听各位的意见~虚拟主机评测网怎么选一台好的虚拟主机虚拟主机管理系统什么虚拟主机管理系统支持W和linux操作系统虚拟主机管理系统虚拟主机管理系统那一家好?apache虚拟主机为何apache要配置虚拟主机大连虚拟主机上海未星网络科技有限公司是一家什么样的公司?windows虚拟主机虚拟机的windows和原来的windows什么关系西安虚拟主机如何评价虚拟主机的优劣长沙虚拟主机长沙虚拟主机租用 哪里的比较靠谱 朋友介绍湘域互联的 有谁用过域名网站域名和网址一样吗?
韩国服务器租用 vps安全设置 美国加州vps ipage 腾讯云盘 simcentric 英语简历模板word 好看的桌面背景大图 电子邮件服务器 宁波服务器 softbank邮箱 吉林铁通 创建邮箱 1元域名 带宽租赁 服务器维护 论坛主机 测试网速命令 中国电信宽带测速 privatetracker 更多