Oracle 插入数据的存储过程
这是用来,把实时表里面的数据插入到某个表A获取到的字段neid,然后拼接成xxx_xxx_neid历史表,接着往里面插入数据
CREATE OR REPLACE PROCEDURE XXX自定义名 IS
-- 定义变量
v_ne_id_table_name VARCHAR2(100);
v_ne_id VARCHAR2(100);
v_sql_query VARCHAR2(2000);
v_current_date DATE := TRUNC(SYSDATE);
TYPE t_neid_cursor IS REF CURSOR;
c_neid_cursor t_neid_cursor;
v_info_row 实时表%ROWTYPE;
TYPE t_alarm_cursor IS REF CURSOR;
c_alarm_cursor t_alarm_cursor;
-- 插入数据到历史表的通用过程
PROCEDURE insert_data_into_history(v_ne_id_table_name IN VARCHAR2) IS
BEGIN
-- 从实时表中选择需要插入的数据
v_sql_query := '查询实时表数据 ';
OPEN c_alarm_cursor FOR v_sql_query;
LOOP
FETCH c_alarm_cursor INTO v_alarm_info_row;
EXIT WHEN c_alarm_cursor%NOTFOUND;
-- 使用 INSERT 语句简单插入数据
v_sql_query := 'INSERT INTO ' || v_ne_id_table_name || ' (xxx1, xxx2,xxx3,xxx4) ' ||
'VALUES (:1, :2, :3, :4)';
-- 执行 INSERT 语句 实时表的字段
EXECUTE IMMEDIATE v_sql_query USING
v_info_row .xxx1,
v_info_row .xxx2,
v_info_row .xxx3,
v_info_row .xxx4;
END LOOP;
CLOSE c_alarm_cursor;
END insert_data_into_history;
BEGIN
-- 处理表A
v_sql_query := '查询表A的字段,例如:neid';
DBMS_OUTPUT.PUT_LINE('Flood SQL: ' || v_sql_query);
OPEN c_neid_cursor FOR v_sql_query;
LOOP
FETCH c_neid_cursor INTO v_ne_id;
EXIT WHEN c_neid_cursor%NOTFOUND;
v_ne_id_table_name := 'SCENE_ALARM_HIS_' || v_ne_id;
DBMS_OUTPUT.PUT_LINE('Processing Table: ' || v_ne_id_table_name);
insert_data_into_history(v_ne_id_table_name);
END LOOP;
CLOSE c_neid_cursor;
END ;