ORACLE 存储过程 ORA-00900:无效SQL语句

thinoft 2011-10-20 01:57:54
CREATE OR REPLACE PROCEDURE proc_clrwl_ds1
(
unit in nvarchar2,
)
is
t number;
adpt_name nvarchar2(50);
begin
t:=40;
if (t<=120) then
begin
select dpt_name into adpt_name from usr_dpt;
commit;
end;
else
begin
select dpt_name into adpt_name from usr_dpt where dpt_name=unit;
commit;
end;
end if;
commit;
end;

贴出SQL希望大家指正,只要我一执行就报ORA-00900,执行的SQL:exec proc proc_clrwl_ds1('')
...全文
9392 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
thieives 2014-05-16
  • 打赏
  • 举报
回复
call proc_clrwl_ds1('');
liulu458533428 2013-08-26
  • 打赏
  • 举报
回复 1
如果存储过程是成功的可以用call 过程名称(); 或者 declare 变量 begin 过程名称(); end; 例子 declare i number; begin i:=10; mypro4(i); end;
zhao_my_love 2013-06-08
  • 打赏
  • 举报
回复
我遇到类似的错,求解啊
zj84604741 2012-02-28
  • 打赏
  • 举报
回复
我也 是这个问题 郁闷。
关注中。
Northgale 2011-11-09
  • 打赏
  • 举报
回复
你输入的参数是个''?(空值)
thinoft 2011-10-25
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 tx2730 的回复:]

试试这句: exec proc_clrwl_ds1('');
[/Quote]
试过了
007-x 2011-10-24
  • 打赏
  • 举报
回复
试试这句: exec proc_clrwl_ds1('');
thinoft 2011-10-24
  • 打赏
  • 举报
回复
编译通过了,还是报错,和原来的错误一模一样

CREATE OR REPLACE PROCEDURE proc_clrwl_ds1
(
unit in varchar2
)
is
t number;
adpt_name varchar2(50);
begin
t:=40;
if (t<=120) then
select dpt_name into adpt_name from usr_dpt where rownum=1 order by dpt_id asc;
else
select dpt_name into adpt_name from usr_dpt where dpt_name=unit;
end if;
end;
哪位能帮我再指正一下?
thinoft 2011-10-24
  • 打赏
  • 举报
回复
分不多,平均一下匀给大家乐
彗星 2011-10-21
  • 打赏
  • 举报
回复
此存储过程太多毛病了,除了楼上所说的以外,select dpt_name into adpt_name from usr_dpt;这条语句都有可能报异常,如果查询不到的话就是空值,空值怎么赋值给adpt_name变量呢?要加个异常判断
EXCEPTION
WHEN OTHERS THEN
.....
m540920181 2011-10-21
  • 打赏
  • 举报
回复
CREATE OR REPLACE PROCEDURE proc_clrwl_ds1
(
unit in nvarchar2,
)

这里面多了个逗号,如果多个参数,用逗号
Northgale 2011-10-21
  • 打赏
  • 举报
回复
这个过程编译都通不过还执行啊?
nvhaixx 2011-10-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 fuwenhai 的回复:]
参数里多了个逗号,if else语句中有必要加begin,end吗,查询语句不涉及事物操作,是不用commit的
[/Quote]
而且你的代码中select dpt_name into adpt_name from usr_dpt;
这一句没有条件,取出来的值可能会有多条!
另外t:=40;
if (t<=120) then ...
这句代码已经明确了t的值是40 ,应该是走不到else判断吧!
luyun2011 2011-10-20
  • 打赏
  • 举报
回复
参数里多了个逗号,if else语句中有必要加begin,end吗,查询语句不涉及事物操作,是不用commit的
007-x 2011-10-20
  • 打赏
  • 举报
回复
你的procedure编译没过吧, 再说 执行的时候SQL应该是exec proc_clrwl_ds1('') 多了个 proc
yixilan 2011-10-20
  • 打赏
  • 举报
回复
[Quote=引用楼主 thinoft 的回复:]
CREATE OR REPLACE PROCEDURE proc_clrwl_ds1
(
unit in nvarchar2,
)
[/Quote]
参数定义里的这行,结尾多了个逗号;
另外,你这个存储过程里,对表也没做任何数据操作啊,不用commit
Rotel-刘志东 2011-10-20
  • 打赏
  • 举报
回复
具体的执行语句参数呢?

17,088

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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