error 관련 짊문입니다. 0 10 1,701

by 해양 DB [2010.04.16 10:21:46]


error11.JPG (201,096Bytes)

set serveroutput on;

------------------------------------------------
-- create a stored function
------------------------------------------------

create or replace function up_amount (v_amount number)
 return number is

 principal    number := 0;
 sumval   number := 0;

 cursor h_cursor is
   select d_amount from deposit where d_amount > v_amount;

begin

 open h_cursor;

 loop
   fetch h_cursor into principal;
   exit when h_cursor%notfound;
   sumval := sumval * 1.4;
 end loop;

 return sumval;

end;
/

------------------------------------------------
-- execute the stored function
------------------------------------------------


에러내용 및 테이블정보는 그림파일로 첨부하였습니다.

아무리 봐도 모르겠네요ㅠ

by 마농 [2010.04.16 10:32:12]
-- 1번 방법 --
var sumval NUMBER
exec :sumval := up_amount(20000);
print sumval

-- 2번 방법 --
DECLARE
sumval NUMBER;
BEGIN
sumval := up_amount(20000);
DBMS_OUTPUT.PUT_LINE(sumval);
END;
/

-- 3번 방법 --
SELECT up_amount(20000) sumval FROM dual;

by 해양 DB [2010.04.16 11:14:11]
실행은 되는 값이 계속 0 이나오는 이유는 뭘까요?

by 마농 [2010.04.16 11:15:21]
0 이 나올수밖에 없는 계산식이라서 그렇죠.

by 해양 DB [2010.04.16 11:33:27]
커서 부분을 바꿨는데도 '0'이 나오던데요?

by 마농 [2010.04.16 11:36:10]
계산식에 값을 대입해서 계산해보세요. 0이 나올수밖에 없죠.
sumval := sumval * 1.4;
sumval의 초기값이 0이니 0 * 1.4 = 0 입니다.

by 해양 DB [2010.04.16 11:56:26]
ㅡㅡ;; 멍청했군요.

아무튼 감사합니다.

모든 row에 값을 더해주려면 어떻게 해야하나요?

by 마농 [2010.04.16 12:37:15]
최종 목적이 무었인지 감이 오질 않습니다만.
목적을 위한 중간과정 또한 잘못들어서서 멀리 돌아가는 길을 택하신건 아닐까? 생각되구요.
목적을 위해 나아가야할 단계가 계속해서 있을듯 한데.
계속 이런식으로 꼬리에 꼬리를 무는 질문으로 해결하실건가요?
이렇게 해서 목표물에 도착할 수나 있을런지요?
차라리 그냥 최종 목적만 말씀하세요. 바로 가는 길을 알려드리겠습니다.

by 해양 DB [2010.04.16 13:00:52]
목적은 테이블의 모든 행에 일정한 값을 곱해서 그 값을 출력하는 겁니다.
아까 밑에서 링크를 걸어서 들어가봤는데 페키지라는 것을 잘 몰라서
어떻게 해야할지 고민하고 있었습니다.

by 마농 [2010.04.16 13:06:16]
역시나. 멀리 돌아가는 방법을 찾고 계셨군요.
그걸 왜 함수를 사용합니까? 그냥 쿼리로 하세요.

SELECT 특정컬럼 * 1.4 AS 결과값
FROM 테이블

by 해양 DB [2010.04.16 13:15:41]
공부를 하는단계라 이렇게 해보려고 한거였습니다.

물론 말하신 방법을 알고있는건 아니였지만 말이죠,

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