0

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:

enter image description here

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.

suchith shivali
  • 110
  • 2
  • 8
  • I have tried with both as mentioned below `if (ddl_meta_data == local_dir_meta_data) if (ddl_meta_data.equals(local_dir_meta_data))` – suchith shivali Apr 12 '20 at 04:51
  • The fact that line `objectname ACPKS_ACDAUDTR_CLUSTER` has no blank lines before it, but line `Non Identical` has 2 blank lines before it, means that `local_dir_meta_data` has two blank lines at the end, but `ddl_meta_data` doesn't, ergo they are not equal. --- Try printing the lengths of the two strings to confirm that they are not the same size, which definitely proves them to not be equal. – Andreas Apr 12 '20 at 04:54
  • I'm using trim() operator at the end in `class ReadLocalDirFile` like `ReadLocalDirFile.meta_data = meta_data_1.trim();` – suchith shivali Apr 12 '20 at 05:01
  • You must use equals() to compare string content. Here you use ==: 'ddl_meta_data == local_dir_meta_data' equals() compares string content. == checks if two objects are the exact same object. – NomadMaker Apr 12 '20 at 05:02
  • I'm purely going by the 2 blank lines in the output. Since you don't print anything else between `println(local_dir_meta_data)` and `println(" Non Identical ")`, it can only be from blank lines at the end of `local_dir_meta_data`, regardless of what trimming you *believe* has been done. --- Did you try printing the lengths of the strings like I suggested? – Andreas Apr 12 '20 at 05:03
  • @Andreas for better showoff of my output, I have edited that. I have added the original output and even added snap shot of output from eclipse. But its strange. – suchith shivali Apr 12 '20 at 05:12
  • @NomadMarketr I have tried with both equals operators and I have mentioned the same in my first comment. – suchith shivali Apr 12 '20 at 05:13
  • @Andreas I can able to see that, this question I have asked, has been closed by quoting 'Your post has been associated with a similar question'. Kindly reopen this question and some other people can answer this. – suchith shivali Apr 12 '20 at 05:21
  • 2
    Small suggestion: Reduce the code to the bare minimum. You have two strings. They are similar, but not equal. And you want to check if they have the same "contents". [edit] and remove the unnecessary part. – Johannes Kuhn Apr 12 '20 at 05:29
  • 2
    @suchithshivali As long as the question code has `if (ddl_meta_data == local_dir_meta_data)`, the duplicate link is appropriate. --- Also, you haven't even tried printing the string lengths, as I've suggested twice before, so it seems you're asking for our help, but ignoring the help we do provide, so why would we continue to help? – Andreas Apr 12 '20 at 05:31
  • @JohannesKuhn Thank you for advice. If I fetch data from `dbms_metadata.get_ddl` as a standard format of package body will be `CREATE OR REPLACE EDITIONABLE PACKAGE BODY "FCCUSTOM"."ACPKS_ACDAUDTR_CUSTOM" wrapped`. The same factory ship package body wont be the same. so I have replaced some in JAVA. Sorry again if I mentioned a bit long code. – suchith shivali Apr 12 '20 at 05:39
  • @Andreas Length of two strings are different as you said. Thank you for suggesting twice. Need to find a work around to do this. Thank you. – suchith shivali Apr 12 '20 at 05:54
  • It does not matter how or where you get the strings from. Your question is much simpler. [edit] your question, reduce it to the essentials. If the problem is clear after looking at your question for, say 20 seconds, then I will vote to reopen it. – Johannes Kuhn Apr 12 '20 at 05:54
  • @JohannesKuhn I thought of explaining in details but noted down your points. Thank you. – suchith shivali Apr 12 '20 at 05:56

0 Answers0