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
운영게시판
최근게시물
Sybase Q&A 1039 게시물 읽기
No. 1039
[질문] exec로 쿼리실행후 결과를 char 변수로 받는 방법.
작성자
김상혁(ngc7027)
작성일
2004-12-28 15:42ⓒ
2004-12-28 16:56ⓜ
조회수
5,309

이곳에 QNA자료를보고 공부하면서 별문제 없이

일하고 있는데요.... 한가지 해결 못한 문제가 생겼습니다.

문제는 tablename과같은 정보를 가변적으로 사용하기위해서 SQL문장에 넣는데서 시작이 됐습니다.

우선 SQL문장을 만들고 가변화시킬 항목을 변수로 바꾼후 @SQL이란 변수를 만들어서

SQL문장을 넣었구요.. 이것을 exec로 실행을 했습니다.

 

어플리케이션에서 사용할 프로시져를 짜고있는 건데... 싹 떼어네고 해당 코드만 딱

떼어내고 설명을 드리면... 이렇습니다.

==============================================================================

declare @subj varchar(100)

 

SELECT @subj = SUBJECT FROM TBL_XXXX WHERE SEQNO = 222

select 'subj : '+@subj

---------------------- 결과 ----------------------------

subj : subject어쩌구~~ 저쩌구~~

===============================================================================

이것을 테이블이름을 가변적으로 사용하기 위해서 이렇게 고쳤습니다.

===============================================================================

declare @subj varchar(100)

declare @tablename varchar(100)

declare @sql varchar(1000)

 

select @tablename = 'TBL_XXXX'

set @sql = 'SELECT @subj = SUBJECT FROM '+@tablename+' WHERE SEQNO = 222'

exec(@sql)

-------------------- 결과 -----------------------

subj : subject어쩌구~~ 저쩌구~~

===============================================================================

이렇게 결과가 나오기는 했습니다만,

데충 짐작 하시겠지만 제가 원하는 것은 이게 아니거든요.

SUBJECT 필드의 값을 받듯이 @subj 로 가져와야 하기 때문에... ㅜㅜ. 흠..

 

여러가지로 시도는 해 봤는데..... 제머리속에 들은게 이미 바닥나고 있어서~ ㅜㅜ

부디... 좋은 정보, 조언 부탁드립니다.

- 상황 설명이 잘 됐는지 모르겠네요.. 이해 안가시면 댓글 달아주세요

- 참.. 환경은 ASE 12.0 입니다.

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


1. test table 생성

create table test (SUBJECT varchar(100), SEQNO int)
go

 

2. 간단한 자료 입력

insert into test values ("a", 10)
insert into test values ("b", 222)
go

 

3. procedure 작성

create proc test_proc @tablename varchar(50)
as
set nocount on
declare @subj varchar(100)
create table #t (param varchar(100))
exec("insert into #t select SUBJECT from " + @tablename + " where SEQNO=222")
select @subj=param from #t
drop table #t
set nocount off
select @subj
go

 

4. procedure 확인

test_proc 'test'
go

-----------------------------
b

 

5. result

일단 dynamic sql안에서 할당한 값이나 선언한 변수는 지역적이기 때문에 할당할 수 있는
방법은 없는 걸로 알고 있습니다. 그래서 임시로 지역적인 할당에 관계 없는 temptable을
생성하고 insert한 후에 값을 할당받고 바로 삭제하는 방법을 써 보았습니다.
예전에 비슷한 경우가 있었는데 performance에 상관없는 간단한 작업이라서 걍
썼었지요... 귀차니즘의 압박이었습니다 --; 간단한 작업의 경우 한번씩은 써보시는
방법입니다. 참고로 위 test 테이블 형태로 10000건을 insert하고 procedure를 돌려보니
procedure 총작업시간이 평균적으로 0.006초가  걸렸습니다. 간단한 작업이시면
이렇게 쓰셔도 될 듯 한데 복잡한 작업이면... 다른 분들이 더 좋은 방법을
알려주실 겁니다. --ㅋ 현재 시간 01시 00분... 전 졸려서 이만....

kmjean님이 2004-12-29 00:32에 작성한 댓글입니다.
이 댓글은 2004-12-29 01:06에 마지막으로 수정되었습니다. Edit

답변 감사합니다~

처음에 제가 생각했던건 temptable을 사용하지 않는 거였습니다.

그런데 kmjean님 말씀처럼 dynamic sql (사실 저는 제가사용한게

이건지도 모랐었는데... ㅡㅡ; 하여튼~) 안에서의 모든 작업이 지역적이더군요.. 여러가지 고민한 끝에 결국 temptable로 했습니다. ㅜㅜ...

퍼포먼스는 체크 해봐야겠지만, 실행 속도를 보니 문제 될것

같지는 않군요. 하여튼 나름대로 해결 잘 했습니다.

 

감사합니다~ ^^

김상혁(ngc7027)님이 2004-12-29 13:29에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
1044아웅.왜이러죠.ㅠ_ㅠ [4]
켄신
2005-01-04
4740
1042sybase 12.52 설치시 sybase유저에 과해 [3]
굿타임
2005-01-03
5041
1040싸이베시이스 ASE 설치후에 DSEDIT를 실행시 에러 문의 [1]
백승민
2004-12-29
4759
1039[질문] exec로 쿼리실행후 결과를 char 변수로 받는 방법. [2]
김상혁
2004-12-28
5309
1037ASA 6.0 한글 문제 [1]
송재열
2004-12-24
4293
1036[질문]linux에서 원격 sybase서버에 접속할려고 sybase.pm을 설치
강호영
2004-12-22
4143
1034sybase 기동절차좀....(완전초보) [1]
한택상
2004-12-21
6922
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.018초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다