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 7156 게시물 읽기
No. 7156
테이블 반환 함수 동적쿼리 방법 문의 드립니다.
작성자
임민규(iamwhatiam)
작성일
2019-01-10 13:40
조회수
2,068

테이블 반환 함수는 뷰를 대신해서 Table Data 형식을 반환하는데...

반환 함수는 inline 과  MultiStatement 두가지 형식으로 구분되지요....

일단 제가 구현하고 싶은 내용의 샘플링을 해보면...

테이블명과 출력할 row 수를 입력 받아서 테이블 형태로 return 하는 것이 가장 적절한 샘플이 될 것 같습니다.

컬럼수가 고정되어 있다면 MultiStatement 형태로 return될 Table의 컬럼 형태를 지정해서 하면 되지만...

조회할 테이블마다 컬럼의 수와 컬럼명이 모두 다르다고 가정했을때 MultiStatement로는 지정이 불가하여

Inline 형태로 하려고 합니다.

컬럼명은 DBA_TAB_COLUMNS 에서 조회해서 Cursor를 돌려서 Query를 만드어 Varchar 변수에 담았다가

Return하려고 하는 생각을 하고 있습니다.

사용자 입장에서는 SELECT * FROM FN_SELECT_TABLE('TMP_TABLE', 100) 이라고 조회를 하면...

100개의 Row가 조회를 되는 형태를 예제라고 할 수 있습니다.

문제는 'TMP_TABLE' 에 해당하는 테이블 컬럼이 테이블마다 다르기 때문에 MultiStatement 형태로 Return Table 의 형태를

지정할 수 없다는게 문제입니다.

요약하면 아래와 같습니다.

 

1. 파라미터로 테이블명과 추출 row 수를 입력 받는다.

    CREATE FUNCTION [dbo].[FN_SELECT_TABLE]

(

    @I_TABLE_NAME VARCHAR(100), -- 조회할 테이블명

    @I_ROW_CNT      INT -- 조회할 ROW COUNT (0 인경우 전체)

)

 

2. 전달받은 테이블명을 DBA_TAB_COLUMNS 에서 조회하여 컬럼명을 조회한다.

SELECT COLUMN_NAME FROM DBA_TAB_COLUMNS WHERE TABLE_NAME = @I_TABLE_NAME

 

3. 조회된 COLUMN_NAME 의 수만큼 CURSOR를 돌려서 임시 VARCHAR 변수에 저장한다.

@TMP_SQL = 'SELECT TOP ' + @I_ROW_CNT 

--LOOP 시작

@TMP_SQL = @TMP_SQL + COLUMN_NAME + ','

--LOOP 종료

@TMP_SQL = @TMP_SQL + ' FROM ' + @I_TABLE_NAME

 

4. 동적으로 생성된 쿼리(@TMP_SQL)를 실행해서 TABLE 형태로 RETURN  한다.

 

대략적인 샘플링은 이렇습니다.

많은 가르침 부탁드립니다.

[Top]
No.
제목
작성자
작성일
조회
7159web 사용자정보 수정쿼리 문의 [1]
일개미님
2019-03-27
1791
7158select ~ case [1]
help me
2019-03-15
2001
7157mssql invalid object는 어떻게 check하나요?
톰보우
2019-02-22
1892
7156테이블 반환 함수 동적쿼리 방법 문의 드립니다.
임민규
2019-01-10
2068
7155PK INDEX 관련 질문 드립니다. [2]
거북이
2019-01-09
2021
7154새해 복 많이 받으세요~ 쿼리 질문 하나 드립니다~ [4]
이성원
2019-01-03
2292
7153선입선출 구현 [3]
tiger
2018-11-21
3057
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2023 DSN, All rights reserved.
작업시간: 0.051초, 이곳 서비스는
	PostgreSQL v16.1로 자료를 관리합니다