
该值是 在建立行时 分配的。可以使用 create table命令来建立对象表。 在创建对象类别时, Oracle中是不容许为属性定义约束条件, 但是 可以在建立对象表时为对象类别的属性指定约束条件。 Create table vend_master of vend_ty(vencode constraint vc_pk primary key); 创建对象表与关系表语法不同 表的使用方式不同 插入数据可以使用抽象数据类型的构造函 数,如果对象 表所基于抽象数据类型又基于另一抽象数据类型,则需要多个 构造函数的嵌 套读取。 Insert into vend_master values (vend_ty()); 5.对象视图 借助对象视图可以将面向对象的构架(如抽象数据类型)应用 于现有已经 投入使用的表,而不需重建整个应用程序 B. PL/SQL 與T_SQL 语法 一 批處理 SQL的能力畢竟有限,諸如事務處理方面,批處理於是 oracle與 ms都 把它進行了擴展, oracle的擴展叫 PL/SQL由声明部分,可执行部分, 异常处理个别组成 顺序如下: Declare declarations Begin Executable statements Exception Handles End Ms的擴展叫 Transact_SQL,簡稱 T_SQL. 批处理:就是一次执行处理一组命令的过程。
GO关键字樗着批处 理的结束。 如 use mastergo 复杂一点也是 由三部份組成: 声明部分,可执行部分,异常处理部 分。 不同的是,異常處理部分通常用跳轉語句來實現。 例如: Declare declarations Begin Excutable statements IF @ERROR <>0 GOTO ERROR End ERROR: BEGIN RAISERROR ( 20058, 16, - 1) return ( 1) END 二 逻辑控制语句 1.控制结构: Oracle If condition then ........ End if Case selector when exp1 then statements Else statements End case SQL SERVER IF condition Sql statements ELSE Sql statements Case selector When ex1 then statements Else statements End 2.迭代结构 oracle Loop statements end loop; While conditionLoop statement end loop; Sql server While condition Begin Sql statement End 面象对象编程涉及的概念有对象,类,属性和技巧,面向对象的三大 特性是: 封装,继承和多态。

将数据和变量,这促使不同的对象可以具 有同样的名称 的方式,这些技巧实现的任务相同,但推动方法却不同。 三 .變量與常量 Pl/sql函数与常量可以具备属性,支持的属性类别有 %type,%rowtype 声明引用列或函数的数据类别的数组时,可以使用 %type 属性。如: Declare Variable_name table_name.col_name %type 使用这个特点是,不需要知道列 vencode的精确数据种类 %rowtype属性提供表示表中行的记录类型。 四 .過程與函數 (Procedure & Function) a.建立存儲過程的語法不同: Ms sql的語法是: Create procedure procedure_name ( @Id int =null, @name varchar(10) out[put] ) as [變量定義區 ] begin sql_statement end --------------------------------------------------------------------CREATE FUNCTION function_name (@DATE datetime) RETURNS int AS begin sql statement end 面向對象的特点之一是封裝, 程序包就是对相关 PL/SQL类型, 子程序,游标,异常,变量,和常量的封装,它包括两部份程序 包规格说明和程序包主体 在包规格说明书中,可以声明类型,变量,常量,异常,游标, 子程序 程序包主体实现在程序包规格中定义的游标、子程序 包頭語法部分: Create or replace package package_name is|as Public type and item declarations Subprogram specifications End package_name 實例 如下: Create or replace package pack_me is Procedure order_proc(orno varchar2); Function order_fun(ornos varchar2) return varchar2; End pack_me 包體語法部分: Create or replace package body package_name is|as Private type and item decarations Subprogram bodies End package_name; 包體具體實例就不寫了,包頭隻是起一個聲明作用,具體實現部 分都在包體裡面。
下面是建立存储过程的语法: Create [or replace] procedure procedure_name[arg1 in|out|in out]type {is|as} [變量定義區 ] Begin Execute Sql statement Exception handlers End 注意:參數列表那裡 ,oracle 是先定義參數是輸入還是輸出參數,然後再定義參數類型 ; 而 sql server 正好相反 创建数组的词汇: Create function function_name argument Return datatype is|as Local decaration Begin Excutable statement Exception Handles End; b.變量賦值 1. Oracle里的用法:存储过程中边查询边给函数形参。 select某一列名 into变量名 from table where ..; 相当于 sql server中的 select函数名 =列 . From table where …. 注意: select * / 某一列名 into 表名 2. Oracle直接赋值的符号是: ' := ' 五 觸發器 (Trigger) Oracle Create or replace trigger trigger_name [before/after] [insert/update/delete] on table_name 变量声明 begin Sql statement end Ms sql Create trigger trigger_name on table {for |after|instead of} [insert|update|delete] as sql_statements 六 遊標 (Curcor) Oracle中提供两种游标类型sql server和oracle,它们是静态游标和 ref游标 静态游标又分为隐式游标与显式游标 Ref游标,游标变量是一种引用 类型 隐式游标属性包含 %notfound,%found,%rowcount,%isopen 如: Begin Delete from ta where rd='ddd' If sql%notfound thenDbms_output.put_line(''未找到值 ) Else Dbms_output.put_line(找到并删除之) End if End 显示游标:可以用上面语句控制游标 Open cursorname Fetch cursor_name into var_name Close cursor_name 创建游标语法: Oracle: declare variable Cursor test is select * from order Sql server Declare test cursor for select * from order 七 .错误处理 (Exception & test & debug) 有两种类别的异常:一种预定义,另外一种是用户自定义 預定義的類型有很多,如 No_data_found,Cursor_already_open 對於 Oracle的調試,可以通过第三方工具,如 toad,Pl.sql Developer, 对于 sql server采用 变量以及 print形式进行调试 Oracle异常定义个别的样例: Exception When <exception_name> then statements When others then Statements End; 其中 <exception_name>是系统预定义的名字。
Raiser_application_error用于构建用户定义的错误信息的过程,用 户定义的错误消息 可以指定的异常描述的更具体 Sql server在出错处理上多选用自定义。或者是用 goto跳转的方法 如: Begin Sql statements if @error<>0 goto error endError: Return; 或是直接用 raiserror if @error<>0 begin raiserror('发生错误 .',-1,-1) return (1) end 好了,两者的主要的差别就提到这,但愿我描述清楚了,由于东西非常 多,所以也有好多具体东西没有写
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-124457-2.html
感动