这个句子:create or replace package body test
as
/* copy from Join's note */
procedure t1 is
begin
insert into t values(1);
end t1;
end test;本来是一个非常简单的句子,在ps/sql里执行也是没问题的,但通过c#执行就有问题了,请高手帮忙解决一下...
我在c#里执行的:
cmd.CommandText="..."; //就是上面的那个句子
cmd.ExecuteNonQuery();出错现象:cmd.ExecuteNonQuery()执行成功不报错;但去数据库里看这个包是无效对象、并且编译无效对象不通过;右键选Edit Spec & Body直接编译则编译通过。如果把注释中的单引号去掉或配成对则没有问题,但不符合本意(是要从数据库读出包后由程序写入数据库,应该不做改动地照“原样”写)
as
/* copy from Join's note */
procedure t1 is
begin
insert into t values(1);
end t1;
end test;本来是一个非常简单的句子,在ps/sql里执行也是没问题的,但通过c#执行就有问题了,请高手帮忙解决一下...
我在c#里执行的:
cmd.CommandText="..."; //就是上面的那个句子
cmd.ExecuteNonQuery();出错现象:cmd.ExecuteNonQuery()执行成功不报错;但去数据库里看这个包是无效对象、并且编译无效对象不通过;右键选Edit Spec & Body直接编译则编译通过。如果把注释中的单引号去掉或配成对则没有问题,但不符合本意(是要从数据库读出包后由程序写入数据库,应该不做改动地照“原样”写)
给你一段VB调用的例子
使用VB调用OW_SMP_Package.GetSendSM存储过程:Sub GetSendSM()
Dim cmd as New ADODB.Command
Dim rs as New ADODB.RecordSet
cmd.ActiveConnection = GetConnection'获得数据库连接
cmd.CommandText = "{call ow_smp_package.GetSendSM(?,{resultset 1000,v_SerialNo,v_ServiceID,v_SMContent,v_SendTarget,v_Priority,v_RCompleteTimeBegin,v_RCompleteTimeEnd,v_RCompleteHourBegin,v_RCompleteHourEnd,v_RequestTime,v_RoadBy,v_SendTargetDesc,v_FeeValue,v_Pad1,v_Pad2,v_Pad3,v_Pad4,v_Pad5,v_Count})}"
cmd.CommandType = adCmdText
cmd.Parameters.Append .CreateParameter("v_NowByMinute", adInteger, adParamInput, , 900)
Rs.CursorType = adOpenStatic
Rs.LockType = adLockReadOnly
Set Rs.Source = cmd
Rs.Open
While Not Rs.EOF
MsgBox "SendSM data:SerialNo: " & Rs("v_SerialNo") & ",SMContent: " & Rs("v_SMContent") & ",Count: " & Rs("v_Count")
'对结果集的处理在这里增加代码
Rs.MoveNext
Wend
Rs.Close
set Rs=nothing
set cmd=nothing
End Sub
我的程序中:
cmd.CommandText = "InsrtTest";
cmd.CommandType = CommandType.StoredProcedure;
cmd.ExecuteNonQuery();
有可能是因为你在编辑时没有将当前的package中没有声明t1.
as
/* --// copy from Join's note */
procedure t1 is
begin
insert into t values(1);
end t1;
end test;