Здесь показаны различия между двумя версиями данной страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
asin [2010/01/10 16:52] peaktop Стала встроенной в 2.1, не в 2.0 |
asin [2010/01/10 17:18] (текущий) |
||
---|---|---|---|
Строка 1: | Строка 1: | ||
+ | ====== ASIN() ====== | ||
+ | |||
+ | |||
+ | |||
+ | ===== Версии сервера ===== | ||
+ | ^ ^ 0.9 ^ 1.0 ^ 1.5.3 ^ 1.5.4 ^ 1.5.5 ^ 2.0 ^ 2.1 ^ 2.5 ^ 3.0 ^ | ||
+ | ^Как [[UDF]] | Да | Да | Да | Да | Да | Да | - | - | - | | ||
+ | ^Как встроенная функция | - | - | - | - | - | - | Да | Да | Да | | ||
+ | |||
+ | |||
+ | ===== Доступно в ===== | ||
+ | [[raznovidnosti_jazyka_sql|DSQL]], [[raznovidnosti_jazyka_sql|ISQL]], [[raznovidnosti_jazyka_sql|PSQL]] | ||
+ | |||
+ | |||
+ | ===== Формат ===== | ||
+ | <code>ASIN( < аргумент > )</code> | ||
+ | ^ Аргумент ^ Описание ^ | ||
+ | | < аргумент > | Любой тип данных, приводимый к [[tipy_dannyx|DOUBLE PRECISION]] в интервале от -1..+1 | | ||
+ | | Возвращает | [[tipy_dannyx|DOUBLE PRECISION]] арккосинус числа в радианах | | ||
+ | |||
+ | |||
+ | ===== Описание ===== | ||
+ | Функция ASIN возвращает(в радинах) арксинус числа, переданного в качестве параметра < аргумент >, значение которого должно находиться в интервале -1..1. | ||
+ | |||
+ | :!: В Firebird версии младше 2.1 для того, чтобы пользоваться этой функцией, ее небходимо подключить к базе данных как [[UDF]]. | ||
+ | |||
+ | |||
+ | |||
+ | ===== Объявление ===== | ||
+ | 1. В Firebird версии младше 2.1 функция объявляется как [[UDF]] в внешнем модуле "ib_udf". | ||
+ | <code sql> | ||
+ | DECLARE EXTERNAL FUNCTION ASIN | ||
+ | DOUBLE PRECISION | ||
+ | RETURNS | ||
+ | DOUBLE PRECISION BY VALUE | ||
+ | ENTRY_POINT "IB_UDF_asin" MODULE_NAME "ib_udf"; | ||
+ | </code> | ||
+ | |||
+ | 2. В Firebird версии 2.1 и старше является встроенной функцией при соглашении объявления ее как: | ||
+ | <code sql> | ||
+ | DECLARE EXTERNAL FUNCTION ASIN | ||
+ | DOUBLE PRECISION | ||
+ | RETURNS | ||
+ | DOUBLE PRECISION BY VALUE | ||
+ | ENTRY_POINT "asin" MODULE_NAME SYSTEM; | ||
+ | </code> | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== Пример ===== | ||
+ | Допустим, существует таблица WND_PARAMS с доменами ID [[tipy_dannyx|INTEGER]], DIAG [[tipy_dannyx|DOUBLE PRECISION]] - диагональ прямоугольника и SIN_DIAG [[tipy_dannyx|DOUBLE PRECISION]], который хранит отношение высоты прямоугольника к его диагонали (математически - синус угла наклона диагонали к ширине). | ||
+ | |||
+ | Требуется выбрать из таблицы все записи, указав высоту прямоугольника. | ||
+ | |||
+ | 1) [[raznovidnosti_jazyka_sql|DSQL]], [[raznovidnosti_jazyka_sql|ISQL]] | ||
+ | <code sql> | ||
+ | SELECT W.ID, (W.DIAG * ASIN(W.SIN_DIAG)) AS HEIGHT | ||
+ | FROM WND W | ||
+ | </code> | ||
+ | |||
+ | 2) [[raznovidnosti_jazyka_sql|PSQL]] | ||
+ | <code sql> | ||
+ | SET TERM !!!; | ||
+ | |||
+ | CREATE OR ALTER PROCEDURE WND_HEIGHTS RETURNS ( | ||
+ | W_ID INTEGER | ||
+ | ,W_HEIGHT DOUBLE PRECISION | ||
+ | )AS | ||
+ | DECLARE VARIABLE P_DIAG DOUBLE PRECISION; | ||
+ | DECLARE VARIABLE P_SIN_DIAG DOUBLE PRECISION; | ||
+ | BEGIN | ||
+ | FOR | ||
+ | SELECT W.ID, W.DIAG, W.COS_DIAG | ||
+ | FROM WND W | ||
+ | INTO :W_ID, :P_DIAG, :P_SIN_DIAG | ||
+ | DO | ||
+ | BEGIN | ||
+ | W_HEIGHT = :W_DIAG * ASIN(:P_SIN_DIAG); | ||
+ | SUSPEND; | ||
+ | END | ||
+ | END !!! | ||
+ | |||
+ | SET TERM ; !!! | ||
+ | </code> | ||
+ | |||
+ | |||
+ | ===== См. также ===== | ||
+ | [[UDF]], [[vstroennye_funkcii|Встроенные функции]] | ||
+ | |||
+ | ===== Источник ===== | ||
+ | langref.pdf |