Функции informix


Содержание

Как перечислить все функции в Informix?

Я ищу способ перечислить все пользовательские функции в моей базе данных, запущенной в Informix.

Есть ли таблица в базе данных «informix». *, В которой перечислены функции вместе с подробной информацией о них?

Примечание: этот вопрос намеренно очень похож на. Как мне перечислить все хранимые процедуры в Informix? но относится к функциям, а не к процедурам.

Используя sysprocedures каталогов sysprocedures вы можете фильтровать для SPL без procedure :

Тем не менее, я не знаю, как точно определить, определена ли функция.

Вы можете посмотреть на owner функции, но если она была создана с помощью user informix то ее больше нельзя отличать от системных функций.

Другие таблицы каталогов, связанные с функциями, также не содержат достаточной информации, чтобы помочь:

Читая немного больше в документации, кажется, что в столбце mode значения нижнего регистра указано protected (системная) процедура. Таким образом, представляющие интерес функции являются режимы O , R , D и T (все в верхнем регистре).

Однако это не гарантирует, что подпрограмма создается пользователем. В sysadmin есть подпрограммы, отмеченные режимом O которые были созданы системой.

Также, если вы, например, в Informix версии 12.10.FC10, используете подпрограмму регулярного выражения, система автоматически регистрирует базу данных regex и соответствующие подпрограммы поддержки создаются с режимом O

Функции informix

545 просмотра

1 ответ

23622 Репутация автора

Я ищу способ перечислить все пользовательские функции в моей базе данных, работающей на Informix.

Есть ли в базе данных «informix». * Таблица, в которой перечислены функции вместе с подробной информацией о них?

Примечание: этот вопрос намеренно очень похож на Как мне перечислить все хранимые процедуры в Informix? но относится к функциям, а не к процедурам.

Ответы (1)

2 плюса

1006 Репутация автора

Используя sysprocedures таблицу каталога, вы можете отфильтровать не procedure SPL:

Тем не менее, я не знаю точного способа определения, является ли функция определенной пользователем.

Вы можете посмотреть на owner функцию, но если она была создана пользователем, informix ее уже нельзя будет отличить от системных функций.

Другие таблицы каталога, относящиеся к функциям, также не содержат достаточно информации, чтобы помочь:

Читая немного больше в документации, кажется, что mode столбец значений в нижнем регистре указывает на protected (системную) процедуру Таким образом, процедуры, которые представляют интерес те , с модами O , R , D и T ( в верхнем регистре).

Однако это не гарантирует, что подпрограмма создана пользователем. В sysadmin нем есть подпрограммы, помеченные режимом, O которые были созданы системой.

Кроме того, если вы, например, в Informix версии 12.10.FC10 используете подпрограмму regex, система автоматически регистрирует блок данных regex, и соответствующие подпрограммы поддержки создаются в режиме O .

Как мне перечислить все функции в Informix?

Я ищу способ перечисления всех пользовательских функций в моей базе данных, работающих на Informix.

Есть ли в базе данных «informix». * Таблица, в которой перечислены функции вместе с подробной информацией о них?

Примечание: этот вопрос намеренно очень похож на вопрос: Как мне перечислить все хранимые процедуры в Informix? но относится к функциям, а не к процедурам.

1 ответ

Используя sysprocedures каталога sysprocedures вы можете отфильтровать не SPL для procedure :

Тем не менее, я не знаю точного способа определения, является ли функция определенной пользователем.

Вы можете обратиться к owner функции, но если она была создана с помощью пользователя informix ее уже нельзя будет отличить от системных функций.


Другие таблицы каталога, относящиеся к функциям, также не содержат достаточно информации, чтобы помочь:

Читая немного больше в документации, кажется, что столбец mode значений в нижнем регистре указывает protected (системную) подпрограмму. Таким образом, представляют интерес те процедуры с режимами O , R , D и T (все в верхнем регистре).

Однако это не гарантирует, что подпрограмма создана пользователем. В системном sysadmin есть подпрограммы, помеченные режимом O которые были созданы системой.

Также, если вы, например, в Informix версии 12.10.FC10 используете подпрограмму regex, система автоматически регистрирует блок данных regex, и соответствующие подпрограммы поддержки создаются в режиме O

Как перечислить все функции в Informix?

Я ищу способ перечислить все пользовательские функции в моей базе данных, запущенной в Informix.

Есть ли таблица в базе данных «informix». *, В которой перечислены функции вместе с подробной информацией о них?

Примечание: этот вопрос намеренно очень похож на. Как мне перечислить все хранимые процедуры в Informix? но относится к функциям, а не к процедурам.

Используя sysprocedures каталогов sysprocedures вы можете фильтровать для SPL без procedure :

Тем не менее, я не знаю, как точно определить, определена ли функция.

Вы можете посмотреть на owner функции, но если она была создана с помощью user informix то ее больше нельзя отличать от системных функций.

Другие таблицы каталогов, связанные с функциями, также не содержат достаточной информации, чтобы помочь:

Читая немного больше в документации, кажется, что в столбце mode значения нижнего регистра указано protected (системная) процедура. Таким образом, представляющие интерес функции являются режимы O , R , D и T (все в верхнем регистре).

Однако это не гарантирует, что подпрограмма создается пользователем. В sysadmin есть подпрограммы, отмеченные режимом O которые были созданы системой.

Также, если вы, например, в Informix версии 12.10.FC10, используете подпрограмму регулярного выражения, система автоматически регистрирует базу данных regex и соответствующие подпрограммы поддержки создаются с режимом O

Функции informix

Препроцессор ecpg может работать в так называемом режиме совместимости с Informix. Если этот режим включён, ecpg старается работать как предкомпилятор Informix для кода Informix E/SQL. Вообще говоря, это позволяет записывать встраиваемые команды SQL, используя знак доллара вместо слов EXEC SQL :

Примечание

Между $ и последующей директивой препроцессора (в частности, include , define , ifdef и т. п.) не должно быть пробельных символов. В противном случае препроцессор воспримет следующее слово как имя переменной среды.

Поддерживаются два режима совместимости: INFORMIX и INFORMIX_SE

При компоновке программ, использующих этот режим совместимости, обязательно подключите библиотеку libcompat , поставляемую с ECPG.

Помимо ранее упомянутого синтаксического сахара, режим совместимости с Informix приносит из E/SQL в ECPG набор функций для ввода, вывода и преобразования данных, а также встраиваемые операторы SQL.

