PowerShell 执行 Oracle 8i 存储过程错误:参数数量或类型错误



My PowerShell 2.0 code:

$Cmd = New-Object System.Data.OracleClient.OracleCommand
$Conn = New-Object System.Data.OracleClient.OracleConnection
$Conn.Open() 
$Cmd.Connection = $Conn
$Cmd.CommandType = [System.Data.CommandType]::StoredProcedure
$Cmd.CommandText = "WEAMFG.PF_MERCH_OLY_PKG.ALAN_TEST"
$Cmd.Parameters.Add("P_INPUT", [System.Data.OracleClient.OracleType]::VarChar)
$Cmd.Parameters["P_INPUT"].Value = "1"
$Cmd.ExecuteNonQuery()  
$Conn.Close()

我的 Pl/Sql 代码:

PROCEDURE ALAN_TEST(P_INPUT VARCHAR2)
IS
vAnswer VARCHAR2(4000);
BEGIN
SELECT answer 
INTO vAnswer 
FROM weamfg.ASKTOM
WHERE ROWNUM = 1;
END ALAN_TEST;

执行存储过程会引发错误消息:

使用"0"参数调用"执行非查询"的异常:"ORA-06550: 第 1 行,第 7 列:PLS-00306:参数数量或类型错误 调用"ALAN_TEST"ORA-06550:第 1 行,第 7 列:PL/SQL:语句 忽视。

我在Windows XP机器上使用.NET 3.5。 有什么想法吗?

编辑:我可以执行一个没有输入参数的存储过程,并返回一个没有错误的游标。

您的过程没有专门声明的 out 参数。 或者,如果您使用的是函数,则不返回任何内容。

尝试将签名更改为

PROCEDURE ALAN_TEST(P_INPUT OUT VARCHAR2);

很多时候,在与 Oracle 交互时,如果您不确定是否会收到一条或多条记录,最好的方法是返回可以保存一条或多条记录的sys_refcursor。

PROCEDURE ALAN_TEST(P_INPUT IN VARCHAR2, p_cursor out sys_refcursor);

我发布的PowerShell代码并不完全准确,我试图将OracleCommand和OracleConnection对象作为参数传递给PowerShell函数。 当我调用 PS 函数时,我以为它们已被初始化,但它们没有。 来自PowerShell的其他错误消息是我忽略的无效方法调用错误。

最新更新