-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathstored_procedures_parameters.sql
More file actions
91 lines (77 loc) · 1.79 KB
/
stored_procedures_parameters.sql
File metadata and controls
91 lines (77 loc) · 1.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
DELIMITER $$
CREATE PROCEDURE get_clients_by_state(p_state CHAR(2))
BEGIN
SELECT * FROM clients
WHERE state = p_state;
END$$
DELIMITER ;
DELIMITER $$
CREATE PROCEDURE get_invoices_by_client(p_client_id INT)
BEGIN
SELECT * FROM invoices
WHERE client_id = p_client_id;
END$$
DELIMITER ;
call get_invoices_by_client(3);
DROP PROCEDURE IF EXISTS get_clients_by_state;
-- procedure with default parameters
DELIMITER $$
CREATE PROCEDURE get_clients_by_state(p_state CHAR(2))
BEGIN
IF p_state IS NULL THEN
SET p_state = 'CA';
END IF;
SELECT * FROM clients WHERE state = p_state;
END$$
DELIMITER ;
DROP PROCEDURE IF EXISTS get_clients_by_state2;
DELIMITER $$
CREATE PROCEDURE get_clients_by_state2(p_state CHAR(2))
BEGIN
SELECT *
FROM clients c
WHERE c.state = IFNULL(p_state, c.state);
END$$
DELIMITER ;
-- Parameter Validation
DELIMITER $$
CREATE PROCEDURE make_payment
(
invoice_id INT,
payment_amount DECIMAL(9,2),
payment_date DATE
)
BEGIN
IF payment_amount <= 0 THEN
SIGNAL SQLSTATE '22003'
SET MESSAGE_TEXT = 'Invalid Payment Amount';
END IF;
UPDATE invoices i
SET
i.payment_total = payment_amount,
i.payment_date = payment_date
WHERE i.invoice_id = invoice_id;
END $$
DELIMITER ;
DROP PROCEDURE IF EXISTS make_payment;
call sql_invoicing.make_payment(2, 120, '2019-04-01');
select * from invoices;
-- Output parameters
DELIMITER $$
CREATE PROCEDURE get_unpaid_invoices_for_client
(
client_id INT,
OUT invoices_count INT,
OUT invoices_total DECIMAL(9,2)
)
BEGIN
SELECT
count(*), sum(invoice_total)
INTO invoices_count, invoices_total
FROM invoices i
WHERE i.client_id = client_id
AND payment_total = 0;
END$$
DELIMITER ;
DROP PROCEDURE IF EXISTS get_unpaid_invoices_for_client;
select * from invoices where client_id = 3;