用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
...全文
586 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
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
C# 访问Oracle示例+PL/SQL+存储过程+触发器 完整示例 测试可用 --PL/SQL基础1 declare begin dbms_output.('不输出不换行'); dbms_output.put_line('输出并换行'); end; --PL/SQL基础2 declare dig number(20,2); begin select avg(price) into dig from products; dbms_output.put_line('电子产品的平均价格是'||dig); end; --PL/SQL基础3 根据产品编号获得产品对象 --pname products.name%type; pname变量的类型与products.name列的类型一样 declare pid constant products.id%type:=1; --定义常量,初值1 pname products.name%type; pdate products.adddate%type; begin --pid:=1; select name,adddate into pname,pdate from products where id=pid; dbms_output.put_line('产品名称是:'||pname||',日期'||pdate); end; --PL/SQL基础4 根据产品编号获得产品对象 --obj products%rowtype; obj与products表的单行类型一样,可以通过点运算取值obj.price declare obj products%rowtype; begin select * into obj from products where id=&编号; dbms_output.put_line('产品名称是:'||obj.name||',价格:'||obj.price); end; --PL/SQL基础5 条件if declare vid products.id%type; vprice products.price%type; begin vid:=&编号; select price into vprice from products where id=vid; if vprice100 and vprice<=1000 then dbms_output.put_line('价格在100—1000之间'); else dbms_output.put_line('价格在1000以上'); end if; end; --PL/SQL基础5 多条件case begin case '&等级' when 'A' then dbms_output.put_line('优秀'); when 'B' then dbms_output.put_line('合格'); when 'C' then dbms_output.put_line('不合格'); end case; end; select id, name, typeid, price, adddate from products create table students( Id int primary key, sex int ) insert into students select 1,1 from dual union select 2,0 from dual union select 3,1 from dual union select 4,0 from dual union select 5,1 from dual insert into students(Id) values(6) select * from students; select translate(translate('1心1意 3心2意','1','一'),'3','三') from dual; select id,nvl(translate(translate(sex,1,'女'),0,'男'),'未知') from students; select id,case as 性别 from( sele

3,494

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