例 15-10:数一数一共多少学生
不带参数,也要写一对空括号。
重 点
没有参数时,CALL 后面的括号可写可不写,两句都跑得通。
想一想
过程名能不能跟表名一样?
不带参数,也要写一对空括号。
没有参数时,CALL 后面的括号可写可不写,两句都跑得通。
过程名能不能跟表名一样?
1304 和 1305,两个最常见的报错。
重名报 1304,删不存在的报 1305,加上 IF EXISTS 就只剩一条警告。
为什么不做成「重名就自动覆盖」?
课件说没选课的显示 NULL,可 COUNT 数出来是 0。
何欣荣那一行是 0 不是 NULL。要 NULL 得再套一层 NULLIF。
COUNT 永远返回一个数,一行没有就是零,它不会返回 NULL。
这里显示 0 和显示 NULL,哪个更合业务?
实参必须是 @ 变量,传常量当场报 1414。
常量装不住带回来的值,所以必须给一个变量的地方。
少传一个参数报 1318,它把该有几个、实际几个都写在报错里。
OUT 参数进去的时候是什么值?
既当输入又当输出,实参得是有值的 @ 变量。
调两次就加了两次,@m 从 100 变 105 再变 110。
课件把 @ 变量叫成「全局变量」,其实它是会话变量,换个连接就没了。
IN 参数在过程里被改了,外面的实参会跟着变吗?
课件第 69 页那段代码,原样敲一遍。
三个实参对三个形参,最后一个必须是 @ 变量,前两个是常量。
中间那个 people 其实可以省掉,直接 SELECT COUNT(*) INTO num 就行。
把参数顺序写反了会怎么样?
过程存进库里之后,代码随时看得到。
ALTER 只改得动特征信息,过程体要换代码只能先 DROP 再 CREATE。
这两条回显都很宽,按右上角的「上下」切一下版式就整屏放得下。
改一行代码就得删了重建,实际工作里怎么管版本?
自己写一个:给系别和分数线,数出这个系有几人上线。
两个 IN 一个 OUT,加一次连接查询,这就是考试大题的样子。
DISTINCT 去掉,数出来的还是人数吗?