Режим совместимости с Informix тесно связан с библиотекой pgtypeslib из ECPG. Библиотека pgtypeslib сопоставляет типы данных SQL с типами данных в ведущей программе на C, а большинство дополнительных функций режима совместимости с Informix позволяют работать с этими типами C. Заметьте, однако, что степень совместимости ограничена. ECPG не пытается копировать поведение Informix ; вы можете выполнять примерно те же операции и пользоваться функции с теми же именами и с тем же поведением, но если вы используете Informix , просто заменить одно средство другим на данный момент нельзя. Более того, есть различия и в типах данных. В частности, типы даты и интервала в Postgres Pro не воспринимают диапазоны, как например, YEAR TO MINUTE , так что и в ECPG это не будет поддерживаться.

37.15.1. Дополнительные типы

Теперь в режиме Informix без указания typedef поддерживается специальный псевдотип Informix «string» для хранения символьной строки, обрезаемой справа. На самом деле, в режиме Informix ECPG откажется обрабатывать исходные файлы, содержащие определение типа typedef некоторый_тип string;

37.15.2. Дополнительные/недостающие операторы встраиваемого SQL

Этот оператор закрывает текущее подключение. Фактически это синоним команды DISCONNECT CURRENT в ECPG: FREE имя_курсора

Из-за различий в подходах ECPG и ESQL/C Informix (т. е. другого разделения на чисто грамматические преобразования и вызовы нижележащей библиотеки времени выполнения), в ECPG нет оператора FREE имя_курсора . Это связано с тем, что в ECPG команда DECLARE CURSOR не сводится к вызову функции в библиотеке времени выполнения, которая бы принимала имя курсора. Это значит, что курсоры SQL в библиотеке ECPG не требуют обслуживания, оно требуется только на уровне сервера Postgres Pro. FREE имя_оператора

Команда FREE имя_оператора является синонимом команды DEALLOCATE PREPARE имя_оператора .

37.15.3. Области дескрипторов SQLDA, совместимые с Informix

Режим совместимости с Informix поддерживает структуру, отличную от описанной в Подразделе 37.7.2. См. ниже:

Число полей в дескрипторе SQLDA . sqlvar

Указатель на свойства по полям. desc_name

Не используется, заполняется нулями. desc_occ

Размер структуры в памяти. desc_next

Указатель на следующую структуру SQLDA, если набор результатов содержит больше одной записи. reserved


Неиспользуемый указатель, содержит NULL. Сохраняется для совместимости с Informix.

Свойства, относящиеся к полям, описаны ниже, они хранятся в массиве sqlvar :

Тип поля. Соответствующие константы представлены в sqltypes.h sqllen

Длина данных поля. sqldata

Указатель на данные поля. Этот указатель имеет тип char * , но он указывает на данные в двоичном формате. Например: sqlind

Указатель на индикатор NULL. Если возвращается командами DESCRIBE или FETCH, это всегда действительный указатель. Если передаётся на вход команде EXECUTE . USING sqlda; , NULL вместо указателя означает, что значение этого поля отлично от NULL. Чтобы обозначить NULL в поле, необходимо корректно установить этот указатель и sqlitype . Например: sqlname

Имя поля, в виде строки с завершающим 0. sqlformat

Зарезервировано в Informix, значение PQfformat() для данного поля. sqlitype

Тип данных индикатора NULL. При получении данных с сервера это всегда SQLSMINT. Когда SQLDA используется в параметризованном запросе, данные индикатора обрабатываются в соответствии с указанным здесь типом. sqlilen

Длина данных индикатора NULL. sqlxid

Расширенный тип поля, результат функции PQftype() . sqltypename
sqltypelen
sqlownerlen
sqlsourcetype
sqlownername
sqlsourceid
sqlflags
sqlreserved

Не используются. sqlilongdata

Совпадает с sqldata , если sqllen превышает 32 Кбайта.

Дополнительную информацию можно найти в заголовочном файле sqlda.h и в регрессионном тесте src/interfaces/ecpg/test/compat_informix/sqlda.pgc .

37.15.4. Дополнительные функции

Складывает два значения типа decimal.

Эта функция получает указатель на первый операнд типа decimal ( arg1 ), указатель на второй операнд типа decimal ( arg2 ) и указатель на переменную типа decimal, в которую будет записана сумма ( sum ). В случае успеха эта функция возвращает 0. ECPG_INFORMIX_NUM_OVERFLOW возвращается в случае переполнения, а ECPG_INFORMIX_NUM_UNDERFLOW в случае антипереполнения. При любых других ошибках возвращается -1, а в errno устанавливается код errno из pgtypeslib. deccmp

Сравнивает два значения типа decimal.

Эта функция получает указатель на первое значение типа decimal ( arg1 ), указатель на второе значение типа decimal ( arg2 ) и возвращает целое, отражающее результат сравнения этих чисел.

1, если значение, на которое указывает arg1 , больше значения, на которое указывает var2

-1, если значение, на которое указывает arg1 , меньше значения, на которое указывает arg2

0, если значение, на которое указывает arg1 , равно значению, на которое указывает arg2

Копирует значение типа decimal.

Функция принимает в первом аргументе ( src ) указатель на значение decimal, которое должно быть скопировано, а во втором аргументе ( target ) принимает указатель на структуру типа decimal для скопированного значения. deccvasc

Преобразует значение из представления ASCII в тип decimal.

Эта функция получает указатель на строку, содержащую строковое представление числа, которое нужно преобразовать, ( cp ), а также его длину len . В np передаётся указатель на переменную типа decimal, в которую будет помещён результат преобразования.

Допустимыми являются, например следующие форматы: -2 , .794 , +3.44 , 592.49E07 или -32.84e-4 .

В случае успеха эта функция возвращает 0. При переполнении или антипереполнении возвращается ECPG_INFORMIX_NUM_OVERFLOW или ECPG_INFORMIX_NUM_UNDERFLOW , соответственно. Если разобрать ASCII-представление не удаётся, возвращается ECPG_INFORMIX_BAD_NUMERIC или ECPG_INFORMIX_BAD_EXPONENT , если не удаётся разобрать компонент экспоненты. deccvdbl

Преобразует значение double в значение типа decimal.

Данная функция принимает в первом аргументе ( dbl ) переменную типа double, которая должна быть преобразована. Во втором аргументе ( np ) она принимает указатель на переменную decimal, в которую будет помещён результат операции.

Илон Маск рекомендует:  Информационные блоки предупреждений

Эта функция возвращает 0 в случае успеха, либо отрицательное значение, если выполнить преобразование не удалось. deccvint

