表达式不适合作为赋值语句的左侧

时间:2015-11-18 14:05:00

标签: plsqldeveloper

我收到了PLSQL代码的错误消息:

expression 'V_EMPRECORD' is inappropriate as the left hand side of an assignment statement.

不知道哪里出错了。 我需要写一个PL / SQL代码块,它将执行以下操作:

1创建一个名为emp_cur的游标,它将读取emp_tbl中薪水大于70000的所有行。 2打开光标 3将信息提取到光标中 4显示Emplyees'细节到屏幕 5关闭光标

DECLARE
  TYPE v_empRecord IS RECORD(
    vFName emp_tbl.first_name%TYPE,
    vLName emp_tbl.last_name%TYPE,
    vSalary emp_tbl.salary%TYPE,
    vDept emp_tbl.department%Type);

  CURSOR c_empDetails IS
    SELECT * FROM emp_tbl
    WHERE salary > 70000;

BEGIN
  OPEN c_empDetails;
  FETCH c_empDetails INTO v_empRecord;
  CLOSE c_empDetails;
END;

感谢任何帮助!

3 个答案:

答案 0 :(得分:2)

您正在尝试直接获取某个类型。你需要定义一个v_empRecord类型的对象,然后获取它。

我认为你会更容易找到一个游标for循环。请参阅此处的CURSOR FOR LOOP示例:https://docs.oracle.com/cd/E18283_01/appdev.112/e17126/static.htm#CHDBJBJE

答案 1 :(得分:0)

只是为了扩展@Gary的答案,尽管我使用记录类型为INTO的{​​{1}},但我遇到了同样的错误。这是由于下面提到的狡猾的错误造成的

我使用v_empRecord旁边的RECORD名称,而不是使用该记录类型创建新变量

into

希望如果你犯了同样的错误,这个答案可能对你有所帮助。

答案 2 :(得分:0)

 DECLARE
  //define a record type
  TYPE v_empRecord_type IS RECORD(
    vFName emp_tbl.first_name%TYPE,
    vLName emp_tbl.last_name%TYPE,
    vSalary emp_tbl.salary%TYPE,
    vDept emp_tbl.department%Type);

  CURSOR c_empDetails IS
    SELECT * FROM emp_tbl
    WHERE salary > 70000;

  //define a record object belongs to the record type you defined before
  v_empRecord v_empRecord_type ;

BEGIN
  OPEN c_empDetails;
  FETCH c_empDetails INTO v_empRecord ;
  CLOSE c_empDetails;
END;