‘壹’ oracle中在存储过程中怎么返回值
第一个问题
:
oracle没有inser
into
表
存储过程
的语句格式,所以这个需要你根据实际要求换种思路做吧。
第二个问题:
sqlserver
:'a'+char(10)+'b'
oracle:'a'
||
chr(10)
||
'b'
sqlserver中的
char函数
在oracle中是chr,参数和
返回值
是一样的。
‘贰’ 怎么从sqlserver的存储过程获得返回的数据
SQL Server中存储过程的返回值不是通过return语句返回的(return语句是在用户自定义函数中使用的),而是通过存储过程的参数来返回,在定义存储过程的参数时使用关键字output来指定此参数是返回值。
而在调用存储过程时,也必须使用关键字给接收返回值的变量,这样才能在调用时获得存储过程的返回值。
示例:
create procere dbo.pr_add @a int, @b int, @c int outputas set @c = @a + @bgo
调用:
declare @v intexecute dbo.pr_add 1, 2, @v outputselect @v
‘叁’ sqlalchemy 调用 mssql存储过程如何获取返回值
请参参考以下代码:
from pyodbc import drivers, connect, Connection, Cursor
def output_cursor(cursor: Cursor):
...."""打印输出当前结果集"""
....print('-' * 80)
....print(','.join(_[0] for _ in rst.description))
....for row in cursor:
........print(row)
spt = '''
declare @returns int,@count int,@lastDoTime datetime
exec @returns = test_proc_call @count output,@lastDoTime output
select @returns returns,@count count,@lastDoTime lastDoTime
'''
cur = db.execute(spt)
for rst in iter_cursor(cur):
....output_cursor(rst)
输出:
--------------------------------------------------------------------------------
returns,count,lastDoTime
(18, 21, datetime.datetime(2020, 3, 4, 14, 43, 46, 923000))
存储过程:test_proc_call
create procere test_proc_call
(@p1 int output
,@p2 datetime output
)
as
begin
--此过程有返回值,有output参数,有结果集
select @p1=max(id),@p2=max(LastDoTime)
from Tasks with(nolock)
select * from Tasks with(nolock)
return @@rowcount
end
‘肆’ SQL 取存储过程的返回值
存储过程应该有返回值的,
问题应该出现在你vb6的调用语句中(第二个参数是输出类型的参数,
是否有正确设置).
你可以在查询分析器中执行此存储过程,
看看返回的结果.
还有,
此存储过程中的select语句最好加上top
1限制,
因为你只要判断是否能选到结果而已:
select
top
1
*
from
tb_package
where
packagenumber=@a
‘伍’ c#如何取得存储过程的返回值
比如你的存储过程返回参数变量名字为@res,而且sqlcommand cmd已经声明定义;
那么在执行sql语句之前
应该:
cmd.Parameters["@res"].Direction = ParameterDirection.InputOutput;
然后执行sql语句;
执行完毕再:
int res=(int)cmd.Parameters["@res"].Value;
结束,res就是存储过程的返回值了
‘陆’ 如何获取存储过程的返回值和输出值
没有见过调用存储过程象调用游标一样的代码,一般我是这样声明的:DECLARE Lproc_1 PROCEDURE FOR
proc_1 @as_int = :li_int OUTPUT ;
execute Lproc_cw_gz_personal_cal ;
变量li_int即为返回的值。如果要同时返回多行的数据,可以使用DATAWINDOW或者是DATASTORE来得到结果集:
string ls_sql_syntax , ls_syntax
string ls_error
integer li_ini
‘柒’ SQL中存储过程调用存储过程,怎么取返回值
存储过程中的第一个参数 @title 将接收由调用程序指定的输入值,而第二个参数 @ytd_sales 将向调用程序返回该值。SELECT 语句使用 @title 参数以获得正确的 ytd_sales 值,并将该值赋予 @ytd_sales 输出参数。
CREATE PROCEDURE get_sales_for_title
@title varchar(80), -- This is the input parameter.
@ytd_sales int OUTPUT -- This is the output parameter.
AS
-- Get the sales for the specified title and
-- assign it to the output parameter.
SELECT @ytd_sales = ytd_sales
FROM titles
WHERE title = @title
RETURN
GO
‘捌’ 如何 mysql 存储过程返回值
mysql中要获得存储过程的返回值,可以增加一个out参数,用来返回。
mysql中存储过程的例子:
CREATE PROCEDURE addvoucher (
IN userid INT,
IN voucherid INT,
OUT result INT
)
BEGIN
SELECT
@endate_a := endate ,@batch_a := batch ,@c_count_a := c_count,
@isdead_a := isdead
FROM
t_voucher
WHERE
id = voucherid;
SET autocommit = 0;
IF EXISTS (
SELECT
*
FROM
t_user_voucher tuv,
t_voucher tv
WHERE
tv.id = tuv.voucherid
AND tv.batch =@batch_a
) THEN
SET result = 1;-- 已存在
SELECT
result;
ELSE
IF @c_count_a > 0 THEN
IF (
TO_DAYS(@endate_a) - TO_DAYS(NOW())
) > 0 THEN
IF @isdead_a = 1 THEN
INSERT INTO t_user_voucher (userid, voucherid, isdead)
VALUES
(userid, voucherid, 1);
UPDATE t_voucher SET c_count = c_count-1 where id = voucherid;
SET result = 0;-- 成功
END;
‘玖’ 获取存储过程返回值
这个test(100,200)这个不对的吧,其中有一个是output的值,你这个都变成input了。
还有我估计参数2是输出参数,以为存储过程中需要把 输出的写在输入之后。
创建存储过程语法基本如下:
create or replace procere test1( 参数1 in varchar2(20),参数 2 out varchar2(20))
还有一种可能就是如果你这两个参数既能输入也能输出的话,是
create or replace procere test1( 参数1 in out varchar2(20),参数 2 in out varchar2(20))
这样就分不清楚哪个是输出了。
你是不是java程序组的,负责把BI组编的存储过程放进去?
这样需要多沟通了吧,我对java不是很了解,希望我说的sql方面的能帮到你。