@ninebone/mcp 1.0.1 → 1.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ninebone/mcp",
3
- "version": "1.0.1",
3
+ "version": "1.0.2",
4
4
  "description": "NineQuery AI Connector for Database",
5
5
  "main": "src/index.js",
6
6
  "type": "module",
@@ -17,32 +17,36 @@
17
17
  **[XML 작성 및 수정 필수 조건 (Oracle 전용)]**
18
18
 
19
19
  1. XML 공통 규칙 (LangChain 템플릿 변수 충돌 방지를 위해 이중 중괄호 표현 사용):
20
- - resultType 속성은 무조건 플레이스홀더 값인 '{result_type}'으로 처리합니다.
21
- - AI 너가 최종 출력물로 뱉어야 하는 모든 MyBatis 파라미터 양식은 오직 단일 중괄호 형태인 '#{{variable_name}}' 및 '${{variable_name}}' 구조여야 합니다. (주의: 최종 출력 결과물에 중괄호가 3개 이상 중첩되어 템플릿 문법이 깨지지 않도록 절대 주의하세요.)
22
- - selectList 쿼리에는 동적 검색 조건 처리를 위해 반드시 아래 구문을 주입하고 ORDER BY 절을 명시해야 합니다.
23
- <where>
24
- <if test="_nineAiGenerated != null"> AND ${{_nineAiGenerated}} </if>
25
- </where>
20
+ - resultType 속성은 무조건 플레이스홀더 값인 '{result_type}'으로 처리합니다.
21
+ - AI 너가 최종 출력물로 뱉어야 하는 모든 MyBatis 파라미터 양식은 오직 단일 중괄호 형태인 '#{{variable_name}}' 및 '${{variable_name}}' 구조여야 합니다. (주의: 최종 출력 결과물에 중괄호가 3개 이상 중첩되어 템플릿 문법이 깨지지 않도록 절대 주의하세요.)
22
+ - selectList 쿼리에는 동적 검색 조건 처리를 위해 반드시 아래 구문을 주입하고 ORDER BY 절을 명시해야 합니다.
23
+ <where>
24
+ <if test="_nineAiGenerated != null"> AND ${{_nineAiGenerated}} </if>
25
+ </where>
26
+ - [중요 - XML 부등호 처리]: SQL 문 내에서 비교 연산자(예: <, >, <=, >=)를 사용할 때 XML 파싱 에러를 방지하기 위해, 해당 쿼리문 블록을 반드시 `<![CDATA[ SQL구문 ]]>`으로 감싸거나 `&lt;`, `&gt;`, `&lt;=`, `&gt;=` 등의 XML 엔티티로 변환하여 작성하십시오. (동적 태그 <if> 등과 겹치지 않도록 주의할 것)
27
+ - [네임스페이스 처리 규칙]: <mapper namespace="{namespace}"> 선언 시, 외부 인자로 제공된 `{namespace}` 플레이스홀더 값은 자바 백엔드가 런타임에 삽입해 주는 '절대 고정값 변수'입니다. AI 너가 임의로 패키지 경로를 유추하여 하드코딩하는 행위를 일절 엄금하며, 반드시 원본 텍스트 형태 그대로 문장 속에 `{namespace}`를 유지하여 출력하십시오.
26
28
 
27
29
  2. Oracle SQL 작성 준수 사항:
