获取Access中(Oracle)存储过程输出参数的结果
我从未使用过存储过程,所以我完全迷路了。我们的一个DB管理员在Oracle中创建了一个SP,它接受三个变量,并且有一个OUT变量。一旦我调用它,我如何看到该过程的结果获取Access中(Oracle)存储过程输出参数的结果,oracle,ms-access,stored-procedures,Oracle,Ms Access,Stored Procedures,我从未使用过存储过程,所以我完全迷路了。我们的一个DB管理员在Oracle中创建了一个SP,它接受三个变量,并且有一个OUT变量。一旦我调用它,我如何看到该过程的结果 DECLARE v_srch_sw VARCHAR2(1); v_srch_crit VARCHAR2(20); v_ssn_last_four VARCHAR2(4); v_ivr_data VARCHAR2(4000); BEGIN DBMS_OUTPUT.enable(
DECLARE
v_srch_sw VARCHAR2(1);
v_srch_crit VARCHAR2(20);
v_ssn_last_four VARCHAR2(4);
v_ivr_data VARCHAR2(4000);
BEGIN
DBMS_OUTPUT.enable(buffer_size => NULL);
v_srch_sw := 'A';
v_srch_crit := '1234567890';
v_ssn_last_four := '1234';
schemaname.sp_name_010(v_srch_sw
,v_srch_crit
,v_ssn_last_four
,v_ivr_data);
DBMS_OUTPUT.PUT_LINE(v_ivr_data);
END;
/
注意:DBMS_OUTPUT.PUT_行将结果作为消息返回,但不是实际结果。例如,当我将此代码作为传递查询放入MS Access'07中时,不会返回任何结果。如何让它像普通的SELECT查询一样返回结果
如何让它像普通的SELECT查询一样返回结果
首先,请注意问题中的代码不是存储过程,而是调用存储过程并在Oracle中显示结果的PL/SQL代码
其次,AFAIK无法“像普通的SELECT查询一样”从Access调用该存储过程,因为该存储过程不返回结果集。相反,它将其值作为输出参数返回
但是,您可以在VBA中创建一个调用存储过程并返回结果的函数。下面的示例适用于SQL Server,但Oracle的代码应该非常类似。(例如,参数名称可能略有不同,可能省略了@
前缀。)
选项比较数据库
选项显式
公共函数调用_sp_name_010(v_srch_sw作为字符串,v_srch_crit作为字符串,v_ssn_last_four作为字符串)作为变量
Const linkedTableName=“dbo_Clients””现有ODBC链接表
Dim cdb作为DAO.Database
设置cdb=CurrentDb
Dim con作为新的ADODB连接
con.打开“DSN=“&Mid(cdb.TableDefs(linkedTableName).Connect,5)”忽略“ODBC;”前缀
Dim cmd作为新的ADODB.Command
cmd.ActiveConnection=con
cmd.CommandType=adCmdStoredProc
cmd.CommandText=“schemaname.sp_name_010”
cmd.Parameters.Append cmd.CreateParameter(@v_srch_sw),adVarChar,adParamInput,1)
cmd.Parameters.Append cmd.CreateParameter(@v_srch_crit),adVarChar,adParamInput,20)
cmd.Parameters.Append cmd.CreateParameter(@v_ssn_last_four),adVarChar,adParamInput,4)
cmd.Parameters.Append cmd.CreateParameter(@v_ivr_data),adVarChar,adParamOutput,4000)
命令参数(“@v_srch_sw”)。值=v_srch_sw
cmd.Parameters(“@v_srch_crit”)。Value=v_srch_crit
cmd.Parameters(“@v\u ssn\u last\u four”)。Value=v\u ssn\u last\u four
cmd.Execute
'函数返回输出参数值
调用_sp_name_010=cmd.Parameters(“@v_ivr_data”).Value
Set cmd=Nothing
结案
设置con=Nothing
Set cmd=Nothing
端函数
现在,如果需要,您可以在Access查询中使用该用户定义函数。我认为您缺少关键字
call
。您需要从程序中调用存储过程,并将out
变量捕获到合适的变量中。如果您在oracle/plsql中搜索call
,您应该可以找到一些通用语言(java等)的示例。我不是访问专家,但我不确定它是否可以使用out
参数调用过程,并对结果做任何有用的操作。此过程是否正在修改数据库中的数据?如果不是,我强烈怀疑它应该是一个存储函数,而不是一个存储过程,然后您可以像任何其他函数一样在select
语句中调用它。是否将pass-through查询设置为返回记录?我将检查此设置(显示PT查询的属性表以检查或设置此值)。