Tôi không chắc tôi hiểu những gì bạn đang cố gắng làm.
Nếu bạn muốn sử dụng giá trị
SET ls_engineer = IFNULL[engineer,'JM'];
0 thay vì SET ls_engineer = IFNULL[engineer,'JM'];
1 khi đối số đầu vào có giá trị SET ls_engineer = IFNULL[engineer,'JM'];
1, một cách để có được loại hành vi đó là khai báo một biến cục bộ trong quy trình.Kiểm tra giá trị của tham số và đặt giá trị của biến cục bộ phù hợp; Đặt biến cục bộ thành giá trị theo nghĩa đen
SET ls_engineer = IFNULL[engineer,'JM'];
0 khi đối số đầu vào là null hoặc với giá trị của đối số đầu vào khi nó không phải là null. Sau đó tham chiếu biến cục bộ trong câu lệnh SQL.Một cái gì đó như thế này:
DELIMITER $$
CREATE DEFINER=`james`@`%` PROCEDURE `Project_Status`[IN engineer VARCHAR[5]]
BEGIN
DECLARE ls_engineer VARCHAR[5];
SET ls_engineer = IFNULL[engineer,'JM'];
SELECT pp.pid_full
, pp.description_small
, pp.project_status
, pp.est_comp_date as 'Est Comp Date'
, ep.engineer
FROM project_pid pp
JOIN eng_project_hours ep
ON pp.pid_full = ep.pid_full
WHERE ep.engineer = ls_engineer ;
END$$
Lưu ý rằng điều này:
SET ls_engineer = IFNULL[engineer,'JM'];
Nhập tốc dễ đọc hơn tương đương với điều này:
IF [ engineer IS NULL ] THEN
SET ls_engineer = 'JM';
ELSE
SET ls_engineer = engineer;
END IF;
THEO SÁT
Hỏi: Ví dụ, trong đó tôi có 'JM' tôi muốn thủ tục chọn tất cả các bản ghi, đó có phải là một cái gì đó có thể được thực hiện trong điều này? Say for instance, where i have 'JM' i wished for the procedure to select all the records, is that something that can be done within this?
A: Có. Ví dụ, giả sử nếu tham số đầu vào có "giá trị đặc biệt" của
0, bạn không muốn có bất kỳ hạn chế nào trên cột SET ls_engineer = IFNULL[engineer,'JM'];
5, bạn có thể điều chỉnh truy vấn bằng cách thêm hoặc điều kiện vào mệnh đề WHERE ... Yes. Let's say, for example, if the input parameter has the "special value"
of SET ls_engineer = IFNULL[engineer,'JM'];
SET ls_engineer = IFNULL[engineer,'JM'];
0, you don't want any restriction on the SET ls_engineer = IFNULL[engineer,'JM'];
5 column at all, you could tweak the query by adding an OR condition to the WHERE clause...WHERE ep.engineer = ls_engineer
OR engineer = 'JM'
Nếu tham số đầu vào
SET ls_engineer = IFNULL[engineer,'JM'];
6 có giá trị SET ls_engineer = IFNULL[engineer,'JM'];
0, thì vị từ sau SET ls_engineer = IFNULL[engineer,'JM'];
8 sẽ trả về tất cả Điều khoản sẽ đúng cho tất cả các hàng.Nhưng tôi sẽ đề xuất rằng
SET ls_engineer = IFNULL[engineer,'JM'];
1 sẽ phù hợp hơn SET ls_engineer = IFNULL[engineer,'JM'];
0 như một giá trị "trả về tất cả các hàng" đặc biệt cho đối số đầu vào, không cần giá trị "mặc định" cho tham số đầu vào, tức là không cần dịch NULL thành NULL SET ls_engineer = IFNULL[engineer,'JM'];
0. Nhưng điều đó thực sự phụ thuộc vào trường hợp sử dụng của bạn, nhưng bạn có thể xem xét bỏ qua giá trị mặc định của IF [ engineer IS NULL ] THEN
SET ls_engineer = 'JM';
ELSE
SET ls_engineer = engineer;
END IF;
3 và chỉ làm một cái gì đó như thế này trong truy vấn của bạn:WHERE ep.engineer = engineer
OR engineer IS NULL
Q: Lý do/ý nghĩa cho tiền tố
4 là gì? What is the reason/meaning for the IF [ engineer IS NULL ] THEN
SET ls_engineer = 'JM';
ELSE
SET ls_engineer = engineer;
END IF;
IF [ engineer IS NULL ] THEN
SET ls_engineer = 'JM';
ELSE
SET ls_engineer = engineer;
END IF;
4 prefix?A:
Tiền tố
IF [ engineer IS NULL ] THEN
SET ls_engineer = 'JM';
ELSE
SET ls_engineer = engineer;
END IF;
4 chỉ là một ký hiệu kiểu Hungary mà tôi đã sử dụng từ ngày Oracle PL/SQL; Tôi chỉ tìm thấy đó là một cách thuận tiện để giúp theo dõi phạm vi và tạo các tên biến không xung đột với các tên biến khác hoặc với tên cột trong SQL.Trong một câu lệnh SQL, tôi có thể đủ điều kiện tên cột để tránh sự mơ hồ, nhưng không có cách nào để đủ điều kiện các biến [ngoài việc sử dụng các tham số liên kết].
Và tôi có thể xác định một biến cục bộ có cùng tên với biến toàn cầu và biến ghi đè biến cục bộ [ẩn] của tôi là biến toàn cầu, thường không phải là điều tôi muốn.
Tôi thực sự không phải là một fan hâm mộ của ký hiệu Hungary, đặc biệt không phải là kiểu Windows
IF [ engineer IS NULL ] THEN
SET ls_engineer = 'JM';
ELSE
SET ls_engineer = engineer;
END IF;
6 và IF [ engineer IS NULL ] THEN
SET ls_engineer = 'JM';
ELSE
SET ls_engineer = engineer;
END IF;
7, nhưng ký hiệu Hungary là một sự tiện lợi cho tôi trong Oracle PL/SQL.Tôi đã sử dụng chữ cái đầu tiên để xác định phạm vi của biến, "l" cho cục bộ, "g" cho toàn cầu "," cho đối số. Bức thư tiếp theo là tốc ký cho kiểu dữ liệu của biến, "s" cho loại varchar [chuỗi], "d" cho ngày, "n" cho số.
Vì vậy, "AS_" là một chuỗi đối số, "ld_" là cho một ngày địa phương, v.v.
Theo dõi các kiểu dữ liệu là rất quan trọng để tránh chuyển đổi dữ liệu tiềm ẩn ngoài ý muốn trong SQL và thực hiện một chuyển đổi rõ ràng đã nhìn sai "sai", ví dụ: Không cần phải có một to_date [] xung quanh một "ngày" hoặc một to_number xung quanh một số, nhưng cần phải chuyển một chuỗi vào số, v.v.
Để kiểm tra NULL hoặc biến trống, hãy sử dụng điều kiện IF. Hãy để chúng tôi tạo một thủ tục được lưu trữ -
mysql> delimiter // mysql> create procedure checkingForNullDemo[Name varchar[20]] begin if Name is NULL OR Name='' then select 'Adam Smith'; else select Name; end if ; end // Query OK, 0 rows affected [0.00 sec] mysql> delimiter ;
Trường hợp 1
Khi NULL được thông qua. Gọi thủ tục được lưu trữ bằng lệnh gọi
mysql> call checkingForNullDemo[NULL];
Điều này sẽ tạo ra đầu ra sau -
+------------+ | Adam Smith | +------------+ | Adam Smith | +------------+ 1 row in set [0.00 sec] Query OK, 0 rows affected, 1 warning [0.00 sec]
Trường hợp 2
Khi một giá trị được thông qua. Gọi quy trình được lưu trữ bằng lệnh gọi
mysql> call checkingForNullDemo['John Doe'];
Điều này sẽ tạo ra đầu ra sau -
+----------+ | Name | +----------+ | John Doe | +----------+ 1 row in set [0.00 sec] Query OK, 0 rows affected [0.00 sec]
Trường hợp 2
- Khi một giá trị được thông qua. Gọi quy trình được lưu trữ bằng lệnh gọi
- Cập nhật vào ngày 25 tháng 2 năm 2020 13:02:51
- Câu hỏi và câu trả lời liên quan
- Kiểm tra xem một trường trống hay null trong mysql?
- Trong các quy trình lưu trữ MySQL, làm thế nào để kiểm tra xem một biến cục bộ có phải là null không?
- Đặt giá trị tùy chỉnh cho các giá trị null hoặc trống trong mysql
- Kiểm tra các giá trị null hay không null trong một cột trong mysql
- Kiểm tra null hoặc trống trong java.
- Làm thế nào để kiểm tra xem trường là null hoặc trống trong mysql?
- Điều kiện ở đâu mệnh đề trong quy trình lưu trữ MySQL để đặt giá trị tùy chỉnh cho các giá trị null
- Làm thế nào để kiểm tra xem một thủ tục được lưu trữ có tồn tại trong MySQL không?
- Quy trình được lưu trữ bằng cách sử dụng biến trong biểu thức giới hạn?
- Làm thế nào một thủ tục lưu trữ MySQL có thể gọi một thủ tục lưu trữ MySQL khác bên trong nó?
- Chương trình Java để kiểm tra xem một chuỗi có trống hay không
- Làm thế nào để sử dụng cho vòng lặp trong thủ tục lưu trữ MySQL?
- Đặt điều kiện theo quy trình lưu trữ MySQL