|
|
(다른 사용자 한 명의 중간 판 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 인젝션 공격 방지를 위해 반드시 입력 값 검증 필요
| |
|
| |
|
| ---- | | ---- |