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 1818 게시물 읽기
No. 1818
스칼라반환함수의 결과값을 테이블반환함수의 매개변수값으로 사용시 오류
작성자
박명현
작성일
2005-03-14 13:56
조회수
4,699

예를 들어 다음과 같은 두개의 함수가 있습니다.

/* 임의의 문자열을 반환하는 스칼라 함수 */
CREATE FUNCTION ufTestKey ( @InData varchar(1) )
RETURNS varchar(4)
AS
BEGIN
DECLARE @TblKey varchar(4)

IF @InData = '1'
SET @TblKey = '2003'
ELSE IF @InData = '2'
SET @TblKey = '2004'
ELSE IF @InData = '3'
SET @TblKey = '2005'

RETURN (@TblKey)
END


/* 테이블을 반환하는 함수 */
CREATE FUNCTION ufTestData ( @TblKey varchar(3) )
RETURNS @RetTbl TABLE ( JuminId varchar (20) PRIMARY KEY NOT NULL,
DeptCd varchar (12) NULL ,
UserNm varchar (12) NULL )
AS
BEGIN

INSERT @RetTbl
SELECT JuminId, DeptCd, UserNm
FROM gEmp
WHERE JuminId LIKE @TblKey + '%'

RETURN

END


위 두개의 함수를 이용 하여 다음 1), 2)와 같이 각각 사용하는데는 문제가 없습니다.
다만 문제는 3)과 같이 사용하고자 할때 발생합니다.

즉 스칼라함수의 리턴값을 테이블반환함수의 매개변수값으로 사용하고자
할때 발생합니다. 이게 원래 제약이 있는것인지 아니면 사용용법이 잘못된
것인지 궁금합니다.


1) select dbo.ufTestKey('2')

----
2004

(1개 행 적용됨)



2) select * from dbo.ufTestData('2004')

JuminId DeptCd UserNm
-------------------- ------------ ------------
2004010003 NULL 류재근
200401001 200406B111 성삼환
200401002 200406B123 류재근
200401009 NULL 김희수
200401010 NULL 김용민
200402001 200406B211 박명현
200403001 NULL 김도욱
200403002 200406A311 박명현
200405001 NULL 최관우
200405002 200406F142 박명현
200405003 NULL 한민규
200405004 200406B121 박명현
200408001 NULL 권우석
200501001 200406B112 우종철
20050302 NULL 오대규
20050303 200406A111 dheorb

(16개 행 적용됨)



3) select * from dbo.ufTestData(dbo.ufTestKey('2'))

서버: 메시지 170, 수준 15, 상태 1, 줄 1
줄 1: '.' 근처의 구문이 잘못되었습니다.


- 끝 -

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

이렇게 수정하는건 어떨까요? ^^*

 

alter FUNCTION ufTestData ( @InData varchar(1) )   --수정

RETURNS @RetTbl TABLE ( JuminId varchar (20) PRIMARY KEY NOT NULL,
DeptCd varchar (12) NULL ,
UserNm varchar (12) NULL )
AS
BEGIN

INSERT @RetTbl
SELECT JuminId, DeptCd, UserNm
FROM gEmp
WHERE JuminId LIKE dbo.ufTestKey(@InData) + '%'   --수정

RETURN

END
go

 

select * FROM dbo.ufTestData('2')

 

키키님이 2005-03-14 17:02에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
1822mysql에서 processlist와 같은....... [1]
무사리
2005-03-15
2977
1820temp table / pintable 중 어떤 걸 쓰시겠습니까?
복팅이
2005-03-15
2664
1819mysql->mssql로 migration
oniru
2005-03-14
2676
1818스칼라반환함수의 결과값을 테이블반환함수의 매개변수값으로 사용시 오류 [1]
박명현
2005-03-14
4699
1817mdb파일을 SQL 서버로 돌리기. [1]
궁금이
2005-03-12
3511
1816인덱스 - identity / unique, not null [2]
guest
2005-03-11
3884
1815odbc 에러..(다른 hstmt를 위해 연결을 사용 중입니다.)
nuno
2005-03-11
4533
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.026초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다