Skip to content

Commit 8384c3a

Browse files
authored
Create script.sql
1 parent 9e7db31 commit 8384c3a

File tree

1 file changed

+239
-0
lines changed

1 file changed

+239
-0
lines changed

‎script.sql

Lines changed: 239 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,239 @@
1+
2+
-- The following script export some ORACLE tables into SQL insert statments
3+
-- It use MIGRATION_COLUMNS_SETTINGS, MIGRATION_TABELS_LIST table to change the columns names
4+
5+
BEGIN
6+
DBMS_OUTPUT.PUT_LINE('STARTING');
7+
END;
8+
9+
/
10+
-- Check if MIGRATION_COLUMNS_SETTINGS table exits or create it
11+
DECLARE
12+
nCount NUMBER;
13+
v_sql LONG;
14+
15+
BEGIN
16+
--DBMS_OUTPUT.PUT_LINE('Check MIGRATION_COLUMNS_SETTINGS table exists?');
17+
SELECT count(*) into nCount FROM dba_tables where table_name = 'MIGRATION_COLUMNS_SETTINGS';
18+
IF(nCount <= 0)
19+
THEN
20+
-- DBMS_OUTPUT.PUT_LINE('No, MIGRATION_COLUMNS_SETTINGS table not exists, Creating new one...');
21+
v_sql:='
22+
create table MIGRATION_COLUMNS_SETTINGS
23+
(
24+
ID NUMBER(3),
25+
TABLE_NAME VARCHAR2(30) NOT NULL,
26+
OLD_COLUMN_NAME VARCHAR2(30) NOT NULL,
27+
NEW_COLUMN_NAME VARCHAR2(30) NOT NULL
28+
)';
29+
execute immediate v_sql;
30+
--ELSE
31+
--DBMS_OUTPUT.PUT_LINE('Yes MIGRATION_COLUMNS_SETTINGS table exists.');
32+
END IF;
33+
34+
END;
35+
36+
37+
38+
--declare
39+
-- fHandle UTL_FILE.FILE_TYPE;
40+
--begin
41+
-- fHandle := UTL_FILE.FOPEN('my_directory', 'test_file', 'w');
42+
--
43+
-- UTL_FILE.PUT(fHandle, 'This is the first line');
44+
-- UTL_FILE.PUT(fHandle, 'This is the second line');
45+
-- UTL_FILE.PUT_LINE(fHandle, 'This is the third line');
46+
--
47+
-- UTL_FILE.FCLOSE(fHandle);
48+
--EXCEPTION
49+
-- WHEN OTHERS THEN
50+
-- DBMS_OUTPUT.PUT_LINE('Exception: SQLCODE=' || SQLCODE || ' SQLERRM=' || SQLERRM);
51+
-- RAISE;
52+
--end;
53+
54+
55+
/
56+
-- Check if MIGRATION_TABELS_LIST table exits or create it
57+
DECLARE
58+
nCount NUMBER;
59+
v_sql LONG;
60+
61+
BEGIN
62+
--DBMS_OUTPUT.PUT_LINE('Check MIGRATION_TABELS_LIST table exists?');
63+
SELECT count(*) into nCount FROM dba_tables where table_name = 'MIGRATION_TABELS_LIST';
64+
IF(nCount <= 0)
65+
THEN
66+
-- DBMS_OUTPUT.PUT_LINE('No, MIGRATION_TABELS_LIST table not exists, Creating new one...');
67+
v_sql:='
68+
create table MIGRATION_TABELS_LIST
69+
(
70+
ID NUMBER(3),
71+
TABLE_NAME VARCHAR2(30) NOT NULL
72+
)';
73+
execute immediate v_sql;
74+
--ELSE
75+
--DBMS_OUTPUT.PUT_LINE('Yes MIGRATION_TABELS_LIST table exists.');
76+
END IF;
77+
78+
END;
79+
80+
81+
/
82+
83+
84+
-- Create method to get new columns names
85+
-- GET_COLUMN_NAME is function to get new column names from MIGRATION_COLUMNS_SETTINGS table
86+
CREATE OR REPLACE FUNCTION GET_COLUMN_NAME ( table_name VARCHAR2, column_name VARCHAR2 )
87+
RETURN READ_ONLY.MIGRATION_COLUMNS_SETTINGS.NEW_COLUMN_NAME%TYPE
88+
IS
89+
NEW_NAME READ_ONLY.MIGRATION_COLUMNS_SETTINGS.NEW_COLUMN_NAME%TYPE;
90+
BEGIN
91+
-- DBMS_OUTPUT.PUT_LINE('START SELECTING table_name:' || table_name || ' column_name:' || column_name );
92+
SELECT NEW_COLUMN_NAME
93+
INTO NEW_NAME
94+
FROM READ_ONLY.MIGRATION_COLUMNS_SETTINGS
95+
WHERE TABLE_NAME = table_name AND OLD_COLUMN_NAME = column_name;
96+
97+
RETURN NEW_NAME;
98+
99+
EXCEPTION
100+
WHEN OTHERS THEN
101+
NEW_NAME := column_name;
102+
-- DBMS_OUTPUT.PUT_LINE('Error SELECTING ' || 'An error was encountered - '||SQLCODE||' -ERROR- '||SQLERRM);
103+
-- DBMS_OUTPUT.PUT_LINE('END SELECTING column_name:' || column_name || ' NEW_NAME:' || NEW_NAME );
104+
NEW_NAME := column_name;
105+
RETURN NEW_NAME;
106+
107+
END GET_COLUMN_NAME;
108+
109+
/
110+
111+
112+
-- create path for migration
113+
114+
create or replace directory temp_dir as 'C:\temp';
115+
/
116+
grant read, write on directory temp_dir to PUBLIC
117+
/
118+
119+
-- Start migration
120+
DECLARE
121+
cur SYS_REFCURSOR;
122+
curid NUMBER;
123+
desctab DBMS_SQL.desc_tab;
124+
colcnt NUMBER;
125+
namevar VARCHAR2(4000);
126+
numvar NUMBER;
127+
datevar DATE;
128+
total_row_fetched number:=0;
129+
file_name varchar(50):='';
130+
out_columns varchar2(10000);
131+
out_values varchar2(10000);
132+
fHandle UTL_FILE.FILE_TYPE;
133+
batch_file_number NUMBER := 1;
134+
135+
BEGIN
136+
137+
-- fHandle := UTL_FILE.FOPEN('EXP_CSV', 'out.sql', 'w');
138+
-- write to file with name
139+
-- fHandle := UTL_FILE.FOPEN('EXP_CSV', 'out'|| TO_CHAR(sysdate, 'yyyy-mm-dd hh:mm' )||'-part-'|| batch_file_number ||'.sql', 'w');
140+
-- get list of tabels to log
141+
FOR rec IN (SELECT TABLE_NAME
142+
FROM MIGRATION_TABELS_LIST
143+
ORDER BY TABLE_NAME)
144+
LOOP
145+
OPEN cur FOR 'SELECT * FROM '||rec.TABLE_NAME||' ORDER BY 1';
146+
DBMS_OUTPUT.put_line('Working on table:' ||rec.TABLE_NAME);
147+
148+
149+
150+
151+
152+
153+
curid := DBMS_SQL.to_cursor_number(cur);
154+
DBMS_SQL.describe_columns(curid, colcnt, desctab);
155+
156+
out_columns := 'INSERT INTO '||rec.TABLE_NAME||'(';
157+
158+
159+
160+
161+
162+
FOR indx IN 1 .. colcnt LOOP
163+
164+
-- get table name and column name, check if they are exist in the MIGRATION_COLUMNS_SETTINGS
165+
-- if it exists get the new name, else use current name
166+
out_columns := out_columns||READ_ONLY.GET_COLUMN_NAME( rec.TABLE_NAME , desctab(indx).col_name )||',';
167+
IF desctab (indx).col_type = 2
168+
THEN
169+
DBMS_SQL.define_column (curid, indx, numvar);
170+
ELSIF desctab (indx).col_type = 12
171+
THEN
172+
DBMS_SQL.define_column (curid, indx, datevar);
173+
ELSE
174+
DBMS_SQL.define_column (curid, indx, namevar, 4000);
175+
END IF;
176+
END LOOP;
177+
178+
out_columns := rtrim(out_columns,',')||') VALUES (';
179+
180+
WHILE DBMS_SQL.fetch_rows (curid) > 0
181+
LOOP
182+
out_values := '';
183+
FOR indx IN 1 .. colcnt
184+
LOOP
185+
IF (desctab (indx).col_type = 1)
186+
THEN
187+
DBMS_SQL.COLUMN_VALUE (curid, indx, namevar);
188+
out_values := out_values||''''||namevar||''',';
189+
ELSIF (desctab (indx).col_type = 2)
190+
THEN
191+
DBMS_SQL.COLUMN_VALUE (curid, indx, numvar);
192+
out_values := out_values||numvar||',';
193+
ELSIF (desctab (indx).col_type = 12)
194+
THEN
195+
DBMS_SQL.COLUMN_VALUE (curid, indx, datevar);
196+
out_values := out_values||
197+
'to_date('''||to_char(datevar,'DD.MM.YYYY HH24:MI:SS')||
198+
''',''DD.MM.YYYY HH24:MI:SS''),';
199+
END IF;
200+
END LOOP;
201+
DBMS_OUTPUT.put_line(out_columns||rtrim(out_values,',')||');');
202+
-- create new file for each 2M record
203+
-- write to file with name
204+
if mod ( total_row_fetched, 2 ) = 0 then
205+
/* close old file, open new */
206+
-- if file open close it
207+
if SYS.UTL_FILE.IS_OPEN(fHandle)then
208+
UTL_FILE.FCLOSE(fHandle);
209+
end if;
210+
211+
212+
file_name := 'out-'|| TO_CHAR(sysdate, 'yyyy-mm-dd-hh:mm' )||'-part-'|| batch_file_number ||'.sql';
213+
batch_file_number := batch_file_number + 1;
214+
fHandle := UTL_FILE.FOPEN('EXP_CSV',file_name , 'w');
215+
DBMS_OUTPUT.put_line('file: ' ||file_name );
216+
DBMS_OUTPUT.put_line('total_row_fetched: ' || total_row_fetched);
217+
218+
end if;
219+
total_row_fetched := total_row_fetched + 1;
220+
-- write to file
221+
UTL_FILE.PUT_LINE(fHandle, out_columns||rtrim(out_values,',')||');');
222+
223+
224+
END LOOP;
225+
226+
DBMS_SQL.close_cursor (curid);
227+
228+
END LOOP;
229+
UTL_FILE.FCLOSE(fHandle);
230+
DBMS_OUTPUT.put_line('FINISHED');
231+
EXCEPTION
232+
WHEN OTHERS THEN
233+
DBMS_OUTPUT.PUT_LINE('Exception: SQLCODE=' || SQLCODE || ' SQLERRM=' || SQLERRM);
234+
RAISE;
235+
END;
236+
/
237+
238+
239+

0 commit comments

Comments
 (0)