00:00
好,那这块的话呢,我们首先呢,去创建一个文件啊,这呢是咱们的第15章吧。看第15章。存储过程与存储啊与存储函数行,我这个就加上存储这个俩字了,来把它呢,CTRLCCTRLSCTRLV,我们保存一下第15章没问题好。保存一下那个字稍微小一点吧。嗯,好,这个呢,我们接着说第一个问题,第一个问题的话呢,我们就相当于直接就来了啊,这个创建存储过程。OK啊,创建存储过程保存一下,那创建存储过程呢,刚才我们整体这个格式呢,已经说完了,那说完以后呢,我们下边呢,直接就写这个例子,这个例子的话呢,我这块写了好几个,咱们就一个一个粘过来,咱们来去写啊,一个来去写,首先这么个,哎,说创建一个存储过程叫select all data,然后呢,查询一下我们这个E这个表中的数据行,那一说到这儿的话呢,咱们先来一个储备吧。
01:00
这个咱们来领啊,这个准备工作。好,首先的话,我们首先的话呢,我们去create一个,嗯,咱们DB test15。那我们创建一个这个数据库啊,走起。可以了,然后呢,我们再去use一下啊DB test15好的。选中没问题,那接下来的话呢,我们这个DB它在事物里边,其实什么表也没有,F5刷新一下,这样的话呢,是不是十分不利于咱们下边呢,写这个存储过程对吧,那怎么办呀,我们这块呢,给他整两张表,咱们create,哎,Create。Create这个table,那我叫employees也行,Employees吧,Create table employees,然后as select。Select星,然后呢,From at硅谷DB这个下边的employees,咱把这个啊。咱们前面讲查询里边呢,用到的这个employees表的数据呢,咱们完全的给它复制一份啊,就这么着来,我们凑起来。
02:05
可以了,然后接下来同样的道理,我们再把那个部门呢,也给他复制一份,方便呢,咱们去使用叫departments行。A。Select from。啊,这个是咱们艾特硅谷DB的啊departments对吧?好,那这时候我们再去选中的执行。哎,可以了,好,那接下来的话呢,我们再去select,哎星from employees。看一下哦,这呢是咱们当前这个,呃,DB台15下边的来走起啊,107条记录没有问题,好再接着。哎,Like from一下啊,我们department。没问题。来我们这时候再选中啊,再执行好,这个时候呢,我们就有这个数据了,那有这个数据的话,有这个数据的话呢,我们接下来呢,就基于咱们这两张表,我们看一下具体的需求,你比如说这里边提到了说查看EMS这个表中的所有数据,咱们就把它呢,就理解成了是咱们这个employees表就可以了,那下边呢,也同样的道理。
03:09
好,来,我们看一下具体怎么做。嗯,这里边儿呢,让我们创建一个存储过程,都告诉我们这个需求,呃,这个名称了,我们就直接来了啊create。啊,Procedure。这个首先这个单词的话呢,大家不太好写啊,多写一写create procedure,名字呢已经起好了,直接拿过来啊,CR啊,往这一放没问题是吧?嗯,这里边的话呢,其实不涉及到这个参数的问题了,所以我们这就相当于是个空参的,然后接着呢,是不是就begin了?啊,咱们这个特性的话呢,在这里边就是咱们整体先了解一下啊,了解一下就行啊,我们这儿呢,就不涉及到那个特性的问题了,所以直接呢,Begin跟那个end是吧,呃,End这块呢,咱们默认情况下呢,是不是我就要写这个分号来结束了呀。啊,要写分号结束的,咱们没有写那个diam是吧,这个咱们一会儿去说啊,一会就说,然后呢,此时的话呢,我们要干什么事呢?查看employees表中的所有数据啊,那不就是select星from一下那employees嘛。
04:05
就这样呗。好,那么这样的情况下呢,你看我这时候呢,去做个首先咱们在这里边我F5刷新一下,你看存储过程这块是不是啥也没有来,我们这时候呢,把它选中做一个来执行,你看这时候呢,是不是就挂了。哎,这就挂了啊,那怎么办呢,这个呢,就咱们就说的那个分隔符啊,The limit啊用它啊,你用这个刀符也行。啊,用到勒符的话呢,呃,这个表示用它来表示这个结数,那所以我们这个位置呢,就用的到乐符。那结束以后呢,你再咱们再给它改回去吧,Limit,然后咱们再用分号结束啊,就是头跟尾呢,咱们下边呢,创建所有的存储过程和存储函数的时候呢,大家呢,哎,都记得头尾呢,相当于是以这个开始啊,以这个结束。啊,这样子好,那这时候我们再去选中,咱们跑一下。可以了,可以以后呢,你看这时候我们在这F5刷新一下,当然你会发现它,你看这时候是不是多了一个存储过程啊select a,那就是我们这时候写的塔。
05:02
哎,这就相当于是创建成功,哎创建成功,那创建成功以后呢?呃,这个大家可能就会想,那那我该如何去调用呢?是这意思吧,哎,我们顺带着把这个就说一下啊,这个叫存储过程的调用。哎,它的一个调用,这个调用的话呢,其实也会不同的存储过程呢,也稍有不同,因为呢,我们有时候呢,里边会包含这个参数,对吧,那对于我们这个没有参数的话呢,相对比较简单一些。这个调用的话呢,我们用的全都是这个扣。函数的话呢,我们不是讲完存储过程,下边讲函数,函数调用的用的是select,那我们这个存储过程调用的叫做靠靠谁呢?是不是就靠它呀。哎,就这样呗。哎,就可以,因为这没有参数嘛,就比较省事那。我们刚才已经Di limit这块恢复成这个分号了,所以我们现在用分号了,表示的是你这个,哎,是不是这个语句整个就结束了呀,好,我们选中执行一下,大家也会发现呢,是不是我们整个人就查出来107条记录是吧。
06:02
此时的话呢,我们相当于是把整个呢,你这个丰富的操作就封装在我们这个函数里边了,我们调用函数呢去,哎,说错了,封装在我们这个存储过程里了是吧?哎,然后呢,直接呢去调用这个存储过程呢就OK了。啊,只不过这里边我们存储过程呢,写的比较简单,然后你感觉说好像也差不太多,那一旦呢,我们这里边儿,比如说写上百事拉行代码,这时候你直接调一下存储过程,你就看出来,哦,原来还是挺简洁的啊,就是这个意思,行,那接着我们再举其他例子啊给大家呢,多练一练。啊,其实这块呢,也没啥别的了,就多写多写了就熟悉了。看这个说创建一个存储过程,它返回所有员工的平均工资啊,其实跟上面这个整体形式上差不太多,就我们create create。The procedure。把这个名字呢,我就直接粘过来了。嗯,CTRLC啊粘过来好,然后接着呢,我们begin是吧,嗯,查询一下呢,叫返回所有员工的平均工资,OK select,那我们叫avg的一个salary。
07:02
From一下employees,是这意思吧,然后呢,下边我们要写end了,那记着开头呢,我们再这样一下啊,CTRLC。那这个那这块的话呢,我们说常用的话,一个是Dollar符,一个呢就是这个符号。好,摁一下,那就这样呗,然后接着呢,The limit。啊,你再给他恢复过来。哎,这就OK了,行,那这时候我们选中了再去做一个执行。嗯,可以了,然后你这块呢,看一下F51刷新是不是多了一个啊没有问题,好,下边我们相当于是调用。咱们这个存储过程还是用这个扣行,然后呢,我们把这个呢,直接是不是调用一下就行,因为这个函数呢,它是没有参数的啊。行,那我们这块直接就小括号一下就OK了,来我们选中执行这就出来了,相当于呢,就是整个公司中所有员工的平均工资呢,是6461。啊,咱们讲查询的时候呢,也都做过啊,大概这个数上看都没有问题啊好,接着我们再来看下边几个题。CTRLC。
08:01
转过来。好说呢,创建存储过程,它,嗯,这个咱们就直接来吧,一边说一边做啊先这么着,然后最后呢,是不是拿这个哎,分号收尾尾,然后直接呢。Create procedure。呃,受max salary啊,就是来查询一下我们最高的一个工资,嗯,最高工资行这个小括号这样,然后呢,Begin一下对吧,然后在这里边呢,哎,这是employees表啊,你就把它看成employee表就行,找到它这个最高的工资是多少,那我们就直接呢,Select,嗯,Max salary。哎,然后from一下看employees,诶搞定是吧。然后呢,接着摁啊结束。嗯,用诶这个符号结束。可以了,来,我们选中了直行。好,下边呢,又是一个调用啊,我们CTRLC。
09:00
诶弹过来,哎,第样的话呢,你就这样啊,CTRLC一下,然后给您覆盖一下啊,最高工资是多少,来走一下啊,两万四没有问题。行,那刚才呢,咱们列的这三个例子啊,我举的我举了三个例子,其实都是相当于是这个空餐的。啊,这个我们可以在这儿也稍微写一下,这个算是这个类型一就是呃,无参数。啊,无返回值,哎,这样的一个场景。好,然后接着的话呢,我们看一下这个其他的一个场景,那下边呢,就是我们算式这个叫类型二。啊,我这个写的这个例子啊,都还是很讲究的啊,A2的话呢,我们是相当于是要带这个音了。哎,带这个音了,来我们看看怎么弄。看这个。嗯。这个了是吧。啊,先先讲带out的啊。哎,把这个我们这样注释一下,行,先讲带out的。看一下。
10:00
等它创建一个存储过程啊,这个只要是一写存储过程的,咱们上来就啊,Limit啊,先这么着啊,用它也行啊the limit把这个单词呢,大家写熟,然后在这呢,我们去写啊create。啊,Procedure。OK,受命这个salary是吧?上面这块我们查的是一个最高的工资,但是这块呢,我们没有把它这个返回给一个变量啊,是这么个场景,但这里边呢,就是需要把它这个给返回到一个变量上说呢,这个表达最工最低工资,并将那最低工资呢,通过out参数呢,这个给它输出回来,所以这里边我们就需要给他去传参数,呃,这个参数的话呢,只要是参数,它都得需要涉及到这个参数的名字和它的类型。啊和它的类型,我们这块呢,因为涉及到是这个薪资的问题了,薪资的问题的话呢,那有同学说这我用这个decim啊,我还是用这个double啊这块怎么着呀,你想想我们现在呢,是不是要把这个变量,呃,要把这个公司放到这个变量上,咱们用谁?诶需要大家去关注一下,注意听需要去关注一下我们这个员工表。
11:07
咱们这个员工表里边儿呢,工资这一项,你看我之前造表的时候呢,用的是个double类型,所以这个时候呢,大家你这个生命的类型这块你就别发挥了,咱们要把这个,呃,只不过呢,是一个最低的工资啊,但是不管最高最低的还是普通的工资都是double的,那你这块呢,是不是这个类型也要用这个double一下啊。啊,这个要小心啊,这要小心啊行,那我这块呢,就写上了,这个呢,就是我们的alt参数,那这呢就跟咱们声明,只要是MYSQL当中,咱们声明变量都是先写名后写类型,然后呢,前面这块呢,指明你是个in呢,是个out呀,还是in out,哎,就是这个道理啊行,然后接下来的话呢,我们是一个begin啊begin进去以后咱要干什么呢。这个。查询这个表里边这个最低的工资,然后把这个最低工资呢付给我们这个MS,就是mean salary是吧?嗯,这个怎么写啊,这个呢,大家没有见过,咱们是叫select,是叫mean salary,原来的时候呢,咱们是这么着做的,然后from一下叫employees,是这意思吧?啊,查询这个员工表里边的这个最低的工资,然后在这儿呢,我们要用个into。
12:12
啊,MS。就相当于把这个最低工资这个值,咱们把它写入到这个MS这个里面。啊,这个用的是叫into。行完事了啊,就这样来做啊,啊没有咱们接着先要小音这个把这个N呢写上啊,哎,这个双斜线啊,这个时候呢,我们就搞定了啊,这个时候把它选中呢,做一个执行。嗯,就可以了,可以以后的话呢,诶,这时候我们看一下这个调用。这个调用呢,跟咱们前面就有所区别了。我们要调用的话呢,你肯定是用这个扣对吧。嗯,掉了一个号,然后呢,咱们得把这个呢,是不是得写到这儿啊,但是你现在小心一点的,就是我们里边需要传这个参数了,这个参数的话呢,咱们是一个变量吧。嗯,是一个变量是吧,哎,我们还需要呢,去这个显示一下,说这个值到底是多少呢?那这咋弄呢?哎,我们得需要把这个变量,其实你直接呢就定义到这就可以了,看我直接就写一个叫MS了。
13:08
这个变量这块,这个行参呢,咱们具体来讲,这个变量怎么回事啊,咱们到下一章当中给大家呢再展开呢去,呃,从宏观上呢,咱们去看一看啊,说变量呢,这个整体上来讲有系统变量和用户变量之分啊,系统变量呢,又分成这个啊,又又分成这个叫全局的系统变量啊,和我们这个叫会话的这个系统变量啊,这个用户变量呢,又分成是这个绘画的用户变量和我们这个局部变量啊,这个就很很细了,这个咱们下一章当中,咱们再具体展开讲,这一章呢,咱们先是实用为主啊,先去用啊先去用。那我这呢,就是相当于定义的这个像加了一个艾特符了,表示咱们用户定义的这个变量,OK,那我这个完事以后咱们先。刚才已经创建成功了是吧,那我这F51刷新是不是已经有了。咱们这叫mean啊,这个OK好,那这有了以后呢,我们这时候选中执行一下啊,这不就执行好了,执行好以后呢,我们怎么去查看一下。
14:02
啊,这个变量值。怎么查呀?哎,我们就用select就行,哎,我们就MS。看MS好,我们这块呢,选中执行一下。2100。哎,大家呢,应该有印象,咱们这个员工表里边儿最低工资确实是2000亿是吧,哎,这张就我们这个结果。行这呢是咱们这个,哎,这个举例四,你看这里边是带这个out的。带out的行,那我们接着再看下边这个例子。啊,CTRLC。嗯,这个我们再回来。好,大家来看说呢,这个是创建存储过程,它这个咱们就直接一边说就一边写了,所以先把这个储备的工作呢,咱们先做好。好在这create。嗯,这个procedure。这个呢叫售3万salary啊,显示一下个别人的工资。那就这个。嗯,然后呢,找某个员工的工资,并用in参数呢,呃,是指明你是找哪个员工的,所以我们上来就来个in啊,叫EP name对吧,这个员工的话呢,记得一定要人家是一个姓名嘛,你指明一下它这个字段的类型,这个别丢了好,下边呢,就这个begin了。
15:19
那我们这时候呢,是不是要查询一下某一个人的工资,那我们要查询一下select是不是叫salary啊,From一下employees,然后where。这个叫lastname,等于,是不是等于我们刚才呢,传进来的这个值。哎,就是这个意思。哎,这样就可以了,然后最后呢,我们来一个N的收尾,哎,比较简单,其实是是吧,哎,好来我们选中了做个执行。哎,OK可以了,然后这个时候呢,我们下边来看一下这个调用问题。来我们下边呢去调用,那调用的话呢,我们实际上呢,还是用这个扣啊,只要是这个存储过程的调用呢,我们都是用的这个扣,调用的是它,哎,这个我们拿过来,然后现在的话呢,我们想调用一下这个函数呢,这呃,存储过程呢,我们需要呢,传一个这个值的啊传个值你可以呢,直接就写到这,比如我们想查询一下。
16:13
这个阿贝尔吧,传说这个人的一个这个工资是多少,那我们直接呢就选中,哎,走起。哎,他的工资呢,是11000。啊,这个答案你要是不清楚的话,你可以再查一下,咱们可以呢,直接select from employees说where。Lastname等于阿贝尔。这么着对吧。好,我们选中来做一个执行,那阿贝尔,那他确实的工资是一万一啊是没有问题的啊,是没有问题的,行,这个是一种调用,这个我们要调用的方式一吧。方式一。啊,其实呢,也可以怎么着呢。看一下调用方式二。这个呢也可以,怎么着就是这个呢,相当于我们直接呢,就相当于传一个常量一样就可传进去了,说我们能不能以一个变量的方式去传呢,也可以啊,那就稍微复杂一点啊,这个咱们下一章当中呢,给大家具体展开去说一下这个变量的事儿,咱们用户自定义的变量的话呢,我们用一个这个I的服务呢来表示,你要是系统的话呢,就两了啊,咱们用一个用一个呢,咱们此时的EP。
17:21
嗯,咱们叫name是吧,哎,我给它一个值,这个我用等号啊,叫谁呀,叫阿贝尔。能明白对吧,然后呢,你再去调用的时候呢,我们CTRLC哎拿过来,这时候你调用的话呢,是不是我们就把这个变量放在这就可以了。哎,就这个意思。能清楚吧。好,那我们选中了,执行一下是不是还是一万一没问题,那这个位置的话呢,这个叫等号,哎嗯,这个也可以呢,用这个冒号等于啊,这个就明确的就是个负值符号了。啊也是一万一啊,就是等号呢,或者这个冒号等于都行,这个呢,明确的就是叫赋值符号的意思。嗯,这个关注一下。好,那么这样的话呢,我们就把这个呢,就呃说清楚了,然后咱们这个练习的话呢,相当于主要呢,是来练的是这个in对吧?呃,上面呢是来。
18:07
哎,这个带这个out的。嗯,没有问题啊,这个我们是类型三。哎,这个呢,我们就来说到这儿啊,然后接下来我们再看下一个。嗯,粘过来。嗯,这么这么着。这里边儿的话呢,我们既出现了这个in,是不是又出现这个out了,所以这个呢,是一个新的类型。这个他说诶这个是我们这个看类型四。带印和。这个out。再看一下。首先呢,还是我们整个这个思路啊,Limit这个先写也行。然后我们先先用这个吧。Limit这个我们在这个分号呢,给它在这个变回去是吧,你要不变回去的话呢,你看我们下边这块老调是不是都以分号结尾的,所以大家呢,习惯上就头以这个开,以这个结束啊就完了。
19:06
然后在中间的话,我们就create。啊,Procedure。然后呢,这个名呢也起好了,直接拿过来啊,CTRLC啊往这一放。查看一下我们这个员工表里边某个员工的一个薪资,一个用in呢,哎,我们先写下in叫EP name,它呢是一个water类型的。啊,这两我们就来一个20啊,然后逗号一下啊,还有一个out参数叫EP salary,注意我这时候呢,故意呢,你看我把它写成叫DEC,大家看一下行不行。是逗号二。嗯,我写成了。EP salary行,没问题,然后下边的话呢,就是begin。说呢,查询一下这个员工的这个工资是多少,哎,这个比较简单,那就select。啊,Select这个什么呀。
20:02
这个员工的工资是多少?嗯,Select,我们叫salary。啊,然后into啊,咱们那会儿不是说过了是吧,Out的时候into到我们这个啊,Emmp这个salary这里边,然后from一下叫employees这个表,说where,哎,Last name,哎,等于咱们这个ERP name。这个大家这块呢,可能稍微有点不清楚,你可以先把它去掉,哎,这呢就是我们最熟悉的是不是查询一下我们指定这个叫这个名的员工的这个salary是吧,然后你把这个salary查完以后呢,给它into到这样的一个变量里面,那就可以了。所以说呢,我们关于存储过程呢,大家也可以别把它就是说就叫返回值了啊,只不过呢,就相当于你把这个变量传进去之后呢,然后在里边一顿操作呢,把这个数据写到这变量里了,那你这块呢,你因为是传进去的变量,就像我们刚才这样,你传进一个变量。这个这个用用这个不合适的,用用上面啊,这这块其实也也行啊,我们传进去一个变量了,那这块我再去拿这个变量的值,呃能查拿着了是吧,这是很正常的,所以我们叫说,诶alt呢,体现是一种返回,体现的是一种返回,但是呢,它是别理解成说真正意义上的返回值,因为只有函数呢,才有真正意义上的返回值,是这意思吧。
21:16
好的啊,这个我们再拉回来。嗯,这呢就完事了,我们这块呢,加一个N。哎,这个N的,那接着使用这个。嗯,好,那这时候呢,大家你看我此时呢,要执行的话呢,就会出一些问题啊,那走。哎,在这块是吧。嗯,这块,哎,这块还还行,诶这块没出,这块没提示出问题啊。我们SALARY2,诶可以啊可以,诶我这块担心的是什么问题啊,大家能理解吧,就是你看我们这个位置,这个位置的话呢,我写的是叫这个叫decimal啊,因为呢,咱们这个员工表里边儿,咱们那会儿也看了,所有的员工的这个sal都是这个double类型的,那我用这个类型呢,其实是冒着一定的风险的。冒着一定的风险的,哎,大家呢,就是你看一下你这个变量到底里边呢,是要怎么用,一定要跟你现在的表中的那个,哎,你比如说你是把这个写入到这里边的,那肯定的这个类型,包括它的这个,呃,存储的这个空间的大小是不是跟这个呢?你最好这个呢,类型跟它要一样,而且呢,这个范围你可以更大一些,但是你不能小了啊,这个一定要小心一点。
22:21
好,现在没有报错,没有报错,那我们就直接往下走,下边儿就调用呗。没问题,这样的话呢,我们就直接呢去调这个方法啊,说错了,调用我们这个存储过程。就它那这时候呢,我们就需要往里边是不是叫传东西了呀,啊,需要去传这个数据啊,这个我们先分号一下,那我们可以去set一下,这个首先呢叫EP name啊这个呢,咱们给人家一个传一个值。嗯,船,咱们还叫阿贝尔吧。来传这个阿贝尔行,然后呢,把它呢CTRLC啊,咱们传进去,先传的这个呢,相当于就是你前面这个in了,然后后边呢,就是我们要把它这个传出来的,那我就直接在这写了啊EP呢叫salary。
23:03
没问题吧,然后最后完事以后呢,咱们可以通过这个select。咱去查看一下啊,你这个变量的值,那就是相当于你记录的这个阿贝的这个工资了。啊,你也可以都选中,或者我们这个分开啊,你先选中这个呢,我们跑一下。没有问题是吧,然后呢,我们在这个呢,选中以后呢,做个执行一万一看就出来了。它就出来了,OK啊,就是这样做,或者呢,我们这边整体选中去执行也可以啊也可以。哎,这块的话呢,我们这个没有报错,那相当于呢,我们这个double跟这个DEC呢,有一个隐食的一个转换了,但是其他类型呢,如果没有存在饮食转换的时候呢,这个大家你不要自己想当然啊,不要自己想当然,包括呢,我们这个范围也是一样,那我们这个时候呢,如果这个工资呢,人家写的是15逗号二,我只举个例子啊,15逗号二,你这个呢,要写成十段二,而我们这个公司确实有可能是整数位呢,超出了这个,咱们这个整数位是八位,那我们这个整数位相当于13位,那如果这个呢,三六位确实有可能超出你这个整数为八的,你要这个因素的话呢,这是不是就挂了。
24:08
哎,所以呢,大家关于这个你要把这个因素到这个变量里边,这个变量呢,你在定义这块类型这块呢,你就别发挥了,就看一下人家这块怎么定义的啊,我这块呢,是拿它来给大家说明一下这个问题啊。好,这呢是咱们这个类型四了。取一个是这个类型四,前面呢,我们讲这个存储过程的类型的话呢,我给大家说一共是有五种类型。五种类型啊,再往上看一眼。12345吧,那我们是不是还是最后插一个它呀,哎带这个in和哎带in out的啊这种类型。那就这个。好,那我们这儿呢,还剩一个题目,这个题目呢,就专门来练它的。嗯,这个在我网上找一下。在这呢,哎,我们把这个呢,CTRLC。
25:02
啊,这里边儿这个例题啊,都是精心设计好的啊,还是花了一些这个时间的哈。来,我们看一下。嗯,有点长啊。行,还可以。首先呢啊,只要是写这个存储过程,包括我们这个存储函数上来了,你就先别看题呢,先那个limit是吧。到乐福也行,那我们老师用这个双旗线用刀乐福吧,然后the limit。分号结束。在这啊去。啊。呃,叫show manager name啊,CTRLCCTRLV啊粘过来啊,这个小括号过去,然后呢,我们看一下说查询某个员工这个领导的姓名,哎,并用一号的参数呢,他来输入员工的姓名,然后呢,这个再输出领导的姓名哟,都用这一个变量来表达了,行。要有点意思,这个呢叫EP name对吧?嗯,这个员工的姓名呢,咱们是一个what类型的。啊,保险起见呢,大家你要是后边这个范围呢,你把不准怎么办呀?啊,你是不是得先看一下我们这个EA employees。
26:10
对吧,然后这时候我们选中了做个执行,因为呢,我们这个变量呢,主要是来刻画谁呀,就是咱们这个员工的姓名的,那我们就呃,就以这个字段啊来去刻画它这个是25,所以这个位置呢,你最起码是不是也得写个25啊。那你写多了也没必要了,那就写25,写多了浪费,写少的话呢,有可能会出问题,因为呢,员工要万一是20,你这个写成十十五也有可能往里边塞不进去了,是吧,那就这个问题。行,那么接下来begin。哎,看一下怎么写。嗯,这个题呢,接下来的这个写法呢,其实主要呢,就是考察大家这个SQ的一个功底了,嗯,或者说呢,主要是一个查询的功底,我要查什么呢?某个员工领导的姓名,那你得先查出这个员工的领导的ID,然后再找,根据这个ID呢去找领导的姓名,实际上呢,是得用个子查询吧。
27:00
咱群大家还有印象吗?咱们先查出来这个员工的manage ID。咱们从里往外写。From一下啊,Employees,然后where什么呢?那这个叫lastname,等于咱们刚才写的这个。就他好,然后这呢,我们就查出来这个叫什么manage ID了啊,然后呢,根据这个manage ID,我们就查询一下这个它的这个叫last name from一下这个employees怎么着呀,说where。啊,这个employ employee ID等于咱们刚才查到的这个叫ID。这块呢,就是咱们前面讲的那个子查询,而且还算是一个比较简单的子查询啊,看看你是不是忘了啊。看一下。这个查询叫这个名的员工,就是先呢,作为一个in进来的啊,作为一个in进来的,找到这个员工他的managed,然后呢,看看谁的这个employed呢,是这个manager ID,是不是就找到这个lastname了,然后把这个lastname呢,怎么着呢,是不是into到我们这个EP name里边这块呢,体现的就是它作为这个out这个功能呢才出现的。
28:07
才出现的好,这个完事以后呢,我们再这块呢,再来一个N的,是不是表达这个结束啊,这一个倒整数啊,哎,就可以了,行,那此时呢,我们注意选中到这啊,上面不要选了,选中以后呢,执行一下。可以了是吧,太成功了啊,那成功以后的话呢,我们下边呢,就是一个调用。嗯,调用啊,那调用的话呢,我们就直接呢,去靠一下我们这个存储过程。哎,就它了,那这时候呢,因为我们呃,涉及到呢,要拿到这个变量的一个值了,所以我这块呢,我set一下定一个这个变量啊,咱们下一章当中具体来说这个变量的定义,好,那set一下我们叫EP name,嗯,咱们或者冒号等于或者等于都行,那咱就还拿这个阿贝来说吧。啊,定义好它之后呢,然后我们把这个CTRLC啊扔进去,首先呢,它体现in的时候呢,是在这啊这叫阿贝尔,然后呢,查出阿贝尔它的一个管理者的名字之后呢,再体现out的功能,再把它写出到我们这个变量里边,然后呢,我们只需要呢,是不是做一个select啊,我们这个变量就可以了呀。
29:13
行,你可以呢,先把这两行先跑一下。妥拉,然后呢,你这时候再执行,他走一下出来了,现在阿贝呢,他的这个管理者呢,是是他。啊管理着他啊,你要把不准的话呢,你就自己呢,在这块呢,再去查一下也行啊,其实呢,你没必要了啊吧啊这块呢,你可以再查一下,把这个位置呢,你就改成阿贝尔呗。啊,CTRLC。哎,我们这么着一下看一下啊。嗯,这这就不要了。哎,选中那是不是就它呀啊行,那说明我们这个是没有问题的啊,那也可以呢,大家你直接把它就全体都选中了去执行啊也OK啊也OK行,那这样的话呢,咱们就把这个什么呀,把这个存储过程当中啊五种这个情况呢,咱们就都讲了。
30:00
那只不过这里边儿呢,我们还是没有可涉及到,就是既有in又有out,又有in out,或者有好几个in好几个out的情况啊,那就是看你这个里呢,Begin跟end的这里边这个,那我们叫存储过程体啊,这个是什么意思了,就是你看你要干什么事了,那如果需要的话呢,这个参数呢,是可以设置的比较多的。啊OK行,那小结一下,咱们主要呢,给大家提到的点呢,就是我们如何呢去写这个存储过程啊,按照这个类型呢,我们去写的,包括呢,洗完之后我们还做了个事儿,就是该如何呢,是不是去调用啊。对吧,哎,如何就调用,那对于这个in的这种情况,对于这个out的情况,看我们需要呢,去设置一个变量了,然后呢,有in out的情况呢,我们得需要给个值,给值的呢,是体现的是你in的特征里边要用是吧?然后呢,哎,我们定义成一个变量呢,是因为它还要写,把数据写到这变量里边,我们再获取这个变量的值,体现是这个al的功能,哎,OK。哎,然后就是我们说的这个事儿好了,然后这块呢,有一个小的问题。
31:01
哎,小的问题说如何调试的问题,这儿呢,其实也是在体现,咱不说呢,存储过程有争议性嘛,这也是它有争议性的一个点,就是不建议用,为什么呀,我们这块呢,写的这个题目当中,其实咱begin的里边呢,就就这两行代码,其实很简单,真要是我们去定一个存储过程,有可能这里边呢,达到大几十行,甚至说呢,夸张点上百行都是可能的,那么如果你这个函数写啊,存储过程也好,或者存储函数也好啊,你写完以后,然后运行挂了。是吧,保存的时候挂了,或者运行的时候挂了,那你说这个时候我们要排错就很恶心了。就很恶心了,你注意啊,嗯,大家如果你学习过这个C语言啊,Java或者C加加的话呢,那些编程语言它都有非常好的集成开发环境。这个写的过程当中报错了,他就直接给我们提示出来,哎,你要是运营时候报错了,哎,这个也能给我们报出一些错误信息,包括我们还可以呢去做这个debug对吧?哎,非常的先进啊,人家有这个集成开发环境,但是呢,咱们这个circle呢,这方面做的就差一些,你这个结构呢,写的如果特别长,然后运行的时候呢,最后挂掉了。
32:07
啊,运用我们这个存储过程,或者是后边我们讲函数的时候挂了。那这个排错呀,是很崩溃的,那怎么办呀,那你这个begin啊,我这个写一下,你这个begin呢,跟这个end里边呢,可能写了这个上百行的这个circle,那你就得是叫逐行推进了。啊,或者说你把这个,呃,这个存储过程或者存储函数体呢取出来,呃,这个查询一下,找到一个结果呢,然后下边再去用一下,再再再下边去用一点点往后去推进看看呢,是不是哪块写错了。啊,所以说这个方面来讲的话呢,就体验就很差了。啊,这个效率呢就很低是吧,这呢就是我们说的这个叫调试困难这个事儿啊,但是呢,它也有一些第三方的调试工具啊,当然是收费的。啊,我们要自己去调试呢,就很崩溃啊,大家呢,理解一下我们这里边这个这个问题啊,知道这个情况,那关于我们说的这个存储过程啊,咱们就哎讲到这儿。
我来说两句