Преобразует значение int в значение типа decimal.

Данная функция принимает в первом аргументе ( in ) переменную типа int, которая должна быть преобразована. Во втором аргументе ( np ) она принимает указатель на переменную decimal, в которую будет помещён результат операции.


Эта функция возвращает 0 в случае успеха, либо отрицательное значение, если выполнить преобразование не удалось. deccvlong

Преобразует значение long в значение типа decimal.

Данная функция принимает в первом аргументе ( lng ) переменную типа long, которая должна быть преобразована. Во втором аргументе ( np ) она принимает указатель на переменную decimal, в которую будет помещён результат операции.

Эта функция возвращает 0 в случае успеха, либо отрицательное значение, если выполнить преобразование не удалось. decdiv

Делит одну переменную типа decimal на другую.

Эта функция получает указатели на переменные ( n1 и n2 ) и вычисляет частное n1 / n2 . В result передаётся указатель на переменную, в которую будет помещён результат операции.

В случае успеха возвращается 0, а при ошибке — отрицательное значение. В случае переполнения или антипереполнения данная функция возвращает ECPG_INFORMIX_NUM_OVERFLOW или ECPG_INFORMIX_NUM_UNDERFLOW , соответственно. При попытке деления на ноль возвращается ECPG_INFORMIX_DIVIDE_ZERO . decmul

Перемножает два значения типа decimal.

Эта функция получает указатели на переменные ( n1 и n2 ) и вычисляет произведение n1 * n2 . В result передаётся указатель на переменную, в которую будет помещён результат операции.

В случае успеха возвращается 0, а при ошибке — отрицательное значение. В случае переполнения или антипереполнения данная функция возвращает ECPG_INFORMIX_NUM_OVERFLOW или ECPG_INFORMIX_NUM_UNDERFLOW , соответственно. decsub

Вычитает одно значение типа decimal из другого.

Эта функция получает указатели на переменные ( n1 и n2 ) и вычисляет разность n1 — n2 . В result передаётся указатель на переменную, в которую будет помещён результат операции.

В случае успеха возвращается 0, а при ошибке — отрицательное значение. В случае переполнения или антипереполнения данная функция возвращает ECPG_INFORMIX_NUM_OVERFLOW или ECPG_INFORMIX_NUM_UNDERFLOW , соответственно. dectoasc

Преобразует переменную типа decimal в представление ASCII (в строку C char*).

Эта функция получает указатель на переменную типа decimal ( np ), которая будет преобразована в текстовое представление. Аргумент cp указывает на буфер, в который будет помещён результат операции. Аргумент right определяет, сколько должно выводиться цифр правее десятичной точки. Результат будет округлён до этого числа десятичных цифр. Значение right , равное -1, указывает, что выводиться должны все имеющиеся десятичные цифры. Если длина выходного буфера, которую задаёт len , недостаточна для помещения в него текстового представления, включая завершающий нулевой байт, в буфере сохраняется один знак * и возвращается -1.

Эта функция возвращает -1, если буфер cp слишком мал, либо ECPG_INFORMIX_OUT_OF_MEMORY при нехватке памяти. dectodbl

Преобразует переменную типа decimal в тип double.

Эта функция получает указатель ( np ) на значение decimal, которое нужно преобразовать, и указатель ( dblp ) на переменную double, в которую будет помещён результат операции.

В случае успеха возвращается 0, или отрицательное значение, если выполнить преобразование не удалось. dectoint

Преобразует переменную типа decimal в тип integer.

Эта функция получает указатель ( np ) на значение decimal, которое нужно преобразовать, и указатель ( ip ) на целочисленную переменную, в которую будет помещён результат операции.

В случае успеха возвращается 0, или отрицательное значение, если выполнить преобразование не удалось. В случае переполнения возвращается ECPG_INFORMIX_NUM_OVERFLOW .

Заметьте, что реализация ECPG отличается от реализации Informix . В Informix целое ограничивается диапазоном -32767 .. 32767, тогда как в ECPG ограничение зависит от архитектуры ( -INT_MAX .. INT_MAX ). dectolong

Преобразует переменную типа decimal в тип long.

Эта функция получает указатель ( np ) на значение decimal, которое нужно преобразовать, и указатель ( lngp ) на переменную типа long, в которую будет помещён результат операции.

В случае успеха возвращается 0, или отрицательное значение, если выполнить преобразование не удалось. В случае переполнения возвращается ECPG_INFORMIX_NUM_OVERFLOW .

Заметьте, что реализация ECPG отличается от реализации Informix . В Informix длинное целое ограничено диапазоном -2 147 483 647 .. 2 147 483 647, тогда как в ECPG ограничение зависит от архитектуры ( -LONG_MAX .. LONG_MAX ). rdatestr

Преобразует дату в строку C char*.

Эта функция принимает два аргумента. В первом ( d ) передаётся дата, которую нужно преобразовать, а во втором указатель на целевую строку. Результат всегда выводится в формате yyyy-mm-dd , так что для этой строки нужно выделить минимум 11 байт (включая завершающий нулевой байт).

Эта функция возвращает 0 в случае успеха, а в случае ошибки — отрицательное значение.

Заметьте, что реализация ECPG отличается от реализации Informix . В Informix формат вывода можно изменить переменными окружения, а в ECPG он фиксирован. rstrdate

Разбирает текстовое представление даты.

Эта функция получает текстовое представление ( str ) даты, которую нужно преобразовать, и указатель на переменную типа date ( d ). Для данной функции нельзя задать маску формата. Она использует стандартную маску формата Informix , а именно: mm/dd/yyyy . Внутри эта функция вызывает rdefmtdate . Таким образом, rstrdate не будет быстрее, и если у вас есть выбор, используйте функцию rdefmtdate , которая позволяет явно задать маску формата.

Эта функция возвращает те же значения, что и rdefmtdate . rtoday

Выдаёт текущую дату.

Эта функция получает указатель на переменную ( d ) типа date, в которую будет записана текущая дата.


Внутри эта функция вызывает PGTYPESdate_today . rjulmdy

Извлекает значения дня, месяца и года из переменной типа date.

Эта функция получает дату d и указатель на 3 коротких целочисленных значения mdy . Имя переменной указывает на порядок значений: в mdy[0] записывается номер месяца, в mdy[1] — номер дня, а в mdy[2] — год.

В текущем состоянии эта функция всегда возвращает 0.

Внутри эта функция вызывает PGTYPESdate_julmdy . rdefmtdate

