从经典ASP调用Oracle存储过程

时间:2013-06-14 18:54:35

标签: oracle stored-procedures asp-classic

这是我的代码片段:

  Set cmd = Server.CreateObject("ADODB.Command")
cmd.ActiveConnection = objCon
       cmd.CommandType = 4
    cmd.CommandText = "SP_USERLOGIN"

       response.Write(p_user_id)
       cmd.Parameters.Append cmd.CreateParameter ("User_locked",adVarChar, adParamInput)
        cmd.parameters(0).value = p_user_id
       cmd.Execute

当我尝试附加参数时,我收到以下错误:

  

参数类型错误,超出可接受的范围,或者是   相互冲突。

我的存储过程只需要1个参数:

create or replace PROCEDURE        SP_USERLOGIN ( User_locked VARCHAR2 ) as
BEGIN
update tusers Set user_account_status='status' where user_id = User_locked;
commit;
END;

2 个答案:

答案 0 :(得分:2)

问题是没有定义adVarChar等常量。未定义参数的长度可能存在第二个问题(这是第四个参数)

有一个文件名ADOVBS.INC定义了这些,如果不包含,则必须使用常量

当这个问题消失时......

cmd.Parameters.Append cmd.CreateParameter ("User_locked",adVarChar, adParamInput)

......改为:

cmd.Parameters.Append cmd.CreateParameter ("User_locked",200, 1, 30)

上面的30varchar的长度值。

答案 1 :(得分:0)

用于替换笨拙的cmd对象及其参数处理的微小(Oracle)解决方法。 假设您要执行存储过程PROC1并将其传递给两个参数。您创建一个名为DUMMY的虚拟表,其中两个字段的类型与参数对应。您插入一行值为什么。您对DUMMY进行更新前触发。触发器必须与PROC1完全相同,并将其参数作为“更新”记录(:new.a,:new.b)的字段读取。 在ASP中,您使用“更新schema.dummy set a = ...,b = ...”语句,就是这样。 缺点:非正统。 优点:更清洁的ASP代码;轻松调试。 +返回参数可能以相同的方式向后,读取虚拟表(顺便说一句任何表)。