create or replace procedure ai_cursor is
v_empno emp.empno%type;
v_ename emp.ename%type;
v_deptno emp.deptno%type;
cursor employee_cursor is
select empno, ename, deptno from emp;
BEGIN
DBMS_OUTPUT.ENABLE;
OPEN employee_cursor;
FETCH employee_cursor
INTO v_empno, v_ename, v_deptno;
DBMS_OUTPUT.PUT_LINE('직원 번호 : ' || v_empno );
DBMS_OUTPUT.PUT_LINE('직원 이름 : ' || v_ename );
DBMS_OUTPUT.PUT_LINE('부서 번호 : ' || v_deptno );
FETCH employee_cursor
INTO v_empno, v_ename, v_deptno;
DBMS_OUTPUT.PUT_LINE('직원 번호 : ' || v_empno );
DBMS_OUTPUT.PUT_LINE('직원 이름 : ' || v_ename );
DBMS_OUTPUT.PUT_LINE('부서 번호 : ' || v_deptno );
CLOSE employee_cursor;
END ai_cursor;
/
제가 개념을 잘 몰라서 질문 드립니다. Oracle과 VC++ 그리고 ADO나 OO4O를 연동해서 써보신분이라면
꼭 좀 봐주세요.
위와 같이 스토어드 프로시저를 만들었는데 수행결과로 나오는 recordset을
OO4O나 ADO를 이용해서 조작하려고 합니다.
위 스토어드 프로시저를 테스트를 해보니 ADO에서 레코드 셋을 전혀 못얻어 오더군요...
우선 궁금한게 위 스토어드 프로시저가 레코드셋을 얻어오는 프로시저가 맞는지 부터 의문이 생기더라구요
SQL서버 같은 경우는
create proc test_proc
as
select * from pubs
--> execute test_proc
name age bigo
---------- ----------- -----------
신지 20 819200000
후하하 29 400000
aa 1 2
가나다 11 22
aaa 1 2
(5 row(s) affected)
와 같이 select문이 들어간 스토어드 프로시저에서 레코드셋을 간단히 만들어 내는데 Oracle에서는 커서를
만들어서 fetch 해야 얻을 수 있는거 같더군요.
그런데 위와 같이 프로시저를 생성해서 ADO에서 돌려보면 recordset을 못 얻어오고....이거 참 난감하네요.
프로시저가 잘못되었는지 ADO에서 못얻어 오는지 조차 구별이 안되니 정말 답답합니다.
그리고 OO4O를 써서 레코드셋을 얻을려고 해도 OO4O에서는
ODatabase.ExecuteSQL("execute proc_name"); 와 같이 프로시저를 수행만 시키고 그 이후로
recordset을 받아오는 어떠한 방법도 보이지가 않네요...
둘중 하나라도 아시는 분 계시면 꼭 답변부탁드립니다. 그럼 수고들 하세요 : )
(PS : 오라클에서 생성한 스토어드 프로시저를 호출해서 나온 recordset을 VC에서 가공할 수 만 있으면
어떠한 방법이라도 상관없습니다. )
|