Преобразования денежных величин в PL/SQL: локализация валют

Преобразования денежных величин в PL/SQL: локализация валют

Обсуждение глобализации и локализации не было бы полным без упоминания проблем, связанных с конвертацией валют. Самый распространенный способ перевода, скажем, долларов в иены, основан на использовании таблицы курсов. Но откуда приложение узнает, как должны отображаться полученные числа?

  •  Могут ли в них присутствовать точки и запятые и где они должны располагаться?
  •  Каким символом должна обозначаться каждая валюта ($ для доллара, для евро и т. д.)?
  •  Какое обозначение ISO следует использовать (USD, например)?

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


FUNCTION currency_conv_func
   RETURN sys_refcursor
IS
   v_currency   sys_refcursor;
BEGIN
   OPEN v_currency
    FOR
       SELECT pub.title "Title",
              TO_CHAR (pub.price,
                       locale.currency_format,
                       'NLS_CURRENCY=' || locale.currency_symbol
                      ) "Price"
         FROM publication pub, locale
        WHERE pub.locale_id = locale.locale_id;

   RETURN v_currency;
END currency_conv_func;

При выполнении функции преобразования:

VARIABLE v_currency REFCURSOR
CALL currency_conv_func() INTO :v_currency;
PRINT v_currency
выводится следующий список цен:
Title                                                     Price
----------------------------------                        ----------------
Oracle PL/SQL Programming, 3rd Edition                    $54.95
Oracle PL/SQLプログラミング 基礎編 第3版                 ¥5,800
Oracle PL/SQL Programmierung, 2. Auflage                  €64

Обратите внимание: собственно преобразование в этом примере не выполняется. Если вам понадобится автоматизировать преобразование денежных сумм из одной валюты в другую, определите таблицу курсов и правила преобразования.

Обозначение NLS_ISO_CURRENCY обычно представляет собой сокращенное название ва­люты из трех символов. Если не считать немногочисленных исключений, первые два символа определяют страну или локальный контекст, а третий символ — собственно валюту. Например, американский доллар и японская иена обозначаются соответственно USD и JPY. Впрочем, евро сейчас используется во многих европейских странах, так что это правило уже не работает — обозначение EUR используется независимо от страны.

В схему g11n включены данные, которые упрощают вывод цен печатных изданий с правильными сокращениями ISO. Пример такого рода встречается в функции IS0_ currency_func:


FUNCTION iso_currency_func
   RETURN sys_refcursor
IS
   v_currency   sys_refcursor;
BEGIN
   OPEN v_currency
    FOR
       SELECT   title "Title",
                TO_CHAR (pub.price,
                         locale.iso_currency_format,
                         'NLS_ISO_CURRENCY=' || locale.iso_currency_name
                        ) "Price - ISO Format"
           FROM publication pub, locale
          WHERE pub.locale_id = locale.locale_id
       ORDER BY publication_id;

   RETURN v_currency;
END iso_currency_func;

Выполнение функции iso_currency_func:

VARIABLE v_currency REFCURSOR
CALL iso_currency_func() INTO :v_currency;
PRINT v_currency
Результат:
Title                                                        Price - ISO Format
--------------------------------------                       ------------------
Oracle PL/SQL Programming, 3rd Edition                       USD54.95
Oracle PL/SQLプログラミング 基礎編 第3版                          JPY5,800
Oracle PL/SQL Programmierung, 2. Auflage                     EUR64

Обозначения USD, JPY и EUR включаются в выводимые цены, как и положено в со­ответствии с маской формата.

 

 

Вас заинтересует / Intresting for you:

Встроенные методы коллекций PL...
Встроенные методы коллекций PL... 14846 просмотров sepia Tue, 29 Oct 2019, 09:54:01
Управление приложениями PL/SQL...
Управление приложениями PL/SQL... 4651 просмотров Stas Belkov Thu, 16 Jul 2020, 06:20:48
Основы языка PL/SQL: использов...
Основы языка PL/SQL: использов... 4701 просмотров Ирина Светлова Tue, 06 Feb 2018, 14:04:03
Работа с числами в PL/SQL на п...
Работа с числами в PL/SQL на п... 45247 просмотров Antoniy Mon, 28 May 2018, 16:45:11
Войдите чтобы комментировать