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

Sql 如何列出Informix中的所有函数?,sql,informix,information-schema,Sql,Informix,Information Schema,我正在寻找一种方法来列出在Informix上运行的数据库中的所有用户定义函数 “informix”.*数据库中是否有列出函数及其详细信息的表 注意:此问题有意与函数非常相似,但适用于而非过程。使用sysprocedures目录表,您可以筛选非过程SPL: SELECT * FROM sysprocedures WHERE isproc = 'f'; 然而,我不知道一个确切的方法来确定一个函数是否是用户定义的 您可以查看函数的所有者,但是如果它是由用户informix

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

“informix”.*数据库中是否有列出函数及其详细信息的表


注意:此问题有意与函数非常相似,但适用于而非过程。

使用
sysprocedures
目录表,您可以筛选非
过程
SPL:

SELECT
    *
FROM
    sysprocedures
WHERE
    isproc = 'f';

然而,我不知道一个确切的方法来确定一个函数是否是用户定义的

您可以查看函数的
所有者
,但是如果它是由用户
informix
创建的,那么它就不能再与系统函数区分开来

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

SYSPROCAUTH
SYSPROCBODY
SYSPROCCOLUMNS
SYSPROCPLAN
SYSROUTINELANGS
再仔细阅读一下文档,似乎小写值
mode
列表示
受保护的
(系统)例程。因此,感兴趣的例程是具有模式
O
R
D
T
(均为大写)的例程

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

此外,如果您(例如)在Informix 12.10.FC10版中使用正则表达式例程,系统会自动注册正则表达式数据库,并使用模式
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

sysprocedures
目录表上有一列
isproc
。在线文档提供了更详细的信息。@LuísMarques这看起来是一个很好的开始!您能否将此问题转移到一个答案,以及如何将其限制为用户定义的问题?
mode='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