sql 调用已经建立的存储过程

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql 调用已经建立的存储过程相关的知识,希望对你有一定的参考价值。

共有三张表学生表(学号,姓名,性别,班级,入学成绩,入学日期,家庭住址,年龄
,简历) 选课成绩表( 选课ID,学号,课程编号,成绩) 课程表( 课程编号,课程名称,学分,授课教师)
1.建立存储过程pro_tc,查询某一名教师所上的课程的名称,用变量返回查询结果(即课程名称),该存储过程包含一个输入参数。
create proc proc_avg
(@name char(10),
@avg float output)
as
select @avg=avg(成绩)
from 选课成绩表,学生表
where 姓名=@name and 选课成绩表.学号=学生表.学号

2.调用存储过程proc_avg,查询“李进”所上的课程名称
???、怎么写

实现的方法和详细的操作步骤如下:

1、第一步,创建一个存储过程,该代码如图所示。存储过程的主要目的是为表“JingYan”插入新数据,如下图所示,然后进入下一步。

2、其次,完成上述步骤后,执行以下几行代码,并查看执行是否成功。现在,数据库中有一个存储过程源“sp_JY”,如下图所示,然后进入下一步。

3、接着,完成上述步骤后,查看“JingYan”表中的当前数组,只有三行数据,如下图所示,然后进入下一步。

4、然后,完成上述步骤后,在mysql中,要调用存储过程,只需使用“call”关键字并输入存储过程的名称即可。当然,如果有参数,则需要带一个参数。代码见下图,然后进入下一步。

5、随后,完成上述步骤后,再次查看“JingYan”表中的数据,可以看到当前数据已经是四个,这表明对存储过程的调用已成功插入了新数据,如下图所示,然后进入下一步。

6、接着,完成上述步骤后,添加另一个存储过程,该存储过程使用select语句返回表数据,如下图所示,然后进入下一步。

7、最后,完成上述步骤后,调用新的存储过程,可以看到结果中已经返回了表数据,如下图所示。这样,问题就解决了。

参考技术A 关于DelPhi调用存储过程,用SQL server自带的“创建存储过程向导”给表login建立一个更新存储过程。 悬赏分:100 | 离问题结束还有 12 天 18 小时 | 提问追问

复制黏贴的真...........................

参考技术B 1)建立存储过程pro_tc,查询某一名教师所上的课程的名称,用变量返回查询结果(即课程名称),该存储过程包含一个输入参数。

create proc pro_tc(@tname varchar(10),@g varchar(1000) output)
as
begin
set @g=''
select distinct @g=@g+课程名称+',' from 课程表 where 授课教师=@tname
set @g=stuff(@g,len(@g)-1,1,'')
end

2)调用存储过程proc_avg,查询“李进”所上的课程名称???、怎么写

declare @savg float
exec proc_avg @name='李进',@avg=@savg output
select @savg
你写的存储过程是调取某学生的平均成绩,不能查询所上的课程名称追问

第二题不是调用存储过程proc_avg么 那是什么意思? 难道再重新写一个存储过程?

追答

是不是要你重新再写个存储过程?

dorp proc proc_avg
--删除已建立的存储过程proc_avg
create proc proc_avg(@name varchar(10))
as
select 课程表.课程 from 学生表,成绩表,课程表 where 学生表.学号=成绩表.学号 and 成绩表.课程编号=课程表.课程编号 and 学生表.姓名=@name
--重新建立个新的查询某学生的所有课程的存储过程
--执行:
exec proc_avg @name='李进'

追问

今天问老师了
use jxgl
go

create proc proc_kc
(@name char(8),
@kcmc char(20) output)
with encryption
as
select 课程名称
from 学生表 a ,选课成绩表 b,课程表 c
where a.学号=b.学号 and b.课程编号=c.课程编号 and 姓名=@name

declare @课程名称 char(20)
exec proc_kc '王海',@课程名称 output
print @课程名称

你的意思是对的,但是返回值应该是课程名称, 不过还是谢谢你 !

追答

不用谢,记得采纳答案啊

本回答被提问者采纳

oracle中的存储过程有啥作用,该怎么理解?(数据更新的话用update语句不就完了吗)

1.存储过程可以使得程序执行效率更高、安全性更好,因为过程建立之后 已经编译并且储存到数据库,直接写sql就需要先分析再执行因此过程效率更高,直接写sql语句会带来安全性问题,如:sql注入
2.建立过程不会很耗系统资源,因为过程只是在调用才执行。
3.存储过程可以用于降低网络流量,存储过程代码直接存储于数据库中,所以不会产生大量T-sql语句的代码流量。

4.使用存储过程使您能够增强对执行计划的重复使用,由此可以通过使用远程过程调用 (RPC) 处理服务器上的存储过程而提高性能。RPC 封装参数和调用服务器端过程的方式使引擎能够轻松地找到匹配的执行计划,并只需插入更新的参数值。

5.可维护性高,更新存储过程通常比更改、测试以及重新部署程序集需要较少的时间和精力。

6.代码精简一致,一个存储过程可以用于应用程序代码的不同位置。

7.增强安全性:
a、通过向用户授予对存储过程(而不是基于表)的访问权限,它们可以提供对特定数据的访问;
b、提高代码安全,防止 SQL注入(但未彻底解决,例如,将数据操作语言--DML,附加到输入参数);
c、SqlParameter 类指定存储过程参数的数据类型,作为深层次防御性策略的一部分,可以验证用户提供的值类型(但也不是万无一失,还是应该传递至数据库前得到附加验证)。
参考技术A 你用UPDATE语句一般是一次性的,或是变量需要经常更改的。存储过程一般是改变比较少的,大部分逻辑都是不变的,可以多次使用,或是一条语句需要经常运行的。像报表的,一般都是每周或是每月都要运行一次,用存储过程,定个job让它自动炮比较方便。本回答被提问者和网友采纳 参考技术B 简单说:update是语句,存储过程是模块。一个语句绝大情况是实现不了模块的功能。
假设一个需求:让你模仿一个转账程序。 你用update 语句可能实现吗?
参考技术C 存储过程不只是update,可以做很多事情,比例报表、数据清洗、转换等等。
好处直接baidu。
代码建议使用包,管理会比较方便。
update、delete这种操作碰到大数据量都会比较慢。
参考技术D 它可以一次执行多个SQL操作,可以输入参数,并返回特定的数据。

以上是关于sql 调用已经建立的存储过程的主要内容,如果未能解决你的问题,请参考以下文章

2008SQL 存储过程中可以创建视图吗

oracle的存储过程的作用

oracle的存储过程

存储过程写在数据库中和程序里有啥区别?

oracle中的存储过程有啥作用,该怎么理解?(数据更新的话用update语句不就完了吗)

数据库中的存储过程