久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

MySQL與Oracle差異比較之存儲過程&Function的示例分析

145次閱讀
沒有評論

共計 3368 個字符,預計需要花費 9 分鐘才能閱讀完成。

行業資訊    
數據庫    
MySQL 與 Oracle 差異比較之存儲過程 Function 的示例分析

這篇文章給大家分享的是有關 MySQL 與 Oracle 差異比較之存儲過程 Function 的示例分析的內容。丸趣 TV 小編覺得挺實用的,因此分享給大家做個參考,一起跟隨丸趣 TV 小編過來看看吧。

存儲過程 Function

編號類別 ORACLEMYSQL 注釋 1 創建存儲過程語句不同 create or replace procedure P_ADD_FAC(
 id_fac_cd  IN ES_FAC_UNIT.FAC_CD%TYPE) isDROP PROCEDURE IF EXISTS `SD_USER_P_ADD_USR`;
 create procedure P_ADD_FAC(
 id_fac_cd  varchar(100))
 1. 在創建存儲過程時如果存在同名的存儲過程, 會刪除老的存儲過程. 
  oracle 使用 create or replace.
  mysql 使用先刪除老的存儲過程, 然后再創建新的存儲過程.
 2. oracle 存儲過程可以定義在 package 中, 也可以定義在 Procedures 中. 如果定義在包中, 一個包中可以包含多個存儲過程和方法. 如果定義在 Procedures 中, 存儲過程中不可以定義多個存儲過程. 
  Mysql  存儲過程中不可以定義多個存儲過程. 
 3. oracle 中字符串類型可以使用 varchar2. 
  Mysql 需要使用 varchar
 4. Oracle 中參數 varchar 長度不是必須的,
  Mysql 中參數 varchar 長度是必須的, 比如 varchar(100) 2 創建函數語句不同 CREATE OR REPLACE FUNCTION F_ROLE_FACS_GRP(
  ii_role_int_key IN SD_ROLE.ROLE_INT_KEY%TYPE
  ) RETURN VARCHAR2DROP FUNCTION IF EXISTS `SD_ROLE_F_ROLE_FACS_GRP`;
 CREATE  FUNCTION `SD_ROLE_F_ROLE_FACS_GRP`(
 ii_role_int_key INTEGER(10)
 ) RETURNSvarchar(1000) 1. 在創建函數時如果存在同名的函數, 會刪除老的函數. 
  oracle 使用 create or replace.
  mysql 使用先刪除老的函數, 然后再創建新的函數.
 2. oracle 函數可以定義在 package 中, 也可以定義在 Functions 中. 如果定義在包中, 一個包中可以包含多個存儲過程和函數. 如果定義在 Functions 中, 每個函數只能定義一個函數.
  Mysql  Functions 不可以定義多個函數. 
 3.  oracle 返回值用 return. 
  Mysql 返回值用 returns. 3 傳入參數寫法不同 procedure P_ADD_FAC(
 id_fac_cd  IN ES_FAC_UNIT.FAC_CD%TYPE)create procedure P_ADD_FAC(
 (in) id_fac_cd  varchar(100))
 1. oracle 存儲過程參數可以定義為表的字段類型.
  Mysql 存儲過程不支持這種定義方法. 需要定義變量的實際類型和長度.
 2. oracle 參數類型 in/out/inout 寫在參數名后面. 
  Mysql  參數類型 in/out/inout 寫在參數名前面.
 3. oracle 參數類型 in/out/inout 都必須寫.
  Mysql  參數類型如果是 in, 則可以省略. 如果是 out 或 inout 則不能省略.
  注意: mysql 中指定參數為 IN, OUT, 或 INOUT 只對 PROCEDURE 是合法的。(FUNCTION 參數總是被認為是 IN 參數)RETURNS 字句只能對 FUNCTION 做指定,對函數而言這是強制的。它用來指定函數的返回類型,而且函數體必須包含一個 RETURN value 語句。 
 
 function func_name(
 gw_id  in(out)  varchar2 )create function func_name(
 gw_id varchar(100))4 包的聲明方式 create or replace package/package body package name 拆分成多個存儲過程或函數 oracle 可以創建包, 包中可以包含多個存儲過程和方法. 
 mysql 沒有沒有包這個概念, 可以分別創建存儲過程和方法. 每個存儲過程或方法都需要放在一個文件中. 
  例 1: 方法命名  
 oracle 中 SD_FACILITY_PKG.F_SEARCH_FAC 
 to mysql SD_FACILITY_F_SEARCH_FAC 
  例 2: 過程命名
 oracle 中 SD_FACILITY_PKG.P_ADD_FAC
 to mysql SD_FACILITY_P_ADD_FAC 
 5 存儲過程返回語句不一樣 return;LEAVE proc; (proc  代表最外層的 begin end)oracle 存儲過程和方法都可以使用 return 退出當前過程和方法. 
 Mysql 存儲過程中只能使用 leave 退出當前存儲過程. 不可以使用 return. 
 Mysql 方法可以使用 return 退出當前方法. 6 存儲過程異常處理不一樣 EXCEPTION
  WHEN OTHERS THEN
  ROLLBACK ;
  ov_rtn_msg := c_sp_name|| (|| li_debug_pos ||): ||
  TO_CHAR(SQLCODE)|| : ||SUBSTR(SQLERRM,1,100);DECLARE EXIT HANDLER FOR  SQLEXCEPTION 
 BEGIN
  ROLLBACK ;
  set ov_rtn_msg = concat(c_sp_name, ( , li_debug_pos ,): ,
  TO_CHAR(SQLCODE), : ,SUBSTR(SQLERRM,1,100));
 END;oracle : 內部異常不需要定義, 在存儲過程或函數末尾寫上 EXCEPTION 后, 后面的部分即為異常處理的部分.  oracle 可以定義自定義異常, 自定義異常需要使用 raise 關鍵字拋出異常后, 才可以在 EXCEPTION 中捕獲.
 
 mysql: mysql 內部異常也需要先定義, 在定義的同時也需要實現異常的功能. 
  目前 mysql 不支持自定義異常. 7 過程和函數的聲明變量的位置不同聲明變量在 begin…end 體之前聲明變量在 begin…end 體內,begin 之后其他任何內容之前 8NO_DATA_FOUND 異常處理  EXCEPTION
  WHEN NO_DATA_FOUND THEN
  oi_rtn_cd := 1;
  ov_rtn_msg := SD_COMMON.P_GET_MSG(DP-CBM-01100a-016 ,
  li_sub_rtn_cd,
  lv_sub_rtn_msg
  ); 使用 FOUND_ROWS() 代替 NO_DATA_FOUND. 詳見注釋.oracle 中: 
 NO_DATA_FOUND 是游標的一個屬性. 
  當 select 沒有查到數據就會出現 no data found 的異常,程序不會向下執行.
 
 Mysql: 
  沒有 NO_DATA_FOUND 這個屬性. 但可是使用 FOUND_ROWS()方法得到 select 語句查詢出來的數據. 如果 FOUND_ROWS()得到的值為 0, 就進入異常處理邏輯. 9 在存儲過程中調用存儲過程方式的不同 Procedure_Name(參數);Call Procedure_Name(參數);MYSQL 存儲過程調用存儲過程,需要使用 Call pro_name(參數). 
 Oracle 調用存儲過程直接寫存儲過程名就可以了. 10 拋異常的方式不同 RAISE Exception_Name; 見備注詳見 2009002-OTMPPS-Difficult Questions-0001.doc 中 2.5 Mysql 異常處理部分

感謝各位的閱讀!關于“MySQL 與 Oracle 差異比較之存儲過程 Function 的示例分析”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-04發表,共計3368字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 永川市| 潼南县| 西贡区| 宿州市| 阜康市| 金沙县| 乌兰察布市| 抚松县| 芮城县| 遂川县| 缙云县| 融水| 武定县| 银川市| 望谟县| 平乡县| 墨玉县| 孝昌县| 博客| 仪陇县| 朝阳县| 永善县| 海林市| 迭部县| 荣成市| 天水市| 天镇县| 峨眉山市| 正蓝旗| 迭部县| 汝城县| 子洲县| 东港市| 沂南县| 临朐县| 姜堰市| 广丰县| 台东县| 辽阳县| 西盟| 吉木萨尔县|