我有一个oracle的包,里面有三个function,我需要在c#程序中调用,请问各位大侠该怎么调用,不是调用procedure。谢啦!
解决方案 »
- 网站发布后<sessionState mode=""></sessionState>该怎么设置?
- 很奇怪的问题,急
- 求一个日期正则表达式
- datagrid的分页问题
- Response.ContentType = "application/octet-stream"; 下载时如果文件扩展名是rar或exe没有扩展名。怎样办?
- 点击input type=file生成的文件上传框时,怎么控制弹出文件选择框的默认显示格式
- 关于.net里面操作存储过程的问题,高手过来看
- 自定义控件的问题.
- 很简单的外行问题!!在线等!!!
- 在窗体应用程序中对 如何进行UrlDecode解码
- 从对话框中打开的Aspx页面的Session信息会失效
- 谁能解答一下这个vs2005里的问题?
下面是包的主题:
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;
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 可是我的方法在数据库执行完全没有问题啊!我郁闷啊!