I have written a piece of code in JAVA which will fetch DDL code from dbms_metadata.get_ddl() from oracle DB and the same unit is present in my local windows directory. I'm trying to compare both by using equals operator or function but not validating properly even though both data are same.
Point 1: class OrclCompLoalFolder
This will call config_env.Config_env_file.getdetails(env_number, application);
(Not going to past coding part, as it has only schema details).
Point 2: I'm replacing some value after fetching data from DB and complete code is in Point 5 below.
class OrclCompLoalFolder {
ddl_meta_data = ddl_meta_data.replace("EDITIONABLE PACKAGE BODY "+
(char)34+"FCCUSTOM"+char)34+".", "PACKAGE BODY ");
ddl_meta_data = ddl_meta_data.replace((char)34+objectname+(char)34, objectname);
Point 3: I'm calling to fetch data from windows local directory
ReadLocalDir.ReadLocalDirFile.getdetails(objectname, objecttype, dir_local_path);
Point 4: Adding code part
package ReadLocalDir;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Scanner;
public class ReadLocalDirFile {
String f_path = null;
public static String meta_data = null;
public static void getdetails(String object_name, String object_type, String object_path) {
try {
if (object_type.equals("PACKAGE_BODY")) {
String f_path = object_path + object_name+ ".sql.plb";
File myObj = new File(f_path);
Scanner myReader = new Scanner(myObj);
while (myReader.hasNextLine()) {
String data = myReader.nextLine();
//System.out.println(data);
ReadLocalDirFile.meta_data = ReadLocalDirFile.meta_data + "\r\n" + data.trim();
}
//System.out.println("RAMBO");
String meta_data_1 = ReadLocalDirFile.meta_data;
meta_data_1 = meta_data_1.replace("null", "");
meta_data_1 = meta_data_1.substring(0, meta_data_1.lastIndexOf("/"));
ReadLocalDirFile.meta_data = meta_data_1.trim();
//System.out.println(ReadLocalDirFile.meta_data);
myReader.close();
}// else for (object_type.equals("PACKAGE_BODY"))--to call some other DATA_OBJECT
}
catch (FileNotFoundException e) {
System.out.println("An error occurred.");
e.printStackTrace();
}
}
}
Point 5: Adding Main class code
package comp;
import java.io.FileNotFoundException;
import java.sql.*;
import java.util.*;
public class OrclCompLoalFolder {
public static void main(String[] args) {
String ddl_meta_data = null;
try {
Scanner read = new Scanner(System.in);
String hostname, servicename, user, password;
int env_number, port, count;
System.out.println("Enter the below application to be compared: ");
System.out.println("(FCUBS, OBLM or DC)");
String application = read.next();
System.out.println("Enter the number below to chose the BASE environment to be compared: ");
System.out.println("GOLD------> 1");
System.out.println("UAT-------> 2");
System.out.println("ST2-------> 3");
System.out.println("DEV2------> 4");
env_number = read.nextInt();
System.out.println("Enter local directory path to be compared with base: ");
String dir_local_path = read.next();
config_env.Config_env_file.getdetails(env_number, application);
int validation_application = config_env.Config_env_file.validation_application;
int validation_env = config_env.Config_env_file.validation_env;
if (validation_application == 1) {
if (validation_env == 1) {
hostname = config_env.Config_env_file.hostname;
servicename = config_env.Config_env_file.servicename;
user = config_env.Config_env_file.user;
password = config_env.Config_env_file.password;
port = config_env.Config_env_file.port;
// Load the driver class
Class.forName("oracle.jdbc.driver.OracleDriver");
// Create the connection object 1
Connection con1 = DriverManager.getConnection(
"jdbc:oracle:thin:@" + hostname + ":" + port + ":" + servicename, user, password);
//Connection con1 = DriverManager.getConnection(
//"jdbc:oracle:thin:@" + "localhost" + ":" + "1522" + ":" + "orcl", "FCCUSTOM", "FCCUSTOM1");
// Create the statement object 1
Statement stmt1 = con1.createStatement();
ResultSet fetch_count = null;
ResultSet fetch_ddl = null;
ResultSet fetch_object = stmt1.executeQuery(
"select object_name, object_type from user_objects where object_name in ('ACPKS_ACDAUDTR_CLUSTER','ACPKS_ACDAUDTR_CUSTOM') and object_type in ('PACKAGE BODY') order by object_type, object_name"
// "select object_name, object_type from user_objects where object_type not in
// ('LOB') order by object_type, object_name"
);
if (fetch_object != null) {
//System.out.println("Hi here"+fetch_object.getInt("count"));
while (fetch_object.next()) {
String objectname = fetch_object.getString("object_name");
String objecttype = fetch_object.getString("object_type");
String objecttype1 = null;
Statement stmt2 = con1.createStatement();
fetch_count = stmt2
.executeQuery("select count(1) count from user_objects where object_name = '"
+ objectname + "' and (object_type = '" + objecttype1 + "' or object_type='"
+ objecttype + "')");
fetch_count.next();
count = fetch_count.getInt("count");
objecttype = objecttype.replace("PACKAGE BODY", "PACKAGE_BODY");
objecttype = objecttype.replace("DATABASE LINK", "DB_LINK");
objecttype = objecttype.replace("JAVA SOURCE", "JAVA_SOURCE");
objecttype = objecttype.replace("JAVA CLASS", "JAVA_CLASS");
if (count == 1) {
Statement stmt3 = con1.createStatement();
fetch_ddl = stmt3.executeQuery("select dbms_metadata.get_ddl('" + objecttype + "','"
+ objectname + "') meta_data from dual");
if (fetch_ddl != null) {
fetch_ddl.next();
ddl_meta_data = fetch_ddl.getString("meta_data");
ddl_meta_data = ddl_meta_data.replace("EDITIONABLE PACKAGE BODY "+(char)34+"FCCUSTOM"+(char)34+".", "PACKAGE BODY ");
ddl_meta_data = ddl_meta_data.replace((char)34+objectname+(char)34, objectname);
ddl_meta_data = ddl_meta_data.trim().toUpperCase();
//System.out.println("suchith");
System.out.println(ddl_meta_data);
}
System.out.println("objectname "+objectname);
System.out.println(" ");
ReadLocalDir.ReadLocalDirFile.getdetails(objectname, objecttype, dir_local_path);
String local_dir_meta_data = ReadLocalDir.ReadLocalDirFile.meta_data;
local_dir_meta_data = local_dir_meta_data.toUpperCase();
//local_dir_meta_data = local_dir_meta_data.trim();
//System.out.println("Shivali");
System.out.println(local_dir_meta_data);
if (ddl_meta_data == local_dir_meta_data) {
System.out.println("Identical");
} else {
System.out.println(" Non Identical ");
System.out.println(" ");
}
ReadLocalDir.ReadLocalDirFile.meta_data = null;
}
fetch_ddl.close();
}
fetch_count.close();
}
fetch_object.close();
}
}
} catch (
Exception e) {
System.out.println("An error occurred.");
e.printStackTrace();
}
}
}
Point 6: I'm not getting any error, while using equal operator but not validating properly and placing output.
Enter the below application to be compared:
(FCUBS, OBLM or DC)
fcubs
Enter the number below to chose the BASE environment to be compared:
GOLD------> 1
UAT-------> 2
ST2-------> 3
DEV2------> 4
4
Enter local directory path to be compared with base:
C:\BANK\BANK\Azania_bank\patch_set\FCUBS_12.4.0.0.0\FCUBS_12.4.0.0.0\ROFC\MAIN\SQL\
CREATE OR REPLACE PACKAGE BODY ACPKS_ACDAUDTR_CLUSTER WRAPPED
A000000
367
ABCD
ABCD
ABCD
ABCD
ABCD
ABCD
ABCD
ABCD
ABCD
ABCD
ABCD
ABCD
ABCD
ABCD
ABCD
B
454A 7B3
Q8E3SNV3AJXLYO2KTRQRYAHXIPEWG80TS0GGV45A/P+BJRYMPH8RNYUD928YBLCE4+EHJ0NN
WAHMWSRNDMM32MPEHD/NFEYUV4LQ3LNEUEXDR8YISRW7DGUMEU3LCCG3SMPW3TCB0LNRHVR1
DLMXIPBH1J2DTVSUNQBY7PW8CYTFYCMAVGT7O+UYSYNI0T2Y2YCSBICCPN2IFXUS5INONC6G
BF4KNQ9HJCV8KCLXJ2TVUIWTUDRKCUXZVC46GTIYOXFNHJOJ3+JULB+YTD9NGTISXONZ8PIZ
YUGGPASBSGQA89RVYRYFTF4Y9DKARTN1GLLL3L7GVLTPKDPHQOWNP0VBURPF27HACQABPPAJ
JNMSZXZGSXCY9DAGWDUAESGCSBQRJ+GK0NQJ4MUQZR+IFD/NHF6CAVS+ASYHPSAJD88WQ5LH
TCJS0ANJGYYW6MDYIA2RNIPSLC0AHVBV/R81SRPH6XADUJKEJP+FYNG+IUXLV+8PJIZGPJ8J
GHOEFLPFYHFC80A41QFF69YETGXFOJGRY343LS49IRV2M+CG5INTAET05RNM9RR6N6USQD03
YNMIEW0C3+U5TNEVOQQNHQZNWARX6VXNMOIHXYC4MKLJ+PVFVNMDA4L8LQLRLF+0DVH0ETLN
UMPTMHSBFDFN7XE73KL117B3QJ+BFPP4R5GKZOFYJU1WM7Q7LX4ILSQVKQY7KW4ELQP24CZ4
3TZGDD21ZPEKIJHDYDB1MNWSOOG0IMDBGXJP/S65HS3WXKY8KQ9O6NBCKNVMJA1YTI9FZN6P
CYLNHQJ43/H3QS9M/X+LLPMBGR678J+5NWO7LRF8GXO5MMS1AVK8IJ+D8QECX3XSYHTWZXWQ
FVQWOB20WW4KUYMSZ2JHVRLVBJVB0XFNMUXQ+7KHUFC10UDU52JFDRK3YG8U0KTQYHQTU8YB
RXN6JAIZHYABJARR3X6CA+BRNR0FGTXHUPHHXSYG0J1UPTROIXDBD93ULXN8WEA98NUT4UKU
Y2MFTDJ1LZCO2OFTN0D/NP4BPYWLPOPVVTPKSJ/XUPUFXDC4ZR4KV8FEGXNXDWQ+CVKP1ZAI
C2UIMKDTMJSDJHVAOTWCTVCB8SKQ9YR3FYNOQXRTIGEA1LY1WUMQNFHB41TUSRWKCEUKN84D
7UPAL3DRQ3SPRYAXWLXXPU6FCZXOFRKNRBXQQHLEGS5SXQIE9CNIEMX8I+GGWDU4ERQGGADI
T082ZH9+JM9RAYA4NLELPSN6KBI7GLP2CTUB6RUENMIJQIFORGSLCWZHPRSQFJXO0ILZIYCP
+RNY2LH+QQ2YG/R1GTSGYH6TZUUBWDZUIFFR7REQXOWIHJYRGMLMFQMI04QIPOHNMW9V4T5U
/I+OAXBTQHAX6OWDL+E70YVZ+GV03UF/TD9BGC7ZVYB3NUMZMDZBE0AXEVAO0DVC0R55UGKU
LNWJOZXTPGVMDZW9N/YFHQDGALNFDWKCFRBHX1GWT49IGTRRM36BBHQN4/9MMCFW9DQDRS17
7ZDMHEL0MADOZYZIFMXYV3+FQOCA0QWHN1NYCNPSQL/3LFAVTY4C8HRAXZUNIKGNO9ZF46JI
L/SNAJPEPZAW/QRTGGRTIZUGAMKDWI2YMSFDHS9QTYKERUCMXLSEN4QVZBU5WCBT+CEPSRDD
MNUD1YKDJJALEETFGU1RSLQVZWVSREXF1T9FL+BJZEUJAGXMMIHTNINRESVGHDUXMGSDETS4
QPJ+JW4CWLUMXM+NNQFLC/EB+VGLAAUZVHTDCEUHOAKFLUWQPGK98Y6ERCHAZWZ64Y/HZ4UX
/SSZ6SP93QDBY2DUOCA6VSNRPS4RUQGCVKLWGDRGP2LU2W96/LUXAIFBACBGPZNIHBULHKO+
MZ0B2ESBRSNF2Y6J2CFL9SUQSYN5ARKHSOMHDHSUDPL0/DNQE744W7KCV+FEQVGSDLH8KG==
objectname ACPKS_ACDAUDTR_CLUSTER
CREATE OR REPLACE PACKAGE BODY ACPKS_ACDAUDTR_CLUSTER WRAPPED
A000000
367
ABCD
ABCD
ABCD
ABCD
ABCD
ABCD
ABCD
ABCD
ABCD
ABCD
ABCD
ABCD
ABCD
ABCD
ABCD
B
454A 7B3
Q8E3SNV3AJXLYO2KTRQRYAHXIPEWG80TS0GGV45A/P+BJRYMPH8RNYUD928YBLCE4+EHJ0NN
WAHMWSRNDMM32MPEHD/NFEYUV4LQ3LNEUEXDR8YISRW7DGUMEU3LCCG3SMPW3TCB0LNRHVR1
DLMXIPBH1J2DTVSUNQBY7PW8CYTFYCMAVGT7O+UYSYNI0T2Y2YCSBICCPN2IFXUS5INONC6G
BF4KNQ9HJCV8KCLXJ2TVUIWTUDRKCUXZVC46GTIYOXFNHJOJ3+JULB+YTD9NGTISXONZ8PIZ
YUGGPASBSGQA89RVYRYFTF4Y9DKARTN1GLLL3L7GVLTPKDPHQOWNP0VBURPF27HACQABPPAJ
JNMSZXZGSXCY9DAGWDUAESGCSBQRJ+GK0NQJ4MUQZR+IFD/NHF6CAVS+ASYHPSAJD88WQ5LH
TCJS0ANJGYYW6MDYIA2RNIPSLC0AHVBV/R81SRPH6XADUJKEJP+FYNG+IUXLV+8PJIZGPJ8J
GHOEFLPFYHFC80A41QFF69YETGXFOJGRY343LS49IRV2M+CG5INTAET05RNM9RR6N6USQD03
YNMIEW0C3+U5TNEVOQQNHQZNWARX6VXNMOIHXYC4MKLJ+PVFVNMDA4L8LQLRLF+0DVH0ETLN
UMPTMHSBFDFN7XE73KL117B3QJ+BFPP4R5GKZOFYJU1WM7Q7LX4ILSQVKQY7KW4ELQP24CZ4
3TZGDD21ZPEKIJHDYDB1MNWSOOG0IMDBGXJP/S65HS3WXKY8KQ9O6NBCKNVMJA1YTI9FZN6P
CYLNHQJ43/H3QS9M/X+LLPMBGR678J+5NWO7LRF8GXO5MMS1AVK8IJ+D8QECX3XSYHTWZXWQ
FVQWOB20WW4KUYMSZ2JHVRLVBJVB0XFNMUXQ+7KHUFC10UDU52JFDRK3YG8U0KTQYHQTU8YB
RXN6JAIZHYABJARR3X6CA+BRNR0FGTXHUPHHXSYG0J1UPTROIXDBD93ULXN8WEA98NUT4UKU
Y2MFTDJ1LZCO2OFTN0D/NP4BPYWLPOPVVTPKSJ/XUPUFXDC4ZR4KV8FEGXNXDWQ+CVKP1ZAI
C2UIMKDTMJSDJHVAOTWCTVCB8SKQ9YR3FYNOQXRTIGEA1LY1WUMQNFHB41TUSRWKCEUKN84D
7UPAL3DRQ3SPRYAXWLXXPU6FCZXOFRKNRBXQQHLEGS5SXQIE9CNIEMX8I+GGWDU4ERQGGADI
T082ZH9+JM9RAYA4NLELPSN6KBI7GLP2CTUB6RUENMIJQIFORGSLCWZHPRSQFJXO0ILZIYCP
+RNY2LH+QQ2YG/R1GTSGYH6TZUUBWDZUIFFR7REQXOWIHJYRGMLMFQMI04QIPOHNMW9V4T5U
/I+OAXBTQHAX6OWDL+E70YVZ+GV03UF/TD9BGC7ZVYB3NUMZMDZBE0AXEVAO0DVC0R55UGKU
LNWJOZXTPGVMDZW9N/YFHQDGALNFDWKCFRBHX1GWT49IGTRRM36BBHQN4/9MMCFW9DQDRS17
7ZDMHEL0MADOZYZIFMXYV3+FQOCA0QWHN1NYCNPSQL/3LFAVTY4C8HRAXZUNIKGNO9ZF46JI
L/SNAJPEPZAW/QRTGGRTIZUGAMKDWI2YMSFDHS9QTYKERUCMXLSEN4QVZBU5WCBT+CEPSRDD
MNUD1YKDJJALEETFGU1RSLQVZWVSREXF1T9FL+BJZEUJAGXMMIHTNINRESVGHDUXMGSDETS4
QPJ+JW4CWLUMXM+NNQFLC/EB+VGLAAUZVHTDCEUHOAKFLUWQPGK98Y6ERCHAZWZ64Y/HZ4UX
/SSZ6SP93QDBY2DUOCA6VSNRPS4RUQGCVKLWGDRGP2LU2W96/LUXAIFBACBGPZNIHBULHKO+
MZ0B2ESBRSNF2Y6J2CFL9SUQSYN5ARKHSOMHDHSUDPL0/DNQE744W7KCV+FEQVGSDLH8KG==
Non Identical
Adding Snapshot:
Point 7: If I take the output of both and compare it in tool or in online compare text tool, it will display "The two texts are identical".
Note: Doing this activity to compare between GOLD units and GIT repository.
Kindly ignore the quality of Java coding part, as I'm not regular JAVA developer.
Kindly let me know if further information is needed and please add comments.