如何列出 Informix 中的所有函数?
How do I list all functions in Informix?
我正在寻找一种方法来列出我在 Informix 上的数据库 运行 中的所有用户定义函数。
"informix".* 数据库中是否有 table 列出函数及其详细信息?
注意:这个问题故意与 How do I list all stored procedures in Informix? 非常相似,但适用于 函数 而不是过程。
使用 sysprocedures
目录 table 您可以过滤非 procedure
SPL:
SELECT
*
FROM
sysprocedures
WHERE
isproc = 'f';
Review information about user-defined routines
但是,我不知道确定函数是否为用户定义的确切方法。
你可以查看函数的owner
,但是如果它是用用户创建的informix
那么它就不能再与系统函数区分开来了。
其他与功能相关的目录 table 似乎也没有包含足够的信息来提供帮助:
SYSPROCAUTH
SYSPROCBODY
SYSPROCCOLUMNS
SYSPROCPLAN
SYSROUTINELANGS
仔细阅读文档,小写值 mode
列似乎表示 protected
(系统)例程。因此,感兴趣的例程是模式为 O
、R
、D
和 T
(全部大写)的例程。
SELECT
*
FROM
sysprocedures
WHERE
isproc = 'f'
AND mode IN ('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
。
我正在寻找一种方法来列出我在 Informix 上的数据库 运行 中的所有用户定义函数。
"informix".* 数据库中是否有 table 列出函数及其详细信息?
注意:这个问题故意与 How do I list all stored procedures in Informix? 非常相似,但适用于 函数 而不是过程。
使用 sysprocedures
目录 table 您可以过滤非 procedure
SPL:
SELECT
*
FROM
sysprocedures
WHERE
isproc = 'f';
Review information about user-defined routines
但是,我不知道确定函数是否为用户定义的确切方法。
你可以查看函数的owner
,但是如果它是用用户创建的informix
那么它就不能再与系统函数区分开来了。
其他与功能相关的目录 table 似乎也没有包含足够的信息来提供帮助:
SYSPROCAUTH
SYSPROCBODY
SYSPROCCOLUMNS
SYSPROCPLAN
SYSROUTINELANGS
仔细阅读文档,小写值 mode
列似乎表示 protected
(系统)例程。因此,感兴趣的例程是模式为 O
、R
、D
和 T
(全部大写)的例程。
SELECT
*
FROM
sysprocedures
WHERE
isproc = 'f'
AND mode IN ('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
。