프로시져 생성 질문드립니다~ 0 6 15,626

by Langs [SQL Query] [2012.08.31 13:08:01]



create or replace procedure reportWeather(inputdata1 in number)

AS
 BEGIN

     SELECT

 wetherDate as 측정일자,

   avgTemp as 평균기온,

   highTemp as 최고기온,

   lowTemp as 최저기온

   FROM weather WHERE avgTemp >= inputdata1

  END; /

위와 같이 생성을 하면
경고: 컴파일 오류와 함께 프로시저가 생성되었습니다.

그리고 show error 로 확인하면

-------- -----------------------------------------------------------------
4/10 PL/SQL: SQL Statement ignored
10/11    PL/SQL: ORA-00933: SQL 명령어가 올바르게 종료되지 않았습니다
10/14    PLS-00103: 심볼 "end-of-file"를 만났습니다 다음 중 하나가 기대될
때:
begin case declare end exception exit for goto if loop mod
null pragma raise return select update while with <식별자>
<큰 따옴표로 구분된 식별자> <바인드 변수> << close current
delete fetch lock insert open rollback savepoint set sql
execute commit forall merge pipe

이렇게 나옵니다. 무슨문제인가요 ㅠㅠ 답변 부탁드립니다~!
by 손님 [2012.08.31 13:26:46]
쿼리에 종료하는곳이 없군요. ";"

by 부쉬맨 [2012.08.31 13:34:16]
그러네요 쿼리종료후 ; 마침표시가없네요..


by Langs [2012.08.31 13:34:40]

END 뒤에 ;  
END; 있는데요 ㅠ

by 별명 [2012.08.31 13:35:42]
	 SELECT
 wetherDate as 측정일자,
  avgTemp as 평균기온,
  highTemp as 최고기온,
  lowTemp as 최저기온
  FROM weather WHERE avgTemp >= inputdata1;

by 마농 [2012.08.31 13:59:58]

1. Select 문에 ; 이 없구요.
2. 오라클 프로시져에서 Select 문 단독으로는 사용 못합니다.
- 1건 조회시엔 Into 절과 함께 사용 가능하며
- 여러건 조회시에는 커서를 사용하셔야만 합니다.
3. 여러건 조회된것을 레코드 형태로 리턴하려면 더욱 복잡합니다.
- ref cursor 형태를 사용하여야 합니다.
http://www.gurubee.net/lecture/1843


by Oracler [2012.08.31 14:02:19]
PL/SQL에서의 SELECT문은 SQL의 SELECT 문과 달리 INTO 절이 필요합니다.

SELECT 문의 결과를 INTO 절 다음에 오는 PL/SQL의 변수로 넘겨주어야 합니다.

따라서 AS와 BEGIN 사이에 측정일자, 평균기온, 최고기온, 최저기온을 받을 수 있는 변수를 선언해 주고 실행부의 SELECT 문의 INTO 절에서 해당 데이터를 받아야 합니다.

그리고 쿼리문의 마지막인 inputdata1 다음에 세미콜론(;)도 빠져있네요.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입