Tôi muốn cách tốt nhất để gọi thủ tục cửa hàng trong đó tôi có nhiều giá trị trong một tham số duy nhất như tham số thành phố có các giá trị như 'London', 'Lyon', 'KLN' và nhiều hơn nữa.
Quy trình lưu trữ của tôi là như thế này
CREATE PROCEDURE `GetCityEmpData`[IN `City` VARCHAR[64]]
BEGIN
SELECT * FROM Employees
WHERE Employees.City in [City];
END
và gọi nó như thế này
call GetCityEmpData["'London',Lyon'"] ;
Nó trả về 0 hàng trong đó có dữ liệu cho các tham số đã cho. Có thể thực hiện giống nhau mà không cần tuyên bố chuẩn bị?
hỏi ngày 3 tháng 2 năm 2016 lúc 5:55Feb 3, 2016 at 5:55
6
Bạn có thể thử điều này:
CREATE PROCEDURE `GetCityEmpData`[`City` VARCHAR[64]]
BEGIN
set @query = concat["SELECT * FROM Employees
WHERE Employees.City in [" , City , "]"];
PREPARE stmt FROM @query;
EXECUTE stmt ;
END
Sau đó, bạn có thể gọi thủ tục của bạn như bạn muốn:
call GetCityEmpData["'London','Lyon'"] ;
Đã trả lời ngày 3 tháng 2 năm 2016 lúc 6:10Feb 3, 2016 at 6:10
BasilebasileBasile
3061 Huy hiệu bạc7 Huy hiệu đồng1 silver badge7 bronze badges
4
Bạn có thể làm điều này bằng phương pháp find_in_set
CREATE PROCEDURE `GetCityEmpData`[IN `City` VARCHAR[64]]
BEGIN
SELECT * FROM Employees
WHERE FIND_IN_SET [Employees.City ,City];
END
và gọi nó như
call GetCityEmpData['London,Lyon'];
Đã trả lời ngày 2 tháng 3 năm 2020 lúc 14:16Mar 2, 2020 at 14:16
2
Dưới đây là một tập lệnh để tạo một bảng và một để tạo và thực hiện một quy trình được lưu trữ trên bảng, tôi đang cố gắng xây dựng một báo cáo vượt qua nhiều giá trị trong một tham số, nhưng quy trình được lưu trữ lấy các đầu vào làm danh sách được phân định dấu phẩy. Tôi đã bắt gặp một số trang web đã đưa ra kịch bản cho một chức năng Splitlist sẽ phân định danh sách riêng lẻ nhưng khi tôi đưa nó vào quy trình được lưu trữ, nó không được công nhận. Có ai thấy bất cứ điều gì sai với những gì tôi có ở đây và nếu vậy, có một giải pháp?
Cảm ơn nhiều!
Tạo bảng [DBO]. [Khách hàng] [
[CustomerID] [int] danh tính [1,1] không phải null,
[FirstName] [Nvarchar] [50] Không phải NULL,
[Middlename] [Nvarchar] [50] NULL,
[LastName] [Nvarchar] [50] Không phải NULL
]
ĐI
Chèn vào dbo.customer
Giá trị ['John', 'm.', 'Lynch'],
['Jason','TE','Whitten'],
['Jay','OldSchool','Novachek']
ĐI
Chèn vào dbo.customer
Giá trị ['John', 'm.', 'Lynch'],
------------------------ Tạo thủ tục lưu trữ
Tạo ví dụ về thủ tục
- Thêm các tham số cho quy trình được lưu trữ ở đây
@Customerid int = 0
BẰNG
BẮT ĐẦU
- Đặt số Nocount được thêm vào để ngăn các bộ kết quả bổ sung từ
- Can thiệp vào các câu lệnh chọn.
Đặt số lượng Nocount;
- Chèn tuyên bố cho thủ tục ở đây
Chọn CreatelID, LastName
Từ dbo.customer
Trong đó Ứng dụng trong [chọn * từ dbo.splitlist [@customerid, ',']] ------- Đây là vấn đề, tôi không thể khiến SP nhận ra chức năng trừ khi tôi phân định truy vấn và đặt nó làm Biến đổi
ĐI
Chèn vào dbo.customer
Giá trị ['John', 'm.', 'Lynch'],
------------------------ Tạo thủ tục lưu trữ
Tạo ví dụ về thủ tục
- Thêm các tham số cho quy trình được lưu trữ ở đây
ĐI
Làm thế nào tôi có thể chuyển nhiều giá trị vào một tham số của quy trình được lưu trữ mà không được tiếp xúc với SQL Injection?
Đăng bởi: y bt Ngày: 28 tháng 11 năm 2011 04:58 AMY BT
Date: November 28, 2011 04:58AM
Xin chào,
Làm thế nào tôi có thể chuyển nhiều giá trị vào một tham số của quy trình được lưu trữ mà không được tiếp xúc với SQL Injection?
Ví dụ: sp_get_data_by_id [in_id_list], trong đó ID là số nguyên. Hàm này trả về kết quả của: Chọn * từ TBL trong đó id trong [in_id_list] bằng SQL động.
This function returns result of:
SELECT * FROM tbl WHERE id IN [in_id_list]
using dynamic SQL.
Bây giờ tôi thực hiện nó bằng cách sử dụng tất cả các giá trị vào một số chuỗi [văn bản] và chuyển nó cho quy trình này, nhưng tôi tiếp xúc với SQL Intercection bằng cách này.
Cảm ơn.
Môn học
Lượt xem
Được viết bởi
Đăng
Làm thế nào tôi có thể chuyển nhiều giá trị vào một tham số của quy trình được lưu trữ mà không được tiếp xúc với SQL Injection?
11026
Ngày 28 tháng 11 năm 2011 04:58 sáng
3136
Ngày 28 tháng 11 năm 2011 11:54 sáng
3047
Ngày 29 tháng 11 năm 2011 02:23 sáng
2237
Ngày 29 tháng 11 năm 2011 10:37 sáng
2483
Ngày 29 tháng 11 năm 2011 03:00 PM
2585
Ngày 29 tháng 11 năm 2011 04:40 PM
2503
Ngày 30 tháng 11 năm 2011 03:00 sáng
2171
Ngày 30 tháng 11 năm 2011 03:55 PM
3108
Ngày 01 tháng 12 năm 2011 02:21 AM
3108
Ngày 01 tháng 12 năm 2011 12:06 PM
2134
Ngày 02 tháng 12 năm 2011 06:40 sáng
Xin lỗi, bạn không thể trả lời chủ đề này. Nó đã được đóng cửa.
Nội dung được sao chép trên trang web này là tài sản của chủ sở hữu bản quyền tương ứng. Nó không được xem xét trước bởi Oracle và không nhất thiết phải đại diện cho ý kiến của Oracle hoặc bất kỳ bên nào khác.