Oracle和SQLServer的语法区别(10)
Oracle Microsoft SQL Server CREATE TABLE STUDENT_ADMIN.STUDENT ( CREATE TABLE USER_DB.STUDENT SSN CHAR(9) NOT NULL, _ADMIN.STUDENT ( FNAME VARCHAR2(12) NULL, SSN CHAR(9) NOT NULL, LNAME VARCHAR2(20) NOT NULL, FNAME VARCHAR(12) NULL, GENDER CHAR(1) NOT NULL LNAME VARCHAR(20) NOT NULL, CONSTRAINT GENDER CHAR(1) NOT NULL STUDENT_GENDER_CK CONSTRAINT STUDENT_GENDER_CK CHECK (GENDER IN ('M','F')), CHECK (GENDER IN ('M','F')), MAJOR VARCHAR2(4) MAJOR VARCHAR(4) DEFAULT 'Undc' NOT NULL, DEFAULT 'Undc' NOT NULL, BIRTH_DATE DATE NULL, BIRTH_DATE DATETIME NULL, TUITION_PAID NUMBER(12,2) TUITION_PAID NUMERIC(12,2) NULL, NULL, TUITION_TOTAL NUMERIC(12,2) NULL, TUITION_TOTAL NUMBER(12,2) START_DATE DATETIME NULL, NULL, GRAD_DATE DATETIME NULL, START_DATE DATE NULL, LOAN_AMOUNT NUMERIC(12,2) NULL, GRAD_DATE DATE NULL, DEGREE_PROGRAM CHAR(1) LOAN_AMOUNT NUMBER(12,2) NULL, DEFAULT 'U' NOT NULL DEGREE_PROGRAM CHAR(1) CONSTRAINT STUDENT_DEGREE_CK DEFAULT 'U' NOT NULL CHECK CONSTRAINT (DEGREE_PROGRAM IN ('U', 'M', STUDENT_DEGREE_CK CHECK 'P','D')), (DEGREE_PROGRAM IN ('U', 'M', ... 'P', 'D')), ... 有关用户定义的规则和默认值的说明:出于向后兼容的考虑,仍保留 Microsoft SQL Server 规则和默认值,但对于新的应用程序开发,建议使用 CHECK 和 DEFAULT 约束。有关详细信息,请参见 SQL Server Books Online。
为空性
Microsoft SQL Server 和 Oracle 创建列约束,来实施为空性。Oracle 列默认为 NULL,除非在 CREATE TABLE 或 ALTER TABLE 语句中指定了 NOT NULL。在 Microsoft SQL Server 中,数据库和会话设置可以覆盖列定义中使用的数据类型为空性。
所有的 SQL 脚本(不论是 Oracle 还是 SQL Server)都应该为每一列显式定义 NULL 和 NOT NULL。要了解这一策略是如何实施的,请参见 Oratable.sql 和 Sstable.sql 示例表创建脚本。如果没有显式定义,列的为空性遵循下列规则。
Null 设置 说明 SQL Server 使用该数据类型创建时指定的为空使用用户定义的数据类性。使用 sp_help 系统存储过程,来获取数据型定义列 类型默认的为空性。 如果系统提供的数据类型只有一个选择,则它优先。现在,bit 数据类型只能定义为 NOT NULL。 如果任何会话设置是 ON(使用 SET 打开),那么: 如果 ANSI_NULL_DFLT_ON 为 ON,则赋值 NULL。 如果 ANSI_NULL_DFLT_OFF 为 ON,则赋值 NOT 使用系统提供的数据类NULL。 型定义列 如果配置了任何数据库设置(用 sp_dboption 系统存储过程更改),那么: 如果 ANSI null default 为 true,则赋值 NULL。 如果 ANSI null default 为 false,则赋值 NOT NULL。 如果没有显式地定义(没有设置任何 NULL/NOT NULL ASNI_NULL_DFLT 选项),会话没有改变,并且没有定义 数据库设为默认值(ANSI null default 为 false),那么,SQL Server 赋值为 NOT NULL。 下表提供了一个用于定义引用完整性约束的语法比较。
约束 Microsoft SQL Server [CONSTRAINT [CONSTRAINT constraint_name] constraint_name] PRIMARY KEY [CLUSTERED | PRIMARY KEY (col_name [, NONCLUSTERED] (col_name [, PRIMARY KEY col_name2 [..., col_name2 [..., col_name16]]) col_name16]]) [USING INDEX [ON segment_name] storage_parameters] [NOT FOR REPLICATION] [CONSTRAINT [CONSTRAINT constraint_name] constraint_name] UNIQUE [CLUSTERED | UNIQUE (col_name [, NONCLUSTERED](col_name [, UNIQUE col_name2 [..., col_name2 [..., col_name16]]) col_name16]]) [USING INDEX [ON segment_name] storage_parameters] [NOT FOR REPLICATION] [CONSTRAINT [CONSTRAINT constraint_name] constraint_name] FOREIGN KEY [FOREIGN KEY (col_name [FOREIGN KEY (col_name [, [, col_name2 [..., col_name2 [..., Oracle col_name16]])] REFERENCES [owner.]ref_table [(ref_col [, ref_col2 [..., ref_col16]])] [ON DELETE CASCADE] col_name16]])] DEFAULT CHECK REFERENCES [owner.]ref_table [(ref_col [, ref_col2 [..., ref_col16]])] [NOT FOR REPLICATION] [CONSTRAINT constraint_name] 列属性,但不是约束 DEFAULT DEFAULT {constant_expression | (constant_expression) niladic-function | NULL} [FOR col_name] [NOT FOR REPLICATION] [CONSTRAINT [CONSTRAINT constraint_name] constraint_name] CHECK [NOT FOR REPLICATION] CHECK (expression) (expression) NOT FOR REPLICATION 子句用于复制过程中暂停列级、FOREIGN KEY 和 CHECK 约束的使用。
外键
在每种 RDBMS 中,定义外键的规则是相似的。在外键子句中指定的列的数目和每个列的数据类型必须和 REFERENCES 子句相符。在该列输入的非空值在 REFERENCES 子句中定义的表和列中必须存在,并且被引用表的列中,必须有一个 PRIMARY KEY 或 UNIQUE 约束。
Microsoft SQL Server 约束提供了引用同一数据库中表的能力。要实现跨数据库的引用完整性,须使用基于表的触发器。
Oracle 和 SQL Server 都支持自引用的表,在该表中引用(外键)指向同一表的一个或多个列。例如,CLASS 表中的 prereq 列可以引用 CLASS 表中的 ccode 列,以保证输入了有效的课程代码(作为先决条件)。
Oracle 使用 CASCADE DELETE 子句,来实现级联删除和更新,而 SQL Server 使用表触发器,来提供相同的功能。有关详细信息,请参见本章后面的“SQL 语言支持”。 用户定义的完整性允许定义不属于任何其它完整性类别的业务规则。
存储过程
Microsoft SQL Server 存储过程使用 CREATE PROCEDURE 语句,接受和返回用户提供的参数。除临时存储过程外,其它存储过程均在当前数据库中创建。下表给出了其 Oracle 和 SQL Server 语法。
Oracle Microsoft SQL Server CREATE PROC[EDURE] procedure_name [;number] [ data_type} [VARYING] [= CREATE OR REPLACE PROCEDURE {@parameter default] [OUTPUT] [user.]procedure ] [(argument [IN | OUT] datatype [,Un] [, argument [IN | OUT] [WITH datatype] { RECOMPILE | ENCRYPTION | {IS | AS} block RECOMPILE, ENCRYPTION} ] [FOR REPLICATION] AS sql_statement [Un] 在 SQL Server 中,临时过程创建在 tempdb 数据库中,对于局部临时过程,在 procedure_name 前加一个数字符 (#procedure_name),全局临时过程前加两个数字符 (##procedure_name)。 局部临时过程只能由创建它的用户使用。运行局部临时过程的权限不能授予其他用户。用户会话结束后,局部临时过程自动被删除。
所有的 SQL Server 用户均可使用全局临时过程。如果创建了全局临时过程,所有的用户均可以访问它,权限不能被显式地撤销。使用过程的最后一个用户会话结束后,全局临时过程被删除。 SQL Server 存储过程最多可嵌套 32 级。嵌套级在调用过程开始执行时递增,调用过程执行结束时递减。
下面的例子给出了,如何使用 Transact-SQL 存储过程替代 Oracle PL/SQL 打包的函数。Transact-SQL 版本要简单得多,因为 SQL Server 可以直接从存储 …… 此处隐藏:4460字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [互联网资料]2022年厦门大学机电工程系824机械设计
- [互联网资料]东南大学2022年硕士研究生拟录取名单公
- [互联网资料]能源调研报告(精选多篇)
- [互联网资料]初三英语下学期 中考英语 语法填空训练
- [互联网资料]2022内蒙古选调生行测常识备考:新事物
- [互联网资料]自驾必备!在新西兰租什么样的车自驾游
- [互联网资料]佛教素食菜谱44页未完
- [互联网资料]盈利能力分析外文翻译
- [互联网资料]2022年南昌航空大学音乐学院736马克思
- [互联网资料]优选外贸跟单实习报告总结(精品版)
- [互联网资料]银行新员工培训总结
- [互联网资料]2_year_visa_new_guidance_190316
- [互联网资料]天津市五校宝坻一中静海一中杨村一中芦
- [互联网资料]2007--2008学年第一学期高三数学宁波市
- [互联网资料]Chromatic framework for vision in ba
- [互联网资料]幼儿园大班上学期美术教案《心愿树》含
- [互联网资料]2022年华中农业大学信息学院820微型计
- [互联网资料]硬盘坏道的表现 __硬盘使用久了
- [互联网资料]江苏省2016年会计从业资格考试《会计基
- [互联网资料]公共场所卫生监督试卷全解
- 高级英语第一册所有修辞方法及例子总结
- 综合交通枢纽规划与城市发展
- 沃尔玛的企业文化案例分析
- 美国Thanksgiving Day 感恩节 介绍
- PEP六年级英语上册Unit6How do you fee
- 最齐全的中国大型商场购物中心名单
- 数据结构实验报告八—哈夫曼编译码
- 杭州市余杭区人民政府(通知)
- 七年级语文成语运用专项训练
- 微观经济学第三章 消费者行为 课后习题
- 对_钱学森之问_的思考
- Excel_三级联动_下拉菜单
- 办公用品需求计划申请表
- 对外汉语教材必须要知道的发展史
- 挑战杯大学生学术科技作品竞赛作品申报
- 举办民办教育培训机构应具备下列条件
- 太阳能路灯项目设计方案
- 2013年八年级上最新人教版新教材Unit3I
- 【历史】 6-4 《近代科学之父牛顿》 课
- 高中生物《第四章 第二节 探讨加酶洗衣




