程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> 淺談IBM DB2數據庫如何遷移問題(4)

淺談IBM DB2數據庫如何遷移問題(4)

編輯:關於SqlServer


  /* The database samplaix is an alias for the SAMPLE database on AIX */
  connect to samplaix
  Database Connection Information
  Database server = DB2/6000 8.1.2
  SQL authorization ID = DB2INST1
  Local database alias = SAMPLAIX
  /* execute the host_name UDF against the remote database 鈥?
  it returns the name of the computer of the clIEnt connection */
  values host_name()
  1
  ------------------------------------------------
  mycomputer


  通過觸發器或用戶定義函數調用存儲過程的 UDF

  當遷移到 DB2 時,碰到的另一個普遍問題就是其他 RDBMS 可以通過觸發器或函數調用存儲過程。雖然 DB2 已經承諾在未來版本中包含該功能,但是我們將展示如何使用 DB2 的當前版本來實現該功能,即通過創建一個將對存儲過程發出調用的 UDF 來實現。

  清單 5 中展示了用於該目的的用戶定義函數 CALL_PROCEDURE 的簽名。

  清單 5. 用戶定義函數 CALL_PROCEDURE 的簽名


  >>--CALL_PROCEDURE--(--procedure_name--,--parameter_list--,----->
  >-----database_name--,--user_name--,--passWord--)-------------><


  VARCHAR(257) 類型的參數 procedure_name 指定要被調用的存儲過程的全限定名 —— 在傳遞多個參數時,要用逗號進行分隔。該字符串將被粘貼到用於調用過程的 CALL 語句中,因此其語法需要符合 SQL CALL 語句的要求。 VARCHAR(8) 類型的參數 database_name 指定要執行該存儲過程的數據庫的別名。存儲過程不一定要駐留在同一數據庫中。 VARCHAR(128) 類型的參數 user_name 和 VARCHAR(200) 類型的參數 passWord 用於確定連接數據庫以及執行該過程時所使用的注冊信息。

  該函數調用當前數據庫中的存儲過程。它建立新的連接之後就通過過程名和作為輸入參數而提供的參數來執行 CALL 語句。該 UDF 返回 0(零)表明 CALL 語句(以及相應的 CONNECT 和 CONNECT RESET 語句)執行成功。否則,將返回 DB2 命令行處理器(Command Line Processor,CLP)的返回碼和一條提供了更多信息的出錯消息。清單 6 演示了函數 CREATE_PROCEDURE 的執行。可以在“下載”小節中找到該腳本( trig_calls_proc.db2)的源代碼。

  清單6. 測試函數 CREATE_PROCEDURE( )

  下面這個例子測試演示了從觸發器調用包含一個參數的存儲過程。

  在該示例中,我們創建 t1 和 t2 這兩個表,帶有一個輸入參數(p)

  的過程(abc)以及一個觸發器(ins)。在執行觸發器時,它將調用該過程。

  然後,過程將會將 num 列的新值(NEW.coll)插入到表 t1 中。

  這可以通過以下操作來測試:在表 t2 上執行插入後對 t1 發出 select

  來檢驗該表內容 —— 進而檢驗該過程是否成功執行。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved