一、sql存储过程参数如何设定sql存储过程参数如何设定的
sql存储过程如何定义参数?
创建过程
存储过程名称
[
{@parameter1
数据类型}
[=默认值]
[输出],
...,
{@parametern
数据类型}
[=默认值]
[输出],
]
如同
SQL语句
sql存储过程,输出参数?
(首先声明一下,我这是从别处抄下来的,虽然我的行为恶劣,不光彩,但是,希望答案对你有所帮助)
存储过程是指封装了可重用代码的模块或例程。存储过程可以接受输入参数、向客户端返回表格或标量结果和消息、调用数据定义语言(DDL)和数据操作语言(DML)语句,然后返回输出参数。在SQLServer2005中,存储过程有两种类型:Transact-SQL或CLR。
Transact-SQL
Transact-SQL存储过程是指保存的Transact-SQL语句集合,可以接受和返回用户提供的参数。例如,存储过程中可能包含根据客户端应用程序提供的信息在一个或多个表中插入新行所需的语句。存储过程也可能从数据库向客户端应用程序返回数据。
CLR
CLR存储过程是指对Microsoft.NETFramework公共语言运行时(CLR)方法的引用,可以接受和返回用户提供的参数。它们在.NETFramework程序集中是作为类的公共静态方法实现的。
sqlserver存储过程参数顺序?
创建存储过程时并无参数顺序问题,调用存储过程时需要俺创建时的顺序传参,同时。根据参数的类型是输入还是输出要准确的传参,如输出参数只能是变量
plsql怎么设置带参数?
1、首先打开一个的PLSQLDeveloper的界面中,点击左上角的工具。
2、然后在打开的工具下拉菜单中,点击首选项。
3、接着在打开的窗口中,点击左侧中的输出选项。
4、进入到了输出界面中,在缓冲区大小中输入大小。
5、大小输入完成之后,点击确定,就完成了。
sqlserver2008怎么建立储存过程?
在SQLServer2008中,你可以使用以下步骤来建立储存过程:
打开SQLServerManagementStudio,连接到你要建立储存过程的数据库。
在对象资源管理器中,找到储存过程所在的数据库,右键单击,然后选择“新建储存过程”。
在新建储存过程对话框中,输入储存过程的名称,然后在“储存过程”编辑器中编写储存过程的代码。
点击“执行”按钮,就可以创建储存过程了。
注意:在编写储存过程时,你需要使用T-SQL语言,并遵循储存过程的语法规则。如果你不熟悉T-SQL语言或储存过程的语法,可以参考相关文档或搜索教程学习。
二、如何给存储过程***传一个数组参数
方法一分割
例:通过SQL Server存储过程传送数组参数删除多条记录
eg. ID值为'1,2,3'以下存储过程就是删除表中id号为1,2,3的记录:
CREATE PROCEDURE DeleteNews
@ID nvarchar(500)
as
DECLARE@PointerPrev int
DECLARE@PointerCurr int
DECLARE@TId int
Set@PointerPrev=1
while(@PointerPrev< LEN(@ID))
Begin
Set@PointerCurr=CharIndex(',',@ID,@PointerPrev)
if(@PointerCurr>0)
Begin
set@TId=cast(SUBSTRING(@ID,@PointerPrev,@PointerCurr-@PointerPrev) as int)
Delete from News where ID=@TID
SET@PointerPrev=@PointerCurr+1
End
else
Break
End
--删除最后一个,因为最后一个后面没有逗号,所以在循环中跳出,需另外再删除
set@TId=cast(SUBSTRING(@ID,@PointerPrev,LEN(@ID)-@PointerPrev+1) as int)
Delete from News where ID=@TID
GO
这个方法麻烦不?于是又有另外一种方法——临时表
方法二 Table对象
传3个参数,都是数组形式还有时间类型用存储过程更新
@Oid= 1,2,3,4
@Did= 111,222,333,444
@DateArr='2007-1-1,2007-1-2,2007-1-3,2007-1-4'
CREATE proc Test999
@Oid nvarchar(1000)--ID1
,@Did nvarchar(1000)--ID2
,@DateArr nvarchar(1000)--日期
AS
DECLARE@id1s varchar(8000),@id2s varchar(8000),@dates varchar(8000)
set@id1s=@Oid
set@id2s=@Did
set@dates=@DateArr
--调用函数实现处理
SELECT@id1s=@id1s,@id2s=@id2s,@dates=@dates
UPDATE A SET terminate_time= B.dt
FROM [Table] A,(
SELECT
id1= CONVERT(int, Desk_id.value),
id2= CONVERT(int, room_id.value),
dt= CONVERT(datetime, terminate_time.value)
FROM dbo.f_splitstr(@id1s) Desk_id, dbo.f_splitstr(@id2s) room_id, dbo.f_splitstr(@dates) terminate_time
WHERE Desk_id.id= room_id.id
AND Desk_id.id= terminate_time.id
) B
WHERE A.Desk_id= B.ID1 AND A.room_id= B.ID2
GO这个还用到一个函数f_splitstr
CREATE FUNCTION dbo.f_splitstr(
@str varchar(8000)
)RETURNS@r TABLE(id int IDENTITY(1, 1), value varchar(5000))
AS
BEGIN
DECLARE@pos int
SET@pos= CHARINDEX(',',@str)
WHILE@pos> 0
BEGIN
INSERT@r(value) VALUES(LEFT(@str,@pos- 1))
SELECT
@str= STUFF(@str, 1,@pos,''),
@pos= CHARINDEX(',',@str)
END
IF@str>''
INSERT@r(value) VALUES(@str)
RETURN
END
三、ORACLE中如何为存储过程传递参数
第一种:只读。参数是只读的,不能修改,即调用时传递进来的是常量,或者变量(但变量不能在存储过程中修改)。通常select及DML类型的存储过程传递的是in类型的参数。
第二种:只写。忽略调用语句传递的任何参数,并在函数(过程)内部给这些参数赋值,因此是只写的。(这种情况是在函数或过程内部给参数重新赋值,但重新赋值后的参数是无法被外部调用的(好像游标类型的参数除外))
CREATE OR REPLACE PROCEDURE"SCOTT"."SWAP"(firstValue out
number, secondValue out number) is
temp number;
begin
temp:= firstValue;
firstValue:= secondValue;
secondValue:= temp;
end swap;
外部调用:
set serveroutput on;
declare
firstVal number;
secondVal number;
begin
firstVal:= 10;
secondVal:= 20;
scott.swap(firstVal,secondVal);
dbms_output.put_line('first is'|| firstVal);
dbms_output.put_line('second is'|| secondVal);
end;
无法在外部访问到firstValue与secondValue的值。此时打印出的结果为:
first is
second is
第三种:读或写。这可以完全控制参数,读取传递的参数的值。可以再函数(过程)内部修改参数的值,在退出函数(过程)后,这些参数被赋给在函数内部写入的值,这样就可以返回多个值。(即入口参数写入值后,可以传递到函数(过程)的外部,供外部调用的时候使用)
ps:函数中的返回值为如下几种:
char; varchar2; number; integer; date; boolean; table; record
SQL> CREATE OR REPLACE PROCEDURE HelloWorld2(
2 p_user_name IN VARCHAR2,
3 p_out_val OUT VARCHAR2,
4 p_inout_val IN OUT VARCHAR2
5) AS
6 BEGIN
7 dbms_output.put_line('Hello'|| p_user_name|| p_inout_val||'!');
8 p_out_val:='A';
9 p_inout_val:='B';
10 END HelloWorld2;
11/
Procedure created.
SQL> DECLARE
2 p_outval VARCHAR2(10);
3 p_inoutval VARCHAR2(10):='~Hi~';
4 BEGIN
5 HelloWorld2('Edward', p_outval, p_inoutval);
6
7 dbms_output.put_line('p_outval='|| p_outval);
8 dbms_output.put_line('p_inoutval='|| p_inoutval);
9 END;
10/
Hello Edward~Hi~!
p_outval=A
p_inoutval=B
PL/SQL procedure successfully completed.
四、存储过程的参数类型哪几种
存储过程共有IN、OUT、INOUT三种参数类型,格式如下:CREATEPROCEDURE(IN|OUT|INOUT参数名数据类型...)存储过程可以没有参数,但如果在使用过程需要用到参数,需按上面的格式进行定义。
第一项:IN|OUT|INOUT,表示参数的类型,选择其中的一种即可;第二项:参数名,表示参数的名称;第三项:数据类型,表示这个参数的数据类型,如int、float、double、varcahr等;第四项:“…”,表示参数可以定义多个,如果有多个参数时按前三项的格式定义即可,每个参数间用英文状态下的逗号“