Используя таблицу каталога sysprocedures
, вы можете фильтровать для не procedure
SPL:
SELECT
*
FROM
sysprocedures
WHERE
isproc = 'f';
SYSPROCEDURES
Просмотр информации о пользовательских подпрограммах
Однако я не знаю точного способа определить, определена ли функция пользователем.
Вы можете посмотреть на owner
функции, но если она была создана пользователем informix
, ее уже нельзя будет отличить от системных функций.
Другие таблицы каталога, относящиеся к функциям, также не содержат достаточно информации, чтобы помочь:
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 используете подпрограмму regex, система автоматически регистрирует блок данных regex, и соответствующие подпрограммы поддержки создаются в режиме 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
.