当前位置: 代码迷 >> Oracle管理 >> 执行存储过程报错,报对象XXX.proc 无效解决方法
  详细解决方案

执行存储过程报错,报对象XXX.proc 无效解决方法

热度:226   发布时间:2016-04-24 04:17:34.0
执行存储过程报错,报对象XXX.proc 无效
create or replace procedure temp_1(type varchar2(100)) is
  emp_record employees%rowtype;
  CURSOR emp_cursor IS SELECT * FROM employees where to_date('2008/10/1','yyyy/MM/dd')-hiredate>6*30 and pay_type = type for update;
begin
  for emp_record in emp_cursor loop
    dbms_output.put_line(emp_record.name||'   '||emp_record.saraly);
    --通过游标更改数据
    --update employees set sal = emp_record.salary*1.1 WHERE CURRENT OF emp_cursor;
    dbms_output.put_line(emp_record.name||'   '||emp_record.saraly);
  end loop;
end temp_1;

SQL> execute temp_1('小时工');
begin temp_1('小时工'); end;
ORA-06550: 第 1 行, 第 7 列: 
PLS-00905: 对象 YWF.TEMP_1 无效
ORA-06550: 第 1 行, 第 7 列: 
PL/SQL: Statement ignored
------解决方案--------------------
引用:
create or replace procedure temp_1(type varchar2(100)) is
  emp_record employees%rowtype;
  CURSOR emp_cursor IS SELECT * FROM employees where to_date('2008/10/1','yyyy/MM/dd')-hiredate>6*30 and pay_type = type for update;
begin
  for emp_record in emp_cursor loop
    dbms_output.put_line(emp_record.name
------解决方案--------------------
'   '
------解决方案--------------------
emp_record.saraly);
    --通过游标更改数据
    --update employees set sal = emp_record.salary*1.1 WHERE CURRENT OF emp_cursor;
    dbms_output.put_line(emp_record.name
------解决方案--------------------
'   '
------解决方案--------------------
emp_record.saraly);
  end loop;
end temp_1;

SQL> execute temp_1('小时工');
begin temp_1('小时工'); end;
ORA-06550: 第 1 行, 第 7 列: 
PLS-00905: 对象 YWF.TEMP_1 无效
ORA-06550: 第 1 行, 第 7 列: 
PL/SQL: Statement ignored


create or replace procedure temp_1(pi_type varchar2) is
  emp_record employees%rowtype;
  CURSOR emp_cursor IS
    SELECT *
      FROM employees
     where to_date('2008/10/1', 'yyyy/MM/dd') - hiredate > 6 * 30
       and pay_type = pi_type
       for update;
begin
  for emp_record in emp_cursor loop
    dbms_output.put_line(emp_record.name 
------解决方案--------------------
 '   ' 
------解决方案--------------------
 emp_record.saraly);
    --通过游标更改数据
    --update employees set sal = emp_record.salary*1.1 WHERE CURRENT OF emp_cursor;
    dbms_output.put_line(emp_record.name 
------解决方案--------------------
 '   ' 
------解决方案--------------------
 emp_record.saraly);
  end loop;
end temp_1;

------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

create or replace procedure temp_1(type varchar2(100)) is
  emp_record employees%rowtype;
  CURSOR emp_cursor IS SELECT * FROM employees where to_date('2008/10/1','yyyy/MM/dd')-hiredate>6*30 and pay_type = type for update;
begin
  for emp_record in emp_cursor loop
    dbms_output.put_line(emp_record.name
------解决方案--------------------
'   '
------解决方案--------------------
emp_record.saraly);
    --通过游标更改数据
    --update employees set sal = emp_record.salary*1.1 WHERE CURRENT OF emp_cursor;
    dbms_output.put_line(emp_record.name
------解决方案--------------------
'   '
------解决方案--------------------
emp_record.saraly);
  end loop;
end temp_1;

SQL> execute temp_1('小时工');
begin temp_1('小时工'); end;
ORA-06550: 第 1 行, 第 7 列: 
PLS-00905: 对象 YWF.TEMP_1 无效
ORA-06550: 第 1 行, 第 7 列: 
PL/SQL: Statement ignored
  相关解决方案