所有内容收录在合集~SQL入门到熟练。欢迎点赞关注我哦~
参数 Parameters
使用参数是为了在存储过程中传递值,也可以使用参数为调用程序赋值。
比如用代码创建了一个存储过程
然后我们再创建一个新的过程,但是增加一些条件。
在这个表格中,根据city_id来区分进行搜索。需要用到的一些内容:
CHAR 有几个字符的字符串
VARCHAR 可变长度的字符串,存储姓名,电话号码等信息。
先执行,得出存储,
然后按照id进行搜索,比如搜索300,得出结论。括号里面的值一定要提供,因为Mysql中的系数一定是必填的。
带默认值的参数 Parameters with Default Value
如果存储过程中无法明确哪个id,那么就默认返回一个值,比如300
就是在上面的语句中,增加IF子句。
他的开头是IF SET,结尾是END IF
如果要返回的是所有客户的话,可以这样写
1 分段查询 增加了else,然后写的时候调整一下顺序,IF语句,ELSE语句,END IF语句
这样写很复杂,自己都晕了。
2 调整一下句子,删除不用的部分,然后再写的时候运用ifnull即可。
顺便说一下实际参数,和形参
形参是占位符,我们在函数中定义的小小坑位,提供给形参的值叫做实参。
参数验证 Parameters Validation
这次使用payment表格,先创建一个更新过程,然后其中一个步骤进行参数验证,确保数据库不会往数据库存储错误数据。
CREATE PROCEDURE make_payment
(invoice id INT,
payment_amount DECIMAL(9,2), payment_date DATE
BEGIN
UPDATE invoices i
SET i.payment_total=payment_amount,
i.payment_date = payment_date
WHERE i.invoice_id = invoice_id;
END
然后写完执行,可以直接进行调用。
然后点击这里,就会出现这样的页面,可以直接填写数字
非常方便就可以进行改写
由于设置的问题,我的mysql不知道i代表什么,我只好改写一下
然后执行,打开发票进行查询,ok,对比一下时间已经修改。
众所周知,发票的金额是不可能为负数的,所以有时候手滑一下,输入了负数,那就需要设置一下查验。
先用IF语句来验证一下总额的参数,然后写出对应的代码和错误类别
搜索sqlstate errors,找到IBM打开,然后有很长很长的一串数字
这里我们用到的是22003,同时是一个字符串,
写出来长这样,然后进行测试
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
set
invoices.payment_total=payment_amount,
invoices.payment_date=payment_date
where invoices.invoice_id=invoice_id;
end $
然后打开make_payment的窗口,
直接输入负值,就会得出这个结果,完成
一个验证结果是有趣的,如果写太多的验证,就会让你的书写变得复杂。
同时,Mysql自带一定的自主检测,比如这个发票设置了0,就会自动标注错误。所以尽量利用最少的逻辑验证,保留关键的那些,
总结:
1相比访问数据库,直接在应用中检测和报告错误会更快速哦。
2 把参数验证做为终极备选方案,以防有人在没有通过应用直接调用了你的存储过程。