我想只更新使用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;
/
答案 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的过程。试试吧