SELECT 문에서 변수를 출력하기.... 0 6 4,730

by sjydevil [PL/SQL] [2013.07.04 15:55:22]


snap0080.png (29,659Bytes)

안녕하세요. PL SQL 관련한 질문입니다.

MS SQL 만 쓰다 oracle 을 사용하려니 어렵네요.

많은 도움을 부탁 드려요..

아래의 PL SQL 문을 이용하여 결과를 출력하려고 하는데요...

아래의 문을 시작하면 에러가 뜨는데요...

MS SQL에서는 선언된 변수들을 SELECT 를 이용하여 쿼리 결과를 출력할 수 있는데요. 아래처럼

SELECT @CNT_JAEJEAK, @CNT_JAESUK;

오라클에서  위와 같이 변수에 저장된 값들을  SELECT 를 이용해서 출력할 수 없을까요?

아래 처럼 말이죠...

CNT_CHULSUK CNT_GYEOLSUK CNT_CHUNGGA CNT_CHULJANG CNT_GYEOLSUK2 CNT_JAEJEAK CNT_JAESUK
299 171 126 0 0 0 1




--------------------------------------------------


DECLARE   
    CNT_JAEJEAK NUMBER(22);
    CNT_CHULSUK NUMBER(22);
    CNT_GYEOLSUK    NUMBER(22);
    CNT_CHUNGGA NUMBER(22);
    CNT_CHULJANG    NUMBER(22);
    CNT_GYEOLSUK2   NUMBER(22);
    CNT_JAESUK   NUMBER(22);
BEGIN


    select 0
  INTO CNT_JAEJEAK
  from aaa
    ;
   
  select 1
  INTO  CNT_JAESUK
  from bbbb
    ;

    select    COUNT(DECODE(ATTEND_KIND,'1',1)) AS  CNT_CHULSUK
    , COUNT(DECODE(ATTEND_KIND,'0',1)) AS  CNT_GYEOLSUK
    , COUNT(DECODE(ATTEND_KIND,'2',1)) AS  CNT_CHUNGGA
    , COUNT(DECODE(ATTEND_KIND,'3',1)) AS  CNT_CHULJANG
    , COUNT(DECODE(ATTEND_KIND,'4',1)) AS  CNT_GYEOLSUK2 
    , CNT_JAEJEAK AS CNT_JAEJEAK  -- 선언된 변수값을 출력
    , CNT_JAESUK  AS CNT_JAESUK    -- 선언된 변수값을 출력
 INTO    CNT_CHULSUK
    , CNT_GYEOLSUK
    , CNT_CHUNGGA
    , CNT_CHULJANG
    , CNT_GYEOLSUK2   
    , CNT_JAEJEAK
    , CNT_JAESUK
   from AP_CURRENT_MGR CM INNER JOIN AP_ATTENDANCE AT  
    ON CM.Session_Cd    = AT.Session_Cd
   AND CM.Currents_CD   = AT.Currents_CD
   AND CM.Currents_Kind = AT.Currents_Kind 
    ;

----어떻게 결과를 한출로 출력 할 수 있는가?
---
  
END;
/

---------------------------------------------------------------------------------
위의 문장을 실행하면 아래의 에러가 뜨는데요.
이유를 모르겠네요.

invalid SQL statement

Cause: The statement is not recognized as a valid SQL statement. This error can occur if the Procedural Option is not installed and a SQL statement is issued that requires this option (for example, a CREATE PROCEDURE statement). You can determine if the Procedural Option is installed by starting SQL*Plus. If the PL/SQL banner is not displayed, then the option is not installed.

Action: Correct the syntax or install the Procedural Option.






 

by 용근님 [2013.07.04 16:06:36]
일단 요놈들이 group by 가 없네요
CNT_JAEJEAK AS CNT_JAEJEAK
, CNT_JAESUK AS CNT_JAESUK

by sjydevil [2013.07.04 16:07:40]
이것은 변수인데요...

by 용근님 [2013.07.04 16:16:29]

결과적으로 한개의 ROW만 받게 되어있는데... INTO 절이 필요해 보입니다.

by 마농 [2013.07.04 16:21:00]

Into 절이 없네요.
Oracle PL/SQL 에서 단독 Select 구문은 사용 못합니다.
Select 절은 Into 또는 Cursor 형태로만 사용할 수 있습니다.
1건 조회시에는 Into 절을 사용합니다. (0건이나 2건 이상 조회시 에러발생)
2건 이상 조회시에는 커서를 사용합니다.


by sjydevil [2013.07.04 16:33:01]
말씀하신대로 INTO 문을 추가하도록 쿼리를 수정하였는데요.

어떻게하면 아래 처럼 출력되게 할수 있을까요

CNT_CHULSUK CNT_GYEOLSUK CNT_CHUNGGA CNT_CHULJANG CNT_GYEOLSUK2 CNT_JAEJEAK CNT_JAESUK
299 171 126 0 0 0 1


by 마농 [2013.07.04 16:37:09]
PL/SQL 에서 그리드 형태의 출력 기능은 없습니다.
텍스트 형태의 출력은 dbms_output.put_line() 을 이용하시면 되구요.
Record Set 형태의 결과를 리턴하려면 REF CURSOR 을 이용하셔야 합니다.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입