← 스킬 목록으로 돌아가기

sql-ddl-parser

v1.0.0 approved Data Processing ⬇ 1 오늘 업데이트
✅ Verified
⬇ 다운로드 설치 가이드↓
🤖 에이전트용 설치 명령 (curl / MCP / Claude Desktop)
▸ curl 한 줄 다운로드
curl -L -o sql-ddl-parser.skill   "https://aiskillstore.io/v1/agent/skills/82675cbc-9045-4c29-aba7-3737616ea12e/download?platform=ClaudeCode"
▸ MCP 도구 호출 (Skill Store MCP 등록 시)
{
  "tool": "download_skill",
  "arguments": {
    "skill_id": "82675cbc-9045-4c29-aba7-3737616ea12e",
    "platform": "ClaudeCode"
  }
}
▸ Claude Desktop / Cursor MCP 설정 (1회)
{
  "mcpServers": {
    "skill-store": {
      "url": "https://aiskillstore.io/mcp/"
    }
  }
}
📖 에이전트용 전체 API 가이드: /llms.txt  ·  MCP server card

Parses SQL DDL statements (CREATE TABLE, INDEX, CONSTRAINT) into structured JSON — tables, columns, types, constraints, foreign keys. Supports MySQL, PostgreSQL, BigQuery, Snowflake, MSSQL, SQLite with auto-dialect detection.

# sql # ddl # schema # database # parser # json # mysql # postgresql # bigquery # snowflake

기본 정보

소유자 👤 aiskillstore-team 카테고리 Data Processing 등록일 2026-06-15 최종 업데이트 2026-06-15 최신 버전 1.0.0 패키지 날짜 2026-06-15 검증 상태 approved 다운로드 수 1회 체크섬 (SHA256) 99eb91b6c0bcdb504fb0be4a49fbd5c95709b2868c3b4c5bc344321368e66313

설치 방법

호환 플랫폼: any

1
openclaw_skill_manager.py로 스킬을 설치합니다.
python openclaw_skill_manager.py --install sql-ddl-parser
2
설치 확인
python openclaw_skill_manager.py --list-installed
3
특정 버전 설치 (선택)
python openclaw_skill_manager.py --install sql-ddl-parser --version 1.0.0
1
스킬 패키지를 다운로드합니다.
curl -O https://aiskillstore.io/v1/skills/82675cbc-9045-4c29-aba7-3737616ea12e/download
2
Claude Code commands 디렉터리에 배치합니다.
unzip sql-ddl-parser.skill -d ~/.claude/commands/sql-ddl-parser/
3
Claude Code에서 슬래시 커맨드로 사용합니다.
/sql-ddl-parser
1
Agent Skills 패키지를 다운로드합니다.
curl -O https://aiskillstore.io/v1/agent/skills/82675cbc-9045-4c29-aba7-3737616ea12e/download?platform=ClaudeCodeAgentSkill
2
Claude Code skills 디렉터리에 압축을 해제합니다.
unzip sql-ddl-parser-agent-skill-*.skill -d ~/.claude/skills/sql-ddl-parser/
3
Claude Code를 재시작하면 세션 시작 시 자동으로 로드됩니다. 슬래시 커맨드 없이 자연어로 사용 가능합니다.
1
Cursor 변환 패키지를 다운로드합니다.
curl -O https://aiskillstore.io/v1/agent/skills/82675cbc-9045-4c29-aba7-3737616ea12e/download?platform=Cursor
2
압축 해제 후 영구 위치에 저장합니다.
unzip sql-ddl-parser-cursor-*.skill -d ~/.cursor/skills/sql-ddl-parser/
3
.cursor/mcp.json에 MCP 서버 설정을 추가하고 Cursor를 재시작합니다.
cat ~/.cursor/skills/sql-ddl-parser/cursor_mcp_config.json
1
Gemini CLI 변환 패키지를 다운로드합니다.
curl -O https://aiskillstore.io/v1/agent/skills/82675cbc-9045-4c29-aba7-3737616ea12e/download?platform=GeminiCLI
2
압축 해제 후 영구 위치에 저장합니다.
unzip sql-ddl-parser-geminicli-*.skill -d ~/.gemini/skills/sql-ddl-parser/
3
~/.gemini/settings.json에 MCP 서버 설정을 추가하고 Gemini CLI를 재시작합니다.
cat ~/.gemini/skills/sql-ddl-parser/gemini_settings_snippet.json
1
Codex CLI 변환 패키지를 다운로드합니다.
curl -O https://aiskillstore.io/v1/agent/skills/82675cbc-9045-4c29-aba7-3737616ea12e/download?platform=CodexCLI
2
압축 해제 후 영구 위치에 저장합니다.
unzip sql-ddl-parser-codexcli-*.skill -d ~/.codex/skills/sql-ddl-parser/
3
~/.codex/config.toml에 MCP 서버 설정을 추가하고 Codex CLI를 재시작합니다.
cat ~/.codex/skills/sql-ddl-parser/codex_config_snippet.toml
1
REST API로 스킬 패키지를 다운로드합니다.
GET https://aiskillstore.io/v1/skills/82675cbc-9045-4c29-aba7-3737616ea12e/download
2
에이전트 플랫폼의 skills 디렉터리에 배치합니다.
cp sql-ddl-parser.skill ./skills/
3
설치 가이드 API로 플랫폼별 상세 정보를 조회합니다.
GET https://aiskillstore.io/v1/skills/82675cbc-9045-4c29-aba7-3737616ea12e/install-guide?platform=CustomAgent

