我试图从MySQL存储过程中获取输出参数,让我们看一下下面的例子:
1在mysql中我创建了这个过程并且它有效.
CREATE PROCEDURE sp_name (out id int)
Begin
select id into @id from table order by id desc limit 1;
End
mysql> call sp_deduct_credit_and_money(@id);
Query OK, 0 rows affected (0.01 sec)
mysql> select @id;
+--------------+
| @id |
+--------------+
| 24 |
+--------------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
2因此,它也适用于Rails,但它不会为我返回任何值:
ActiveRecord::Base.connection.execute("call sp_name(@id)")
ActiveRecord::Base.connection.execute("select @id")
Run Code Online (Sandbox Code Playgroud)
这是Rails中的日志
(2.0ms) call sp_name(@id)
(0.1ms) select @id
Run Code Online (Sandbox Code Playgroud)
我的问题是如何获得输出参数的返回值@id?
我有一个存储过程返回一个字符串,我需要结果作为powershell变量.我坚持输出参数语法.
Powershell脚本:
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
$SqlConnection.ConnectionString = "Server=myserver;Database=mydb;Integrated Security=True"
$SqlConnection.Open()
$SqlConnection.State
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = "testsp3"
$SqlCmd.Connection = $SqlConnection
$op = new-object System.Data.SqlClient.SqlParameter;
$op.ParameterName = "@answer";
$op.Direction = [System.Data.ParameterDirection]'Output';
$op.DbType = [System.Data.DbType]'String';
$op.Size = 2500
$SqlCmd.Parameters.Add($op);
$what = $SqlCmd.ExecuteScalar();
$what
Run Code Online (Sandbox Code Playgroud)
错误信息:
使用"0"参数调用"ExecuteScalar"的异常:"过程或函数'testsp3'需要参数'@answer',这是未提供的."
存储过程如果重要:
CREATE PROCEDURE [dbo].[testsp3]
@answer nvarchar(max) output
AS
BEGIN
SET NOCOUNT ON;
SELECT @answer = 'blah blah blah'
RETURN
END
GO
Run Code Online (Sandbox Code Playgroud) 使用第三方API,我观察到以下内容.
而不是使用,
public static string getString(){
return "Hello World";
}
Run Code Online (Sandbox Code Playgroud)
它使用类似的东西
public static void getString(String output){
}
Run Code Online (Sandbox Code Playgroud)
我正在分配"输出"字符串.
我很好奇实现这种功能的原因.使用这些输出参数有什么好处?
我正在尝试编写一个以 List 对象作为输出参数的 Java 函数。
boolean myFunction(int x, in y, List myList)
{
/* ...Do things... */
myList=anotherList.subList(fromIndex, toIndex);
return true;
}
Run Code Online (Sandbox Code Playgroud)
在此之前,我调用函数,声明 myList 如下:
List myList=null;
Run Code Online (Sandbox Code Playgroud)
然后我调用该函数
myFunction(x,y,myList)
Run Code Online (Sandbox Code Playgroud)
但是当我尝试操作 myList 时,我发现 myList 仍然为空。
我确信anotherList我的函数代码中的变量不为空,并且我确信该subList函数返回一个非空列表。
原因是什么?如何在 Java 函数中传递 List 作为输出参数?
我有一个程序
create or replace PROCEDURE proc
(
p1 IN varchar2,
p2 IN varchar2,
p3 OUT varchar2
) AS
BEGIN
p3:= p1 || ' ' || p2
END proc
Run Code Online (Sandbox Code Playgroud)
我称之为
Declare
P3 varchar(50);
Begin
proc('foo', 'bar', P3)
END;
Run Code Online (Sandbox Code Playgroud)
我可以使用打印出 P3 的值
Dbms_Output.Put_line('P3: ' || P3)
Run Code Online (Sandbox Code Playgroud)
但我需要将结果作为可供选择的表格。我能想到的最好的办法是
Declare
P3 varchar(50);
Begin
proc('foo', 'bar', P3)
END;
SELECT &&P3 from dual;
Run Code Online (Sandbox Code Playgroud)
但这给了我一个错误
Error report -
ORA-06550: line 5, column 12:
PL/SQL: ORA-00936: missing expression
ORA-06550: line 5, column 5:
PL/SQL: SQL statement ignored
06550. …Run Code Online (Sandbox Code Playgroud) oracle stored-procedures output-parameter oracle-sqldeveloper
在执行存储过程时,是否可以从LINQ To SQL DataContext返回输出参数?
IEnumerable<Address> result =
ExecuteQuery<Address>(((MethodInfo)(MethodInfo.GetCurrentMethod())),
address, pageIndex, pageSize, totalCount);
Run Code Online (Sandbox Code Playgroud)
其中address,pageIndex与pageSize被输入的参数,并且TotalCount是一个输出参数.
如何捕获输出参数?
这是另一种尝试,但再次无法获取参数值:
[Function(Name = "Telecom.AddressSearch")]
private IEnumerable SearchAddress([Parameter(Name = "address", DbType = "varchar")] string address,
[Parameter(Name = "pageIndex", DbType = "int")] int pageIndex,
[Parameter(Name = "pageSize", DbType = "int")] int pageSize,
[Parameter(Name = "totalCount", DbType = "int")] ref int totalCount)
{
IEnumerable result = ExecuteQuery(((MethodInfo)(MethodInfo.GetCurrentMethod())), address, pageIndex, pageSize, totalCount);
return result;
}Run Code Online (Sandbox Code Playgroud) 如果我在MATLAB中有一个函数,并且在其中我有一个循环,它计算两个变量,如:
for index = 1:1000,
var1 = 0.0;
var2 = zeros(size(someMatrix));
...
%some calculus...
...
end
Run Code Online (Sandbox Code Playgroud)
我如何定义函数来返回这两个变量,但是它们在循环中遇到的所有变化都是如此
var1 = [1, 3, 5, 7]
var2 = some matrix,
Run Code Online (Sandbox Code Playgroud)
因此,该函数返回单个值.如何从循环中返回结果向量?
我正在尝试使用PetaPoco设置输出参数.我发现有人在线使用这个样本:
var ctx = new CustomDBDatabase();
var total = new SqlParameter("Total", System.Data.SqlDbType.Int);
total.Direction = System.Data.ParameterDirection.Output;
var results = ctx.Query<DBEntity>("exec GetDBEntities @StartIndex, @MaxIndex, @TotalCount = @Total out",
id, start, max, total);
int totalCount = (int)total.Value;
Run Code Online (Sandbox Code Playgroud)
但是,total.value返回null,即使我直接针对SQL Server运行此语句,它也会返回3.这是否与PetaPoco正确设置?是否支持输出参数?
谢谢.
我有一个时间从SQL Server获取输出值的魔鬼.
这是我的存储过程:
ALTER PROCEDURE [dbo].[Insert_UnknownCustomer_Quote_Document]
-- Add the parameters for the stored procedure here
@NewDocumentFileName nvarchar(100),
@NewDocumentWordCount int,
@NewQuoteAmount money,
@NewQuoteNumber int OUTPUT = 0
AS
DECLARE @Today datetime
SELECT @Today = GETDATE()
BEGIN TRANSACTION
BEGIN TRY
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
INSERT INTO dbo.Customers(DateAdded)
VALUES (@Today)
INSERT INTO dbo.Quotes(CustomerID, QuoteAmount, QuoteDate)
VALUES (@@IDENTITY, @NewQuoteAmount, @Today)
SELECT @NewQuoteNumber = …Run Code Online (Sandbox Code Playgroud) 我试图从Access 2013 VBA执行过程后从SQL Server 2008中的存储过程获取输出变量(新标识列).我并不完全了解所有的adodb内容,而且我已尝试过不同文章中的一些内容但无济于事.这就是我现在所处的地方......
存储过程:
PROCEDURE [proc_NewClient]
@Type INT,
@PhoneIntakeID INT,
@ClientID INT = NULL,
@NewPSID INT = null OUTPUT (2 possible ways to call the proc, one does not produce an output variable)
INSERT INTO tblClientDetails (ClientID, PhoneIntakeID, Client_Status)
VALUES (@ClientID, @PhoneIntakeID, 'Applicant')
DECLARE @NewClientDetailID int
SELECT @NewClientDetailID = SCOPE_IDENTITY()
INSERT INTO tblPS_Psychosocial (ClientDetailID, Client)
VALUES (@NewClientDetailID, @ClientID)
SELECT @NewPSID = SCOPE_IDENTITY()
INSERT INTO tblPS_AbuseHistory (PsychosocialID)
VALUES (@NewPSID)
INSERT INTO tblPS_FamilyHistory(PsychosocialID) VALUES (@NewPSID)
INSERT INTO tblPS_FinancialHistory (PsychosocialID) VALUES …Run Code Online (Sandbox Code Playgroud) ms-access vba stored-procedures output-parameter sql-server-2008
output-parameter ×10
java ×2
api ×1
c#-4.0 ×1
linq-to-sql ×1
list ×1
matlab ×1
methods ×1
ms-access ×1
mysql ×1
oracle ×1
petapoco ×1
powershell ×1
sql-server ×1
vba ×1