【问题标题】:Invalid oracle procedure parameters list无效的 oracle 过程参数列表
【发布时间】:2011-12-14 14:35:20
【问题描述】:

我有这样描述的 oracle 程序:

create or replace procedure "TEST_PROC" (
  param1 IN VARCHAR2, 
  param2 IN VARCHAR2, 
  output OUT BOOLEAN) is 
begin 
  output := True; 
end;

我有 vb6 代码填充输入/输出参数,如下所示:

...
Set conn = CreateObject("ADODB.Connection")
conn.ConnectionString = "Provider=MSDAORA; ...
...

cmd.CommandText = "TEST_PROC"
cmd.CommandType = 4 'adCmdStoredProc

Dim v As String
v = "some-value"        
cmd.Parameters.Append cmd.CreateParameter("param1", 200, 1, 255, v)
cmd.Parameters.Append cmd.CreateParameter("param2", 200, 1, 255, v)
cmd.Parameters.Append cmd.CreateParameter("output", 11, 2, 1, 0)

cmd.Execute

但它在执行时出现错误:

PLS-00306: wrong number or types of arguments in call to 'TEST_PROC'  

这里有什么问题? 先感谢您!

【问题讨论】:

  • 乍一看,我会说这是因为您试图将参数传递给“OUT”变量,该函数只需要 2 个输入,看起来好像传递了 3 个,你能请解释一下该功能应该做什么?
  • 它将获取过滤条件(2 个字符串)作为输入参数,如果存在记录则返回
  • 请问您有应用这 2 个过滤条件的 SQL 查询吗?
  • 谢谢你,马特! DCookie 找到原因了!

标签: oracle vb6 ado


【解决方案1】:

我认为您的问题在于过程中的 BOOLEAN 数据类型。 BOOLEAN 不是数据库类型,它是 PL/SQL 类型,ADO 只知道数据库类型。要对此进行测试,请将您的 BOOLEAN 输出参数替换为 NUMBER 或 VARCHAR,并查看是否可以从中获得结果。或者,将此过程包装在另一个将 BOOLEAN 转换为另一种类型的过程中:

CREATE OR REPLACE PROCEDURE WRAP_PROC (param1 IN VARCHAR2
                                     , param2 IN VARCHAR2
                                     , output OUT INTEGER) IS
  v_out BOOLEAN;
BEGIN
  test_proc(param1, param2, v_out);
  IF v_out = TRUE THEN
    output := 1;
  ELSE
    output := 0;
  END IF;
END wrap_proc;
/ 

【讨论】:

    猜你喜欢
    • 2011-05-15
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-28
    相关资源
    最近更新 更多