2013-06-28 24 views
0

我想看到的代碼像下面所定​​義的功能。此功能 - 位於名爲MYSCHEMA的模式中 - 使用已安裝的共享庫。DB2如何查看代碼用戶定義用功能調用C代碼

我嘗試使用以下,但它不工作。

select r.routinename as FunctionName, r.text as FunctionBody from 
    syscat.routines r where r.origin in ('U','R') and ROUTINESCHEMA='TRADE' 
    AND ROUTINETYPE ='F' 

我該怎麼做?

create or replace function MyFunction(varchar(60)) 
      returns table(
      ..fields.. 
      ) 
      external name 'mySharedLib.so!function' 
      language c 
      parameter style sql 

回答

1

沒有「代碼」,只是函數定義。您可以使用db2look或通過查詢系統目錄視圖SYSCAT.ROUTINES和SYSCAT.ROUTINEPARMS來自己生成定義。

1

DB2將不存儲外部例程(C或Java)的代碼。當調用函數或SP時,DB2只會調用外部二進制文件。如果數據庫無法找到二進制文件,它會拋出一個錯誤

然而,常規定義和稱爲二進制之間的映射是在目錄中,其中DB2將存儲在首部及二進制必須調用。

當您添加一個套路,DB2甚至不檢查,常規具有良好的格式,或可調用的參數。這將在執行時完成。

+0

AngocA嗨,你知道如果大小/限制,在本例中60,在調用程序之前執行呢?或者是必須驗證尺寸的例程? – DavidC

+0

我不知道。你可以測試,但如果你願意,你可以爲此創建一個獨立的問題,因爲它很有趣。 – AngocA