28
- - 대소문자 격차 방지: 제공된 [테이블 스키마 정보]의 테이블명과 컬럼명 스펠링 및 대소문자(일반적으로 대문자 고정)를 절대로 임의 변경하지 말고 원본 그대로 복사하여 SQL을 작성하세요.
29
- - **현재 날짜/시간 함수:** Oracle 환경에서 'NOW()' 또는 'CURRENT_TIMESTAMP' 문법 에러를 유발하므로, 등록일/수정일 시스템 날짜 주입 시 **반드시 'SYSDATE'를 사용**하십시오.
30
- - **PK 시퀀스(Sequence) 제약:** 제공된 [테이블 스키마 정보] 힌트에 해당 테이블용 시퀀스 정보가 존재한다면, INSERT 절의 PK 입력 자리에 파라미터 변수 `#{{pk}}` 대신 반드시 **'시퀀스명.NEXTVAL'** 구조를 동적으로 깎아 적용하세요.
30
+ - 식별자 대소문자 유지: 제공된 [테이블 스키마 정보]의 테이블명과 컬럼명 스펠링 및 대소문자(소문자/대문자)를 절대로 임의 변경하지 말고 원본 그대로 복사하여 SQL을 작성하세요. Oracle 특성상 소문자나 소/대문자 혼용 표기(CamelCase)로 설계된 식별자가 제공된 경우, 정확한 매핑을 위해 필요한 경우에 한해 식별자를 쌍따옴표(`""`)로 감싸서 작성하십시오.
31
+ - 날짜/시간 함수: 등록일(REG_DT)/수정일(MOD_DT) 등의 타임스탬프 필드 자리에 Oracle 전용 함수인 'SYSDATE' 또는 'CURRENT_TIMESTAMP' 사용하십시오. (절대 NOW()를 사용하지 마십시오.)
32
+ - [동적 쿼리 파라미터 검증 규칙]: <if test="..."> 내에서 검색 조건을 비교할 때는 파라미터의 데이터 타입(숫자형, 문자열 등)을 불문하고, 모든 조건에 대해 반드시 `변수명 != null and 변수명 != ''` 형태로 null 체크와 빈 문자열 체크를 동시에 결합하여 선언하도록 강제하십시오. (단, 숫자 0의 오작동을 방지할 수 있도록 프로젝트 규격을 통일합니다.)
31
33
 
32
34
  3. 출력 형식 및 JSON 제약사항 (필수):
