oracle – 必须声明标识符? PL / SQL错误

前端之家收集整理的这篇文章主要介绍了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'(已在表中输入)时,我收到错误
标识符’a’未声明.那是什么意思?
select语句一次只占一行吗?所以,如果我循环它将获得所有行?或者我应该使用光标?
为什么sql Developer不接受%rowtype?

我将程序改为:

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’时就会说
必须声明标识符’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’?应该这样做 – 你能想出一个给你带来麻烦的例子吗?>在第二个示例中,您将重复最后一行,因为在光标无法找到更多行之后,您不会立即退出循环.您应该在行前面移动直接位于获取行的下方.

原文链接:https://www.f2er.com/oracle/205084.html

猜你在找的Oracle相关文章