在VBScript中从PL / SQL执行的命令获取值

时间:2018-11-05 12:16:45

标签: oracle plsql vbscript adodb

我当前正在尝试从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解决的问题中搜索,但似乎没有找到以前的类似案例。

1 个答案:

答案 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)是不可能的。