首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > oracle >

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

2013-06-25 
ORACLE 存储过程ORA-00900:无效SQL语句CREATE OR REPLACE PROCEDURE proc_clrwl_ds1(unit in nvarchar2,)i

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
      .....

热点排行