Преобразует символьную строку в значение типа date по маске формата.

Эта функция принимает указатель на переменную типа date ( d ), в которую будет помещён результат операции, маску формата для разбора даты ( fmt ) и строку C char*, содержащую текстовое представление даты ( str ). Ожидается, что текстовое представление будет соответствовать маске формата. Однако это соответствие не обязательно должно быть точным. Данная функция анализирует только порядок элементов и ищет в нём подстроки yy или yyyy , обозначающие позицию года, подстроку mm , обозначающую позицию месяца, и dd , обозначающую позицию дня.

Эта функция возвращает следующие значения:

0 — Функция выполнена успешно.

ECPG_INFORMIX_ENOSHORTDATE — Дата не содержит разделителей между днём, месяцем и годом. С таким форматом входная строка должна быть длиной ровно 6 или 8 байт, но это не так.

ECPG_INFORMIX_ENOTDMY — Строка формата не определяет корректно последовательный порядок года, месяца и дня.

ECPG_INFORMIX_BAD_DAY — Во входной строке отсутствует корректное указание дня.

ECPG_INFORMIX_BAD_MONTH — Во входной строке отсутствует корректное указание месяца.

ECPG_INFORMIX_BAD_YEAR — Во входной строке отсутствует корректное указание года.

В реализации этой функции вызывается PGTYPESdate_defmt_asc . Примеры вводимых строк приведены в таблице в её описании. rfmtdate

Преобразует переменную типа date в текстовое представление по маске формата.

Эта функция принимает дату для преобразования ( d ), маску формата ( fmt ) и строку, в которую будет помещено текстовое представление даты ( str ).

В случае успеха возвращается 0, а в случае ошибки — отрицательное значение.

Внутри эта функция вызывает PGTYPESdate_fmt_asc , примеры форматов можно найти в её описании. rmdyjul

Образует значение даты из массива 3 коротких целых, задающих день, месяц и год даты.

Эта функция получает в первом аргументе массив из 3 коротких целых ( mdy ), а во втором указатель на переменную типа date, в которую будет помещён результат операции.

В настоящее время эта функция всегда возвращает 0.

В реализации этой функции вызывается PGTYPESdate_mdyjul . rdayofweek

Возвращает число, представляющее день недели для заданной даты.

Эта функция принимает в единственном аргументе переменную d типа date и возвращает целое число, выражающее день недели для этой даты.

В реализации этой функции вызывается PGTYPESdate_dayofweek . dtcurrent

Получает текущее время.

Эта функция получает текущее время и сохраняет его в переменной типа timestamp, на которую указывает ts . dtcvasc

Разбирает время из текстового представления в переменную типа timestamp.

Эта функция получает строку ( str ), которую нужно разобрать, и указатель на переменную типа timestamp, в которую будет помещён результат операции ( ts ).

Эта функция возвращает 0 в случае успеха, а в случае ошибки — отрицательное значение.

Внутри эта функция вызывает PGTYPEStimestamp_from_asc . Примеры вводимых строк приведены в таблице в её описании. dtcvfmtasc

Разбирает время из текстового представления в переменную типа timestamp по маске формата.

Эта функция получает строку ( inbuf ), которую нужно разобрать, маску формата ( fmtstr ) и указатель на переменную timestamp, в которой будет содержаться результат операции ( dtvalue ).


В реализации этой функции используется PGTYPEStimestamp_defmt_asc . Список допустимых кодов формата приведён в её описании.

Эта функция возвращает 0 в случае успеха, а в случае ошибки — отрицательное значение. dtsub

Вычитает одно значение времени из другого и возвращает переменную типа interval.

Эта функция вычитает значение timestamp, на которое указывает ts2 , из значения timestamp, на которое указывает ts1 , и сохраняет результат в переменной типа interval, на которую указывает iv .

В случае успеха возвращается 0, а в случае ошибки — отрицательное значение. dttoasc

Преобразует переменную типа timestamp в строку C char*.

Эта функция получает указатель ( ts ) на переменную типа timestamp, которую нужно преобразовать, и строку ( output ) для сохранения результата операции. Она преобразует ts в текстовое представление согласно стандарту SQL, то есть по маске YYYY-MM-DD HH:MM:SS .

В случае успеха возвращается 0, а в случае ошибки — отрицательное значение. dttofmtasc

Преобразует переменную типа timestamp в строку C char* по маске формата.

Эта функция получает в первом аргументе ( ts ) указатель на переменную типа timestamp, а в последующих указатель на буфер вывода ( output ), максимальную длину строки, которую может принять буфер ( str_len ), и маску формата, с которой будет выполняться преобразование ( fmtstr ).

В случае успеха возвращается 0, а в случае ошибки — отрицательное значение.

Внутри эта функция использует PGTYPEStimestamp_fmt_asc . Примеры допустимых масок формата можно найти в её описании. intoasc

Преобразует переменную типа interval в строку C char*.

Эта функция получает указатель ( i ) на переменную типа interval, которую нужно преобразовать, и строку ( str ) для сохранения результата операции. Она преобразует i в текстовое представление согласно стандарту SQL, то есть по маске YYYY-MM-DD HH:MM:SS .

В случае успеха возвращается 0, а в случае ошибки — отрицательное значение. rfmtlong

Преобразует длинное целое в текстовое представление по маске формата.

Эта функция принимает значение типа long ( lng_val ), маску формата ( fmt ) и указатель на выходной буфер ( outbuf ). Она преобразует длинное целое в его текстовое представление согласно заданной маске формата.

Маску формата можно составить из следующих символов, определяющих формат:

* (звёздочка) — если в данной позиции будет пусто, заполнить её звёздочкой.

& (амперсанд) — если в данной позиции будет пусто, заполнить её нулём.

# — заменить ведущие нули пробелами.

— выровнять число в строке по левой стороне.

, (запятая) — сгруппировать числа, содержащие четыре и более цифр, в группы по три цифры через запятую.

. (точка) — этот символ отделяет целую часть числа от дробной.

— (минус) — с отрицательным числом должен выводиться знак минус.

+ (плюс) — с положительным числом должен выводиться знак плюс.

( — это символ заменяет знак минус перед отрицательным числом. Сам знак минус выводиться не будет.

) — этот символ заменяет минус и выводится после отрицательного числа.

$ — символ денежной суммы.

Приводит строку к верхнему регистру.

Эта функция получает указатель на строку и приводит в ней каждый символ в нижнем регистре к верхнему регистру. byleng

Возвращает число символов в строке, не считая завершающих пробелов.

