【问题标题】:how to call an oracle function in package on c#如何在c#的包中调用oracle函数
【发布时间】:2015-03-26 22:11:11
【问题描述】:

这是我的 pl sql 代码(包含函数的包):

CREATE OR REPLACE 
PACKAGE PACKAGE_REQUETE
IS
FUNCTION REQUETEFONCTION (ParametreId       requete.id%TYPE ) RETURN number;
END PACKAGE_REQUETE;
/
CREATE PACKAGE BODY  PACKAGE_REQUETE
IS
FUNCTION REQUETEFONCTION (ParametreId          requete.id%TYPE )
RETURN number IS
VariableId requete.id%TYPE ;
BEGIN
SELECT   id INTO   VariableId FROM   requete WHERE   id = ParametreId;
RETURN VariableId;
EXCEPTION WHEN OTHERS
THEN
    RETURN (-1);
END REQUETEFONCTION;
END PACKAGE_REQUETE;
/

我尝试使用 ExecuteScalarExecuteNonQuery 从 Windows 窗体应用程序调用它,但没有运气。

请在下方找到C# 代码:

private void button3_Click_1(object sender, EventArgs e)
    {
        OracleConnection conn = new OracleConnection(Authentification.chaineConnection);    
        OracleCommand cmd = new OracleCommand("PACKAGE_REQUETE.REQUETEFONCTION(1)", conn);
        cmd.Connection = conn;

        conn.Open();
        cmd.CommandType = CommandType.StoredProcedure;
        textBox1.Text = cmd.ExecuteScalar().ToString();
    }

能否请您帮我找出导致错误的原因。

【问题讨论】:

  • 但它不起作用 不是可接受的错误。您遇到的具体错误是什么?
  • ORA-06550:第 1 行,第 7 列:PLS-00221:“REQUETEFONCTION”不是过程或未定义 ORA-06550:第 1 行,第 7 列:PL/SQL:语句被忽略跨度>

标签: c# oracle


【解决方案1】:

有两种可能性:

1) 检查并确保包处于编译状态,并且您以同一用户身份连接。如果不是同一个用户,您需要授予该用户执行权限,并为包创建同义词或在函数调用中包含用户名。

2) 您的初始代码似乎像调用过程而不是函数一样调用它,因为我看不到返回参数的存储位置,但我不是 C# 人,所以这可能不合时宜。

这里有一个工作示例:executing function with C# and ODP.net

【讨论】:

    猜你喜欢
    • 2011-02-26
    • 2021-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-16
    • 1970-01-01
    • 2023-04-01
    相关资源
    最近更新 更多