【发布时间】:2011-08-18 18:35:47
【问题描述】:
我尝试在 Oracle 服务器上创建 SQL 过程。这是我的代码,
private const string InsertCallProc =
@"CREATE OR REPLACE PROCEDURE INSERTCALL (Id in varchar2,No in varchar2,
Surname in varchar2, Name in varchar2, CallType in varchar2,
CallDate in date, CallNo in varchar2, VoiceNetwork in varchar2,
Type in varchar2,TalkTime in number,PriceWithDiscount in number,
PriceWithoutDiscount in number, LmTime in date)
AS
BEGIN
INSERT INTO TMOBILE_R_CALLS (ID,NO,SURNAME,NAME,CALL_TYPE,CALL_DATE,CALL_NO,
VOICE_NETWORK, TYPE,TALK_TIME, PRICE_WITH_DISCOUNT, PRICE_WITHOUT_DISCOUNT,LM_TIME)
VALUES(Id, No, Surname, Name, CallType,CallDate, CallNo, VoiceNetwork,Type, TalkTime,
PriceWithDiscount,PriceWithoutDiscount, LmTime);
END;";
执行此sql cmd的方法,输入参数为InsertCallProc字段。
private void ExecuteNonQueryCmd(string cmdText)
{
using (var conn = new OracleConnection(GenerateConnectionString()))
{
conn.Open();
var cmd = new OracleCommand
{
Connection = conn,
CommandText = cmdText
};
try
{
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
throw ex;
}
}
}
如果我调用了这个方法,就会创建过程。但是,如果我检查 PL/SQL 开发人员中的过程,我会看到:
PROCEDURE SYSTEM.INSERTCALL 的编译错误
错误:PLS-00103:在期望其中一个时遇到符号“” 以下:
当前行:1 文本:CREATE OR REPLACE PROCEDURE INSERTCALL (Id in varchar2,varchar2中没有,
我认为这是由于在 C# 代码中格式化字符串造成的。因为如果我在 Oracle 服务器上执行相同的 SQL 代码,创建过程就没有问题。
这个问题有什么好的解决方案?
【问题讨论】:
-
不要在模式 SYSTEM 中创建表或存储过程。这是一个非常糟糕的主意。这可能不是您当前问题的原因,但会导致许多其他问题。