преобразовать SQL-запрос в оракул - PullRequest
1 голос
/ 19 апреля 2011

Мне нужно преобразовать какой-то запрос, который я использую в SQL, в код Oracle. У меня много проблем с тис. Кто-нибудь знает какой-нибудь трансформер Query? Может кто-нибудь перевести какую-то часть этого кода для меня?

Это код:

SELECT PRUEBA = CASE (SELECT TIMEATT FROM READER WHERE PANELID = DEVID AND READERID = 
MACHINE) WHEN '1' THEN 'P10' ELSE 'P20' END 

+ '0001' 
+ CAST(YEAR(EVENT_TIME_UTC)AS VARCHAR)
+ Right('0' + Convert(VarChar(2), Month(EVENT_TIME_UTC)), 2)
+ Right('0' + Convert(VarChar(2), DAY(EVENT_TIME_UTC)), 2)
+ Right('0' + Convert(VarChar(2), DATEPART(HOUR,EVENT_TIME_UTC)), 2)
+ Right('0' + Convert(VarChar(2), DATEPART(MINUTE,EVENT_TIME_UTC)), 2)
+ Right('0' + Convert(VarChar(2), DATEPART(SECOND,EVENT_TIME_UTC)), 2) 
+ CAST(YEAR(EVENT_TIME_UTC)AS VARCHAR)
+ Right('0' + Convert(VarChar(2), Month(EVENT_TIME_UTC)), 2)
+ Right('0' + Convert(VarChar(2), DAY(EVENT_TIME_UTC)), 2)
+ Right('0' + Convert(VarChar(2), DATEPART(HOUR,EVENT_TIME_UTC)), 2)
+ Right('0' + Convert(VarChar(2), DATEPART(MINUTE,EVENT_TIME_UTC)), 2)
+ Right('0' + Convert(VarChar(2), DATEPART(SECOND,EVENT_TIME_UTC)), 2)
+ Right('00000000' + Convert(VarChar(8), CARDNUM), 8) 
+ Right('00000000' + Convert(VarChar(8), (SELECT SSNO FROM EMP WHERE ID = EMPID)), 8),

FROM events 

  WHERE eventid = 0 AND eventid = 0

  and machine in (11) AND DEVID IN (1,2)
  and CARDNUM <> 0 AND EMPID <> 0
  and EVENT_TIME_UTC between '2006-02-16' AND '2007-02-09'

Большое спасибо за вашу помощь, я буду продолжать искать.

Ответы [ 2 ]

2 голосов
/ 20 апреля 2011

Попробуйте это:

SELECT CASE (SELECT timeatt FROM reader WHERE panelid = devid AND readerid = 
       machine) 
         WHEN '1' THEN 'P10' 
         ELSE 'P20' 
       END 
       || '0001' 
       || To_char(event_time_utc, 'RRRRMMDDHH24MISS') 
       || To_char(event_time_utc, 'RRRRMMDDHH24MISS') 
       || Lpad(cardnum, 8, '0') 
       || Lpad((SELECT ssno 
                         FROM   emp 
                         WHERE  id = empid), 8, '0') AS prueba 
FROM   events 
WHERE  eventid = 0 
       AND eventid = 0 
       AND machine IN ( 11 ) 
       AND devid IN ( 1, 2 ) 
       AND cardnum <> 0 
       AND empid <> 0 
       AND event_time_utc BETWEEN TO_DATE('2006-02-16', 'RRRR-MM-DD') AND TO_DATE('2007-02-09', 'RRRR-MM-DD') 
2 голосов
/ 19 апреля 2011

Мне недавно пришлось сделать такое же преобразование из жизни в tSQL в plSQL (оракул).Пара "гоча" в коде, который вы разместили:

1) В tSQL знак плюс (для объединения) + заменяется в plSQL двойной трубой ||

2)Большую часть времени вам нужен «ссылочный курсор» (REF CURSOR), который объявляет ваши результаты как

PROCEDURE DEMO_SELECT_4_SO(

//other parameters followed by//

P_RESULT OUT REF CURSOR)

IS

BEGIN

OPEN P_RESULT FOR
     SELECT
     //fields///
    FROM
     a_table
    WHERE
    //you want..//

ИЛИ (как со скалярным результатомкак ваш запрос) один параметр правильного типа, например:

PROCEDURE DEMO_SELECT_4_SO(

//other parameters followed by//

P_RESULT OUT varchar2(60))

IS

BEGIN

     SELECT
     //concatenated fields///
    INTO
       P_RESULT
    FROM
     a_table
    WHERE
    //you want..//

УВЕДОМЛЕНИЕ При выборе значения в plSQL выбранное значение назначается целевому параметру и не создаетсятаблица, как это было бы в tSQL

3) ВПРАВО (или ВЛЕВО) - функции SUBSTR в plSQL

Я нашел много полезного из этой ссылки http://www.techonthenet.com/oracle/index.php для ясных объяснений plSQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...