如何列出Informix中的所有函数?

时间:2018-05-04 18:19:58

标签: sql informix information-schema

我正在寻找一种方法来列出在Informix上运行的数据库中的所有用户定义函数。

“informix”。*数据库中是否有一个表,列出了函数及其详细信息?

注意:此问题与How do I list all stored procedures in Informix?故意非常相似,但适用于功能,而不适用于程序。

1 个答案:

答案 0 :(得分:2)

使用sysprocedures目录表,您可以过滤非procedure SPL:

SELECT
    *
FROM
    sysprocedures
WHERE
    isproc = 'f';

SYSPROCEDURES

Review information about user-defined routines

但是,我不知道确定函数是否是用户定义的确切方法。

您可以查看该函数的owner,但如果它是使用用户informix创建的,则无法再将其与系统函数区分开来。

与函数相关的其他目录表似乎也没有包含足够的信息来帮助:

SYSPROCAUTH
SYSPROCBODY
SYSPROCCOLUMNS
SYSPROCPLAN
SYSROUTINELANGS

在文档中进一步阅读,似乎小写值mode列表示protected(系统)例程。因此,感兴趣的例程是模式为ORDT(全部为大写)的例程。

SELECT
    *
FROM
    sysprocedures
WHERE
    isproc = 'f'
    AND mode IN ('O', 'R', 'D', 'T');

但是,这并不能保证例程是用户创建的。在sysadmin中,标有模式O的例程由系统创建。

此外,例如,如果您使用Informix版本12.10.FC10,则使用正则表达式例程,系统会自动注册正则表达式datablade,并使用模式O创建相应的支持例程。

EXECUTE FUNCTION regex_match ('Regex module' , '[Mm]odule|DataBlade');

SELECT * FROM sysprocedures WHERE procname= 'regex_match';

procname        regex_match
owner           informix
procid          568
mode            O
retsize         200
symsize         813
datasize        0
codesize        0
numargs         4
isproc          f
specificname
externalname    $INFORMIXDIR/extend/ifxregex.1.00/ifxregex.bld(ifxregex_match_c
                har)
paramstyle      I
langid          1
paramtypes      lvarchar,lvarchar,integer,integer
variant         f
client          f
handlesnulls    t
iterator        f
percallcost     1000
commutator
negator
selfunc
internal        f
class
stack
parallelizable  t
costfunc
selconst        0.00
collation       en_US.819
procflags       0

因此,系统已创建,但模式为O