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
운영게시판
최근게시물
MS-SQL Q&A 2091 게시물 읽기
No. 2091
MS-SQL로 SP 포팅하려 하는데요
작성자
박승호(shpark94)
작성일
2005-07-12 08:34
조회수
5,150

안녕하세요? SP 관련 개발을 위해 오라클에 만들어 놓은 Stored Procedure를 MS-SQL로 똑같이 옮겨 테스트를 하려 하는데요, MS-SQL은 첨이라 잘 안되네요.

하나는 select한 결과를 Cursor 결과 파라미터에 담는 것이고, 하나는 그냥 입력 숫자를 받아 계산한 결과를 출력파라미터에 반환해 주는 프로시저 입니다.

이를 MS-SQL에서 돌아갈 수 있게 수정 부탁드려도 될지 모르겠습니다.

꼭좀 부탁드립니다. ^^;;

좋은 하루 되세요.

 

1. select 결과 Cursor 반환

--커서 타입 선언 패키지

CREATE OR REPLACE PACKAGE "TEST_PKG" AS
TYPE cursortype IS REF CURSOR;
END TEST_PKG;

--커서 사용 프로시저

CREATE OR REPLACE PROCEDURE "TEST1"

(OUTPUT_CUR OUT TEST_PKG.cursortype,
OUTPUT OUT varchar2)
as
begin
OPEN OUTPUT_CUR FOR
SELECT empno, ename
from emp;
output := 'String Data Out';
end;

 

2. 입력 숫자를 받아 계산한 결과 반환

CREATE OR REPLACE PROCEDURE "TEST"

(v_in IN number,
v_out OUT number)
IS
BEGIN
v_out := v_in*10;
END;

 

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

1번의 cursor로서의 반환이 mssql에서 되는지 모르겠네요.

그런 연유로 저는 전역테이블을 사용하였습니다.

전역테이블은 들어올때 검사하여 삭제하는 과정으로 되어 있습니다.

물론 사용은 procedure이후 select * from ##t_table로 하시면 됩니다.

 

1.

create proc Test1
 (v_output varchar(100)  output)
As
Begin
if object_id('##t_table') is not null
 drop table ##t_table

select empno, ename into ##t_table from emp
set @v_output = 'string Data out'

End

 

 

 

2.

create proc Test
 (v_in numeric,
 v_out numeric out)
As
Begin
 set v_out = v_in * 10
End

 

여리님이 2005-07-12 09:34에 작성한 댓글입니다. Edit

BOL에서 관련 내용을 상황에 맞게 변경해 보았습니다.
BOL의 CREATE PROCEDURE 의 설명 부분과 참고하여 보시면
구분 해석에는 별 무리가 없을 것 입니다....

 

--1. select 결과 Cursor 반환
CREATE PROCEDURE usp_test1  @cursor CURSOR VARYING OUTPUT
AS
    SET @cursor = CURSOR
         FORWARD_ONLY STATIC FOR
        SELECT empno, ename
          from emp;

      OPEN @cursor
GO

-- proc 사용예제
DECLARE @MyCursor CURSOR

EXEC usp_test1 @cursor = @MyCursor OUTPUT
FETCH NEXT FROM @MyCursor
WHILE (@@FETCH_STATUS = 0)
BEGIN
 
    -- 관련 내용 사용 부분

   FETCH NEXT FROM @MyCursor
END
CLOSE @MyCursor
DEALLOCATE @MyCursor
GO

 

/*
-- 단순 화면 출력용이라면 아래와 같이하셔도 되고요,
-- 이와 같은 경우 위의 커서와 같은 처리를 위해서는 임시 테이블을 사용하셔도 됩니다.(원격 서버에서 결과를 받아서 가공을 해야 할 에도 사용 가능합니다.)
--

CREATE PROCEDURE usp_test1 
AS
        SELECT empno, ename
         from emp;
GO

exec usp_test1 ;

go
create table #temp1
(

   empno int
  ,ename varchar(30)
)

insert into #temp1    -- 이 구문에서는 테이블 변수는 사용할 수 없습니다.
     exec usp_test1 ;


 select *
     from #temp1

*/

 


--2. 입력 숫자를 받아 계산한 결과 반환

CREATE PROCEDURE usp_getNumber @in int
                              ,@out int OUTPUT
AS
    SET @out = @in*10;
go
/*

-- output 매개변수 없이는 아래와 같이 하시면 됩니다..

drop proc usp_getNumber
go
CREATE PROCEDURE usp_getNumber @in int
AS
    return( @in*10)
go


declare @out int
EXEC @out = usp_getNumber 10
select @out
*/

 

가을남자님이 2005-07-12 10:04에 작성한 댓글입니다.
이 댓글은 2005-07-12 10:08에 마지막으로 수정되었습니다. Edit
[Top]
No.
제목
작성자
작성일
조회
2094트리구조 출력
율란
2005-07-12
2661
2093sybase->ms sql 임포트시 질문입니다. [4]
또초보
2005-07-12
3339
20921000건만 조회하고 싶습니다. [5]
초보
2005-07-12
4362
2091MS-SQL로 SP 포팅하려 하는데요 [2]
박승호
2005-07-12
5150
2090mysql password 함수를 이용한 암호화를 mssql로 변환하려면 [4]
신현주
2005-07-12
4619
2089select 문 좀 만들어 주세요.... [1]
미친곰탱이
2005-07-11
3597
2088이거 무슨말입니까? [3]
이혜섭
2005-07-08
2328
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.016초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다