database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 14861 게시물 읽기
No. 14861
[질문] 오라클 스토어드 프로시저
작성자
신충수
작성일
2003-07-07 16:40
조회수
3,561

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에서 가공할 수 만 있으면

 

어떠한 방법이라도 상관없습니다. )

이 글에 대한 댓글이 총 1건 있습니다.

우선 이 프로시저가 VC++에서 레코드 셋을 얻을수 있게 만들어진게 아니기 때문에 ADO에서 레코드셋을 받아오지 못 하는 겁니다.

명령어중에 DBMS_OUTPUT.PUT_LINE라는 명령은 SQL*PLUS 명령어입니다. 즉, Application에서 결과를 받아오기 위한게 아니란 거죠.

 

Application 에서 레코드셋을 받아올려면 바인드 변수(정확한 이름인지 모르겠네요 ^^;;)를 이용해야합니다. ":변수명"으로 표시되죠. ^^

 

PL/SQL 문법 공부를 좀 더 하시면 찾을수 있을겁니다.

지형준(miho77)님이 2003-07-08 14:35에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
14864[질문] long타입으로 지정한 필드의 길이는... [1]
손동언
2003-07-07
1700
14863오라클9i에서 Analytic Function 사용한 ProC파일 컴파일 에러 [4]
박종구
2003-07-07
2811
14862프로시져 안에서 임시테이블을 어떻게 만들어요?? [1]
김만수
2003-07-07
10199
14861[질문] 오라클 스토어드 프로시저 [1]
신충수
2003-07-07
3561
14865┕>Re: [질문] 오라클 스토어드 프로시저
김만수
2003-07-08 08:25:37
1878
14870┕>Re: [질문] 오라클 스토어드 프로시저
신충수
2003-07-08 20:44:09
3953
14860도움이 필요합니다. [3]
이정호
2003-07-07
2289
14859index 명 바꾸기 [2]
정전화
2003-07-07
1693
14858charater set 문제 같습니다. 도와주세요 [2]
이강우
2003-07-07
2381
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.050초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다