我当前正在尝试从VBScript的oracle数据库函数调用函数。我想获取在VBScript中执行的pl / sql函数的值,但我不知道该怎么做。
假设我的pl / sql函数为:
->index()
(x,y是VARCHAR2返回p_result BOOLEAN)
所以这是我的脚本的片段:
p_result := x_found_in_y(x, y)
但是后来我不知道如何获取p_bool(返回布尔值)并将其传递给VBScript中的变量。我猜想这是一个简单的任务,但是我对VBScript非常陌生。
我试图从stackoverflow解决的问题中搜索,但似乎没有找到以前的类似案例。
答案 0 :(得分:3)
我认为应该是这样:
Const adBoolean = 11
Const adVarChar = 200
Const adNumeric = 131
Const adChar = 129
Const adBigInt = 20
Const adInteger = 3
Const adParamInput = 1
Const adParamOutput = 2
Const adParamInputOutput = 3
Const adParamReturnValue = 4
Set cmd = CreateObject("ADODB.Command")
Set cmd.ActiveConnection = objConnection
cmd.CommandText = "BEGIN ? := x_found_in_y_NUM(?, ?); END;"
cmd.Parameters.Append cmd.CreateParameter("p_bool", adInteger, adParamReturnValue)
cmd.Parameters.Append cmd.CreateParameter("x", adVarChar, adParamInput, 100, "employee")
cmd.Parameters.Append cmd.CreateParameter("y", adVarChar, adParamInput, 100, "employee_table")
cmd.Execute
Wscript.Echo cmd.Parameters("p_bool").Value
根据我的评论,您不能使用BOOLEAN数据类型(至少不能用于返回值)。编写另一个这样的PL / SQL函数:
CREATE OR REPLACE FUNCTION x_found_in_y_NUM(x IN VARCHAR2, y IN VARCHAR2) RETURN INTEGER AS
BEGIN
IF x_found_in_y(x, y) then
return 1;
else
return 0;
end if;
END;
或在可能的情况下直接修改功能。
问号?
是参数的占位符。这是使用带有绑定参数的所谓准备语句的首选方法。每个?
映射到一个Parameter。它为您提供了更少的报价,格式问题(例如DATE),更好的性能和更高的安全性(针对SQL-Injection的Google)
可以写
cmd.CommandText = "BEGIN ? := x_found_in_y_NUM('employee', 'employee_table'); END;"
cmd.Parameters.Append cmd.CreateParameter("p_bool", adInteger, adParamReturnValue)
cmd.Execute
用于IN
参数,但不推荐这样做。我认为没有绑定参数的返回值(或OUT
)是不可能的。