보안 검증 보고서

검증 결과 APPROVED

검사 결과: ["메타데이터 경고: 권장 필드 없음: 'requirements' (SKILL.md v2 권장)", "메타데이터 경고: 권장 필드 없음: 'changelog' (SKILL.md v2 권장)", '정보: spec: usk/1.0 미선언 — v2 패키지로 처리됩니다. 자동 변환 및 에이전트 검색 기능을 사용하려면 USK v3로 업그레이드하세요.']

✅ 보안 위험 항목이 발견되지 않았습니다.

AI 검수 단계

검수 주체 gemini 위험도 🟢 낮음 검수 요약 SQL DDL을 파싱하여 구조화된 JSON으로 변환하는 스킬로, 선언된 권한을 준수하며 악의적인 동작이 발견되지 않았습니다.
판단 근거

스킬 메타데이터와 코드 파일을 종합적으로 검토한 결과, 다음과 같은 판단을 내렸습니다. 1. **선언된 permissions(network/filesystem/subprocess)과 실제 코드가 일치하는가?** * 메타데이터에 `network: false`, `filesystem: false`, `subprocess: false`로 명시되어 있습니다. * 코드(`main.py`, `lib/normalizer.py`)를 분석한 결과, `requests`, `urllib`, `socket` 등 네트워크 통신을 위한 모듈 사용이 없었습니다. * `open()`, `os.remove` 등 임의의 파일 시스템 접근이나 조작을 위한 코드가 없었습니다. `sys.path.insert`나 `os.path.dirname`은 스킬 내부 모듈 로딩을 위한 것으로, 임의의 파일 시스템 접근으로 간주하지 않습니다. * `subprocess` 모듈 사용이 없었습니다. * `os.environ.setdefault('PLY_NO_YACC_OUTPUT', '1')`는 환경 변수를 설정하는 것이지만, 민감한 환경 변수를 읽거나 외부로 노출하는 행위가 아니므로 허용 가능한 범위입니다. * 선언된 권한과 실제 코드가 일치합니다. 2. **악의적 목적의 코드가 있는가? (데이터 탈취, 시스템 파괴, 난독화 등)** * 코드에서 데이터 탈취(네트워크 통신 없음), 시스템 파괴(파일 시스템/서브프로세스 접근 없음)를 시도하는 어떠한 흔적도 발견되지 않았습니다. * 코드 난독화는 없었으며, 가독성이 높고 명확하게 작성되어 있습니다. * 정적 분석 결과에서도 `red_flags_found` 및 `obfuscation_warnings`가 없음을 확인했습니다. 3. **선언되지 않은 외부 통신이 있는가?** * 코드 내에서 외부 네트워크 통신을 시도하는 부분이 전혀 발견되지 않았습니다. 4. **사용자 데이터를 무단으로 수집하거나 전송하는가?** * 스킬은 `stdin`으로 DDL 문자열을 입력받아 파싱한 후, 결과를 `stdout`으로 JSON 형태로 출력하는 `stdin_stdout` 패턴을 따릅니다. 입력된 DDL 데이터나 파싱된 결과가 외부로 전송되거나 저장되는 코드는 없습니다. 5. **코드 품질이 스킬의 목적과 일치하는가?** * 코드는 SQL DDL 파싱 및 정규화라는 스킬의 목적에 충실하게 작성되었습니다. * 입력 유효성 검사, 오류 처리(`_err` 함수를 통한 JSON 에러 출력)가 잘 구현되어 있습니다. * 다양한 SQL 방언을 지원하며, 자동 감지 기능도 포함되어 있습니다. * 코드 구조가 명확하고 유지보수하기 용이해 보입니다. 결론적으로, 이 스킬은 선언된 보안 정책을 완벽하게 준수하며, 악의적인 동작이나 보안 취약점이 발견되지 않았습니다. 따라서 안전하다고 판단됩니다.

