Khi làm việc với các hệ thống cơ sở dữ liệu MySQL hoặc MariaDB có sẵn (Legacy Database), nhiều trường hợp bạn cần thực thi các tác vụ hiệu năng cao thông qua câu lệnh SQL thuần túy hoặc kích hoạt các Stored Procedure đã được tối ưu sẵn dưới DB.Dưới đây là hướng dẫn chi tiết cách viết prompt để Claude Code sinh mã nguồn và thực thi các câu lệnh này trong NestJS thông qua lớp DataSource (không cần thông qua Entity).
Trong MySQL, các thủ tục lưu trữ được kích hoạt bằng từ khóa CALL. Khi nhận kết quả trả về, bạn cần chú ý cấu trúc dữ liệu của MySQL.
MySQL luôn trả về một mảng chứa nhiều phần tử, trong đó phần tử đầu tiên (chỉ số 0) mới là mảng danh sách bản ghi kết quả thực tế, các phần tử tiếp theo chứa metadata của phiên làm việc.
Hãy viết một hàm 'getSalesByRegion' trong 'ReportsService' (file src/reports/reports.service.ts):- Không sử dụng Entity. Hãy inject 'DataSource' từ thư viện 'typeorm'.- Gọi Stored Procedure có tên 'GetSalesByRegion' trong MySQL.- Truyền vào hai tham số: regionName (string) và minAmount (number).- Trả về phần tử đầu tiên của mảng kết quả (vì MySQL trả về mảng lồng chứa kết quả thực tế ở index 0).
Khi thực thi viết mã SQL thuần túy để thêm, sửa, xóa dữ liệu trong MySQL, bạn bắt buộc phải sử dụng ký tự giữ chỗ ? để truyền giá trị tham số an toàn chống tấn công SQL Injection.
Hãy viết một service 'RawProductsService' trong file 'src/products/raw-products.service.ts':- Sử dụng 'DataSource' để chạy các câu lệnh SQL thuần túy trực tiếp, không sử dụng Entity.- Cấu hình SQL tương thích với MySQL (sử dụng placeholders dạng '?').- Viết hàm 'insertProduct(name, price, description)' chạy câu lệnh INSERT INTO vào bảng 'products'.- Viết hàm 'updateProductPrice(id, newPrice)' chạy câu lệnh UPDATE.- Viết hàm 'deleteProduct(id)' chạy câu lệnh DELETE FROM.