Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Необходимо перенести код из ORACLE в MySQL 
:(
    Опции темы
Serious07
Дата 23.4.2009, 18:36 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 23.4.2009

Репутация: нет
Всего: нет



Код

 FUNCTION get_value (p IN NUMBER, q IN NUMBER)
      RETURN NUMBER
  AS

      res   NUMBER (5, 0) := 0;

 BEGIN
      
    res := TO_NUMBER (RAWTOHEX (UTL_RAW.bit_and (HEXTORAW (LTRIM (TO_CHAR (p, 'XXXX'))),
HEXTORAW (LTRIM (TO_CHAR (q, 'XXXX'))))), 'XXXX');
   
     res := TO_NUMBER (RAWTOHEX (UTL_RAW.bit_and (HEXTORAW (LTRIM (TO_CHAR (res, 'XXXX'))),
HEXTORAW (LTRIM (TO_CHAR (q, 'XXXX'))))), 'XXXX');          

      IF (res > 0)
      THEN
         res := 1;
      END IF;

      RETURN res;
   END get_value;


Это сообщение отредактировал(а) skyboy - 23.4.2009, 18:58
PM MAIL   Вверх
valid
Дата 23.4.2009, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


validnext
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 3.3.2009

Репутация: нет
Всего: нет



и вот этот плиз



Код

   FUNCTION timestamp_to_t_date (t IN TIMESTAMP)
      RETURN t_date
   AS
      res   t_date := t_date (NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
      str   VARCHAR (50);
   BEGIN
      str := TO_CHAR (t, 'DD.MM.YYYY HH24:MI:SS.FF');
      res.val := t;
      res.DAY := SUBSTR (str, 1, 2);
      res.MONTH := SUBSTR (str, 4, 2);
      res.YEAR := SUBSTR (str, 7, 4);
      res.HOUR := SUBSTR (str, 12, 2);
      res.MINUTE := SUBSTR (str, 15, 2);
      res.SECOND := SUBSTR (str, 18, 2);
      res.millisecond := SUBSTR (str, 21);
      RETURN res;
   END;


Это сообщение отредактировал(а) skyboy - 23.4.2009, 18:57
PM MAIL   Вверх
lelik133
Дата 24.4.2009, 08:28 (ссылка)  | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 517
Регистрация: 5.2.2003
Где: Москва

Репутация: 2
Всего: 14



ага все так и кинулись  переводить, либо опишите что конкретно вы сами  не смогли перевести, либо предлагайте $
PM ICQ   Вверх
azesmcar
Дата 24.4.2009, 09:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 6
Всего: 211



Центр помощи здесь

Добавлено через 53 секунды
Цитата

ага все так и кинулись  переводить, либо опишите что конкретно вы сами  не смогли перевести, либо предлагайте $ 

там же написано..конкретно эту функцию не смогли smile 
PM   Вверх
skyboy
Дата 24.4.2009, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260



Serious07, можешь описать ожидаемый функционал?
на сторону клиента СУБД перенесети невозможно?
PM MAIL   Вверх
DimW
Дата 24.4.2009, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 4
Всего: 44



to Serious07:
Цитата

select to_number('1A', 'XXXX') from dual -- перевод из HEX в DEC

select to_char(26, 'XXXX') from dual -- перевод из DEC в HEX

select ltrim('   1A') from dual  -- удаляет пробелы слева

HEXTORAW -- непонятно зачем в данном случае это нужно

UTL_RAW.bit_and
  --  Perform bitwise logical "and" of the values in raw r1 with raw r2
  --    and return the "anded" result raw.
  --    If r1 and r2 differ in length, the "and" operation is terminated
  --    after the last byte of the shorter of the two raws, and the
  --    unprocessed portion of the longer raw is appended to the partial
  --    result.
  --    The result length equals the longer of the two input raws.

ищи аналоги в mySQL и переделывайте.

to valid:
в твоем случае значение типа TIMESTAMP перекладываются в объект t_date.
есть ли объекты в mySQL чесно говаря не знаю. если нет то придется отказаться от этого функционала и переделать функционал где данный объект используется.



PM MAIL ICQ   Вверх
valid
Дата 24.4.2009, 10:23 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


validnext
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 3.3.2009

Репутация: нет
Всего: нет



DimW, У МЕНЯ ЕЩЕ ТАКОЙ ВОПРОС       t_date := t_date (NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); 
T_DATE  ПРИСВАИВАЕТСЯ ФУНКЦИЯ ИЛИ МАССИВ?

Добавлено @ 10:28
И ЕЩЕ КАК ПЕРЕДЕЛАТЬ функционал?

Добавлено @ 10:29
ВОТ КАК T_DATE ИСПОЛЬЗУЕТСЯ


Код

    FUNCTION time_difference (t1 IN TIMESTAMP, t2 IN TIMESTAMP, format VARCHAR2)
      RETURN NUMBER
   AS
      res        NUMBER;
      tt1        t_date;
      tt2        t_date;
      ttt1       INT;
      ttt2       INT;
      str        VARCHAR2 (50) := TO_CHAR (t1 - t2);
      splitted   array_varchar := array_varchar ();
      seconds    NUMBER;
   BEGIN
      tt1 := timestamp_to_t_date (t1);
      tt2 := timestamp_to_t_date (t2);
      splitted := split_string (str, ' ');
      seconds := TO_NUMBER (splitted (1)) * 24 * 60 * 60;

      IF (seconds < 0)
      THEN
         seconds := seconds * (-1);
      END IF;

      seconds :=
           seconds
         + TO_NUMBER (SUBSTR (splitted (2), 1, 2)) * 60 * 60
         + TO_NUMBER (SUBSTR (splitted (2), 4, 2)) * 60 * 60
         + TO_NUMBER (SUBSTR (splitted (2), 7, 2)) * 60 * 60
         + TO_NUMBER ('0,' || SUBSTR (splitted (2), 10));

      IF (format = 'd')
      THEN
         RETURN ((seconds / 60) / 60) / 24;
      ELSIF (format = 'h')
      THEN
         RETURN (seconds / 60) / 60;
      ELSIF (format = 'm')
      THEN
         RETURN seconds / 60;
      ELSIF (format = 's')
      THEN
         RETURN seconds;
      END IF;

      RETURN seconds;
   END;

   FUNCTION timestamp_to_t_date (t IN TIMESTAMP)
      RETURN t_date
   AS
      res   t_date := t_date (NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
      str   VARCHAR (50);
   BEGIN
      str := TO_CHAR (t, 'DD.MM.YYYY HH24:MI:SS.FF');
      res.val := t;
      res.DAY := SUBSTR (str, 1, 2);
      res.MONTH := SUBSTR (str, 4, 2);
      res.YEAR := SUBSTR (str, 7, 4);
      res.HOUR := SUBSTR (str, 12, 2);
      res.MINUTE := SUBSTR (str, 15, 2);
      res.SECOND := SUBSTR (str, 18, 2);
      res.millisecond := SUBSTR (str, 21);
      RETURN res;
   END;



Это сообщение отредактировал(а) skyboy - 24.4.2009, 11:03
PM MAIL   Вверх
DimW
Дата 24.4.2009, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 4
Всего: 44



Цитата(valid @  24.4.2009,  10:23 Найти цитируемый пост)
T_DATE  ПРИСВАИВАЕТСЯ ФУНКЦИЯ ИЛИ МАССИВ?

это инициализируется объект T_DATE.

Цитата(valid @  24.4.2009,  10:23 Найти цитируемый пост)
И ЕЩЕ КАК ПЕРЕДЕЛАТЬ функционал?

в приведенном тобой коде, функция timestamp_to_t_date вообще не нужна.
посмотри внимательней переменные tt1 и tt2 в последующем коде не используются.
PM MAIL ICQ   Вверх
valid
Дата 24.4.2009, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


validnext
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 3.3.2009

Репутация: нет
Всего: нет



спасибо большое, я тоже это уже заметил ))), но есть еще проблема 

 FUNCTION split_string (str VARCHAR2, splitter VARCHAR2)
      RETURN array_varchar
   AS
      res    array_varchar  := array_varchar ();
      str0   VARCHAR2 (256) := str;
      str1   VARCHAR2 (256);
      i      INT            := 1;
   BEGIN
      LOOP
         EXIT WHEN str0 IS NULL OR str0 = '';
         str1 := LTRIM (str0, '0123456789:.-+');
         res.EXTEND;
         res (i) := REPLACE (str0, str1);
         str0 := LTRIM (str1, splitter);
         i := i + 1;
      END LOOP;

      RETURN res;
   END;

