메뉴 여닫기
개인 메뉴 토글
로그인하지 않음
만약 지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.
편집 요약 없음
 
(다른 사용자 한 명의 중간 판 3개는 보이지 않습니다)
27번째 줄: 27번째 줄:
## [[최적의 SQL 작성법]]  
## [[최적의 SQL 작성법]]  
## [[스칼라 인라인뷰 서브쿼리|서브쿼리(스칼라/인라인뷰/서브쿼리)]]
## [[스칼라 인라인뷰 서브쿼리|서브쿼리(스칼라/인라인뷰/서브쿼리)]]
## [[원도우 함수]]
## [[오라클 내부함수]]
## [[원도우 함수|윈도우 함수(분석 함수)]]
## [[집계함수 (aggregate function)]]
## [[집계함수 (aggregate function)]]
## [[그룹 함수]]
## [[그룹 함수]]
41번째 줄: 42번째 줄:
## [[정규표현식(regular expression)]]
## [[정규표현식(regular expression)]]
## [[전체 텍스트 검색 match]]
## [[전체 텍스트 검색 match]]
## {{:테이블 샘플링 (Table Sampling)}}
## [[테이블 샘플링 (Table Sampling)]]
## [[임시 테이블 (Temporary Tables)]]
## [[임시 테이블 (Temporary Tables)]]
 
## [[동적 SQL (Dynamic SQL)]]
 
== 동적 SQL (Dynamic SQL) ==
 
<source lang=sql>
-- 조건에 따라 다른 쿼리 실행 (MySQL 저장 프로시저 예제)
DELIMITER //
CREATE PROCEDURE get_employee_data(IN dept_id INT, IN min_salary DECIMAL)
BEGIN
    SET @sql = CONCAT('SELECT * FROM employees WHERE department_id = ', dept_id);
   
    IF min_salary IS NOT NULL THEN
        SET @sql = CONCAT(@sql, ' AND salary >= ', min_salary);
    END IF;
   
    SET @sql = CONCAT(@sql, ' ORDER BY last_name;');
   
    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
END //
DELIMITER ;
 
-- 프로시저 호출
CALL get_employee_data(5, 50000);
</source>
 
 
**설명**:
- 런타임에 SQL 문을 동적으로 생성하고 실행
- 조건에 따라 다른 컬럼, 테이블, 조건을 사용할 때 필요
- SQL 인젝션 공격 방지를 위해 반드시 입력 값 검증 필요


----
----

2025년 6월 2일 (월) 20:07 기준 최신판