用C#执行SQL语句出错,在PL/SQL里面却正常?

anyong3 2010-01-18 10:02:21
我在前台用C#生成如下的SQL语句抛到数据库中,提示出错。把SQL粘贴到PL/SQL里面执行却能正常通过,这是怎么回事啊?
SQL语句如下:
BEGIN
declare TMP_IDKEY INTEGER;
TMP_NUM INTEGER;
BEGIN
delete jzx.jzxlcxjhb where 类型='卸船' and 标志='0' and 进口船名='新万丰' and 进口航次='0816' and 箱号='CSAU5409867';
SELECT JZX.JZXLCXJHB_SEQ.NEXTVAL INTO TMP_IDKEY FROM DUAL;
insert into jzx.jzxlcxjhb(箱号,进口船名,进口航次,设定温度,设定湿度,设定通风器,是否预冷,冷冻机型,除霜间隔,货名,出口船名,出口航次,卸货港,备注,类型,标志,录入者,录入时间,确认者,确认时间,IDKEY)
values('CSAU5409867','新万丰','0816',3,33,'3','是','123','123','weq','','','','2123','卸船','0','陈钟运',sysdate,'',null,TMP_IDKEY);
select count(*) into TMP_NUM from jzx.jzxlcxzlb where 进口船名='新万丰' and 进口航次='0816' and 箱号='CSAU5409867';
if TMP_NUM>0 then
update jzx.jzxlcxzlb set 设定IDKEY=TMP_IDKEY where 箱号='CSAU5409867' and 进口船名='新万丰' and 进口航次='0816';
else
INSERT INTO jzx.jzxlcxzlb(箱号,进口船名,进口航次,设定IDKEY)
VALUES('CSAU5409867','新万丰','0816',TMP_IDKEY);
END IF;
delete jzx.jzxlcxjhb where 类型='卸船' and 标志='0' and 进口船名='新万丰' and 进口航次='0816' and 箱号='NPAU5180610';
SELECT JZX.JZXLCXJHB_SEQ.NEXTVAL INTO TMP_IDKEY FROM DUAL;
insert into jzx.jzxlcxjhb(箱号,进口船名,进口航次,设定温度,设定湿度,设定通风器,是否预冷,冷冻机型,除霜间隔,货名,出口船名,出口航次,卸货港,备注,类型,标志,录入者,录入时间,确认者,确认时间,IDKEY)
values('NPAU5180610','新万丰','0816',1,123,'123','否','33','12','qq','','','','3','卸船','0','陈钟运',sysdate,'',null,TMP_IDKEY);
select count(*) into TMP_NUM from jzx.jzxlcxzlb where 进口船名='新万丰' and 进口航次='0816' and 箱号='NPAU5180610';
if TMP_NUM>0 then
update jzx.jzxlcxzlb set 设定IDKEY=TMP_IDKEY where 箱号='NPAU5180610' and 进口船名='新万丰' and 进口航次='0816';
else
INSERT INTO jzx.jzxlcxzlb(箱号,进口船名,进口航次,设定IDKEY)
VALUES('NPAU5180610','新万丰','0816',TMP_IDKEY);
END IF;
end;
END;

C#错误提示:

ORA-06550: 第 1 行, 第 6 列:
PLS-00103: 出现符号 ""在需要下列之一时:
begin case declare exit for
goto if loop mod null pragma raise return select update while
with <an identifier> <a double-quoted delimited-identifier>
<a bind variable> << close current delete fetch lock insert
open rollback savepoint set sql execute commit forall merge
pipe
符号 "begin在 "" 继续之前已插入。
ORA-06550: 第 2 行, 第 27 列:
PLS-00103: 出现符号 ""在需要下列之一时:
begin function package pragma
procedure subtype type use <an identifier>
<a double-quoted delimited-identifier> form current cursor
...全文
471 9 打赏 收藏 举报
写回复
9 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
sihai201202 2012-07-11
  • 打赏
  • 举报
回复
确实是\r\n的问题,把这个过滤掉就好了
anyong3 2010-01-18
  • 打赏
  • 举报
回复
问题解决了,可恶,居然是回车的问题,我前台生成的SQL语句带回车符,去掉回车符就可以通过了。
zhzhange 2010-01-18
  • 打赏
  • 举报
回复
oracle 的版本是多少啊?
yuzhenhuan01 2010-01-18
  • 打赏
  • 举报
回复
我认为是不行
等待高手解答
anyong3 2010-01-18
  • 打赏
  • 举报
回复
你的意思是说这种大段大段的SQL语句C#是没有能力执行的?不会啊,我试过100多句的SQL语句通过C#往后台抛,只要前后加上BEGIN和END也可以执行啊。我贴上来的这个比较特别的是用了变量和IF语句,会不会是变量的问题?C#抛过去的SQL语句不支持变量定义?
yuzhenhuan01 2010-01-18
  • 打赏
  • 举报
回复
这种代码能用c#调用么?
我还以为是plsql专有的呢
anyong3 2010-01-18
  • 打赏
  • 举报
回复
我同事用VFP前台跑这段SQL也能正常保存进数据库啊,就是我的C#不行,会不会是程序的问题?但是错误提示确是ORACLE的错误提示,没道理啊!
anyong3 2010-01-18
  • 打赏
  • 举报
回复
INTEGER???
请问是什么意思?变量不能用INTEGER类型的吗?
KnowKjava 2010-01-18
  • 打赏
  • 举报
回复
INTEGER
相关推荐
发帖
Oracle 高级技术

3471

社区成员

Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
帖子事件
创建了帖子
2010-01-18 10:02
社区公告
暂无公告