Hướng dẫn how to pass multiple values to one parameter in stored procedure in mysql - cách chuyển nhiều giá trị cho một tham số trong thủ tục được lưu trữ trong mysql

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.

Làm thế nào chúng ta có thể truyền nhiều giá trị trong một tham số trong quy trình lưu trữ SQL?

Đóng gói các giá trị thành một chuỗi với dấu phẩy được phân tách. Đặt chuỗi làm tham số và chuyển nó vào câu lệnh SQL. Giải nén các giá trị và chèn các giá trị vào một bảng, trong đó customerID trong [chọn ID từ #TEMP]. Set the string as parameter and pass it into the SQL statement. Unpack the values and insert the values into a table, Where customerid in [select id from #temp]

Làm thế nào để bạn vượt qua nhiều giá trị trong một tham số?

Vượt qua nhiều giá trị trong một tham số..
Bạn có thể chuyển nhiều hơn một giá trị trong một tham số duy nhất. Đối với ví dụ trên sử dụng trên mạng hoặc giữa hai thành phố, chẳng hạn như:.
//www.yourdomain.com/mypage.htm? ....
Đặt loại so sánh của trường lọc của bạn thành 'chứa' và đặt nó để nhận giá trị của tham số [@city] ..

Làm thế nào để bạn chuyển một danh sách các giá trị cho một tham số của một thủ tục được lưu trữ?

Tạo chức năng dbo.splitints [@list varchar [max], @delimiter varchar [255]] returns bảng làm return [select item = chuyển đổi [int, item] từ [chọn item = x.i.value ['[./ text []]. SplitInts [ @List VARCHAR[MAX], @Delimiter VARCHAR[255] ] RETURNS TABLE AS RETURN [ SELECT Item = CONVERT[INT, Item] FROM [ SELECT Item = x.i.value['[./text[]][1]', 'varchar[max]'] FROM [ SELECT [XML] = CONVERT[XML, '' + REPLACE[@List, @Delimiter, ''] + '']. query['.

Làm thế nào chúng ta có thể truyền nhiều giá trị số nguyên trong một tham số duy nhất trong quy trình lưu trữ SQL Server?

Nếu bạn đang hỏi về việc truyền nhiều giá trị như một tham số duy nhất, bạn cần xác định loại bảng do người dùng xác định với một hoặc nhiều cột và xác định đó là tham số dự kiến.Chỉ cần điền một biến bảng cùng loại trước khi gọi Proc và vượt qua điều đó.Làm cách nào để tham gia hai bảng giống hệt nhau trong SQL?define a user defined table type with one or more columns and define that as the expected parameter. Just populate a table variable of the same type before calling the proc and pass that. How do I join two identical tables in SQL?

Chủ Đề