2011-04-19 5 views
1

나는 SQL에서 오라클 코드를 사용하여 일부 쿼리를 변환해야합니다. 나는이 문제에 많은 어려움을 겪고있다. 누구든지 그런 쿼리 변환기를 아는 사람? 누군가 나를 위해이 코드의 일부를 번역 할 수 있습니까?. 당신의 도움에 대한오라클에 SQL 쿼리를 변환

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' 

많은 감사합니다, 거 야 계속 찾고 :

는 코드입니다.

+0

은 참고로 오라클은 ** ** SQL''의 구현입니다. Microsoft의 'SQL Server'를 의미합니까? – JNK

+0

기존 출력을 제공하면 SQL Server 카운터 파트의 디코딩보다 훨씬 빨리 쿼리에 도달 할 수 있습니다. – Chandu

+0

예, SQL Server를 사용하고 있습니다 ... 출력은 다음과 같은 문자열을 가진 단일 열입니다. – NicoRiff

답변

2

이 시도 :

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

이 쿼리는 필요한 것 같지만 지금이 오류가 발생합니다. ORA-01489 : 문자열 연결이 너무 깁니다. 나는 계속 지켜 볼 것이다. 대단히 감사합니다 – NicoRiff

+0

왜 LPAD에 대한 두 번째 매개 변수가 ssno의 쿼리입니까? ssno를 숫자로 변환 한 다음 문자열에 많은 '0을 추가하여 ORA-01489가 발생하지 않습니까? –

+0

@ 제프리 : 잘 잡으세요. 쿼리가 수정되었습니다. 쿼리 변환 중 실수 일 수 있습니다. – Chandu

2

최근 tSQL에서 plSQL (oracle)에 이르기까지 동일한 변환을해야했습니다. "잡았다의"의 몇 가지 코드에서 당신은 게시 : ||

2) 대부분의 시간을 당신 "이 필요합니다 (+) 연결에 대한

TSQL에서

1) 더하기 기호가 이중 파이프 PLSQL에 교체 참조 커서 "(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..// 

또는 등으로 CORR의 단일 매개 변수를 결과를 넣어 선언 요법 타입 같은 PLSQL에로 선택

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

주의

대상 파라미터 설정 값을 할당하여 테이블을 생성하지 않는 것이 것 TSQL에서

3) RIGHT로서 (또는 LEFT)가 plSQL의 SUBSTR 함수입니다

plSQL에 대한 명확한 설명을 위해이 링크 http://www.techonthenet.com/oracle/index.php에서 많은 유틸리티를 발견했습니다.

관련 문제