вобщем сделал чтобы эта функция возвращала таблицу, но как в  splitted

    FUNCTION time_difference (t1 IN TIMESTAMP, t2 IN TIMESTAMP, format VARCHAR2)
.......
      splitted   array_varchar := array_varchar ();
      seconds    NUMBER;
   BEGIN

      splitted := split_string (str, ' ');
      seconds := TO_NUMBER (splitted (1)) * 24 * 60 * 60;

принять таблицу?

Добавлено @ 11:27
и еще есть вопрос как создаются в mysql глобальные константы вне функции?

Это сообщение отредактировал(а) valid - 24.4.2009, 11:34
PM MAIL   Вверх
valid
Дата 25.4.2009, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


validnext
*


Профиль
Группа: Участник
Сообщений: 59
Регистрация: 3.3.2009

Репутация: нет
Всего: нет



дан такой код на oracle 

   FUNCTION calc_pot (t_id IN NUMBER)
      RETURN NUMBER
   IS
      CURSOR pot_sum (t_id IN NUMBER)
      IS
         SELECT bank + bet_sum AS pot
           FROM thp_tables_tmp
                JOIN
                (SELECT   table_id AS table_, SUM (round_cash) AS bet_sum
                     FROM thp_users_tmp
                    WHERE table_id = t_id
                 GROUP BY table_id) ON table_ = ID
          WHERE ID = t_id;

      rec   pot_sum%ROWTYPE;
   BEGIN
      OPEN pot_sum (t_id);

      FETCH pot_sum
       INTO rec;

      CLOSE pot_sum;

      IF rec.pot > 0
      THEN
         RETURN rec.pot;
      ELSE
         RETURN 0;
      END IF;
   END calc_pot;





как будет выглядеть строчка       rec   pot_sum%ROWTYPE;   в mysql?
PM MAIL   Вверх
skyboy
Дата 25.4.2009, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260



valid, не игнорирурй форматирование кода(кнопка "код" над полем ввода сообщения).
мне уже надоело корректировать твои посты.
PM MAIL   Вверх
DimW
Дата 27.4.2009, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

Репутация: 4
Всего: 44



Цитата(valid @  25.4.2009,  13:26 Найти цитируемый пост)
как будет выглядеть строчка       rec   pot_sum%ROWTYPE;   в mysql? 

а гуглом пользоваться мы не умеем?
Conversion of Oracle %ROWTYPE to MySQL
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0833 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.