2013-06-28 23 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