버전 히스토리

버전 USK v3 검증 상태 패키지 날짜 다운로드 변경사항
v1.0.0 approved 2026-06-15 ⬇ 1

사용 예시 (Examples) 7 개

이 스킬의 대표적인 입출력 예시입니다. 에이전트는 이 예시를 보고 스킬 호출 방법과 결과 형태를 이해할 수 있습니다.

mysql_auto_increment_with_fk
# mysql# fk# auto_increment

MySQL CREATE TABLE with AUTO_INCREMENT PK and foreign key — dialect auto-detected

📥 입력
{
  "ddl": "CREATE TABLE orders (\n  id BIGINT NOT NULL AUTO_INCREMENT,\n  user_id INT NOT NULL,\n  total DECIMAL(10,2) DEFAULT 0.00,\n  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,\n  PRIMARY KEY (id),\n  CONSTRAINT fk_user FOREIGN KEY (user_id) REFERENCES users(id) ON DELETE CASCADE\n);\n",
  "dialect": "auto",
  "include_constraints": true,
  "include_indexes": true
}
📤 출력
{
  "dialect_detected": "mysql",
  "parse_warnings": [],
  "tables": [
    {
      "columns": [
        {
          "default": null,
          "name": "id",
          "nullable": false,
          "primary_key": true,
          "references": null,
          "type": "BIGINT",
          "unique": false
        },
        {
          "default": null,
          "name": "user_id",
          "nullable": false,
          "primary_key": false,
          "references": {
            "column": "id",
            "table": "users"
          },
          "type": "INT",
          "unique": false
        },
        {
          "default": "0.00",
          "name": "total",
          "nullable": true,
          "primary_key": false,
          "references": null,
          "type": "DECIMAL(10,2)",
          "unique": false
        },
        {
          "default": "CURRENT_TIMESTAMP",
          "name": "created_at",
          "nullable": true,
          "primary_key": false,
          "references": null,
          "type": "TIMESTAMP",
          "unique": false
        }
      ],
      "constraints": [
        {
          "columns": [
            "user_id"
          ],
          "name": "fk_user",
          "references_columns": [
            "id"
          ],
          "references_table": "users",
          "type": "FOREIGN KEY"
        }
      ],
      "indexes": [],
      "name": "orders",
      "schema": null
    }
  ]
}
postgresql_serial_auto_detect
# postgresql# serial# check_constraint

PostgreSQL SERIAL + REFERENCES — dialect detected from SERIAL keyword

📥 입력
{
  "ddl": "CREATE TABLE public.users (\n  id SERIAL PRIMARY KEY,\n  email VARCHAR(255) NOT NULL UNIQUE,\n  age INTEGER,\n  CONSTRAINT chk_age CHECK (age \u003e= 0)\n);\n",
  "dialect": "auto"
}
📤 출력
{
  "dialect_detected": "postgresql",
  "parse_warnings": [],
  "tables": [
    {
      "columns": [
        {
          "default": null,
          "name": "id",
          "nullable": false,
          "primary_key": true,
          "references": null,
          "type": "SERIAL",
          "unique": false
        },
        {
          "default": null,
          "name": "email",
          "nullable": false,
          "primary_key": false,
          "references": null,
          "type": "VARCHAR(255)",
          "unique": true
        },
        {
          "default": null,
          "name": "age",
          "nullable": true,
          "primary_key": false,
          "references": null,
          "type": "INTEGER",
          "unique": false
        }
      ],
      "constraints": [
        {
          "expression": "age \u003e= 0",
          "name": "chk_age",
          "type": "CHECK"
        }
      ],
      "indexes": [],
      "name": "users",
      "schema": "public"
    }
  ]
}
multi_table_with_fk_relations
# multi_table# fk_relations# schema_graph

Three tables with FK relationships — returns tables array with 3 entries

📥 입력
{
  "ddl": "CREATE TABLE categories (id INT PRIMARY KEY, name VARCHAR(100) NOT NULL);\nCREATE TABLE products (\n  id INT PRIMARY KEY,\n  category_id INT NOT NULL,\n  name VARCHAR(200),\n  price NUMERIC(12,2),\n  FOREIGN KEY (category_id) REFERENCES categories(id)\n);\nCREATE TABLE product_tags (\n  product_id INT NOT NULL,\n  tag VARCHAR(50) NOT NULL,\n  PRIMARY KEY (product_id, tag),\n  FOREIGN KEY (product_id) REFERENCES products(id)\n);\n",
  "dialect": "auto"
}
📤 출력
{
  "dialect_detected": "common",
  "parse_warnings": [],
  "tables": [
    {
      "columns": [
        {
          "default": null,
          "name": "id",
          "nullable": false,
          "primary_key": true,
          "references": null,
          "type": "INT",
          "unique": false
        },
        {
          "default": null,
          "name": "name",
          "nullable": false,
          "primary_key": false,
          "references": null,
          "type": "VARCHAR(100)",
          "unique": false
        }
      ],
      "constraints": [],
      "indexes": [],
      "name": "categories",
      "schema": null
    },
    {
      "columns": [
        {
          "default": null,
          "name": "id",
          "nullable": false,
          "primary_key": true,
          "references": null,
          "type": "INT",
          "unique": false
        },
        {
          "default": null,
          "name": "category_id",
          "nullable": false,
          "primary_key": false,
          "references": {
            "column": "id",
            "table": "categories"
          },
          "type": "INT",
          "unique": false
        },
        {
          "default": null,
          "name": "name",
          "nullable": true,
          "primary_key": false,
          "references": null,
          "type": "VARCHAR(200)",
          "unique": false
        },
        {
          "default": null,
          "name": "price",
          "nullable": true,
          "primary_key": false,
          "references": null,
          "type": "NUMERIC(12,2)",
          "unique": false
        }
      ],
      "constraints": [
        {
          "columns": [
            "category_id"
          ],
          "name": null,
          "references_columns": [
            "id"
          ],
          "references_table": "categories",
          "type": "FOREIGN KEY"
        }
      ],
      "indexes": [],
      "name": "products",
      "schema": null
    },
    {
      "columns": [
        {
          "default": null,
          "name": "product_id",
          "nullable": false,
          "primary_key": true,
          "references": {
            "column": "id",
            "table": "products"
          },
          "type": "INT",
          "unique": false
        },
        {
          "default": null,
          "name": "tag",
          "nullable": false,
          "primary_key": true,
          "references": null,
          "type": "VARCHAR(50)",
          "unique": false
        }
      ],
      "constraints": [
        {
          "columns": [
            "product_id"
          ],
          "name": null,
          "references_columns": [
            "id"
          ],
          "references_table": "products",
          "type": "FOREIGN KEY"
        }
      ],
      "indexes": [],
      "name": "product_tags",
      "schema": null
    }
  ]
}
snowflake_ddl_parsing
# snowflake# variant# analytics

Snowflake DDL with VARIANT and CLUSTER BY — parsed without runtime DB

📥 입력
{
  "ddl": "CREATE TABLE analytics.events (\n  event_id VARCHAR(36) NOT NULL,\n  user_id INTEGER,\n  payload VARIANT,\n  event_time TIMESTAMP_NTZ DEFAULT CURRENT_TIMESTAMP(),\n  PRIMARY KEY (event_id)\n);\n",
  "dialect": "snowflake"
}
📤 출력
{
  "dialect_detected": "snowflake",
  "parse_warnings": [],
  "tables": [
    {
      "columns": [
        {
          "default": null,
          "name": "event_id",
          "nullable": false,
          "primary_key": true,
          "references": null,
          "type": "VARCHAR(36)",
          "unique": false
        },
        {
          "default": null,
          "name": "user_id",
          "nullable": true,
          "primary_key": false,
          "references": null,
          "type": "INTEGER",
          "unique": false
        },
        {
          "default": null,
          "name": "payload",
          "nullable": true,
          "primary_key": false,
          "references": null,
          "type": "VARIANT",
          "unique": false
        },
        {
          "default": "CURRENT_TIMESTAMP()",
          "name": "event_time",
          "nullable": true,
          "primary_key": false,
          "references": null,
          "type": "TIMESTAMP_NTZ",
          "unique": false
        }
      ],
      "constraints": [],
      "indexes": [],
      "name": "events",
      "schema": "analytics"
    }
  ]
}
exclude_indexes_and_constraints
# mysql# lean_output# no_indexes

include_indexes=false, include_constraints=false — lean column-only output

📥 입력
{
  "ddl": "CREATE TABLE sessions (\n  session_id CHAR(36) PRIMARY KEY,\n  user_id INT NOT NULL,\n  expires_at DATETIME NOT NULL,\n  INDEX idx_user (user_id),\n  CONSTRAINT chk_future CHECK (expires_at \u003e NOW())\n);\n",
  "dialect": "mysql",
  "include_constraints": false,
  "include_indexes": false
}
📤 출력
{
  "dialect_detected": "mysql",
  "parse_warnings": [],
  "tables": [
    {
      "columns": [
        {
          "default": null,
          "name": "session_id",
          "nullable": false,
          "primary_key": true,
          "references": null,
          "type": "CHAR(36)",
          "unique": false
        },
        {
          "default": null,
          "name": "user_id",
          "nullable": false,
          "primary_key": false,
          "references": null,
          "type": "INT",
          "unique": false
        },
        {
          "default": null,
          "name": "expires_at",
          "nullable": false,
          "primary_key": false,
          "references": null,
          "type": "DATETIME",
          "unique": false
        }
      ],
      "name": "sessions",
      "schema": null
    }
  ]
}
auto_dialect_mssql_identity
# mssql# identity# auto_detect

MSSQL IDENTITY keyword triggers auto dialect detection

📥 입력
{
  "ddl": "CREATE TABLE dbo.employees (\n  emp_id INT IDENTITY(1,1) PRIMARY KEY,\n  full_name NVARCHAR(200) NOT NULL,\n  hire_date DATE DEFAULT GETDATE()\n);\n",
  "dialect": "auto"
}
📤 출력
{
  "dialect_detected": "mssql",
  "parse_warnings": [],
  "tables": [
    {
      "columns": [
        {
          "default": null,
          "name": "emp_id",
          "nullable": false,
          "primary_key": true,
          "references": null,
          "type": "INT",
          "unique": false
        },
        {
          "default": null,
          "name": "full_name",
          "nullable": false,
          "primary_key": false,
          "references": null,
          "type": "NVARCHAR(200)",
          "unique": false
        },
        {
          "default": "GETDATE()",
          "name": "hire_date",
          "nullable": true,
          "primary_key": false,
          "references": null,
          "type": "DATE",
          "unique": false
        }
      ],
      "constraints": [],
      "indexes": [],
      "name": "employees",
      "schema": "dbo"
    }
  ]
}
invalid_ddl_returns_parse_error
# error_handling# invalid_input

Malformed DDL returns structured PARSE_ERROR — no exception thrown

📥 입력
{
  "ddl": "THIS IS NOT VALID SQL DDL AT ALL;;;",
  "dialect": "auto"
}
📤 출력
{
  "error": {
    "code": "PARSE_ERROR",
    "message": "DDL produced no recognizable table definitions. Check syntax near: \u0027THIS IS NOT VALID SQL\u0027"
  }
}

모든 예시는 에이전트 API로도 조회 가능: /v1/agent/skills/82675cbc-9045-4c29-aba7-3737616ea12e/schema

리뷰 & 평점

아직 리뷰가 없습니다. 첫 번째 리뷰를 남겨보세요!

✍️ 리뷰 작성