开发者

transform sql query to oracle

开发者 https://www.devze.com 2023-02-27 07:12 出处:网络
i have to transform some query i´m using in SQL to Oracle code. I´m having a lot of troublewith tis. Does anyone know any Query transformer o something like that?. Can someone translate some part of

i have to transform some query i´m using in SQL to Oracle code. I´m having a lot of trouble with tis. Does anyone know any Query transformer o something like that?. Can someone translate some part of this code for me?.

This is the code:

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), DATEPAR开发者_C百科T(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'

Many thanks for your help, i´ll keep looking.


Try this:

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') 


I have recently had to make the same conversion from a life in tSQL to plSQL (oracle). A couple of "gotcha's" in the code you posted:

1) In tSQL the plus sign (for concatenation)+ is replaced in plSQL with double pipe ||

2) Most of the time you need a "Reference Cursor" (REF CURSOR) declared to put your results into like

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..//

OR (as with a scalar result like your query) a single parameter of the correct type, like:

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..//

NOTICE That select into in plSQL assigns the selected value to the target parameter and does not create a table as it would in tSQL

3) RIGHT (or LEFT) are SUBSTR functions in plSQL

I have found a lot of utility out of this link http://www.techonthenet.com/oracle/index.php for clear explanations of plSQL.

0

精彩评论

暂无评论...
验证码 换一张
取 消