三.變量與常量 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中提供两种游标类型,它们是静态游标和ref游标 静态游标又分为隐式游标与显式游标 Ref游标,游标变量是一种引用类型 隐式游标属性包括%notfound,%found,%rowcount,%isopen 如: Begin Delete from ta where ord='ddd' If sql%notfound then Dbms_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 end Error: Return; 或是直接用raiserror if @error<>0 begin raiserror('发生错误.',-1,-1) return (1) end 好了,两者的主要的差异就写到这,但愿我表述清楚了,由于东西比较多,所以还有很多具体东西没有写 http://www.cnblogs.com/wangxiaohuo/archive/2008/04/20/1162631.html
函数 |
SQLServer和Oracle,存储过程区别,常用函数对比(二)
2012-07-25 17:00