PLS-00103: 出现符号 ")"在需要下列之一时:

appsna 2013-05-28 12:01:27
错误(2,19): PLS-00103: 出现符号 ")"在需要下列之一时: <an identifier> <a double-quoted delimited-identifier> current delete exists prior

sql代码如下,求大神帮忙:

create or replace
function fun_test()
is
book_name varchar2(50);
begin
book_name:='java web';
if exists(select * from course where cou_name=:book_name) then
return 1;
else
return 0;
end;
...全文
11970 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
你我的故事 2013-06-15
  • 打赏
  • 举报
回复
-- -------------------------------------------------------------- PLS-00103: 出现符号 "SELECT_INFO_ENAME"在需要下列之一时: ( ; is with authid as cluster compress order using compiled wrapped external deterministic parallel_enable pipelined result_cache 符号 "SELECT_INFO_ENAME" 被忽略。 PLS-00103: 出现符号 "RESULT"在需要下列之一时: ; is with authid as cluster order using external deterministic parallel_enable pipelined result_cache 符号 "authid在 "RESULT" 继续之前已插入。 create or replace procedure function select_info_ename(a_empno in number default 7654) result varchar2 is b_ename emp.ename%type; begin select emp.ename into b_ename from emp,dept where emp.empno=a_empno and emp.deptno(+)=dept.deptno; return(b_ename); dbms_output.put_line(b_ename); exception when no_data_found then return 0; dbms_output.put_line('无效数字'); end select_info_ename;
appsna 2013-05-29
  • 打赏
  • 举报
回复
ok,非常感谢
rabitsky 2013-05-28
  • 打赏
  • 举报
回复

create or replace function fun_test(iBook_name in varchar2)
return int
is
  vCount int;
begin
  
   select count(1)
   into vCount
   from course
   where cou_name = iBook_name;
   
   if ( vCount = 1 ) then
       return 1;
   else
       return 0;
   end if;
end; 
rabitsky 2013-05-28
  • 打赏
  • 举报
回复
oracle中没有if exists语法,另外变量赋值也不正确。 你可以换种写法:

create or replace function fun_test(iBook_name in varchar2)
is
  vCount int;
begin
  
   select count(1)
   into vCount
   from course
   where cou_name = iBook_name;
   
   if ( vCount = 1 ) then
       return 1;
   else
       return 0;
   end if;
end; 
vanjayhsu 2013-05-28
  • 打赏
  • 举报
回复
标准的函数定义如下: create or replace function function_name return <<data_type>> is Result <<data_type>>; --<<data_type>>替换成你的实际返回数据类型,例如number,varchar2等 begin return(Result); end sdfsd;
vanjayhsu 2013-05-28
  • 打赏
  • 举报
回复
引用 10 楼 vanjayhsu 的回复:

declare
  v_result varchar2(32767) := '';
  cursor v_cur is select ENAME from scott.emp;
  v_ename varchar2(50);
begin
  open v_cur;
  loop
    fetch v_cur into v_ename;
     
    exit when v_cur%notfound;
     
    v_result := v_result||v_ename||'--';
   
  end loop;  
     
  dbms_output.put_line(rtrim(v_result,'--'));
end ;
这个可以直接在SQL窗口执行。。。你试试看吧,执行完在OUTPUT选项卡看输出
appsna 2013-05-28
  • 打赏
  • 举报
回复
是用PLSQL DEVELOPER工具
vanjayhsu 2013-05-28
  • 打赏
  • 举报
回复

declare
  v_result varchar2(32767) := '';
  cursor v_cur is select ENAME from scott.emp;
  v_ename varchar2(50);
begin
  open v_cur;
  loop
    fetch v_cur into v_ename;
     
    exit when v_cur%notfound;
     
    v_result := v_result||v_ename||'--';
   
  end loop;  
     
  dbms_output.put_line(rtrim(v_result,'--'));
end ;
上面这段可以直接在SQLPLUS下执行
vanjayhsu 2013-05-28
  • 打赏
  • 举报
回复
要执行整个命令才可以的。。。你是SQLPLUS 还是用PLSQL DEVELOPER工具呢?
appsna 2013-05-28
  • 打赏
  • 举报
回复
报了如下错误,是什么原因 在行 6 上开始执行命令时出错: begin   open v_cur;   loop     fetch v_cur into v_ename;           exit when v_cur%notfound;           v_result := v_result||v_ename||'--';       end loop;           return(rtrim(v_result,'--')); end f_list_ename; 错误报告: ORA-06550: 第 2 行, 第 2 列: 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> << continue close current delete fetch lock insert open rollback savepoint set sql execute commit forall merge pipe purge 06550. 00000 - "line %s, column %s:\n%s" *Cause: Usually a PL/SQL compilation error. *Action:
vanjayhsu 2013-05-28
  • 打赏
  • 举报
回复

create or replace function f_list_ename 
return varchar2 is
  v_result varchar2(32767) := '';
  cursor v_cur is select ENAME from scott.emp;
  v_ename varchar2(50);
begin
  open v_cur;
  loop
    fetch v_cur into v_ename;
    
    exit when v_cur%notfound;
    
    v_result := v_result||v_ename||'--';
  
  end loop;  
    
  return(rtrim(v_result,'--'));
end f_list_ename;
写了一个较简单的,仅供参考。
appsna 2013-05-28
  • 打赏
  • 举报
回复
自然是作为练习使用,单独定义一个简单的游标,我倒是可以根据格式仿出来,但是如何在函数里定义游标,如何与loop语句配合使用(我不知道这样描述是否准确),这些我都不懂,网上搜到的程序,大多都比较复杂,我目前的水平还很难看懂。
vanjayhsu 2013-05-28
  • 打赏
  • 举报
回复
不知道楼主为什么要用游标呢?学习游标建议直接百度oracle 游标
appsna 2013-05-28
  • 打赏
  • 举报
回复
可不可以用游标示范一下,稍稍加点注释,本人菜鸟,先谢谢你

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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