我有一个oracle的包,里面有三个function,我需要在c#程序中调用,请问各位大侠该怎么调用,不是调用procedure。谢啦!

解决方案 »

  1.   

    哪位大哥有代码的请给我一份,我现在把我的oracle包里的内容发给大家:
    下面是包的主题:
    create or replace package PKG_TEST is  -- Author  : ADMINISTRATOR
      -- Created : 2008-4-15 15:12:20
      -- Purpose : 该包主要为了测试对象
      type GenCurType is ref cursor;
      
      -----------------------------------------
      --功能:该存储过程主要是为了添加测试表中对象
      --参数:v2Name-名称
      --作者:
      --时间:2007-4-15
      PROCEDURE TTEST_INSERT(v2Name in varchar2);
      
      --根据编号删除该条记录
      FUNCTION TTest_Delete(numID in number) return varchar2;
      
      --根据编号修改该条记录
      FUNCTION TTest_Update(numID in number,v2Name in varchar2) return varchar2;  FUNCTION TTest_Select(v2Name in varchar2,Re_CURSOR OUT GenCurType) return varchar2;end PKG_TEST;接下来是包里面方法的具体执行语句:
    create or replace package body PKG_TEST is  -----------------------------------------
      --功能:该存储过程主要是为了添加测试表中对象
      --参数:v2Name-名称
      --作者:
      --时间:2007-4-15
      PROCEDURE TTEST_INSERT(v2Name in varchar2) IS
      BEGIN
        insert into ttest
          (id, name)
        values
          (seq_test.nextval, v2Name);
          commit;
      END TTEST_INSERT;
      --根据编号删除该条记录
      FUNCTION TTest_Delete(numID in number) return varchar2 IS
      BEGIN
         DELETE FROM ttest WHERE id = numID;
         commit;
         RETURN 'OK';
      EXCEPTION
        WHEN OTHERS THEN
          RETURN SQLERRM;
      END TTest_Delete;
      
      --根据编号修改该条记录
      FUNCTION TTest_Update(numID in number,v2Name in varchar2) return varchar2 IS
      BEGIN
         UPDATE ttest SET name=v2Name WHERE id = numID;
         commit;
         RETURN 'OK';
      EXCEPTION
        WHEN OTHERS THEN
          RETURN SQLERRM;
      END TTest_Update;
      
      FUNCTION TTest_Select(v2Name in varchar2,Re_CURSOR OUT GenCurType) return varchar2 IS
         V_CURSOR GenCurType;
         BEGIN
           if trim(v2Name) is null then
              return '参数为空';
           end if;
           --open cv_emp;
          
           if not V_CURSOR%isopen then
              open V_CURSOR for SELECT ID,name FROM ttest
               WHERE name like '%''' + v2Name + '''%';
              Re_CURSOR := V_CURSOR;
              return 'OK';
           end if;
           close V_CURSOR;
         EXCEPTION
          WHEN OTHERS THEN
            RETURN SQLERRM;
         END TTest_Select;
    end PKG_TEST;
      

  2.   

    http://topic.csdn.net/t/20051017/15/4331538.html
      

  3.   

    我的方法是这样写的啊!
    public void Test_Delete(TestInfo tInfo, out string userErrMsg)
            {
                --数据库连接以及参数命令
                OracleCommandWrapper command = TestDataBase.GetStoredProcCommandWrapper("pkg_TTest.TTest_Delete") as OracleCommandWrapper;            --参数
                object testID = null;
                if (tInfo.TestID.ToString() != string.Empty)
                {
                    testID = tInfo.TestID;
                }
                command.AddInParameter("numID", DbType.Int32, testID);            command.AddOutParameter("result", DbType.String, 100);            //执行更新语句,如果try中执行出现异常将会抛出异常信息
                try
                {
                    TestDataBase.ExecuteNonQuery(command);
                    userErrMsg = command.GetParameterValue("result").ToString();
                    //return 1;
                }
                catch (OracleException e)
                {
                    userErrMsg = "失败," + e.Message;
                    //throw new Exception(e.Message);
                }
            }大致都是一样的,可是现在老是报同一个错误:
    ORA-06550: 第 1 行, 第 7 列: PLS-00201: 必须声明标识符 'PKG_TTEST.TTEST_DELETE' ORA-06550: 第 1 行, 第 7 列: PL/SQL: Statement ignored 可是我的方法在数据库执行完全没有问题啊!我郁闷啊!