oracle – 必须声明标识符? PL / SQL错误
这是我写的程序: set serveroutput on; declare b empl.name1%type; r varchar; --can i change this to r empl.designation%type; ? begin r:=&designation; --getting input for the designation dbms_output.put_line('hello'); --random output to check for errors select name1 into b from empl where designation=r; --i want all the names from the table dbms_output.put_line('name'||b); --employee where designation is as entered dbms_output.put_line(' closed'); --by user,should i loop this statement? end; 当我输入指定为’a'(已在表中输入)时,我收到错误 我将程序改为: set serveroutput on; declare cursor cempl is select name1,designation from empl; b empl.name1%type; des empl.designation%type; r empl.designation%type; begin r:='meow'; dbms_output.put_line('hello'); open cempl; if cempl%ISOPEN then loop fetch cempl into b,des; if des=r then dbms_output.put_line('name'||b); end if; exit when cempl%notfound; end loop; close cempl; dbms_output.put_line(' closed'); end if; end; 每当我得到像r:=& r这样的输入并想象我输入’a’时就会说 >’Identifier not found’错误:& designation是一个SQL * Plus替换变量.当您为& names输入值时,SQL * Plus会使用您输入的内容替换& names.所以,如果你输入vaue a,那行 r:=&designation; 变 r:=a; 出现错误是因为Oracle不知道任何名为a的东西.您尚未声明一个名为a的变量,并且没有过程或函数或其他任何名称为a的变量.如果你希望最终结果是r:=’a’;,你需要写r:=’& designation’;> SELECT … INTO …仅在查询返回一行时有效.如果没有返回任何行,您将收到无数据发现错误,如果返回多行,则会出现太多行错误.你应该只使用SELECT … INTO …如果你知道只有一个结果.如果可能有多个结果,则应使用游标.>’为什么SQL Developer不接受%rowtype’?应该这样做 – 你能想出一个给你带来麻烦的例子吗?>在第二个示例中,您将重复最后一行,因为在光标无法找到更多行之后,您不会立即退出循环.您应该在行前面移动直接位于获取行的下方. (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |