在同一个数据库,两个字段相同的表a1、a2。a1软件系统使用,a2用于备份a1里的数据,如何建一个存储过程比较a1和a2里的数据,把a1变化的数据记录作为结果返回给调用的jsp程序,然后再更新a2所有数据记录和a1的所有数据一样??
新手上路!如果解决马上结贴,如果你认为不够可以再加!!
谢谢,帮助我!!
新手上路!如果解决马上结贴,如果你认为不够可以再加!!
谢谢,帮助我!!
解决方案 »
- oracle 插入或者更新大量数据(1W条以上),时间多少?
- 初学,关于临时表的问题
- oracle 存储过程 debugger 和 execute 的结果不一样
- 存储过程的问题,请高手帮下忙,先谢过了
- 如何查询sqlserver中的数据然后更新oracle数据
- ORACLE 10G RAC环境下的EXP操作的问题
- C++ Buiider 6 + ODAC 4.5如何获得Oracle存储过程的输出参数?
- 请教Oracle+Delphi+Ado的连接问题!
- 请教高手:一般在数据库里面写存储过程和函数需要写哪些呢?急啊!在线等
- 使用mybatis框架进行动态编写sql插入语句时报错--违反主键唯一约束
- pro*c 数据库查询的问题,(有源码)
- maybe it's a bug of Oracle?
id number(8) not null
compname varchar2(20) not null
compcode varchar2(50) not null
chapter varchar2(50) not null
compnumber number(8) not null
dealdate date not null
before insert on a1 for each row
begin
.....
end;
....
before insert or update on a1
for each row
begin
if insertint then
...
else
...
end if;
end;
/
用触发器也可以只要能实现,不过我还要把比较的差异写到文件里?
谢谢,最好具体一点,我是新手!!
after insert or update on a1
for each row
begin
delete a2 where id=:new.id;
insert into a2 values(:new.id,:new.fields......);
end t_a1;
用触发器解决了a1和a2数据的同步,但怎样完成比较a1和a2里的数据,把a1变化的数据写到一个文件里(只把数据变化的记录,包括删除的、更新的、新插入写到一个xml或其他格式文件里)
对不起麻烦大家了,我刚刚接触,我会好好学的!
一旦可以马上揭贴,决不食言!
再次谢谢大家的热心帮助和关心!!
其实这个问题太麻烦了,利用点业余时间还是把它搞定吧
1、你首先需在init<sid>.ora中加入一个参数utl_file_dir
eg:utl_file_dir = c:\
把库重启一下
2、我这里写了一个存储过程用于把变动的数据输出到文件文件,过程名为put_str_to_file
同时写一个trigger,这是借鉴maohaisheng()的.具体内容如下: --用于把字符串输出到文件
CREATE OR REPLACE PROCEDURE put_str_to_file(str_in VARCHAR2)
IS
FILE_HANDLE UTL_FILE.FILE_TYPE;
BEGIN
FILE_HANDLE:=UTL_FILE.FOPEN('C:\','TEST.TXT','A');
UTL_FILE.PUT_LINE(FILE_HANDLE,str_in);
UTL_FILE.FCLOSE(FILE_HANDLE);
END;CREATE OR REPLACE TRIGGER tr_bf_test
BEFORE INSERT OR UPDATE OR DELETE OF ID ON a1
FOR EACH ROW
BEGIN
IF INSERTING THEN
INSERT INTO a2
VALUES(:new.id,:new.compname,:new.compcode,:new.chapter,:new.compnumber,:new.dealdate);
ELSIF UPDATING THEN
UPDATE a2 SET id=:new.ID,
compname=:new.compname,
compcode=:new.compcode,
chapter=:new.chapter,
compnumber=:new.compnumber,
dealdate=:new.dealdate
WHERE ID = :old.ID;
ELSE
DELETE FROM a2
WHERE ID = :old.ID;
END IF;
put_str_to_file('变动的id是:'||:old.id);
END tr_bf_TTRIG;3、程序还有些粗糙,你修整一个,我只是搭个架子。
您好!我是已system/manager用户登入系统的,建立了表a1、a2和触发器、存储过程(put_str_to_file),当向a1里插入新记录时:
提示如下
“
ERROR 位于第 1 行:
ORA-06510: PL/SQL: 无法处理的用户自定义异常事件
ORA-06512: 在"SYS.UTL_FILE", line 98
ORA-06512: 在"SYS.UTL_FILE", line 157
ORA-06512: 在"SYSTEM.PUT_STR_TO_FILE", line 5
ORA-06512: 在"SYSTEM.TR_BF_TEST", line 17
ORA-04088: 触发器 'SYSTEM.TR_BF_TEST' 执行过程中出错”
您好:
我遇到的情况和“itfuture(远景) ”一样也是“
ERROR 位于第 1 行:
ORA-06510: PL/SQL: 无法处理的用户自定义异常事件
ORA-06512: 在"SYS.UTL_FILE", line 98
ORA-06512: 在"SYS.UTL_FILE", line 157
ORA-06512: 在"SYSTEM.PUT_STR_TO_FILE", line 5
ORA-06512: 在"SYSTEM.TR_BF_TEST", line 17
ORA-04088: 触发器 'SYSTEM.TR_BF_TEST' 执行过程中出错”
这样的提示!!
“ 1、你首先需在init<sid>.ora中加入一个参数utl_file_dir
eg:utl_file_dir = c:\”
中的“eg:utl_file_dir = c:\”,应该是“utl_file_dir = c:\”吧!
马上结贴!!