Oracle与SQL函数对照.doc_第1页
Oracle与SQL函数对照.doc_第2页
Oracle与SQL函数对照.doc_第3页
Oracle与SQL函数对照.doc_第4页
Oracle与SQL函数对照.doc_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

Oracle与SQL函数对照 函数Oracle Microsoft SQL Server把字符转换为ASCII:ASCII ASCII字串连接:CONCAT-(expression+expression)把ASCII转换为字符CHR,CHAR返回字符串中的开始字符(左起)INSTR,-CHARINDEX把字符转换为小写LOWER-LOWER把字符转换为大写UPPER-UPPER填充字符串的左边LPAD-N/A清除开始的空白LTRIM-LTRIM清除尾部的空白RTRIM-RTRIM字符串中的起始模式(pattern)INSTR-PATINDEX多次重复字符串RPAD-REPLICATE字符串的语音表示SOUNDEX-SOUNDEX重复空格的字串RPAD-SPACE从数字数据转换为字符数据TO_CHAR-STR子串SUBSTR-SUBSTRING替换字符REPLACE-STUFF将字串中的每个词首字母大写INITCAP-N/A翻译字符串TRANSLATE-N/A字符串长度LENGTH-DATELENGTH orLEN列表中最大的字符串GREATEST-N/A列表中最小的字符串LEAST-N/A如果为NULL则转换字串NVL-ISNULL日期函数下面是Oracle支持的日期函数和它们的Microsoft SQL Server等价函数。 函数Oracle-Microsoft SQL Server日期相加(date column+/-value)or ADD_MONTHS-DATEADD两个日期的差(date column+/-value)or MONTHS_BETWEEN-DATEDIFF当前日期和时间SYSDATE-GETDATE()一个月的最后一天LAST_DAY-N/A时区转换NEW_TIME-N/A日期后的第一个周日NEXT_DAY-N/A代表日期的字符串TO_CHAR-DATENAME代表日期的整数TO_NUMBER(TO_CHAR)-DATEPART日期舍入ROUND-CONVERT日期截断TRUNC-CONVERT字符串转换为日期TO_DATE-CONVERT如果为NULL则转换日期NVL-ISNULL转换函数下面是Oracle支持的转换函数和它们的Microsoft SQL Server等价函数。 函数Oracle-Microsoft SQL Server数字转换为字符TO_CHAR-CONVERT字符转换为数字TO_NUMBER-CONVERT日期转换为字符TO_CHAR-CONVERT字符转换为日期TO_DATE CONVERT16进制转换为2进制HEX_TO_RAW-CONVERT2进制转换为16进制RAW_TO_HEX-CONVERT其它行级别的函数下面是Oracle支持的其它行级别的函数以及它们的Microsoft SQL Server等价函数。 函数Oracle-Microsoft SQL Server返回第一个非空表达式DECODE-COALESCE当前序列值CURRVAL-N/A下一个序列值NEXTVAL-N/A用户登录账号ID数字UID-SUSER_ID用户登录名USER-SUSER_NAME用户数据库ID数字UID-USER_ID用户数据库名USER-USER_NAME当前用户CURRENT_USER-CURRENT_USER用户环境(audit trail)USERENV-N/A在CONNECT BY子句中的级别LEVEL-N/A合计函数下面是Oracle支持的合计函数和它们的Microsoft SQL Server等价函数。 函数Oracle-Microsoft SQL Server AverageAVG-AVG CountCOUNT-COUNT MaximumMAX-MAX MinimumMIN-MIN Standarddeviation STDDEV-STDEV orSTDEVP SummationSUM-SUM VarianceVARIANCE-VAR orVARP条件测试Oracle的DECODE语句和Microsoft SQL Server的CASE表达式都执行条件测试。 当test_value中的值和后面的任何表达式匹配的时候,相关的值就返回。 如果没有找到任何匹配的值,就返回default_value。 如果没有指定default_value,在没有匹配的时候,DECODE和CASE都返回一个NULL。 下表显示了该语句的语法,同时给出了转换DECODE命令的示例。 Oracle Microsoft SQL DECODE(test_value,expression1,value1,default_value)CREATE VIEW STUDENT_ADMIN.STUDENT_GPA(SSN,GPA)AS SELECT SSN,ROUND(AVG(DECODE(grade,A,4,A+,4.3,A-,3.7,B,3,B+,3.3,B-,2.7,C,2,C+,2.3,C-,1.7,D,1,D+,1.3,D-,0.7,0),2)FROM STUDENT_ADMIN.GRADE GROUPBY SSNCASE input_expression WHENwhen_expression THENresult_expressionELSE else_result_expressionEND CREATEVIEWSTUDENT_ADMIN.STUDENT_GPA(SSN,GPA)AS SELECT SSN,ROUND(AVG(CASE gradeWHENATHEN4WHENA+THEN4.3WHENA-THEN3.7WHENBTHEN3WHENB+THEN3.3WHENB-THEN2.7WHENCTHEN2WHENC+THEN2.3WHENC-THEN1.7WHENDTHEN1WHEND+THEN1.3WHEND-THEN0.7ELSE0END),2)FROM STUDENT_ADMIN.GRADE GROUPBY SSNCASE表达式可以支持用SELECT语句执行布尔测试,这是DECODE命令所不允许的。 欲了解关于CASE表达式的详细信息,请参阅SQL Server联机手册。 把值转换为不同的数据类型Microsoft SQL Server的CONVERT和CAST函数都是多目标转换函数。 它们提供了相似的功能,把一种数据类型的表达式转换为另一种数据类型的表达式,并且支持多种专门数据的格式。 CAST(expression ASdata_type)CONVERT(data type(length),expression,style)CAST是一个SQL-92标准的函数。 这些函数执行同Oracle的TO_CHAR、TO_NUMBER、TO_DATE、HEXTORAW以及RAWTOTEXT函数相同的功能。 这里所指的数据类型是任何表达式将被转换成为的系统数据类型。 不能使用用户定义的数据类型。 长度参数是可选的,该参数用于char、varchar、binary以及varbinary数据类型。 允许的最大长度是8000。 转换Oracle Microsoft SQL Server字符到数字TO_NUMBER(?)-CONVERT(numeric,?)数字到字符TO_CHAR (10)-CONVERT(char,10)字符到日期TO_DATE(?-JUL-97)TO_DATE(?-JUL-1997,dd-mon-yyyy)TO_DATE(July4,1997,Month dd,yyyy)-CONVERT(datetime,?-JUL-97)CONVERT(datetime,?-JUL-1997)CONVERT(datetime,July4,1997)日期到字符TO_CHAR(sysdate)TO_CHAR(sysdate,dd monyyyy)TO_CHAR(sysdate,mm/dd/yyyy)-CONVERT(char,GETDATE()CONVERT(char,GETDATE(),106)CONVERT(char,GETDATE(),101)16进制到2进制HEXTORAW(?F)-CONVERT(binary,?F)2进制到16进制RAWTOHEX(binary_column)-CONVERT(char,binary_column)请注意字符串是怎样转换为日期的。 在Oracle中,缺省的日期格式模型是“DD-MON-YY”如果你使用任何其它格式,你必须提供一个合适的日期格式模型。 CONVERT函数自动转换标准日期格式,不需要任何格式模型。 从日期转换到字符串时,CONVERT函数的缺省输出是“dd monyyyy hh:mm:ss:mmm(24h)”。 用一个数字风格代码来格式化输出,使它能输出为其它类型的日期格式模型。 欲了解CONVERT函数的详细信息,请参阅SQL Server联机手册。 下表显示了Microsoft SQL Server日期的缺省输出。 Without CenturyWith CenturyStandard Output-0or100(*)Default mon dd yyyy hh:miAM(or PM)1101USA mm/dd/yy2102ANSI yy.mm.dd3103British/French dd/mm/yy4104German dd.mm.yy5105Italian dd-mm-yy6106-dd monyy7107-mon dd,yy8108-hh:mm:ss-9or109(*)Default millisecondsmonddyyyy hh:mi:ss:mmm(AM orPM)10110USA mm-dd-yy11111Japan yy/mm/dd12112ISO yymmdd-13or113(*)Europe defaultdd monyyyyhh:mm:ss:mmm(24h)14114-hh:mi:ss:mmm(24h)用户定义函数Oracle PL/SQL函数可以在Oracle SQL语句中使用。 在Microsoft SQL Server中一般可以通过其它方式来实现同样的功能。 在SQL Server中可以用表中给出的查询来代替。 Oracle Microsoft SQL ServerSELECTSSN,FNAME,LNAME,)TUITION_PAID,TUITION_PAID/GET_SUM_MAJOR(MAJOR)AS PERCENT_MAJOR FROM STUDENT_ADMIN.STUDENT SELECTSSN,FNAME,LNAME,TUITION_PAID,TUITION_PAID/SUM_MAJOR ASPERCENT_MAJOR FROM STUDENT_ADMIN.STUDENT,(SELECT MAJOR,SUM(TUITION_PAID)SUM_MAJOR FROMSTUDENT_ADMIN.STUDENT GROUPBY MAJOR)SUM_STUDENT WHERESTUDENT.MAJOR=SUM_STUDENT.MAJOR CREATEOR REPLACEFUNCTION GET_SUM_MAJOR(INMAJOR VARCHAR2)RETURN NUMBERAS SUM_PAID NUMBER;BEGIN SELECTSUM(TUITION_PAID)INTO SUM_PAID FROMSTUDENT_ADMIN.STUDENT WHEREMAJOR=INMAJOR;RETURN(SUM_PAID);END GET_SUM_MAJOR;No CREATEFUNCTION syntaxis required;use CREATE PROCEDURE syntax.比较操作符Oracle和Microsoft SQL Server的比较操作符几乎是一样的。 算符Oracle Microsoft SQL Server等于(=)(=)大于()()小于()(=)(=)小于或等于(=)(=)不等于(!=,=)(!=,=)不大于,不小于N/A!,!ALL,ALL,=ALL,!=SOME,SOME,SOME,=SOME!=ALL,ALL,ALL,=ALL,!=SOME,SOME,SOME,=SOME像模式(Like pattern)LIKE LIKE不像模式(Not likepattern)NOT LIKENOT LIKEX和y之间的值BETWEEN xAND yBETWEEN xAND y不在x和y之间的值NOT BETWEENNOT BETWEEN值存在EXISTS EXISTS值不存在NOT EXISTSNOT EXISTS值为|不为空IS NULL,IS NOT NULL Same.Also=NULL,!=NULL forbackward patibility(not remended).模式匹配SQL Server的LIKE关键字提供了有用的通配符搜索功能,这个功能在Oracle中不支持除了所有的RDBMS都支持的(%)和(_)通配符以外,SQL Server还支持()和()通配符。 ()字符用来查询在一个范围内的所有单个字符。 例如,如果你需要查询包含一个从a到f的字符的数据,你可以这样写“LIKEa-f”或者“LIKEabcdef”。 这些附加的通配符的有效性在下表中给出。 Oracle Microsoft SQL SELECT*FROMSTUDENT_ADMIN.STUDENT WHERELNAME LIKEA%OR LNAME LIKEB%OR LNAMELIKEC%SELECT*FROMSTUDENT_ADMIN.STUDENT WHERELNAMELIKEABC%通配符用来标记那些不在特定范围内的字符。 例如,如果除了a到f以外的所有字符都是可以接受的,你可以这样书写LIKEa-f或者LIKEabcdef。 欲了解关于LIKE关键字的详细信息,请参阅SQL Server联机手册。 在比较中使用NULL尽管Microsoft SQL Server传统上支持SQL-92标准的和一些非标准的NULL行为,但是它还是支持Oracle中的NULL的用法。 为了支持分布式查询,SET ANSI_NULLS必须设定为ON。 在进行连接的时候,SQLServer的SQLServerODBC驱动程序和OLE DB提供者自动把SET ANSI_NULLS设定为ON。 这个设置可以在ODBC数据源、ODBC连接属性、或者是在连接到SQLServer之前在应用程序中设置的OLE DB连接属性中进行配置。 在从DB-Library应用程序中连接时,SET ANSI_NULLS缺省为OFF。 当SET ANSI_DEFAULTS为ON时,SET ANSI_NULLS被允许。 欲了解关于NULL用法的详细信息,请参阅SQLServer联机手册。 字串连接Oracle使用两个管道符号(|)来作为字串连接操作符,SQLServer则使用加号(+)。 这个差别要求你在应用程序中做小小的修改。 Oracle Microsoft SQL SELECT FNAME|LNAME ASNAME FROMSTUDENT_ADMIN.STUDENT-SELECT FNAME+LNAME ASNAME FROMSTUDENT_ADMIN.STUDENT流控制(Control-of-Flow)语言流控制语言控制SQL语句执行流,语句块以及存储过程。 PL/SQL和Transact-SQL提供了多数相同的结构,但是还是有一些语法差别。 关键字这是两个RDBMS支持的关键字。 语句Oracle PL/SQL-Microsoft SQLServer Transact-SQL声明变量DECLARE DECLARE语句块BEGIN.END;BEGIN.END条件处理IFTHEN,ELSIFTHEN,ELSE ENDIF;-IFBEGINENDELSEBEGINENDELSE IFCASE expression无条件结束RETURN-RETURN无条件结束当前程序块后面的语句EXIT BREAK重新开始一个WHILE循环N/A CONTINUE等待指定间隔N/A(dbms_lock.sleep)WAITFOR循环控制WHILE LOOPEND LOOP;-LABELGOTO LABEL;FOREND LOOP;LOOPEND LOOP;WHILEBEGINEND LABELGOTO LABEL程序注释/*/,-/*/,-打印输出RDBMS_OUTPUT.PUT_LINE PRINT引发程序错误(Raise programerror)RAISE_APPLICATION_ERROR-RAISERROR执行程序EXECUTE-EXECUTE语句终止符Semicolon(;)-N/A声明变量Transact-SQL和PL/SQL的变量是用DECLARE关键字创建的。 Transact-SQL变量用标记,并且就像PL/SQL一样,在第一次创建时,用空值初始化。 Oracle Microsoft SQL DECLARE VSSN CHAR (9);VFNAME VARCHAR2 (12);VLNAME VARCHAR2 (20);VBIRTH_DATE DATE;VLOAN_AMOUNT NUMBER(12,2);-DECLAREVSSN CHAR (9),VFNAME VARCHAR2 (12),VLNAME VARCHAR2 (20),VBIRTH_DATE DATETIME,VLOAN_AMOUNT NUMERIC(12,2)Transact-SQL不支持%TYPE和%ROWTYPE变量数据类型定义。 一个Transact-SQL变量不能在DECLARE命令中初始化。 在Microsoft SQLServer数据类型定义中也不能使用Oracle的NOTNULL和CONSTANT关键字。 像Oracle的LONG和LONG RAW数据类型一样。 文本和图形数据类型不能被用做变量定义。 此外,Transact-SQL不支持PL/SQL风格的记录和表的定义。 给变量赋值Oracle和MicrosoftSQLServer提供了下列方法来为本地变量赋值。 Oracle MicrosoftSQL Assignmentoperator(:=)-SETlocal_variable=value SELECT.INTO syntaxfor selectingcolumn valuesfrom asingle row-SELECTlocal_variable=expressionFROMfor assigninga literalvalue,an expressioninvolving otherlocal variables,or acolumn valuefrom asingle rowFETCHINTO syntax-FETCHINTO syntax这里有一些语法示例Oracle MicrosoftSQL DECLAREVSSN CHAR (9);VFNAME VARCHAR2 (12);VLNAME VARCHAR2 (20);BEGIN VSSN:=?SELECTFNAME,LNAME INTOVFNAME,VLNAME FROMSTUDENTS WHERESSN=VSSN;END;-DECLAREVSSN CHAR (9),VFNAME VARCHAR (12),VLNAME VARCHAR (20)SETVSSN=?SELECTVFNAME=FNAME,VLNAME=LNAME FROMSTUDENTS WHERESSN=VSSN语句块Oracle PL/SQL和MicrosoftSQLServer Transact-SQL都支持用BEGINEND术语来标记语句块。 Transact-SQL不需要在DECLARE语句后使用一个语句块。 -如果在MicrosoftSQLServer中的IF语句和WHILE循环中有多于一个语句被执行,则需要使用BEGINEND语句块。 Oracle MicrosoftSQL DECLARE DECLARE VARIABLES.BEGIN-THIS ISREQUIRED SYNTAXPROGRAM_STATEMENTS.IF.THEN STATEMENT1;STATEMENT2;STATEMENTN;END IF;WHILE.LOOP STATEMENT1;STATEMENT2;STATEMENTN;END LOOP;END;-THIS ISREQUIRED SYNTAXDECLAREDECLAREVARIABLES.BEGIN-THIS ISOPTIONAL SYNTAXPROGRAM_STATEMENTS.IF.BEGIN STATEMENT1STATEMENT2STATEMENTN ENDWHILE.BEGIN STATEMENT1STATEMENT2STATEMENTN ENDEND-THIS ISREQUIRED SYNTAX条件处理MicrosoftSQLServer Transact-SQL的条件语句包括IF和ELSE,但不包括Oracle PL/SQL中的ELSEIF语句。 可以用嵌套多重IF语句来到达同样的效果。 对于广泛的条件测试,用CASE表达式也许更容易和可读一些。 Oracle MicrosoftSQL DECLAREVDEGREE_PROGRAM CHAR (1);VDEGREE_PROGRAM_NAME VARCHAR2 (20);BEGIN VDEGREE_PROGRAM:=UIF VDEGREE_PROGRAM=UTHEN VDEGREE_PROGRAM_NAME:=UndergraduateELSIF VDEGREE_PROGRAM=MTHEN VDEGREE_PROGRAM_NAME:=MastersELSIF VDEGREE_PROGRAM=PTHEN VDEGREE_PROGRAM_NAME:=PhDELSE VDEGREE_PROGRAM_NAME:=UnknownEND IF;END;-DECLAREVDEGREE_PROGRAM CHAR (1),VDEGREE_PROGRAM_NAME VARCHAR (20)SELECTVDEGREE_PROGRAM=USELECTVDEGREE_PROGRAM_NAME=CASEVDEGREE_PROGRAM WHENUTHENUndergraduateWHENMTHENMastersWHENPTHENPhD.ELSEUnknownEND重复执行语句(循环)Oracle PL/SQL提供了无条件的LOOP和FOR LOOP。 Transact-SQL则提供了WHILE循环和GOTO语句。 WHILE Boolean_expressionsql_statement|statement_blockBREAKCONTINUEWHILE循环需要测试一个布尔表达式来决定一个或者多个语句的重复执行。 只要给定的表达式结果为真,这个(些)语句就一直重复执行下去。 如果有多个语句需要执行,则这些语句必须放在一个BEGINEND块中。 Oracle MicrosoftSQL DECLARECOUNTER NUMBER;BEGIN COUNTER:=0WHILE(COUNTER5)LOOP COUNTER:=COUNTER+1;END LOOP;END;-DECLARECOUNTER NUMERICSELECTCOUNTER=1WHILE(COUNTER5)BEGIN SELECTCOUNTER=COUNTER+1END语句的执行可以在循环的内部用BREAK和CONTINUE关键字控制。 BREAK关键字使WHILE循环无条件的结束,而CONTINUE关键字使WHILE循环跳过后面的语句重新开始。 BREAK关键字同Oracle PL/SQL中的EXIT关键字是等价的。 而在Oracle中没有和CONTINUE等价的关键字GOTO语句Oracle和MicrosoftSQLServer都有GOTO语句,但是语法不同。 GOTO语句使Transact-SQL跳到指定的标号处运行,在GOTO语句后指定标号之间的任何语句都不会被执行。 Oracle MicrosoftSQL GOTO label;GOTOlabelPRINT语句Transact-SQL的PRINT语句执行同PL/SQL的RDBMS_OUTPUT.put_line过程同样的操作。 该语句用来打印用户给定的消息。 用PRINT语句打印的消息上限是8,000个字符。 定义为char或者varchar数据类型的变量可以嵌入打印语句。 如果使用其它数据类型的变量,则必须使用CONVERT或者CAST函数。 本地变量、全局变量可以被打印。 可以用单引号或者双引号来封闭文本。 从存储过程返回MicrosoftSQLServer和Oracle都有RETURN语句。 RETURN使你的程序从查询或者过程中无条件的跳出。 RETURN是立即的、完全的、并且可以用于从过程、批处理或者语句块的任意部分跳出。 在REUTRN后面的语句将不会被执行。 Oracle MicrosoftSQL RETURNexpression:RETURNinteger_expression引发程序错误(Raising programerrors)Transact-SQL的RAISERROR返回一个用户定义的错误消息,并且设置一个系统标志来记录发生了一个错误。 这个功能同PL/SQL的raise_application_error异常处理器的功能是相似的。 RAISERROR语句允许客户重新取得sysmessages表的一个入口,或者用用户指定的严重性和状态信息动态的建立一条消息。 在被定义后,消息被送回客户端作为系统错误消息。 RAISERROR(msg_id|msg_str,severity,state,argument1,argument2)WITH options在转换你的PL/SQL程序时,也许用不着使用RAISERROR语句。 在下面的示例代码中。 PL/SQL程序使用raise_application_error异常处理器,但是Transact-SQL程序则什么也没用。 包括raise_application_error异常处理器是为了防止PL/SQL返回不明确的未经处理的异常错误消息。 作为代替,当一个不可预见的问题发生的时候,异常处理器总是返回Oracle错误消息。 当一个Transact-SQL失败时,它总是返回一个详细的错误消息给客户程序。 因此,除非需要某些特定的错误处理,一般是不需要RAISERROR语句的。 Oracle MicrosoftSQL CREATEOR REPLACEFUNCTION DEPT_ADMIN.DELETE_DEPT(VDEPT INVARCHAR2)RETURN NUMBERAS BEGINDELETE FROM DEPT_ADMIN.DEPT WHEREDEPT=VDEPT;RETURN(SQL%ROWCOUNT);EXCEPTION WHENOTHER THENRAISE_APPLICATION_ERROR(-20001,SQLERRM);END DELETE_DEPT;-/CREATEPROCEDUREDEPT_ADMIN.DELETE_DEPTVDEPT VARCHAR (4)AS DELETE FROMDEPT_DB.DBO.DEPT WHEREDEPT=VDEPT RETURNROWCOUNT GO实现游标Oracle在使用SELECT语句时总是需要游标,不管从数据库中请求多少行。 在MicrosoftSQLServer,SELECT语句并不把在返回客户的行上附加游标作为缺省的结果集合。 这是一种返回数据给客户应用程序的有效的方法。 SQLServer为游标函数提供了两种接口。 当在Transact-SQL批处理或者存储过程中使用游标的时候,SQL语句可用来声明、打开、和从游标中抽取,就像定位更新和删除一样。 当使用DB-Library、ODBC、或者OLEDB程序的游标时,SQLServer显式的调用内建的服务器函数来更有效的处理游标。 当从Oracle输入一个PL/SQL过程时,首先判断是否需要在Transact-SQL中采用游标来实现同样的功能。 如果游标仅仅返回一组行给客户程序,就使用非游标的SELECT语句来返回缺省的结果集合。 如果游标用来从行中一次取得一个数据给本地过程变量,你就必须在Transact-SQL中使用游标。 语法下表显示了使用游标的语法。 操作Oracle MicrosoftSQLServer声明一个游标CURSOR cursor_name(cursor_parameter(s)IS select_statement;-DECLARE cursor_name CURSORLOCAL|GLOBALFORWARD_ONLY|SCROLLSTATIC|KEYSET|DYNAMIC|FAST_FORWARDREAD_ONLY|SCROLL_LOCKS|OPTIMISTICTYPE_WARNINGFOR select_statementFOR UPDATEOF column_name,n打开一个游标OPEN cursor_name(cursor_parameter(s);-OPEN cursor_name从游标中提取(Fetching)FETCH cursor_name INTOvariable(s)-FETCH FROMcursor_nameINTOvariable(s)更新提取行UPDATE table_name SETstatement(s)WHERE CURRENT OF cursor_name;UPDATE table_name SETstatement(s)WHERE CURRENT OF cursor_name删除提取行DELETE FROMtable_name WHERECURRENT OFcursor_name;DELETEFROMtable_name WHERECURRENT OFcursor_name关闭游标CLOSE cursor_name;CLOSE cursor_name清除游标数据结构N/A DEALLOCATEcursor_name声明一个游标尽管Transact-SQL DECLARE CURSOR语句不支持游标参数的使用,但它确实支持本地变量。 当游标打开的时候,它就使用这些本地变量的值。 MicrosoftSQLServer在其DECLARECURSOR中提供了许多附加的功能。 INSENSITIVE选项用来定义一个创建数据的临时拷贝以被游标使用的游标。 游标的所有请求都由这个临时表来应答。 因此对原表的修改不会反映到那些由fetch返回的用于该游标的数据上。 这种类型的游标访问的数据是不能被修改的。 应用程序可以请求一个游标类型然后执行一个不被所请求的服务器游标类型支持的Transact-SQL语句。 SQLServer返回一个错误,指出该游标类型被改变了,或者给出一组参数,隐式的转换游标。 欲取得一个触发SQLServer7.0隐式的把游标从一种类型转换为另一种类型的参数的完整列表,请参阅SQLServer联机手册。 SCROLL选项允许除了前向的抽取以外,向后的、绝对的和相对的数据抽取。 一个滚动游标使用一种键集合的游标模型,在该模型中,任何用户提交的对表的删除和更新都将影响后来的数据抽取。 只有在游标没有用INSENSITIVE选项声明时,上面的特性才起作用。 如果选择了READ ONLY选项,对游标中的行的更新就被禁止。 该选项将覆盖游标的缺省选项棗允许更新。 UPDATEOF column_list语句用来在游标中定义一个可更新的列。 如果提供了OF column_list,那么仅仅是那些列出的列可以被修改。 如果没有指定任何列。 则所有的列都是可以更新的,除非游标被定义为READ ONLY。 重要的是,注意到一个SQLServer游标的名字范围就是连接自己。 这和本地变量的名字范围是不同的。 不能声明一个与同一个用户连接上的已有的游标相同名字的游标,除非第一个游标被释放。 打开一个游标Transact-SQL不支持向一个打开的游标传递参数,这一点和PL/SQL是不一样的。 当一个Transact-SQL游标被打开以后,结果集的成员和顺序就固定下来了。 其它用户提交的对原表的游标的更新和删除将反映到对所有未加INSENSITIVE选项定义的游标的数据抽取上。 对一个INSENSITIVE游标,将生成一个临时表。 抽取数据Oracle游标只能向前移动棗没有向后或者相对滚动的能力。 SQLServer游标可以向前或者向后滚动,具体怎么滚动,要由下表给出的数据抽取选项来决定。 只有在游标是用SCROLL选项声明的前提下,这些选项才能使用。 卷动选项描述NEXT如果这是对游标的第一次提取,则返回结果集合的第一行;否则,在结果结合内移动游标

温馨提示

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

评论

0/150

提交评论