从 PL/SQL 在 VBScript 中执行的命令获取值
Getting values from PL/SQL executed command in VBScript
我目前正在尝试从 VBScript 调用 oracle 数据库函数中的函数。我想获取在 VBScript 中执行的 pl/sql 函数的值,但我不知道该怎么做。
假设我的 pl/sql 函数:
p_result := x_found_in_y(x, y)
(x, y 是 VARCHAR2 returns p_result BOOLEAN)
下面是我的脚本片段:
'Open connection
ConnectionString = "DSN=" & strDSN &";Uid=" & strUID & ";Pwd=" & strPWD & ";"
objConnection.Open(ConnectionString)
'--- assuming all the variables are initialized
strQuery =
"DECLARE p_bool BOOLEAN; BEGIN p_bool:= x_found_in_y('employee', 'employee_table'); END;"
Set objResults = objConnection.Execute strQuery
但是我不知道如何获取 p_bool(其中 returns 布尔值)并将其传递给 VBScript 中的变量。我猜这是一项简单的任务,但我对 VBScript 还很陌生。
我试图从 Whosebug 解决的问题中搜索,但似乎没有找到以前的类似案例。
我觉得应该是这样的:
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 数据类型(至少不能用于 return 值)。像这样写另一个 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)、更好的性能和更高的安全性(google for SQL-Injection)
可以写
cmd.CommandText = "BEGIN ? := x_found_in_y_NUM('employee', 'employee_table'); END;"
cmd.Parameters.Append cmd.CreateParameter("p_bool", adInteger, adParamReturnValue)
cmd.Execute
用于 IN
参数,但这不是推荐的方法。我不认为可以在没有绑定参数的情况下使用 return(或 OUT
)值。
我目前正在尝试从 VBScript 调用 oracle 数据库函数中的函数。我想获取在 VBScript 中执行的 pl/sql 函数的值,但我不知道该怎么做。
假设我的 pl/sql 函数:
p_result := x_found_in_y(x, y)
(x, y 是 VARCHAR2 returns p_result BOOLEAN)
下面是我的脚本片段:
'Open connection
ConnectionString = "DSN=" & strDSN &";Uid=" & strUID & ";Pwd=" & strPWD & ";"
objConnection.Open(ConnectionString)
'--- assuming all the variables are initialized
strQuery =
"DECLARE p_bool BOOLEAN; BEGIN p_bool:= x_found_in_y('employee', 'employee_table'); END;"
Set objResults = objConnection.Execute strQuery
但是我不知道如何获取 p_bool(其中 returns 布尔值)并将其传递给 VBScript 中的变量。我猜这是一项简单的任务,但我对 VBScript 还很陌生。
我试图从 Whosebug 解决的问题中搜索,但似乎没有找到以前的类似案例。
我觉得应该是这样的:
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 数据类型(至少不能用于 return 值)。像这样写另一个 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)、更好的性能和更高的安全性(google for SQL-Injection)
可以写
cmd.CommandText = "BEGIN ? := x_found_in_y_NUM('employee', 'employee_table'); END;"
cmd.Parameters.Append cmd.CreateParameter("p_bool", adInteger, adParamReturnValue)
cmd.Execute
用于 IN
参数,但这不是推荐的方法。我不认为可以在没有绑定参数的情况下使用 return(或 OUT
)值。