动态传递列,表名作为存储过程中的参数,并更新在参数中传递的列

时间:2015-12-23 12:10:58

标签: oracle

我想只更新使用Oracle在存储过程中的参数传递的列。也就是说,表名作为参数传递。我尝试了一些代码,但是不能只更新参数传递的列。 这是代码:

create or replace procedure update_procedure (e_id IN emp_details.emp_id%TYPE,e_nm IN emp_details.emp_name%TYPE)
IS
old_val varchar2(3000);
stmt varchar2(3000);
begin
     select emp_name into old_val from emp_details where emp_id=e_id;
     update emp_details set emp_name=e_nm where emp_id=e_id;
     stmt := 'insert into temp values (1,'|| old_val ||','||e_nm||')'; 
     commit; 
end;
/

1 个答案:

答案 0 :(得分:0)

我没有emp_details,你的错误是什么?要知道在plsql SELECT * FROM USER_ERRORS WHERE NAME ='UPDATE_PROCEDURE''

中运行它

同时,此过程正常,我用emp_category

替换了emp_details
create or replace procedure update_procedure (E_ID IN emp_category.comp_code%TYPE,e_nm IN emp_category.BRIEF_DESC_ENG%TYPE)
IS
old_val varchar2(3000);
stmt varchar2(3000);
begin
     select BRIEF_DESC_ENG into old_val from emp_category where COMP_CODE=E_ID;
     update emp_category set BRIEF_DESC_ENG=e_nm where COMP_CODE=E_ID;
     --stmt := 'insert into temp values (1,'|| old_val ||','||e_nm||')';
     commit;
end;

如何传递参数的示例:

create table ex_employee (f_name varchar2(100), id number(2))
/
create or replace procedure update_procedure (name varchar2, e_id number)
IS
begin
     update ex_employee set F_NAME=name where ID=E_ID;
     commit; 
end;
/

在上面的例子中我创建了一个测试表,然后是一个传递id和name的过程。试试吧

相关问题