Эта функция принимает в первом аргументе ( str ) строку фиксированной длины, а во втором ( len ) её длину. Она возвращает число значимых символов, то есть длину строки без завершающих пробелов. ldchar


Копирует строку фиксированной длины в строку с завершающим нулём.

Эта функция принимает строку фиксированной длины ( src ), которую нужно скопировать, её длину ( len ) и указатель на целевой буфер в памяти ( dest ). Учтите, что для буфера, на который указывает dest , необходимо выделить как минимум len+1 байт. Данная функция копирует в новую область не больше len байт (меньше, если в исходной строке есть завершающие пробелы) и добавляет завершающий 0. rgetmsg

Илон Маск рекомендует:  Многоколоночный макет

Эта функция определена, но не реализована на данный момент! rtypalign

Эта функция определена, но не реализована на данный момент! rtypmsize

Эта функция определена, но не реализована на данный момент! rtypwidth

Эта функция определена, но не реализована на данный момент! rsetnull

Присваивает переменной NULL.

Эта функция получает целое, определяющее тип переменной, и указатель на саму переменную, приведённый к указателю C char*.

Определены следующие типы:

CCHARTYPE — для переменной типа char или char*

CSHORTTYPE — для переменной типа short int

CINTTYPE — для переменной типа int

CBOOLTYPE — для переменной типа boolean

CFLOATTYPE — для переменной типа float

CLONGTYPE — для переменной типа long

CDOUBLETYPE — для переменной типа double

CDECIMALTYPE — для переменной типа decimal

CDATETYPE — для переменной типа date

CDTIMETYPE — для переменной типа timestamp

Примеры вызова этой функции: risnull

Проверяет содержимое переменной на NULL.

Эта функция получает тип проверяемой переменной ( t ), а также указатель на неё ( ptr ). Заметьте, что этот указатель нужно привести к char*. Список возможных типов переменных приведён в описании функции rsetnull .

Примеры использования этой функции:

37.15.5. Дополнительные константы

Заметьте, что все эти константы относятся к ошибкам и все они представлены отрицательными значениями. Из описаний различных констант вы также можете узнать, какими именно числами они представлены в текущей реализации. Однако полагаться на эти числа не следует. Тем не менее, вы можете рассчитывать на то, что все эти значения будут отрицательными.

Функции возвращают это значение, если при вычислении происходит переполнение. Внутри оно представляется числом -1200 (определение Informix ). ECPG_INFORMIX_NUM_UNDERFLOW

Функции возвращают это значение, если при вычислении происходит антипереполнение. Внутри оно представляется числом -1201 (определение Informix ). ECPG_INFORMIX_DIVIDE_ZERO

Функции возвращают это значение при попытке деления на ноль. Внутри оно представляется числом -1202 (определение Informix ). ECPG_INFORMIX_BAD_YEAR

Функции возвращают это значение, если при разборе даты встретилось некорректное указание года. Внутри оно представляется числом -1204 (определение Informix ). ECPG_INFORMIX_BAD_MONTH

Функции возвращают это значение, если при разборе даты встретилось некорректное указание месяца. Внутри оно представляется числом -1205 (определение Informix ). ECPG_INFORMIX_BAD_DAY

Функции возвращают это значение, если при разборе даты встретилось некорректное указание дня. Внутри оно представляется числом -1206 (определение Informix ). ECPG_INFORMIX_ENOSHORTDATE

Функции возвращают это значение, если процедуре разбора даты требуется короткая запись даты, но строка даты имеет неподходящую длину. Внутри оно представляется числом -1209 (определение Informix ). ECPG_INFORMIX_DATE_CONVERT

Функции возвращают это значение, если при форматировании даты происходит ошибка. Внутри оно представляется числом -1210 (определение Informix ). ECPG_INFORMIX_OUT_OF_MEMORY

Функции возвращают это значение, если им не хватает памяти для выполнения операций. Внутри оно представляется числом -1211 (определение Informix ). ECPG_INFORMIX_ENOTDMY


Функции возвращают это значение, если процедура разбора должна была получить маску формата (например, mmddyy ), но не все поля были записаны правильно. Внутри оно представляется числом -1212 (определение Informix ). ECPG_INFORMIX_BAD_NUMERIC

Функции возвращают это значение, если процедура разбора не может получить числовое значение из текстового представления, потому что оно некорректно, либо если процедура вычисления не может произвести операцию с числовыми переменными из-за недопустимого значения минимум одной из этих переменных. Внутри оно представляется числом -1213 (определение Informix ). ECPG_INFORMIX_BAD_EXPONENT

Функции возвращают это значение, если процедура разбора не может воспринять экспоненту в числе. Внутри оно представляется числом -1216 (определение Informix ). ECPG_INFORMIX_BAD_DATE

Функции возвращают это значение, если процедура разбора не может разобрать дату. Внутри оно представляется числом -1218 (определение Informix ). ECPG_INFORMIX_EXTRA_CHARS

Функции возвращают это значение, если процедуре разбора передаются посторонние символы, которая она не может разобрать. Внутри оно представляется числом -1264 (определение Informix ).

Как перечислить все функции в Informix?

Я ищу способ перечислить все пользовательские функции в моей базе данных, запущенной в Informix.

Есть ли таблица в базе данных «informix». *, В которой перечислены функции вместе с подробной информацией о них?

Примечание: этот вопрос намеренно очень похож на. Как мне перечислить все хранимые процедуры в Informix? но относится к функциям, а не к процедурам.

sql informix information-schema

1 ответ

2 Решение Luís Marques [2020-05-04 22:50:00]

Используя sysprocedures каталогов sysprocedures вы можете фильтровать для SPL без procedure :

Тем не менее, я не знаю, как точно определить, определена ли функция.

Вы можете посмотреть на owner функции, но если она была создана с помощью user informix то ее больше нельзя отличать от системных функций.

Другие таблицы каталогов, связанные с функциями, также не содержат достаточной информации, чтобы помочь:

Читая немного больше в документации, кажется, что в столбце mode значения нижнего регистра указано protected (системная) процедура. Таким образом, представляющие интерес функции являются режимы O , R , D и T (все в верхнем регистре).

Однако это не гарантирует, что подпрограмма создается пользователем. В sysadmin есть подпрограммы, отмеченные режимом O которые были созданы системой.

Также, если вы, например, в Informix версии 12.10.FC10, используете подпрограмму регулярного выражения, система автоматически регистрирует базу данных regex и соответствующие подпрограммы поддержки создаются с режимом O

