【问题标题】:PowerShell execute Oracle 8i stored procedure error: wrong number or types of parametersPowerShell 执行 Oracle 8i 存储过程错误:参数数量或类型错误
【发布时间】:2016-07-01 05:44:58
【问题描述】:

我的 PowerShell 2.0 代码:

$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”参数调用“ExecuteNonQuery”的异常:“ORA-06550: 第 1 行第 7 列:PLS-00306:错误的参数数量或类型 调用“ALAN_TEST”ORA-06550:第 1 行,第 7 列:PL/SQL:语句 忽略。

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

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

【问题讨论】:

    标签: oracle powershell stored-procedures


    【解决方案1】:

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

    尝试将签名更改为

    PROCEDURE ALAN_TEST(P_INPUT OUT VARCHAR2);
    

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

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

    【讨论】:

    • 我故意创建了不返回任何内容的存储过程,以便模拟对 INSERT 语句的调用。我试图调用的真实存储过程有很多输入参数,没有返回值/游标。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-30
      • 1970-01-01
      • 2021-12-11
      • 2011-12-26
      • 1970-01-01
      • 2020-06-17
      • 1970-01-01
      相关资源
      最近更新 更多