当前位置: 代码迷 >> Oracle开发 >> ORACLE 存储过程 ORA-00900:无效SQL话语
  详细解决方案

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

热度:185   发布时间:2016-04-24 07:01:27.0
ORACLE 存储过程 ORA-00900:无效SQL语句
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('')

------解决方案--------------------
具体的执行语句参数呢?
------解决方案--------------------
引用:
CREATE OR REPLACE PROCEDURE proc_clrwl_ds1
(
  unit in nvarchar2,
)

参数定义里的这行,结尾多了个逗号;
另外,你这个存储过程里,对表也没做任何数据操作啊,不用commit
------解决方案--------------------
你的procedure编译没过吧, 再说 执行的时候SQL应该是exec proc_clrwl_ds1('') 多了个 proc 

------解决方案--------------------
参数里多了个逗号,if else语句中有必要加begin,end吗,查询语句不涉及事物操作,是不用commit的
------解决方案--------------------
引用:
参数里多了个逗号,if else语句中有必要加begin,end吗,查询语句不涉及事物操作,是不用commit的

而且你的代码中select dpt_name into adpt_name from usr_dpt;
这一句没有条件,取出来的值可能会有多条!
另外t:=40;
  if (t<=120) then  ...
这句代码已经明确了t的值是40 ,应该是走不到else判断吧!
------解决方案--------------------
这个过程编译都通不过还执行啊?
------解决方案--------------------
CREATE OR REPLACE PROCEDURE proc_clrwl_ds1
(
  unit in nvarchar2,
)
 
这里面多了个逗号,如果多个参数,用逗号
------解决方案--------------------
此存储过程太多毛病了,除了楼上所说的以外,select dpt_name into adpt_name from usr_dpt;这条语句都有可能报异常,如果查询不到的话就是空值,空值怎么赋值给adpt_name变量呢?要加个异常判断
EXCEPTION 
   WHEN OTHERS THEN
      .....
  相关解决方案