我已经给出了一个任务,创建一个从表中复制数据的过程,并将复制的数据插入同一个表中,并更改列数据之一。例如,我有一个表,其中有列(ID,C1,C2.C20),列“ID”中的数据具有相同的值,我想在复制它后更改为另一个值。我尝试使用游标和记录,因为它会返回大量数据,以下是我的过程代码:
create or replace procedure copy_data(tab_name varchar2 ,column_to_change varchar2, change_value varchar2, rowcount number)
is
stmt varchar2(100);
stmt2 varchar2(100);
type test_cursor is REF CURSOR ;
cur_cv test_cursor;
v_test_rec job%rowtype;
begin
stmt := 'v_test_rec.'||column_to_change;
stmt2 := 'insert into ' || tab_name || ' values v_test_rec ';
open cur_cv for 'select * from ' || tab_name;
loop
fetch cur_cv into v_test_rec;
stmt := change_value;
execute immediate (stmt2);
exit when cur_cv%rowcount > (rowcount - 1);
end loop;
close cur_cv;
end;
/
字符串
tab_name是要从中复制数据的表,column_to_change是要更改其中数据的列,change_value是要从column_to_change更改为的值,rowcount是列的总计数。
当我编译它的时候,它是成功的,但是当我执行它的时候:
execute copy_data ('job', 'ccn_cd', 'ITUE02', 112);
型
我得到了错误,错误如下:
ORA-03001:
ORA-06512: "HR.COPY_DATA", 行16
ORA-06512: 行1
03001. 00000 - "unimplemented feature"
*Cause: This feature is not implemented.
*Action: None.
型
我试图弄清楚我的代码的哪一部分是错误的,但仍然无法弄清楚。很抱歉我的英语不是很好。谁能给予我一些提示或解决我的问题?- 谢谢-谢谢
1条答案
按热度按时间0yycz8jy1#
我想它一定和这个差不多。
字符串
但是,您只能在最新的Oracle 12.1版本中使用PL/SQL类型。旧版本不支持它们。
另请查看EXECUTE IMMEDIATE语句的文档:* 如果数据类型是集合或记录类型,则必须在包规范中声明。*