Я думаю, что это должно быть так:
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;
Или, если возможно, измените вашу функцию напрямую.
Знаки вопроса ?
являются заполнителями для параметров. Это предпочтительный способ использования так называемых подготовленных операторов с параметрами связывания. Каждый ?
отображается на один Параметр . Это дает вам меньше проблем с цитированием, проблемами форматирования (например, для DATE), лучшей производительностью и большей безопасностью (Google для SQL-инъекций)
Можно написать
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
) значения без параметров привязки.