我正在寻找一种方法来列出在Informix上运行的我的数据库中所有用户定义的函数。
在“informix”。*数据库中是否有一个表,列出了函数以及关于它们的详细信息?
注意:此问题故意非常类似于如何列出Informix中的所有存储过程?但适用于函数而不是过程。
在“informix”。*数据库中是否有一个表,列出了函数以及关于它们的详细信息?
注意:此问题故意非常类似于如何列出Informix中的所有存储过程?但适用于函数而不是过程。
sysprocedures
目录表,您可以过滤非 procedure
SPLs:SELECT
*
FROM
sysprocedures
WHERE
isproc = 'f';
然而,我不知道如何确定一个函数是否为用户定义。
您可以查看函数的owner
,但如果使用informix
用户创建,则无法与系统函数区分开来。
与函数相关的其他目录表似乎也没有足够的信息来帮助解决问题:
SYSPROCAUTH
SYSPROCBODY
SYSPROCCOLUMNS
SYSPROCPLAN
SYSROUTINELANGS
仔细阅读文档后,似乎小写的mode
列表示一个受保护的
(系统)程序。因此,我们感兴趣的程序是具有大写模式O
、R
、D
和T
的程序。
SELECT
*
FROM
sysprocedures
WHERE
isproc = 'f'
AND mode IN ('O', 'R', 'D', 'T');
sysadmin
中,有些以模式O
标记的例程是由系统创建的。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
模式。
mode='O'
似乎有助于确定它是否为用户定义。 - Axel Fontaine
sysprocedures
目录表中有一个名为isproc
的列。在线文档提供了更多详细信息SYSPROCEDURES。 - Luís Marques