1.oracle
CREATE OR REPLACE PROCEDURE modify_SEQ
IS
/**===============================================================================
===============================================================================*/
V_tablename VARCHAR2(200); --
V_sqlStr VARCHAR2(1000); -- SQL
V_cnt NUMBER(10) DEFAULT 0; --
V_seq_name VARCHAR2(100); -- SEQ
MySql VARCHAR2(200);
-- , ,
type cur_type is ref cursor; --
myCursor cur_type; -- ,
v_count NUMBER(10) DEFAULT 1;
/*===============================================================================
, SEQ , SQL ,
===============================================================================*/
CURSOR temp_cursor IS SELECT sequence_name FROM User_Sequences s INNER JOIN (
SELECT T.TABLE_NAME, T.DATA_TYPE
FROM USER_TAB_COLUMNS T
INNER JOIN USER_OBJECTS OBJ ON T.TABLE_NAME = OBJ.OBJECT_NAME
WHERE T.COLUMN_NAME = 'ID'
AND T.DATA_TYPE = 'NUMBER'
AND T.TABLE_NAME NOT LIKE 'BIN%'
AND T.TABLE_NAME NOT LIKE 'JTYH%'
AND T.TABLE_NAME NOT IN ('SP_REPORT_RESULT', 'FE_RESOURCE')
ORDER BY T.TABLE_NAME) t ON Substr(s.sequence_name,5) = t.TABLE_NAME;
BEGIN
/*===============================================================================
SEQ
===============================================================================*/
OPEN temp_cursor;
LOOP fetch temp_cursor INTO V_seq_name;
--
exit when get_procedure_list%NOTFOUND;
SELECT SUBSTR(V_seq_name,5) INTO V_tablename FROM dual;
/* 5 , */
CASE V_seq_name
WHEN 'SEQ_BD_BOND_ACCURAL_INTEREST_C' THEN
V_tablename:='BD_BOND_ACCURAL_INTEREST_CL';
WHEN 'SEQ_SP_BM_STRUCT_INDEX_RELATIO' THEN
V_tablename:='SP_BM_STRUCT_INDEX_RELATIO';
WHEN 'SEQ_SP_REPORT_MODEL_USER_RI_HS' THEN
V_tablename:='SP_REPORT_MODEL_USER_RIGHT_HS';
WHEN 'SEQ_TD_BM_ASSETCLASS_YIELD_RAT' THEN
V_tablename:='TD_BM_ASSETCLASS_YIELD_RATE';
WHEN 'SEQ_TD_YIELD_RATE_PA_BM_AC_HEL' THEN
V_tablename:='TD_YIELD_RATE_PA_BM_AC_HELD';
ELSE
V_tablename:= V_tablename;
END CASE;
/* ID , ID V_cnt, */
MySql :='SELECT max(id) FROM ' ||V_tablename;
open myCursor for MySql;
fetch myCursor into V_cnt;
close myCursor;
IF V_cnt IS NULL
THEN
V_cnt := 10000;
END IF;
V_cnt := V_cnt+1;
v_count :=v_count +1;
/* :
sec@ora10g> show serveroutput
serveroutput OFF
sec@ora10g>set serveroutput on
sec@ora10g> show serveroutput
serveroutput ON SIZE 10000 FORMAT WORD_WRAPPED
*/
DBMS_OUTPUT.put_line(v_count);
/* SEQUENCE, , SQL */
V_sqlStr := 'drop SEQUENCE '||V_seq_name;
execute immediate V_sqlStr;
V_sqlStr :='CREATE SEQUENCE '||V_seq_name|| ' MINVALUE 1 MAXVALUE 100000000000 INCREMENT BY 1 START WITH '||V_cnt|| ' nocache cycle';
execute immediate V_sqlStr;
END LOOP;
CLOSE temp_cursor;
END modify_SEQ;
begin
modify_SEQ;
end;
/
2.DB 2
CREATE PROCEDURE PRO_BD_SEQ()
begin
declare tabName VARCHAR(200) ;
declare tabSeq BIGINT default 0;
declare seqName varchar(200);
declare sqlStr varchar(2000);
declare seqStr varchar(2000);
-- ,
DECLARE myCursor CURSOR WITH RETURN FOR MySql;
--
for names as select t.tabname from
(select t.tabname from syscat.tables t where t.tabschema = 'RISK' and t.TYPE = 'T' and t.tabname not like '%JTYH%' and t.tabname not like 'FE_%' )t inner join (
select tabname from SYSCAT.COLUMNS c where c.colname = 'ID'and c.typename = 'INTEGER'
) c on t.tabname = c.tabname and t.tabname != 'PD_PA_ACCOUNT_RELATION' order by t.tabname
do
set tabName = tabname;
-- id , SEQUENCE
set sqlStr = 'select max(id) from '||tabName;
-- sql
prepare MySql from sqlStr;
--
open myCursor;
-- ID
fetch myCursor into tabSeq;
--
close myCursor;
-- SEQUENCE
set tabSeq = tabSeq+1;
set seqName = 'SEQ_'||tabName;
set seqStr = 'ALTER SEQUENCE '||seqName||' RESTART WITH '||char(tabSeq);
--
execute immediate seqStr;
set tabName = '';
set tabSeq = 0;
end for;
end
;
call PRO_BD_SEQ;