SQL-Server存储过程中的参数问题!
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL-Server存储过程中的参数问题!相关的知识,希望对你有一定的参考价值。
Select如同set其实就是用来给变量赋值之用
isnull(@costPrice,0)的意思就是:@costprice的值要是空的话,那么就用0代替,如果不为空,那么就依然是原值
其实简单说,就是把@costprice中的空值变为0,其余的不发生变化。
isnull:使用指定的替换值替换
NULL
具体的你查询SQL中的联机帮助。
OUTPUT
表明参数是返回参数。该选项的值可以返回给
EXEC
。使用
OUTPUT
参数可将信息返回给调用过程。Text、ntext
和
image
参数可用作
OUTPUT
参数。使用
OUTPUT
关键字的输出参数可以是游标占位符。
INTPUT不清楚,没用过 参考技术A 楼上说的很清楚了
intput是输入参数,相对与output输出参数
存储过程除了返回查询结果以外可以返回一些值,这些值就是由这些标示为output的参数传递出去的。默认的都是input类型,所以不用定义
动态存储过程调用oracle中的动态参数绑定
【中文标题】动态存储过程调用oracle中的动态参数绑定【英文标题】:Dynamic argument binding in dynamic stored procedure call oracle 【发布时间】:2020-03-04 18:54:43 【问题描述】:我不仅需要动态调用存储过程,还需要动态地将参数传递给该存储过程。
参数来自ALL_ARGUMENTS
表,它是 Oracle 数据字典表。这些论点将根据rpt_wrapper_name
而有所不同。
例如 sp1 如下所示:
sp1 (v1, v2, v3)
存储过程sp2
如下所示:
sp2 (v1, v2, v3, v4, v5)
存储过程sp3
将如下所示:
sp3 (v1, v2, v3, v4, v5, v6, v7,...)
目前我正在尝试动态 SQL 调用,但这对我不起作用
EXECUTE IMEDIATE 'BEGIN ' || p_Rpt_wrapper_name|| '(' || p_ParamList || ') ; END;'
Using p_ParamListUsing;
where
p_ParamList := :v1,:v2,:v3
p_ParamListUsing:= v1,v2,v3
错误:
并非所有变量都绑定 ORA-01008
参数列表将根据rpt_wrapper_name
而有所不同
我们怎样才能做到这一点?请帮忙
【问题讨论】:
试试这样的:立即执行'begin'|| p_Rpt_wrapper_name||'('||v1||','||v2||....||');结束;'。 @gsalem:你的意思是不要使用 using 子句?静态参数传递对我有用,但我想要动态参数传递.. 我看不出像您所定位的动态传递将如何工作。 【参考方案1】:方法一:
更改过程以便它们采用参数表。
type r_para is record(
parameter_name varchar2(32),
parameter_vc varchar2(32000),
parameter_nb number,
parameter_dt date);
type t_para is table of r_para;
procedure p1(p_parameters t_para);
然后调用
v_para_list.append( r_para ('ref_time',null,null,sysdate);
execute immediate 'proc2(:pin_para)' using v_para_list;
方法二:
使用动态sqlhttps://docs.oracle.com/en/database/oracle/oracle-database/12.2/lnpls/dynamic-sql.html#GUID-1D6A4302-CBA0-47A6-B4A7-80B089DF4E61
c := DBMS_SQL.OPEN_CURSOR(true);
DBMS_SQL.PARSE(c, 'BEGIN get_employee_info(:id); END;', DBMS_SQL.NATIVE);
DBMS_SQL.BIND_VARIABLE(c, ':id', 176);
n := DBMS_SQL.EXECUTE(c);
【讨论】:
@Thomas : 方法 1 没看懂,能否详细说明一下? 我在哪里可以帮助您?如何创建 pl/sql 表?如何填表? @Thomas:任何示例工作代码都将帮助我理解执行流程、调用和解析以上是关于SQL-Server存储过程中的参数问题!的主要内容,如果未能解决你的问题,请参考以下文章