创建存储过程输出参数
1)过程名
存储过程的名称,默认在当前数据库中创建。若需要在特定数据库中创建存储过程,则要在名称前面加上数据库的名称,即db_name.sp_name。
需要注意的是,名称应当尽量避免选取与MySQL内置函数相同的名称,否则会发生错误。
2)过程参数
存储过程的参数列表。其中,<参数名>为参数名,<类型>为参数的类型(可以是任何有效的MySQL数据类型)。当有多个参数时,参数列表中彼此间用逗号分隔。存储过程可以没有参数(此时存储过程的名称后仍需加上一对括号),也可以有1个或多个参数。
MySQL存储过程支持三种类型的参数,即输入参数、输出参数和输入/输出参数,分别用IN、OUT和INOUT三个关键字标识。其中,输入参数可以传递给一个存储过程,输出参数用于存储过程需要返回一个操作结果的情形,而输入/输出参数既可以充当输入参数也可以充当输出参数。
⑵ 在MySQL中如何创建一个带输出参数为一个表类型的存储过程
在MySQL中如何创建一个带输出参数为一个表类型的存储过程
首先需要知道“另一个存储过程”的结果集的所有列的类型。
假设“另一个存储过程”的名字是
sp1
,没有参数,返回的结果集共3列,全部为int型,那么“存储过程”里添加一个与结果集列数相同的临时表或表变量用于接收“另一个存储过程”的结果集
如下
CREATE
PROCEDURE
sp2
AS
DECLARE
@t
table(a
int,b
int,c
int)
INSERT
INTO
@t(a,b,c)
EXEC
sp1
SELECT
*
FROM
@t
使用
SQLSERVER
存储过程可以很大的提高程序运行速度,简化编程维护难度,现已得到广泛应用。
创建存储过程
和数据表一样,在使用之前需要创建存储过程,它的简明语法是:
引用:
Create
PROC
存储过程名称
[参数列表(多个以“,”分隔)]
AS
SQL
语句
例:
引用:
Create
PROC
upGetUserName
@intUserId
INT,
@ostrUserName
NVARCHAR(20)
OUTPUT
--
要输出的参数
AS
BEGIN
--
将uName的值赋给
@ostrUserName
变量,即要输出的参数
Select
@ostrUserName=uName
FROM
uUser
Where
uId=@intUserId
END
其中
Create
PROC
语句(完整语句为Create
PROCEDURE)的意思就是告诉SQL
SERVER,现在需要建立一个存储过程,upGetUserName
就是存储过程名称,@intUserId
和
@ostrUserName
分别是该存储过程的两个参数,注意,在SQL
SERVER中,所有用户定义的变量都以“@”开头,OUTPUT关键字表示这个参数是用来输出的,AS之后就是存储过程内容了。只要将以上代码在“查询分析器”里执行一次,SQL
SERVER就会在当前数据库中创建一个名为“upGetUserName”的存储过程。你可以打开“企业管理器”,选择当前操作的数据库,然后在左边的树型列表中选择“存储过程”,此时就可以在右边的列表中看到你刚刚创建的存储过程了(如果没有,刷新一下即可)。
二、存储过程的调用
之前已经创建了一个名为“upGetUserName”的存储过程,从字面理解该存储过程的功能是用来取得某一个用户的名称。存储过程建立好了,接下来就是要在应用程序里调用了,下面看一下在ASP程序里的调用。
⑶ sql server 中 一个要输入参数和输出参数的存储过程。
1、首先我们需要打开SQL Server Managment管理工具,新建一个表。
⑷ SQL 创建存储过程 输出对比参数
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
GO
create PROCEDURE [dbo].[proc_return]
@货物编号 nvarchar(50),--不清楚你的这个货物编号是要传进来还是要 在存储过程获取
@ReturnCount Int OutPut
AS
Begin
Begin TransacTion trans
Set @ReturnCount = 3 --这里先默认为3或者其他 ,如果要检测其他错误的话 会要用到 食物
--执行取得 货物编号 语句或者 存储过程
if(@货物编号='') --这里可以看成判断没有给出 货物编号
begin
select @ReturnCount=1
end
If Exists(Select * From 货物表 Where 货物编号 = @货物编号)--判断是否存在
Begin
select @ReturnCount=0
End
Else
Begin
select @ReturnCount=2
End
if @@error<>0 --判断如果以上执行有任何一条出现错误
begin
rollback tran --开始执行事务的回滚,恢复的转账开始之前状态
select @ReturnCount=3
end
else
begin
commit tran
end
End
呵呵 希望对你有所帮助。
⑸ 创建一个带输入参数和输出参数的存储过程
create proc Tproc
@id nchar(10),
@name nchar(20),
@sex nchar(10)
as
begin
declare @hasData nchar(10)
select @hasData=id from S where id=@id
if @hasData!=''
begin
print '学号重复'
return
end
if @name=''
begin
print '名字不能为空'
return
end
if(@sex!='男' and @sex!='女')
begin
print '性别只能是男或女'
return
end
else
begin
insert into S values(@id,@name,case @sex when '男' then 1 when '女' then 0 end)
if(@@ROWCOUNT>0)
print '记录成功插入!'
else
print '记录未成功插入!'
end
end
不知道是否符合你的要求,欢迎讨论!
⑹ sql server 中 一个要输入参数和输出参数的存储过程。
1、创建存储过程,包含入参、出参,返回入参除以的数据;
create or replace procere test_proc(in_num number, out_num out number)
as
begin
out_num := in_num/2;
end;
⑺ sql server 中 一个要输入参数和输出参数的存储过程。
第一步:点击数据库下的“可编程性”,选择“存储过程”,点击鼠标右键,选择“新建存储过程”
第二步:在create
PROCEDURE
后输入存储过程的名字,紧跟着的就是定义存储过程的参数,接下来就可以去编写自己所需要组装的存储过程语句了
注意,怕写的不对,可以执行下,想验证sql语句是否正确,就使用print输出下
第三步:点击上面的执行,存储过程就写好了,要怎么调用呢,在sqlserver的语句查询框中,输入exec
存储过程名
参数,执行就可以了。
⑻ sql存储过程 输出参数
SQL存储过程输出参数:
--===================【创建存储过程】=====================
USE[Message]
GO
/******Object:StoredProcere[dbo].[读取外部数据库查询]ScriptDate:10/24/201205:39:16******/
SETANSI_NULLSON
GO
SETQUOTED_IDENTIFIERON
GO
--=============================================\Working没有变1,错误码没有测试,计划时间测试,企业名称
createPROCEDURE[dbo].[数据库查询]
@SmsContentvarchar(20)='1231',--输入参数
@bj1intout--输入出参数
AS
BEGIN
SELECT@bj1=count(Id)fromsss
END
--===============【调用】==================
USE[Message]
DECLARE@return_valueint
EXEC[dbo].[数据库查询]'1231',@return_valueoutput
SELECT@return_value
⑼ 我创建了一个存储过程,输出参数我想弄成数组,数组怎么创建,pl/sql测试这个存储过程的时候怎么测试,谢谢
测试存储过程的话,只要右键选择要测试的存储过程,然后点"test"就可以了。
至于输出参数弄成数组,下面是一个实例,你可以参考下。
create or replace package test_pkg
as
type empRec is record
(
emp_id employees.employee_id%type,
emp_sal employees.employee_id%type
);
type sal_ty is table of empRec index by binary_integer;
end;
create or replace function test_p
return test_pkg.sal_ty
as
retval test_pkg.sal_ty;
begin
select * bulk collect into retval from employees;
return retval;
end;
SQL> l
1 declare
2 ret test_pkg.sal_ty;
3 begin
4 ret:=test_p;
5 for i in 1..ret.count
6 loop
7 dbms_output.put_line(ret(i).emp_id||' '||ret(i).emp_sal);
8 end loop;
9* end;
SQL> /
100 24000
101 17000
102 30000
101 30000