Как перечислить все функции в Informix?

Я ищу способ перечислить все определяемые пользователем функции в моем управлении базами данных на Informix.

Есть таблица в «Informix». * База данных, которая содержит список функций вместе с подробной информацией о них?

Примечание: этот вопрос преднамеренно очень похож на Как перечислить все хранимые процедуры в Informix? но относится к функциям и не процедуры.

Использование sysprocedures таблицы каталога можно фильтровать для не procedure звукового давления:

Тем не менее, я не в курсе точного способа определить, является ли функция определяется пользователем.

Вы можете посмотреть на owner функции, но если он был создан с пользователем , informix то он больше не может отличать от функций системы.

Кроме того, похоже Другие таблицы каталога, связанные с функциями, не содержат достаточно информации, чтобы помочь:

Чтение немного больше в документации, кажется , что нижний регистр значение mode столбца указывает protected (система) рутину. Таким образом, процедуры, которые представляют интерес те , с модами O , R , D и T ( в верхнем регистре).

Однако, это не гарантирует , что подпрограмма создана пользователем. В sysadmin существуют процедуры , отмеченные с режимом , O которые были созданы в системе.

Кроме того, если вы, например, в Informix версия 12.10.FC10, используйте рутину регулярного выражения, система автоматически регистрирует регулярное выражение Datablade и соответствующие вспомогательные подпрограммы создаются с режимом O .

Таким образом, система создана, но с режимом O .

Национальная библиотека им. Н. Э. Баумана
Bauman National Library

Персональные инструменты

IBM Informix

IBM Informix
Разработчики: IBM
Постоянный выпуск: IBM Informix 12.10.xC7 / 15 июня 2020
Состояние разработки: Активная
Написана на: C, C++, assembly
Операционная система: Кросс-платформенная
Тип ПО: RDBMS
Лицензия: Proprietary EULA
Веб-сайт Official Informix website


IBM Informix — это семейство продуктов в подразделении IBM Information Management, которые являются СУБД. Продукты Informix были первоначально разработаны Informix Corporation, дочерняя компания Informix Software была приобретена IBM в 2001 году.

Содержание

Основные особенности

