存储过程的输出参数
SQL Server存储过程是SQL数据库的重要组成部分,其中可以用到许多参数。在SQL Server存储过程中,支持输入(Input)、输出参数(Output),也支持返回值参数(ReturnValue)。
返回值参数不是一个形参,而类似于编程中的返回值类型。它都是通过Return语句来返回的,而且在SQL Server中,必须返回INT型的数据,而且很显然,只能有一个返回值,因为RETURN语句其实是会终止SQL Server存储过程的。
例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
ALTER PROCEDURE [dbo].[GetCustomers]
(@rowcount INT OUTPUT)
AS
SELECT [CustomerID]
,[CompanyName]
,[ContactName]
,[ContactTitle]
,[Address]
,[City]
,[Region]
,[PostalCode]
,[Country]
,[Phone]
,[Fax]
FROM [Northwind].[dbo].[Customers]
SET @rowcount=@@rowcount
‘贰’ Sql Server中存储过程中输入和输出参数(简单实例 一看就懂)
[sql]
--
===================【创建存储过程】=====================
USE
[Message]
GO
/******
Object:
StoredProcere
[dbo].[读取外部数据库查询]
Script
Date:
10/24/2012
05:39:16
******/
SET
ANSI_NULLS
ON
GO
SET
QUOTED_IDENTIFIER
ON
GO
--
=============================================
\\
Working没有变1,错误码没有测试,计划时间测试,企业名称
create
PROCEDURE
[dbo].[数据库查询]
@SmsContent
varchar(20)='1231',
--
输入参数
@bj1
int
out
--
输入出参数
AS
BEGIN
SELECT
@bj1=count(Id)
from
sss
END
--
===============【调用】==================
USE
[Message]
DECLARE
@return_value
int
EXEC
[dbo].[数据库查询]
'1231',@return_value
output
SELECT
@return_value
‘叁’ 存储过程参数输入和输出参数有什么作用
无论是输入的参数还是输出的参数,在此过程中都视为一个参数,所以一般情况下对应你定义的参数类型和个数带入,便可调用。
存储过程后面的是参数列表,其实存储过程就是个方法,通过传递参数来指导方法完成。输出参数相当于返回值,会带output关键字。
其它参数要提前赋值,而output不需要提前赋值,只需要提供一个变量,在存储过程执行完的时候,output类型的变量值就会修改,获得返回值,只能通过这个方法获得返回值,而不能像函数一样直接返回结果。因为存储过程是没有返回值的。
(3)存储过程的输出参数扩展阅读
1、存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
2、当对数据库进行复杂操作时(如对多个表进行Update,Insert,Query,Delete时),可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。
3、存储过程可以重复使用,可减少数据库开发人员的工作量。
4、安全性高,可设定只有某些用户才具有对指定存储过程的使用权。
‘肆’ 在PLSQL中,存储过程的输出参数最大支持多大
在PLSQL中,存储过程的输出参数(varchar2)最大支持多大?
用的数据库是 Oracle 10.2. , PLSQL 7.1 。
我自己做了个测试
create or replace procere te1(ResBuff out Varchar2) is
begin
ResBuff := LPAD('a',2001,'b');
end ;
执行结果报错:
ORA-06502:PL/SQL:number or value error:character string buffer too small
长度2000的时候正常,配置默认的NLS_LANGUAGE = AMERICAN;NLS_CHARACTERSET = ZHS16GBK;
补充,这个输出参数Varchar2最大支持长度能修改吗?
------解决的方法--------------------------------------------------------
最大支持4000,我完全没发现你说的问题
create or replace procere te1(ResBuff out Varchar2) is
begin
ResBuff := LPAD('a',2001,'b');
end ;
DECLARE
a varchar2(3000);
BEGIN
te1(a);
dbms_output.put_line(a);
END;
------解决的方法--------------------------------------------------------
你是不是在DECLARE变量的时候,只定义了2000的长度。最长可以是4000
------解决的方法--------------------------------------------------------
存储过程中varchar2类型的变量,最大长度可以达到缓冲区的最大长度,即32767
而对于字段来说varchar2类型的最大长度是4000
例:
SQL codeSQL> create or replace procere testproc(
2 p_len int,
3 p_var out varchar2)
4 is
5 begin
6 p_var := lpad('a',p_len,'b');
7 end ;
8 /
过程已创建。
SQL> declare
2 v_var varchar2(32767);
3 v_len int := 32767;
4 begin
5 testproc (v_len,v_var);
6 dbms_output.put_line(length(v_var));
7 end;
8 /
32767
PL/SQL 过程已成功完成。
‘伍’ 存储过程中输出参数为游标的时候怎么处理
你的意思是不是要获取到“当前用户:user_id”这个的内容,如果是,两个方式可以解决:
1.通过存储过程的出参,将“当前用户:user_id”连接串返回;
比如:
假设你的过程叫,prc_test,在参数列表中增加出参。
create or replace procere prc_test(入参 in 类型, 出参 out 类型) is
begin
-- 逻辑实现
end;
出参就是你要把内容放进去,用来传值的变量。
2.在过程中保存一张临时表,然后在java中查出这个临时表中保存的数据。
定义临时表table_temp
在过程中
insert into table_temp(msg) values ('当前用户:' || user_id);
‘陆’ sql 存储过程里面输出参数是什么意思就是后面加个output 那种参数,和其他参数有什么不一样
其他参数要提前赋值,而output不需要提前赋值,只需要提供一个变量,在存储过程执行完的时候,output类型的变量值就会修改,获得返回值,只能通过这个方法获得返回值,而不能像函数一样直接返回结果。因为存储过程是没有返回值的。
‘柒’ 存储过程的输出参数是什么,帮我句子例子解释一下
随便什么数据类型都能做为参数的,之前写过一个,希望你能有用.
drop proc sp_stu
create proc sp_stu
@notpassSum int output,
@writtenpass int = 60
as
declare @writtenAvg float
select @writtenAvg=@writtenpass from stuMarks
print '本班成绩:' + convert(varchar(5),@writtenAvg)
print '------------------------------------'
select stuName,stuInfo.stuNo,writtenExam
from stuInfo inner join stuMarks
on stuInfo.stuNo = stuMarks.stuNo
where writtenExam < 60
select @notpassSum=count(stuNo) from stuMarks where writtenExam < @writtenpass
go
接下来是调用
declare @sum int
exec sp_stu @sum output,34
‘捌’ oracle中怎么执行带有输出参数的存储过程,在程序中我知道怎么调用,
1、新建一个存储过程(Procere)。
‘玖’ oracle存储过程如何输出信息
可用DBMS_OUTPUT.PUT_LINE()对存储过程的进行输出。
编写存储过程:
create or replace procere test_pro(in_num number)
as
M number;
begin
M := in_num;
if 0 < M then
dbms_output.put_line('输出SQL语句1');
elsif M < 3 then
dbms_output.put_line('输出SQL语句2');
else
dbms_output.put_line('nothing');
end if;
end;
(9)存储过程的输出参数扩展阅读;
存储在数据库的数据字典中,存储在当前的应用中安全性由数据库提供安全保证,必须通过授权才能使用存储子程序,安全性靠应用程序来保证,如果能执行应用程序,就能执行该子程序。模式描述IN参数用来从调用环境中向存储过程传递值,不能给IN参数赋值,给此参数传递的值可以是常量、有值的变量、表达式等。
‘拾’ 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