什么是带参数的存储过程?

try-catch-finally 2011-05-28 03:17:40
我们做实验,有一道题:
2.建立不带参数的存储过程p1(选择所有年龄<21岁的男同学);
3.建立带有参数的存储过程p2(根据用户传递的参数只显示与指定学号的学生同龄的所有同学);



不理解是什么意思
求详解
...全文
616 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
--小F-- 2011-05-28
  • 打赏
  • 举报
回复
使用带有输出参数的存储过程 摘自MSDN

您可以调用的 SQL Server 存储过程是返回一个或多个 OUT 参数的存储过程,存储过程使用这些参数将数据返回到调用它的应用程序。可以使用 Microsoft SQL Server 2005 JDBC Driver 提供的 SQLServerCallableStatement 类,调用此类存储过程并处理其返回的数据。

使用 JDBC 驱动程序调用此类存储过程时,必须结合 SQLServerConnection 类的 prepareCall 方法使用 call SQL 转义序列。带有 OUT 参数的 call 转义序列的语法如下所示:

{call procedure-name[([parameter][,[parameter]]...)]}

注意:
有关 SQL 转义序列的详细信息,请参阅 使用 SQL 转义序列。


构造 call 转义序列时,请使用 ?(问号)字符来指定 OUT 参数。此字符充当要从该存储过程返回的参数值的占位符。要为 OUT 参数指定值,必须在运行存储过程前使用 SQLServerCallableStatement 类的 registerOutParameter 方法指定各参数的数据类型。

使用 registerOutParameter 方法为 OUT 参数指定的值必须是 java.sql.Types 所包含的 JDBC 数据类型之一,而它又被映射成本地 SQL Server 数据类型之一。有关 JDBC 和 SQL Server 数据类型的详细信息,请参阅 了解 JDBC 驱动程序数据类型。

当您对于 OUT 参数向 registerOutParameter 方法传递一个值时,不仅必须指定要用于此参数的数据类型,而且必须在存储过程中指定此参数的序号位置或此参数的名称。例如,如果存储过程包含单个 OUT 参数,则其序数值为 1;如果存储过程包含两个参数,则第一个序数值为 1,第二个序数值为 2。

注意:
JDBC 驱动程序不支持将 CURSOR、SQLVARIANT、TABLE 和 TIMESTAMP SQL Server 数据类型用作 OUT 参数。


作为实例,在 SQL Server 2005 AdventureWorks 示例数据库中创建以下存储过程:

复制代码 CREATE PROCEDURE GetImmediateManager
@employeeID INT,
@managerID INT OUTPUT
AS
BEGIN
SELECT @managerID = ManagerID
FROM HumanResources.Employee
WHERE EmployeeID = @employeeID
END

根据指定的整数 IN 参数 (employeeID),该存储过程也返回单个整数 OUT 参数 (managerID)。根据 HumanResources.Employee 表中包含的 EmployeeID,OUT 参数中返回的值为 ManagerID。

在下面的实例中,将向此函数传递 AdventureWorks 示例数据库的打开连接,然后使用 execute 方法调用 GetImmediateManager 存储过程:

复制代码 public static void executeStoredProcedure(Connection con) {
try {
CallableStatement cstmt = con.prepareCall("{call dbo.GetImmediateManager(?, ?)}");
cstmt.setInt(1, 5);
cstmt.registerOutParameter(2, java.sql.Types.INTEGER);
cstmt.execute();
System.out.println("MANAGER ID: " + cstmt.getInt(2));
}
catch (Exception e) {
e.printStackTrace();
}
}

本示例使用序号位置来标识参数。或者,也可以使用参数的名称(而非其序号位置)来标识此参数。下面的代码示例修改了上一个示例,以说明如何在 Java 应用程序中使用命名参数。请注意,这些参数名称对应于存储过程的定义中的参数名称:

复制代码 public static void executeStoredProcedure(Connection con) {
try {
CallableStatement cstmt = con.prepareCall("{call dbo.GetImmediateManager(?, ?)}");
cstmt.setInt("employeeID", 5);
cstmt.registerOutParameter("managerID", java.sql.Types.INTEGER);
cstmt.execute();
System.out.println("MANAGER ID: " + cstmt.getInt("managerID"));
cstmt.close();
}
catch (Exception e) {
e.printStackTrace();
}
Shawn 2011-05-28
  • 打赏
  • 举报
回复
存储过程的参数和函数的参数的意义是一样的。
参数的作用是:可以在存储过程内部,使用外部传入的变量。
chuanzhang5687 2011-05-28
  • 打赏
  • 举报
回复
存储过程的定义是什么你要明白
存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集是利用SQL Server所提供的Transact-SQL语言所编写的程序。经编译后存储在数据库中。存储过程是数据库中的一个重要对象,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是由流控制和SQL语句书写的过程,这个过程经编译和优化后存储在数据库服务器中,存储过程可由应用程序通过一个调用来执行,而且允许用户声明变量 。同时,存储过程可以接收和输出参数、返回执行存储过程的状态值,也可以嵌套调用。

参数,就相当于 sql语句中的条件
无参的存储过程 就是一sql语句,只是不用每次输入sql语句,而是调用一下存储过程就好了
叶子 2011-05-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 hellousb2010 的回复:]
我知道是这么写的,不知道是干什么的
[/Quote]
可以用程序直接调用存储过程,以实现相关操作。
try-catch-finally 2011-05-28
  • 打赏
  • 举报
回复
我知道是这么写的,不知道是干什么的
liangCK 2011-05-28
  • 打赏
  • 举报
回复
1
create proc p1
as
select * from tb where age<21
go

2
create proc p2
@id int
as
select * from tb where age=(select age from tb where id=@id);
go

34,576

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