33
- - **너의 최종 응답은 오직 아래 지정된 [반환 JSON 포맷] 양식에 맞는 순수한 JSON 데이터여야 합니다.** (설명 텍스트나 마크다운 코드 블록 ```json 절대 금지)
34
- - JSON 내부 문자열에 쌍따옴표(")나 개행(\n), 탭(\t)이 들어갈 경우, JSON 규격이 깨지지 않도록 반드시 백슬래시를 붙여 '\"' 또는 '\\n' 형태로 완벽하게 이스케이프(Escape) 처리를 하십시오.
35
- - [CREATE 모드]일 때는 전체 XML 코드를 설계하여 `full_source` 필드에 채우고, `source_changes` 배열은 빈 배열(`[]`)로 반환합니다.
36
- * 반드시 `<?xml...>`, `<!DOCTYPE...>`, `<mapper namespace="{namespace}">` 태그가 완전히 포함된 스케폴딩 구조여야 합니다.
37
- * 사용자의 별도 요청이 없더라도 스키마를 분석하여 기본 4대 핵심 CRUD 쿼리인 `selectList`, `selectOne`, `insert`, `update`를 기본 탑재하십시오.
38
- - [UPDATE 모드]일 때는 `full_source` 필드를 빈 문자열(`""`)로 채우고, 변경 사항을 `source_changes` 배열에 담아 반환합니다.
39
- * 'search_block'을 지정할 때는 소스 내에서 유일하게 식별(Unique)되도록 앞뒤로 최소 2라인 이상의 컨텍스트 코드를 반드시 포함해야 합니다.
40
- * 'replace_block'에는 최종 결합될 순수한 XML 코드만 작성하세요.
35
+ - **너의 최종 응답은 오직 아래 지정된 [반환 JSON 포맷] 양식에 맞는 순수한 JSON 데이터여야 합니다.** (설명 텍스트나 마크다운 코드 블록 ```json 절대 금지)
36
+ - JSON 내부 문자열에 쌍따옴표(")나 개행(\n), 탭(\t)이 들어갈 경우, JSON 규격이 깨지지 않도록 반드시 백슬래시를 붙여 '\"' 또는 '\\n' 형태로 완벽하게 이스케이프(Escape) 처리를 하십시오.
37
+ - [CREATE 모드]일 때는 전체 XML 코드를 설계하여 `full_source` 필드에 채우고, `source_changes` 배열은 빈 배열(`[]`)로 반환합니다.
38
+ * 반드시 `<?xml...>`, `<!DOCTYPE...>`, `<mapper namespace="{namespace}">` 태그가 완전히 포함된 스케폴딩 구조여야 합니다. (이때 namespace 자리는 절대 다른 문자열로 치환하지 말고 텍스트 그대로 유지할 것)
39
+ * 사용자의 별도 요청이 없더라도 스키마를 분석하여 기본 4대 핵심 CRUD 쿼리인 `selectList`, `selectOne`, `insert`, `update`를 기본 탑재하십시오.
40
+ - [UPDATE 모드]일 때는 `full_source` 필드를 빈 문자열(`""`)로 채우고, 변경 사항을 `source_changes` 배열에 담아 반환합니다.
41
+ * 'search_block'을 지정할 때는 소스 내에서 유일하게 식별(Unique)되도록 앞뒤로 최소 2라인 이상의 컨텍스트 코드를 반드시 포함해야 합니다.
42
+ * 'replace_block'에는 최종 결합될 순수한 XML 코드만 작성하세요.
43
+
44
+ ---
41
45
 
42
46
  ---
43
47
 
44
48
  **[반환 JSON 포맷 명세]**
45
- 최종 출력은 반드시 아래의 JSON 스키마 구조를 따라야 합니다. 단, `full_source`, `search_block`, `replace_block` 필드에 실제 Oracle용 코드가 들어갈 때는 최종 출력 시점에 한해 JSON 규격에 맞게 문자열 이스케이프(`\n`, `\"`) 처리가 자동으로 적용되어야 합니다.
49
+ 최종 출력은 반드시 아래의 JSON 스키마 구조를 따라야 합니다. 단, `full_source`, `search_block`, `replace_block` 필드에 실제 코드가 들어갈 때는 최종 출력 시점에 한해 JSON 규격에 맞게 문자열 이스케이프(`\n`, `\"`) 처리가 자동으로 적용되어야 합니다.
46
50
 
47
51
  {{
48
52
  "mode": "CREATE 또는 UPDATE",
@@ -57,17 +61,20 @@
57
61
 
58
62
  ---
59
63
 
60
- **[참고용 데이터 예시 - CREATE 모드일 때 full_source 구성 요령 (Oracle 환경)]**
64
+ **[참고용 데이터 예시 - CREATE 모드일 때 full_source 구성 요령]**
61
65
  `mode`가 "CREATE"인 경우, `full_source` 필드에는 이스케이프 처리되기 전 기준으로 아래와 같이 줄바꿈과 들여쓰기가 온전히 살아있는 스케폴딩 코드가 매핑되어야 합니다. (수정 시 아래 코드만 편하게 편집하세요.)
62
66
 
63
67
  [full_source 템플릿 코드 구조]
64
68
  <?xml version="1.0" encoding="UTF-8"?>
65
- <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
69
+ <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "[http://mybatis.org/dtd/mybatis-3-mapper.dtd](http://mybatis.org/dtd/mybatis-3-mapper.dtd)">
66
70
  <mapper namespace="{namespace}">
67
71
  <select id="selectList" resultType="{{result_type}}">
68
72
  SELECT USER_ID FROM TB_USER
69
73
  <where>
70
74
  <if test="_nineAiGenerated != null"> AND ${{_nineAiGenerated}} </if>
75
+ <if test="userId != null and userId != ''">
76
+ AND USER_ID = #{{userId}}
77
+ </if>
71
78
  </where>
72
79
  ORDER BY REG_DT DESC
73
80
  </select>
@@ -75,16 +82,16 @@
75
82
 
76
83
  ---
77
84
 
78
- **[참고용 데이터 예시 - UPDATE 모드일 때 source_changes 구성 요령 (Oracle 환경)]**
85
+ **[참고용 데이터 예시 - UPDATE 모드일 때 source_changes 구성 요령]**
79
86
  `mode`가 "UPDATE"인 경우, `source_changes` 배열 내부의 `search_block`과 `replace_block`은 이스케이프 처리되기 전 기준으로 아래 구조 형식을 따릅니다. (수정 시 아래 코드만 편하게 편집하세요.)
80
87
 
81
88
  [search_block 구조 예시]
82
- <if test="userId != null">
83
- AND USER_ID = #{{userId}}
89
+ <if test="userId != null and userId != ''">
90
+ AND USER_ID = #{{userId}}
84
91
  </if>
85
92
 
86
93
  [replace_block 구조 예시]
87
- <if test="userId != null">
88
- AND USER_ID = #{{userId}}
89
- AND USE_YN = 'Y'
94
+ <if test="userId != null and userId != ''">
95
+ AND USER_ID = #{{userId}}
96
+ AND USE_YN = 'Y'
90
97
  </if>
@@ -17,31 +17,37 @@
17
17
  **[XML 작성 및 수정 필수 조건 (PostgreSQL 전용)]**
18
18
 
19
19
  1. XML 공통 규칙 (LangChain 템플릿 변수 충돌 방지를 위해 이중 중괄호 표현 사용):
20
- - resultType 속성은 무조건 플레이스홀더 값인 '{result_type}'으로 처리합니다.
21
- - AI 너가 최종 출력물로 뱉어야 하는 모든 MyBatis 파라미터 양식은 오직 단일 중괄호 형태인 '#{{variable_name}}' 및 '${{variable_name}}' 구조여야 합니다. (주의: 최종 출력 결과물에 중괄호가 3개 이상 중첩되어 템플릿 문법이 깨지지 않도록 절대 주의하세요.)
22
- - selectList 쿼리에는 동적 검색 조건 처리를 위해 반드시 아래 구문을 주입하고 ORDER BY 절을 명시해야 합니다.
23
- <where>
24
- <if test="_nineAiGenerated != null"> AND ${{_nineAiGenerated}} </if>
25
- </where>
20
+ - resultType 속성은 무조건 플레이스홀더 값인 '{result_type}'으로 처리합니다.
21
+ - AI 너가 최종 출력물로 뱉어야 하는 모든 MyBatis 파라미터 양식은 오직 단일 중괄호 형태인 '#{{variable_name}}' 및 '${{variable_name}}' 구조여야 합니다. (주의: 최종 출력 결과물에 중괄호가 3개 이상 중첩되어 템플릿 문법이 깨지지 않도록 절대 주의하세요.)
22
+ - selectList 쿼리에는 동적 검색 조건 처리를 위해 반드시 아래 구문을 주입하고 ORDER BY 절을 명시해야 합니다.
23
+ <where>
24
+ <if test="_nineAiGenerated != null"> AND ${{_nineAiGenerated}} </if>
25
+ </where>
26
+ - [중요 - XML 부등호 처리]: SQL 문 내에서 비교 연산자(예: <, >, <=, >=)를 사용할 때 XML 파싱 에러를 방지하기 위해, 해당 쿼리문 블록을 반드시 `<![CDATA[ SQL구문 ]]>`으로 감싸거나 `&lt;`, `&gt;`, `&lt;=`, `&gt;=` 등의 XML 엔티티로 변환하여 작성하십시오. (동적 태그 <if> 등과 겹치지 않도록 주의할 것)
27
+ - [네임스페이스 처리 규칙]: <mapper namespace="{namespace}"> 선언 시, 외부 인자로 제공된 `{namespace}` 플레이스홀더 값은 자바 백엔드가 런타임에 삽입해 주는 '절대 고정값 변수'입니다. AI 너가 임의로 패키지 경로를 유추하여 하드코딩하는 행위를 일절 엄금하며, 반드시 원본 텍스트 형태 그대로 문장 속에 `{namespace}`를 유지하여 출력하십시오.
26
28
 
27
29
  2. PostgreSQL SQL 작성 준수 사항:
28
- - **대소문자 및 쌍따옴표 제약:** PostgreSQL은 기본적으로 쿼리 식별자를 소문자로 인식합니다. 제공된 [테이블 스키마 정보]의 테이블명과 컬럼명에 대문자가 포함되어 있거나 특수 스펠링이 있는 경우, 반드시 원본 대소문자를 스펠링 하나 틀리지 말고 그대로 유지하여 SQL을 작성하세요. 필요하다면 테이블명과 컬럼명을 쌍따옴표(`"`)로 감싸 문법 에러를 방지하십시오.
29
- - **날짜/시간 함수:** 등록일/수정일 자리에 PostgreSQL 표준 함수인 'CURRENT_TIMESTAMP' 또는 'NOW()'를 사용하십시오.
30
+ - [식별자 대소문자 및 쌍따옴표 엄격 처리]: PostgreSQL은 쌍따옴표(`""`)처리가 없으면 SQL 파서가 모든 테이블명과 컬럼명을 자동으로 소문자로 변환하여 인식합니다. 따라서 제공된 [테이블 스키마 정보]의 식별자가 대문자이거나 혼용 표기(CamelCase) 형태라면, 쿼리 작성 반드시 테이블명과 컬럼명을 쌍따옴표(`""`)로 완전히 감싸서 처리하십시오. (예: SELECT "USER_ID" FROM "TB_USER") 단, 문자열 데이터 값 자체는 반드시 홑따옴표(`''`)로 감싸야 합니다.
31
+ - 날짜/시간 함수: 등록일(REG_DT)/수정일(MOD_DT) 등의 타임스탬프 필드 자리에 PostgreSQL 전용 표준 표현식인 'CURRENT_TIMESTAMP' 또는 'NOW()'를 사용하십시오.
32
+ - [타입 엄격성 대응]: PostgreSQL은 데이터 타입 간 자동 묵시적 형변환을 거의 허용하지 않습니다. 비교 조건이나 삽입 시점에 파라미터와 컬럼의 데이터 타입이 불일치할 가능성이 있다면, 필요에 따라 명시적 타입 캐스팅 구문(예: #{{userId}}::INTEGER 또는 CAST(#{{regDt}} AS TIMESTAMP))을 주입하여 에러를 미연에 방지하십시오.
33
+ - [동적 쿼리 파라미터 검증 규칙]: <if test="..."> 내에서 검색 조건을 비교할 때는 파라미터의 데이터 타입(숫자형, 문자열 등)을 불문하고, 모든 조건에 대해 반드시 `변수명 != null and 변수명 != ''` 형태로 null 체크와 빈 문자열 체크를 동시에 결합하여 선언하도록 강제하십시오. (단, 숫자 0의 오작동을 방지할 수 있도록 프로젝트 규격을 통일합니다.)
30
34
 
31
35
  3. 출력 형식 및 JSON 제약사항 (필수):
32
- - **너의 최종 응답은 오직 아래 지정된 [반환 JSON 포맷] 양식에 맞는 순수한 JSON 데이터여야 합니다.** (설명 텍스트나 마크다운 코드 블록 ```json 절대 금지)
33
- - JSON 내부 문자열에 쌍따옴표(")나 개행(\n), 탭(\t)이 들어갈 경우, JSON 규격이 깨지지 않도록 반드시 백슬래시를 붙여 '\"' 또는 '\\n' 형태로 완벽하게 이스케이프(Escape) 처리를 하십시오.
34
- - [CREATE 모드]일 때는 전체 XML 코드를 설계하여 `full_source` 필드에 채우고, `source_changes` 배열은 빈 배열(`[]`)로 반환합니다.
35
- * 반드시 `<?xml...>`, `<!DOCTYPE...>`, `<mapper namespace="{namespace}">` 태그가 완전히 포함된 스케폴딩 구조여야 합니다.
36
- * 사용자의 별도 요청이 없더라도 스키마를 분석하여 기본 4대 핵심 CRUD 쿼리인 `selectList`, `selectOne`, `insert`, `update`를 기본 탑재하십시오.
37
- - [UPDATE 모드]일 때는 `full_source` 필드를 빈 문자열(`""`)로 채우고, 변경 사항을 `source_changes` 배열에 담아 반환합니다.
38
- * 'search_block'을 지정할 때는 소스 내에서 유일하게 식별(Unique)되도록 앞뒤로 최소 2라인 이상의 컨텍스트 코드를 반드시 포함해야 합니다.
39
- * 'replace_block'에는 최종 결합될 순수한 XML 코드만 작성하세요.
36
+ - **너의 최종 응답은 오직 아래 지정된 [반환 JSON 포맷] 양식에 맞는 순수한 JSON 데이터여야 합니다.** (설명 텍스트나 마크다운 코드 블록 ```json 절대 금지)
37
+ - JSON 내부 문자열에 쌍따옴표(")나 개행(\n), 탭(\t)이 들어갈 경우, JSON 규격이 깨지지 않도록 반드시 백슬래시를 붙여 '\"' 또는 '\\n' 형태로 완벽하게 이스케이프(Escape) 처리를 하십시오.
38
+ - [CREATE 모드]일 때는 전체 XML 코드를 설계하여 `full_source` 필드에 채우고, `source_changes` 배열은 빈 배열(`[]`)로 반환합니다.
39
+ * 반드시 `<?xml...>`, `<!DOCTYPE...>`, `<mapper namespace="{namespace}">` 태그가 완전히 포함된 스케폴딩 구조여야 합니다. (이때 namespace 자리는 절대 다른 문자열로 치환하지 말고 텍스트 그대로 유지할 것)
40
+ * 사용자의 별도 요청이 없더라도 스키마를 분석하여 기본 4대 핵심 CRUD 쿼리인 `selectList`, `selectOne`, `insert`, `update`를 기본 탑재하십시오.
41
+ - [UPDATE 모드]일 때는 `full_source` 필드를 빈 문자열(`""`)로 채우고, 변경 사항을 `source_changes` 배열에 담아 반환합니다.
42
+ * 'search_block'을 지정할 때는 소스 내에서 유일하게 식별(Unique)되도록 앞뒤로 최소 2라인 이상의 컨텍스트 코드를 반드시 포함해야 합니다.
43
+ * 'replace_block'에는 최종 결합될 순수한 XML 코드만 작성하세요.
44
+
45
+ ---
40
46
 
41
47
  ---
42
48
 
43
49
  **[반환 JSON 포맷 명세]**
44
- 최종 출력은 반드시 아래의 JSON 스키마 구조를 따라야 합니다. 단, `full_source`, `search_block`, `replace_block` 필드에 실제 PostgreSQL용 코드가 들어갈 때는 최종 출력 시점에 한해 JSON 규격에 맞게 문자열 이스케이프(`\n`, `\"`) 처리가 자동으로 적용되어야 합니다.
50
+ 최종 출력은 반드시 아래의 JSON 스키마 구조를 따라야 합니다. 단, `full_source`, `search_block`, `replace_block` 필드에 실제 코드가 들어갈 때는 최종 출력 시점에 한해 JSON 규격에 맞게 문자열 이스케이프(`\n`, `\"`) 처리가 자동으로 적용되어야 합니다.
45
51
 
46
52
  {{
47
53
  "mode": "CREATE 또는 UPDATE",
@@ -56,34 +62,37 @@
56
62
 
57
63
  ---
58
64
 
59
- **[참고용 데이터 예시 - CREATE 모드일 때 full_source 구성 요령 (PostgreSQL 환경)]**
60
- `mode`가 "CREATE"인 경우, `full_source` 필드에는 이스케이프 처리되기 전 기준으로 아래와 같이 줄바꿈과 들여쓰기, 소문자 식별자가 온전히 살아있는 스케폴딩 코드가 매핑되어야 합니다. (수정 시 아래 코드만 편하게 편집하세요.)
65
+ **[참고용 데이터 예시 - CREATE 모드일 때 full_source 구성 요령]**
66
+ `mode`가 "CREATE"인 경우, `full_source` 필드에는 이스케이프 처리되기 전 기준으로 아래와 같이 줄바꿈과 들여쓰기가 온전히 살아있는 스케폴딩 코드가 매핑되어야 합니다. (수정 시 아래 코드만 편하게 편집하세요.)
61
67
 
62
68
  [full_source 템플릿 코드 구조]
63
69
  <?xml version="1.0" encoding="UTF-8"?>
64
70
  <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
65
71
  <mapper namespace="{namespace}">
66
72
  <select id="selectList" resultType="{{result_type}}">
67
- SELECT user_id FROM tb_user
73
+ SELECT "USER_ID" FROM "TB_USER"
68
74
  <where>
69
75
  <if test="_nineAiGenerated != null"> AND ${{_nineAiGenerated}} </if>
76
+ <if test="userId != null and userId != ''">
77
+ AND "USER_ID" = #{{userId}}
78
+ </if>
70
79
  </where>
71
- ORDER BY reg_dt DESC
80
+ ORDER BY "REG_DT" DESC
72
81
  </select>
73
82
  </mapper>
74
83
 
75
84
  ---
76
85
 
77
- **[참고용 데이터 예시 - UPDATE 모드일 때 source_changes 구성 요령 (PostgreSQL 환경)]**
86
+ **[참고용 데이터 예시 - UPDATE 모드일 때 source_changes 구성 요령]**
78
87
  `mode`가 "UPDATE"인 경우, `source_changes` 배열 내부의 `search_block`과 `replace_block`은 이스케이프 처리되기 전 기준으로 아래 구조 형식을 따릅니다. (수정 시 아래 코드만 편하게 편집하세요.)
79
88
 
80
89
  [search_block 구조 예시]
81
- <if test="userId != null">
82
- AND user_id = #{{userId}}
90
+ <if test="userId != null and userId != ''">
91
+ AND "USER_ID" = #{{userId}}
83
92
  </if>
84
93
 
85
94
  [replace_block 구조 예시]
86
- <if test="userId != null">
87
- AND user_id = #{{userId}}
88
- AND use_yn = 'Y'
95
+ <if test="userId != null and userId != ''">
96
+ AND "USER_ID" = #{{userId}}
97
+ AND "USE_YN" = 'Y'
89
98
  </if>