Oracle PL/SQL 간단한 구문 에러 0 3 3,612

by 라임 [PL/SQL] PL/SQL Oracle [2017.03.02 16:57:24]


  declare 
                  max_tim varchar2(33);
                  min_tim varchar2(33);
  begin
                  max_tim := select max(evetim) from cts_event where substr(clientid, 1,5) = '47621' and evedat='20170217';
                  min_tim := select min(evetim) from cts_event where substr(clientid, 1,5) = '47621' and evedat='20170217';
                  
                  select round((max_tim - min_tim)*24) from dual;
  end;

 

이렇게 짜봤는데 왜 에러가 나는지 모르겠어요

의도한건  하나의 테이블에 [가장오래전시간] - [가장최근시간]시간차이를 구하려고했던거에요 ㅠㅠ

by 마농 [2017.03.02 17:21:03]

1. 변수에 값 대입할 때
  - select 를 통한 변수에 값 대입은 Into 절을 이용합니다.
2. 변수마다 각각 쿼리하기 보다는
  - 쿼리 하나로 두개 변수를 한번에 채울 수도 있습니다.
3. 컬럼을 가공하여 비교하는 것은 비효율입니다.
  - 컬럼은 그대로 둔채 조건을 가공하여 비교하세요.
  - 변경전 : substr(clientid, 1,5) = '47621'
  - 변경후 : clientid LIKE '47621' || '%'
4. 문자열 빼기 연산으로는 시간 차를 구할 수 없습니다.
  - date 나 timestamp 형을 이용해야 합니다.
  - 형변환을 해야 하니 evetim 컬럼의 정확한 포멧을 알아야 합니다.


by 라임 [2017.03.02 18:12:11]

2. 변수마다 각각 쿼리하기 보다는
  - 쿼리 하나로 두개 변수를 한번에 채울 수도 있습니다.

==> 이 말을 실현하고 싶은데 이해가 안가서 ㅠㅠ... 어떻게 그렇게 할 수 있죠??


by 마농 [2017.03.02 18:18:24]
SELECT 값1
     , 값2
  INTO 변수1
     , 변수2
  FROM 테이블
 WHERE ...
;

 

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입