Текущая версия IBM Informix — 12.10. Разрабатывался под кодовым названием «Centaurus». Основными улучшениями стали добавление встроенного сжатия индексов, интеграция коллекций [[JSON (JavaScript Object Notation)|JSON с поддержкой драйверов JSON от MongoDB на сервере, а также объекты баз данных, разрешающие расширение, для разделения на несколько серверов в кластере или сетке (например, запросы могут возвращать данные из локально подключенного экземпляра сервера или из всей сетки с тем же SQL) [Источник 1]

История развития

1980-е года

Роджер Сипл и Лора Кинг, которые работали в компании Cromemco, разработали реляционную СУБД, базирующуюся на ISAM После ухода из Cromemco, Сипл и Кинг основали компанию Relational Database Systems (RDS) в 1980 году. Первым продуктом RDS стал Marathon — 16-битная версия ранней реализации ISAM. Marathon предназначался для операционной системы Onyx — версии Unix для ранних микропроцессоров ZiLOG. В RDS они обратили внимание на расширяющийся рынок реляционных СУБД и выпустили собственный продукт под названием Informix (INFORMation on unIX) в 1981 году. Финальным релизом стала версия 3.30, которая была выпущена в начале 1986 года.

В 1985 году Роджер Сипл и Лора Кинг представили новый, основанный на SQL, движок запросов в составе INFORMIX-SQL (ISQL) версии 1.10. Основным отличием ISQL от предыдущей версии Informix стало выделение кода доступа к базе данных в процесс движка (sqlexec) — ранее он являлся частью клиента. Это стало этапом перехода к клиент-серверной модели вычислений. Новый ISAM, который являлся ядром Informix, получил название C-ISAM.

К началу 1980-х Informix все еще был мелким игроком на рынке СУБД, но в связи с ростом популярности UNIX и SQL в середине 1980-х, доля Informix заметно выросла. Компания переименовалась в Informix Software. Следующие релизы, с новым движком запросов назыввались INFORMIX-Turbo. Turbo использовал новый RSAM, который был более производительным в многопользовательской среде по сравнению с C-ISAM.

С релизом версии 4.00 в 1989 году Turbo был переименован в INFORMIX-OnLine (название отражало возможность создания резервных копий баз данных при работающем сервере и пользователях, изменяющих данные в момент создания бэкапа). Также оригинальный продукт, основанный на C-ISAM, был отделён от инструментов (ISQL и I4GL) и назван INFORMIX-SE (Standart Engine). Выпущенная под конец 1990 года версия 5.00 обладала полноценной поддержкой распределённых транзакций с двухфазным подтверждением и хранимых процедур. В версии 5.01 также появилась возможность использовать триггеры.

1994 год: динамически масштабируемая архитектура.

Informix обратили внимание на растущий рынок серверов баз данных. В 1994 году, Informix выпускает версию 6.00 своей СУБД. Основной новинкой является Динамически Масштабируемая Архитектура (Dynamic Scalable Architecture, DSA). Из-за DSA произошла значительная переработка ядра СУБД, получившего поддержку горизонтального и вертикального параллелизма, благодаря которым продукт ведущим по масштабируемости на рынке OLTP систем и для хранилищ данных. 1996 год: приобретение Illustra Illustra, написана бывшими разработчиками Postgres под руководством Майкла Стоунбрейкера.

Среди её возможностей:

  • Работа с данными как с объектами в смысле объектно-ориентированного программирования. Благодаря ей проекты стали разрабатываться гораздо быстрее.
  • Появились DataBlade-модули, которые давали возможность создавать новые типы данных

1996—1997 годы: внутренние проблемы

Из-за технических и маркетинговых проблем, Informix-NewEra уступал в своей популярности Java. Также Illustra была внедрена только спустя два года после её написания. Также Гари Кэлли — ведущий разработчик уходит к Oracle, забрав с собой немного сотрудников. Это вынудило Informix подать в суд на Oracle, дабы предотвратить потерю технических секретов.

1997 год: ошибки руководства

1 апреля 1997 года Informix оказалось, что прибыль за первый квартал была меньше ожидаемых 100 млн долл. Последовали существенные операционные потери и сокращения рабочих мест. Компания пересчитала выручку за период 1994—1996 годов. Оказалось, что значительный объём прибыли, пришедшийся на середину 1990-х, составляли продажи лицензий партнёрам, которые, в свою очередь, не сумели их реализовать конечным пользователям. Это и другие нарушения в конечном счёте привели к переоценению выручки на 200 млн долл.

2000е года

В марте 2001 компания приобретает Ardent Software, которая разрабатывала мультипространственные движки UniVerse и UniData (вместе известные как U2). На момент приобретения Informix IBM среди продуктов были:

  • Informix C-ISAM — последняя версия оригинальной СУБД Marathon.
  • Informix SE — предлагалась в качестве low-end системы для встраивания в приложения.
  • Informix OnLine — полноценная система для управления базами данных среднего размера.
  • Informix Extended Parallel Server (XPS, V8) — high-end версия V7, предназначенная для использования на большом количестве распределённых машин.
  • Informix Universal Server (V9) — комбинация движка V7 OnLine с поддержкой O-R mapping и DataBlade модулей от Illustra.
  • Informix-4GL — четвёртое поколение языка программирования для приложений.
  • Red Brick Warehouse — продукт по управлению хранилищами данных.
  • Cloudscape — реляционная СУБД, написанная целиком на Java, предназначенная для мобильных устройств и J2EE-архитектур. В 2004 году Cloudscape был выпущен IBM под именем Derby в качестве (СУБД) с открытым исходным кодом, её поддержкой занимается Apache Software Foundation.
  • U2 набор, UniVerse и UniData — мультипространственные (СУБД), которые представляют возможность работы с сетями, иерархиями, массивами и другими типами данных, которые сложно смоделировать в SQL.
Илон Маск рекомендует:  Поддержка сервисов windows nt

IBM приобретает Informix В июле 2000 года Питер Гейнс становится генеральным директором Informix. Он пытается реорганизовать компанию, делая её привлекательной для последующей продажи. Одним из основных шагов стало отделение всех технологий (СУБД) от остальных приложений и инструментов. В апреле 2001 года IBM, ведомая предложением Wal-Mart, приобретает у Informix технологию (СУБД), бренд, планы для будущих разработок, а также базу в 100 тыс. клиентов.

Вариации IBM Informix

Informix Developer Edition Бесплатная база данных, у которой имеются все необходимые функции Informix для разработки и тестирования одного отдельного приложения. Есть версии для нескольких платформ.

Informix Innovator-C Edition Бесплатная база данных для компаний малого и среднего бизнеса, предоставляющая возможность использовать распространенные функции баз данных в коллективных вычислениях.

IBM Informix Express Edition База данных, у которой имеются все необходимые функции Informix для домашнего использования. Есть версии для нескольких платформ.

IBM Informix Workgroup Edition Предназначен для компаний, которым нужно разрабатывать и внедрять функции корпоративного класса при небольших затратах — для сред Windows и Mac OS X.

IBM Advanced Workgroup Edition Дает широкие возможности управления данными для компаний малого и среднего бизнеса, отличается от BM Informix Workgroup Edition наличием Informix Warehouse Accelerator, который улучшает производительность системы.

IBM Informix Advanced Developer Edition Эта версия включает в себя функционал предыдущих, но с добавлением возможности неограниченной масштабируемости. Разрешается использование только для тестирования и разработки.

IBM Informix Enterprise Edition Включает в себя возможности Informix, доступные на всех поддерживаемых платформах, для разработки, внедрения и распространения с неограниченной масштабируемостью.

IBM Informix Advanced Enterprise Edition Включает в себя возможности Informix, доступные на всех поддерживаемых платформах, а также Informix Warehouse Accelerator (IWA) и оптимизацию хранения. [Источник 2]

Ниже представлена сравнительная таблица этих версий

Informix Developer Edition Informix Innovator-C Edition IBM Informix Express Edition IBM Informix Workgroup Edition IBM Advanced Workgroup Edition IBM Informix Enterprise Edition IBM Informix Advanced Enterprise Edition и IBM Informix Advanced Developer Edition
Платная или бесплатная Бесплатная Бесплатная Платная Платная Платная Платная Платная
Поддерживаемые платформы Linux, UNIX, macOS, Windows, ARM Linux, macOS, Windows Linux, UNIX, macOS, Windows Linux, UNIX, macOS, Windows, ARM AIX 64-bit, HP IA 64 bit, Solaris SPARC 64 bit, Solaris Intel 64, Linux 64 bit Linux, UNIX, macOS, Windows, ARM AIX 64-bit, HP IA 64-bit, Solaris SPARC 64-bit, Solaris Intel 64, Linux 64-bit
Типы лицензирования Нет Authorized User Single Install, LU Виртуальный Сервер, или PVU Authorized User Single Install, LU Виртуальный Сервер, или PVU PVU Authorized User Single Install или PVU PVU для Advanced Enterprise Edition, Authorized User для Informix Advanced Developer Edition
Ограничения процессора 1 ядро 1 ядро 4 ядра 4 сокета, 16 ядер 4 сокета, 16 ядер для базы данных; 16 ядер для IWA Без ограничений Без ограничений
Ограничения на количество CPU VP 1 1 4 16 16 для каждого компонента Без ограничений Без ограничений
Ограничения на объем используемой памяти 1Гб для одного инстанса 2Гб 8Гб 16Гб 16Гб для базы данных, 48Гб для IWA Без ограничений Без ограничений
Официально разрешается использование на логических разделах [LPAR] и динамических логических разделах [DLPAR] Нет Да Да Да Да Да Да
Параллельные операции и фрагментация Нет Нет Да Нет Кластер ограничен до двух узлов Без ограничений Без ограничений Без ограничений Без ограничений
Кластер High Availability Без ограничений Да Да Да Да
Continuous Log Restore (ontape и ON-Bar утилиты для бэкапов) Нет Да Да Да Нет Нет Да
Поддержка NoSQL Да Да Да Да Да Да Да
Встроенные расширенные функциональные возможности Spatial, Basic Text Search, Node, Large Object Locator, Web Feature Service, Binary, MQ messaging, TimeSeries Spatial, Basic Text Search, Node, Large Object Locator, Web Feature Service, Binary, MQ messaging, TimeSeries Spatial, Basic Text Search, Node, Large Object Locator, Web Feature Service, Binary, MQ messaging, TimeSeries Spatial, Basic Text Search, Node, Large Object Locator, Web Feature Service, Binary, MQ messaging, TimeSeries Spatial, Basic Text Search, Node, Large Object Locator, Web Feature Service, Binary, MQ messaging, TimeSeries Spatial, Basic Text Search, Node, Large Object Locator, Web Feature Service, Binary, MQ messaging, TimeSeries Spatial, Basic Text Search, Node, Large Object Locator, Web Feature Service, Binary, MQ messaging, TimeSeries
Virtual Table / Index Interface Да Да Да Нет Нет Да Да
Лицензия SPSS® Data Modeler Нет Нет Нет Да Нет Нет В качестве дополнения Да Да Да Да
InfoSphere® Change Data Capture В качестве дополнения Нет Нет В качестве дополнения В качестве дополнения
Informix Developer Edition Informix Innovator-C Edition IBM Informix Express Edition IBM Informix Workgroup Edition IBM Advanced Workgroup Edition IBM Informix Enterprise Edition IBM Informix Advanced Enterprise Edition и IBM Informix Advanced Developer Edition

Версии IBM Informix


Informix 12.10

С развертыванием версии 12.10 в 2013 году IBM подтверждает реальную приверженность Informix технологии, в результате чего вновь появились новые новые возможности. Было добавлено множество новых операторов SQL, а также функциональность, ориентированная на автоматическое администрирование ядра базы данных. Некоторые нововведения весьма примечательны:

  • Запросы находятся в таблице запросов, физически расположенной на нескольких серверах.
  • Добавление ключевого слова GRID в оператор SQL или использование переменной окружения.
  • Больше нет необходимости писать сложные UNION-запросы, которые в конечном итоге должны быть переписаны, если

новый элемент добавляется или удаляется в таблицу запросов. Вторая ключевая особенность версии 12.10 — это интеграция неструктурированных моделей данных, называемых JSON и BSON, которые являются базой технологии NoSQL. Эта новая функция — реальная открытая дверь к вселенной BIG DATA, к которой можно обращаться, используя совместимый драйвер MongoDB. Informix 12.10 — уникальная возможность объединить все преимущества механизма OLTP, включая гибкую сетку, свойства ACID с размером неструктурированных данных благодаря движку NoSQL. Есть возможность выполнить SQL-соединение между традиционной таблицей SQL с коллекцией NoSQL.

Informix 11.70

Выпущена в 2010. Эта версия выходит в результате крупной инвестиции со стороны IBM. Первый выпуск 11.70 насчитывает не менее 78 новых функций и улучшений. Самым значимым является введение гибкой сетки (Flexible Grid). На основе MACH11 архитектуры, гибкая сетка — это новый и не сложный способ создания и администрирования кластеров серверов Informix DB. Другая новая функция — автоматический пул хранения данных (Automatic Storage Pool), подтверждает направление, принятое IBM к автоматическому администрированию IDS, который дополняется настраиваемыми параметрами, с каждым новым выпуском. Метод многоиндексного доступа позволяет оптимизатору Informix выбирать и использовать несколько индексов на одной таблице во время запроса, что ускоряет сложные запросы.

Informix 11.50

Выпущена в 2008. Эта версия содержит в себе улучшения, способствующие стабилизации работы, но не являющиеся революционными. Самым заметным из изменений является сжатие данных таблиц, что кроме преимуществе в хранении, дает «побочный эффект» — увеличение производительность ввода/вывода.

Informix 11.10

Выпущена в 2007. В этой версии произошли значительные инновации, такие как внедрение кластера MACH11. Важные улучшения производительности также присутствуют: вытеснение контрольных точек блокировки, создание онлайн-индекса, режим прямого ввода-вывода для куки-файлов и многое другое. Эта версия, наконец, представляет пользователям Open Admin Tool, инструмент администрирования с графическим интерфейсом, у которого имеется способность анализа производительности SQL-запросов во время выполнения с использованием SQLTRACE. Также был развернут внутренний планировщик Informix, целью которого является администрирования и мониторинга в автоматическом режиме.

Informix 9.40

Выпущена в 2003. Включает в себя: Расширенные средства администрирования репликации. Множество новых операторов SQL.

Как перечислить все функции в Informix?

Я ищу способ перечислить все пользовательские функции в моей базе данных, запущенной в Informix.

Есть ли таблица в базе данных «informix». *, В которой перечислены функции вместе с подробной информацией о них?

Примечание: этот вопрос намеренно очень похож на. Как мне перечислить все хранимые процедуры в Informix? но относится к функциям, а не к процедурам.

Используя sysprocedures каталогов sysprocedures вы можете фильтровать для SPL без procedure :

Тем не менее, я не знаю, как точно определить, определена ли функция.

Вы можете посмотреть на owner функции, но если она была создана с помощью user informix то ее больше нельзя отличать от системных функций.

Другие таблицы каталогов, связанные с функциями, также не содержат достаточной информации, чтобы помочь:

Читая немного больше в документации, кажется, что в столбце mode значения нижнего регистра указано protected (системная) процедура. Таким образом, представляющие интерес функции являются режимы O , R , D и T (все в верхнем регистре).

Однако это не гарантирует, что подпрограмма создается пользователем. В sysadmin есть подпрограммы, отмеченные режимом O которые были созданы системой.

Также, если вы, например, в Informix версии 12.10.FC10, используете подпрограмму регулярного выражения, система автоматически регистрирует базу данных regex и соответствующие подпрограммы поддержки создаются с режимом O

Как мне перечислить все функции в Informix?

Я ищу способ перечисления всех пользовательских функций в моей базе данных, работающих на Informix.

Есть ли в базе данных «informix». * Таблица, в которой перечислены функции вместе с подробной информацией о них?

Примечание: этот вопрос намеренно очень похож на вопрос: Как мне перечислить все хранимые процедуры в Informix? но относится к функциям, а не к процедурам.

1 ответ

Используя sysprocedures каталога sysprocedures вы можете отфильтровать не SPL для procedure :

Тем не менее, я не знаю точного способа определения, является ли функция определенной пользователем.

Вы можете обратиться к owner функции, но если она была создана с помощью пользователя informix ее уже нельзя будет отличить от системных функций.

Другие таблицы каталога, относящиеся к функциям, также не содержат достаточно информации, чтобы помочь:

Читая немного больше в документации, кажется, что столбец mode значений в нижнем регистре указывает protected (системную) подпрограмму. Таким образом, представляют интерес те процедуры с режимами O , R , D и T (все в верхнем регистре).

Однако это не гарантирует, что подпрограмма создана пользователем. В системном sysadmin есть подпрограммы, помеченные режимом O которые были созданы системой.

Также, если вы, например, в Informix версии 12.10.FC10 используете подпрограмму regex, система автоматически регистрирует блок данных regex, и соответствующие подпрограммы поддержки создаются в режиме O

Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL