Claude Code Plugins

Community-maintained marketplace

Feedback

Connect to IBM DB2 databases, execute SQL queries, and manage transactions. Use when integrating with DB2 mainframe databases, querying legacy data, or migrating data from DB2 systems.

Install Skill

1Download skill
2Enable skills in Claude

Open claude.ai/settings/capabilities and find the "Skills" section

3Upload to Claude

Click "Upload skill" and select the downloaded ZIP file

Note: Please verify skill by going through its instructions before using it.

SKILL.md

name db2-connector
description Connect to IBM DB2 databases, execute SQL queries, and manage transactions. Use when integrating with DB2 mainframe databases, querying legacy data, or migrating data from DB2 systems.

DB2 Connector

Connect to and interact with IBM DB2 databases using Python.

Basic Connection

import ibm_db
import ibm_db_dbi

# Connect using connection string
conn_str = (
    "DATABASE=SAMPLE;"
    "HOSTNAME=localhost;"
    "PORT=50000;"
    "PROTOCOL=TCPIP;"
    "UID=db2user;"
    "PWD=password;"
)

# Low-level connection
conn = ibm_db.connect(conn_str, "", "")

# DB-API connection (recommended)
conn = ibm_db_dbi.connect(conn_str)
cursor = conn.cursor()

Executing Queries

# Simple query
cursor.execute("SELECT * FROM employees WHERE dept = ?", ('IT',))
rows = cursor.fetchall()

for row in rows:
    print(row)

# With parameters
sql = "SELECT emp_id, name, salary FROM employees WHERE salary > ?"
cursor.execute(sql, (50000,))
results = cursor.fetchall()

Insert and Update

# Insert data
insert_sql = "INSERT INTO inventory (item_id, quantity, price) VALUES (?, ?, ?)"
cursor.execute(insert_sql, ('ITEM001', 100, 29.99))
conn.commit()

# Batch insert
items = [
    ('ITEM002', 50, 19.99),
    ('ITEM003', 75, 39.99),
    ('ITEM004', 120, 15.99)
]
cursor.executemany(insert_sql, items)
conn.commit()

# Update
update_sql = "UPDATE inventory SET quantity = quantity + ? WHERE item_id = ?"
cursor.execute(update_sql, (25, 'ITEM001'))
conn.commit()

Transactions

try:
    cursor.execute("UPDATE accounts SET balance = balance - ? WHERE id = ?", (100, 1))
    cursor.execute("UPDATE accounts SET balance = balance + ? WHERE id = ?", (100, 2))
    conn.commit()
except Exception as e:
    conn.rollback()
    print(f"Transaction failed: {e}")

Stored Procedures

# Call stored procedure
call_sql = "CALL calculate_totals(?, ?)"
cursor.execute(call_sql, ('2024', 'Q1'))

# Get results
results = cursor.fetchall()

Connection Pooling

class DB2ConnectionPool:
    def __init__(self, conn_str, pool_size=5):
        self.conn_str = conn_str
        self.pool = []
        for _ in range(pool_size):
            conn = ibm_db_dbi.connect(conn_str)
            self.pool.append(conn)

    def get_connection(self):
        if self.pool:
            return self.pool.pop()
        return ibm_db_dbi.connect(self.conn_str)

    def return_connection(self, conn):
        self.pool.append(conn)

# Usage
pool = DB2ConnectionPool(conn_str)
conn = pool.get_connection()
cursor = conn.cursor()
# ... use cursor ...
pool.return_connection(conn)

Query Results as Dictionaries

def query_as_dict(cursor, sql, params=None):
    """Execute query and return results as dictionaries."""
    cursor.execute(sql, params or ())
    columns = [desc[0] for desc in cursor.description]
    results = []
    for row in cursor.fetchall():
        results.append(dict(zip(columns, row)))
    return results

# Usage
sql = "SELECT item_id, quantity, price FROM inventory"
items = query_as_dict(cursor, sql)
for item in items:
    print(f"Item {item['item_id']}: {item['quantity']} @ ${item['price']}")

Error Handling

import ibm_db_dbi

try:
    conn = ibm_db_dbi.connect(conn_str)
    cursor = conn.cursor()
    cursor.execute(sql)
except ibm_db_dbi.DatabaseError as e:
    print(f"Database error: {e}")
except ibm_db_dbi.ProgrammingError as e:
    print(f"Programming error: {e}")
finally:
    if cursor:
        cursor.close()
    if conn:
        conn.close()

Context Manager

from contextlib import contextmanager

@contextmanager
def db2_connection(conn_str):
    """Context manager for DB2 connections."""
    conn = ibm_db_dbi.connect(conn_str)
    try:
        yield conn
        conn.commit()
    except Exception:
        conn.rollback()
        raise
    finally:
        conn.close()

# Usage
with db2_connection(conn_str) as conn:
    cursor = conn.cursor()
    cursor.execute("SELECT * FROM inventory")
    results = cursor.fetchall()