<?xml version='1.0' encoding='utf-8'?>
<rss version="2.0"><channel><title>Gitora</title><link>https://blog.gitora.com/</link><description>Source Control for the Oracle Database with Git</description><language>en-US</language><item><title>Gitora For Data API</title><link>https://blog.gitora.com/gitora-for-data-api/</link><guid>https://blog.gitora.com/gitora-for-data-api/</guid><description>&lt;p class="wp-block-paragraph"&gt;Gitora For Data exposes a JSON API that you can use to complete the most common tasks you&amp;#8217;d use the application for.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Specifically, using the API you can:&lt;/p&gt;

&lt;ul class="wp-block-list"&gt;&lt;li&gt;Export data from a database to a repo&lt;/li&gt;&lt;li&gt;Import data from a repo to a database&lt;/li&gt;&lt;li&gt;Clone a repo&lt;/li&gt;&lt;li&gt;Get the text content of a file from the repo&lt;/li&gt;&lt;li&gt;Download a binary file (LOB) or a folder from the repo&lt;/li&gt;&lt;/ul&gt;

&lt;h2 class="wp-block-heading"&gt;Authentication&lt;/h2&gt;

&lt;p class="wp-block-paragraph"&gt;Gitora For Data API uses API keys for authentication. &lt;a href="https://blog.gitora.com/getting-started-with-gitora-for-data/" data-type="URL" data-id="https://blog.gitora.com/getting-started-with-gitora-for-data/" target="_blank" rel="noreferrer noopener"&gt;Please read the section titled Generating and Using API Keys at the end of this document&lt;/a&gt; to learn about API keys.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;All API requests should include your API key in an &lt;code&gt;Authorization&lt;/code&gt; HTTP header as follows:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;Authorization: Bearer GITORA_FOR_DATA_API_KEY&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Below is a Java code example to establish a connection to the Gitora For Data API. Note that the API end point is at &lt;code&gt;[your domain]/gitorafordata/api&lt;/code&gt;&lt;/p&gt;

&lt;pre class="wp-block-code"&gt;&lt;code&gt;   private static String getApiKey() {
        return "YOUR API KEY";
   }

   private static HttpURLConnection getHTTPConnection() {
        try {
            URL url = new URL("http://127.0.0.1:7101/gitorafordata/api");
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setRequestMethod("POST");
            connection.setRequestProperty("Content-Type", "application/json");
            connection.setRequestProperty("Authorization", "Bearer " + getApiKey());
            connection.setDoOutput(true);
            return connection;
        } catch (Exception e) {
            e.printStackTrace();
        }
    }&lt;/code&gt;&lt;/pre&gt;

&lt;h2 class="wp-block-heading"&gt;&lt;strong&gt;Sending an HTTP Request to the API&lt;/strong&gt;&lt;/h2&gt;

&lt;p class="wp-block-paragraph"&gt;The HTTP request body must be a JSON object. The JSON object contains the name and the  input parameter values of the API function being called. Below is the list of functions with an example to show how to call them:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;/p&gt;

&lt;h3 class="wp-block-heading"&gt;&lt;strong&gt;Export&lt;/strong&gt;:&lt;/h3&gt;

&lt;p class="wp-block-paragraph"&gt;JSON Object Specification:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;&lt;code&gt;method&lt;/code&gt;:&lt;/strong&gt; export&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;&lt;code&gt;input&lt;/code&gt;:&lt;/strong&gt; A JSON Object that contains the input parameters to the &lt;code&gt;export &lt;/code&gt;function.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;input &lt;/code&gt;JSON Object properties:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;&lt;code&gt;database&lt;/code&gt;:&lt;/strong&gt; Name of the database you want to export from.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;&lt;code&gt;repo&lt;/code&gt;:&lt;/strong&gt; Name of the Git repo you want to export to.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;&lt;code&gt;message&lt;/code&gt;:&lt;/strong&gt; Your Git commit message.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;&lt;code&gt;threads&lt;/code&gt;:&lt;/strong&gt; Number of threads to use to export the data. (Defaults to 1).&lt;/p&gt;

&lt;pre class="wp-block-code"&gt;&lt;code&gt;{"method":"export", "input":{"database":"Gitora 7","repo":"CO","threads":2,"message":"API Export"}}
&lt;/code&gt;&lt;/pre&gt;

&lt;p class="wp-block-paragraph"&gt;Java example:&lt;/p&gt;

&lt;pre class="wp-block-code"&gt;&lt;code&gt;        try {
            JSONObject payload  = new JSONObject();
            payload.put("method","export");
            JSONObject input = new JSONObject();
            input.put("database","Gitora 7");
            input.put("repo","CO");
            input.put("message","API Export");
            input.put("threads",2);
            payload.put("input",input);
            JSONObject response = contactGitoraAPI(payload);

        }catch(Exception e){
            e.printStackTrace();
        }&lt;/code&gt;&lt;/pre&gt;

&lt;h4 class="wp-block-heading"&gt;Response&lt;/h4&gt;

&lt;p class="wp-block-paragraph"&gt;The response from the server returns a JSON Object in the body. If the &lt;code&gt;export &lt;/code&gt;function is successful, the object looks like the following:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;{"status":"success"}&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;If the &lt;code&gt;export &lt;/code&gt;function is not successful, the object looks like the following:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;{"status":"error","error":"Some error message"}&lt;/code&gt;&lt;/p&gt;

&lt;h3 class="wp-block-heading"&gt;&lt;strong&gt;Import&lt;/strong&gt;&lt;/h3&gt;

&lt;p class="wp-block-paragraph"&gt;JSON Object Specification&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;&lt;code&gt;method&lt;/code&gt;:&lt;/strong&gt; import&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;&lt;code&gt;input&lt;/code&gt;:&lt;/strong&gt; A JSON Object that contains the input parameters to the &lt;code&gt;import &lt;/code&gt;function.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;input &lt;/code&gt;JSON Object properties:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;&lt;code&gt;database&lt;/code&gt;:&lt;/strong&gt; Name of the database you want to import into.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;&lt;code&gt;repo&lt;/code&gt;:&lt;/strong&gt; Name of the Git repo you want to import.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;&lt;code&gt;execute&lt;/code&gt;:&lt;/strong&gt; Boolean. Set to &lt;code&gt;true &lt;/code&gt;if you want to actually perform the import to the database. Set to &lt;code&gt;false &lt;/code&gt;if you want to download the generated insert statements. Defaults to &lt;code&gt;false&lt;/code&gt;.&lt;/p&gt;

&lt;pre class="wp-block-code"&gt;&lt;code&gt;{"method":"import", "input":{"database":"Dulcian Local","repo":"CO","execute":true}}
&lt;/code&gt;&lt;/pre&gt;

&lt;p class="wp-block-paragraph"&gt;Java example:&lt;/p&gt;

&lt;pre class="wp-block-code"&gt;&lt;code&gt;        try {
            JSONObject payload  = new JSONObject();
            payload.put("method","import");
            JSONObject input = new JSONObject();
            input.put("database","Dulcian Local");
            input.put("repo","CO");
            input.put("execute",true);
            payload.put("input",input);

            JSONObject response = contactGitoraAPI(payload);

        }catch(Exception e){
            e.printStackTrace();

        }&lt;/code&gt;&lt;/pre&gt;

&lt;h4 class="wp-block-heading"&gt;Response&lt;/h4&gt;

&lt;p class="wp-block-paragraph"&gt;The response from the server returns a JSON Object in the body. If the &lt;code&gt;import &lt;/code&gt;function is successful and the &lt;code&gt;execute &lt;/code&gt;property was set to &lt;code&gt;true&lt;/code&gt;, the object looks like the following:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;{"status":"success", "entityReports":[If there are any errors during the import they appear here other wise this property does not exist], "result":"Message that indicates that the import completed without errors. This property exists only if there are no errors during the import." }&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Important Note:&lt;/strong&gt; The &lt;code&gt;status &lt;/code&gt;of the response can be &lt;code&gt;success &lt;/code&gt;and the &lt;code&gt;import &lt;/code&gt;can be a &lt;strong&gt;failure&lt;/strong&gt;. The &lt;code&gt;status &lt;/code&gt;property only indicates that the Gitora For Data server accepted and executed your &lt;code&gt;request&lt;/code&gt;. It does not indicate that the &lt;code&gt;import &lt;/code&gt;itself was &lt;code&gt;successful&lt;/code&gt;. For import to be successful, there must be no &lt;code&gt;entityReports&lt;/code&gt; property in the &lt;code&gt;response&lt;/code&gt;. In other words, the &lt;code&gt;result&lt;/code&gt; property must be in the &lt;code&gt;reponse&lt;/code&gt;.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;If the &lt;code&gt;execute &lt;/code&gt;property was set to &lt;code&gt;false&lt;/code&gt;, then the response contains a &lt;code&gt;fileName &lt;/code&gt;property which you should use with the &lt;code&gt;download &lt;/code&gt;function to download the generated script.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt; &lt;code&gt;{"status":"success","fileName":"Use this value with the download function"}&lt;/code&gt; &lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;If the &lt;code&gt;import &lt;/code&gt;function is not successful, the object looks like the following:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;{"status":"error","error":"Some error message"}&lt;/code&gt;&lt;/p&gt;

&lt;h2 class="wp-block-heading"&gt;Clone&lt;/h2&gt;

&lt;p class="wp-block-paragraph"&gt;JSON Object Specification&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;&lt;code&gt;method&lt;/code&gt;:&lt;/strong&gt; clone&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;&lt;code&gt;input&lt;/code&gt;:&lt;/strong&gt; A JSON Object that contains the input parameters to the &lt;code&gt;clone&lt;/code&gt; function.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;input &lt;/code&gt;JSON Object properties:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;&lt;code&gt;source&lt;/code&gt;&lt;/strong&gt;: A JSON Object that specifies the source repo that will be cloned.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt; &lt;code&gt;source &lt;/code&gt;JSON Object properties: &lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;&lt;code&gt;database&lt;/code&gt;:&lt;/strong&gt; Name of the database you want to clone from.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;&lt;code&gt;repo&lt;/code&gt;:&lt;/strong&gt; Name of the Git repo you want to clone.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;&lt;code&gt;target&lt;/code&gt;&lt;/strong&gt;: A JSON Object that specifies the target repo.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;&lt;code&gt;database&lt;/code&gt;:&lt;/strong&gt; Name of the database you want to create the new repo in.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;&lt;code&gt;repo&lt;/code&gt;:&lt;/strong&gt; Name of the Git repo you want to create.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;&lt;code&gt;databaseUser:&lt;/code&gt;&lt;/strong&gt; Name of the database user to be associated with the new repo.&lt;/p&gt;

&lt;pre class="wp-block-code"&gt;&lt;code&gt;{"method":"clone", "input":{"source":{"database":"Gitora 7","repo":"CO"},"target":{"databaseUser":"CO","database":"Dulcian Local","repo":"CO"}}}
&lt;/code&gt;&lt;/pre&gt;

&lt;p class="wp-block-paragraph"&gt;Java example:&lt;/p&gt;

&lt;pre class="wp-block-code"&gt;&lt;code&gt;        try {
            JSONObject payload  = new JSONObject();
            payload.put("method","clone");
            JSONObject input  = new JSONObject();
            JSONObject source = new JSONObject();
            source.put("database","Gitora 7");
            source.put("repo","CO");
            input.put("source",source);
            JSONObject target = new JSONObject();
            target.put("database","Dulcian Local");
            target.put("repo","CO");
            target.put("databaseUser","CO");
            input.put("target",target);
            payload.put("input",input);

            JSONObject response = contactGitoraAPI(payload);

        }catch(Exception e){
            e.printStackTrace();
        }&lt;/code&gt;&lt;/pre&gt;

&lt;h4 class="wp-block-heading"&gt;Response&lt;/h4&gt;

&lt;p class="wp-block-paragraph"&gt;The response from the server returns a JSON Object in the body. If the &lt;code&gt;clone &lt;/code&gt;function is successful the object looks like the following:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;{"status":"success"}&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;If the &lt;code&gt;clone &lt;/code&gt;function is not successful, the object looks like the following:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;{"status":"error","error":"Some error message"}&lt;/code&gt;&lt;/p&gt;

&lt;h2 class="wp-block-heading"&gt;Get&lt;/h2&gt;

&lt;p class="wp-block-paragraph"&gt;Returns the content of a file stored in the Git repo.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;JSON Object Specification:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;&lt;code&gt;method&lt;/code&gt;:&lt;/strong&gt; get&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;&lt;code&gt;input&lt;/code&gt;:&lt;/strong&gt; A JSON Object that contains the input parameters to the get function.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;&lt;code&gt;database&lt;/code&gt;:&lt;/strong&gt; Name of the database you want to get from.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;&lt;code&gt;repo&lt;/code&gt;:&lt;/strong&gt; Name of the Git repo you want to get from.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;&lt;code&gt;path&lt;/code&gt;:&lt;/strong&gt; Path of the file you want to get. Start the path &lt;strong&gt;after&lt;/strong&gt; the &lt;code&gt;data&lt;/code&gt; folder. For example, if the repo is at directory &lt;code&gt;C:\gitora\datastore\GitoraForData\repos\databases\DVD Rental\dvdrental_repo&lt;/code&gt; and the file you want to get is &lt;code&gt;actor.json&lt;/code&gt; which is at the path &lt;code&gt;C:\gitora\datastore\GitoraForData\repos\databases\DVD Rental\dvdrental_repo\data\actor\actor.json&lt;/code&gt; &lt;code&gt;path&lt;/code&gt; parameter value must be &lt;code&gt;actor/actor.json&lt;/code&gt; . You can download an entire folder by specifying the path to the folder.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;&lt;code&gt;commitId&lt;/code&gt;:&lt;/strong&gt; ID of the git commit you want to query from. If you want the current state of the file in the working directory, leave this property null or empty.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;&lt;code&gt;returnDownloadLink:&lt;/code&gt;&lt;/strong&gt; If set to &lt;code&gt;true&lt;/code&gt;, the function returns a download link that you can use to download the file. If set to false, the body of the response contains the file. Defaults to false. If a file is not a text file, the property is omitted. Binary files and folders are always returned as a downloadable link.&lt;/p&gt;

&lt;pre class="wp-block-code"&gt;&lt;code&gt;{"method":"get", "input":{"path":"PRODUCTS/PRODUCTS.json","database":"Gitora 7","repo":"CO","commitId":"01f05021c5136db6d3979d61f6b5bfac21fdb42f","returnDownloadLink":true}}
&lt;/code&gt;&lt;/pre&gt;

&lt;p class="wp-block-paragraph"&gt;Java example:&lt;/p&gt;

&lt;pre class="wp-block-code"&gt;&lt;code&gt;        try {
            JSONObject payload  = new JSONObject();
            payload.put("method","get");
            JSONObject input = new JSONObject();
            input.put("database","Gitora 7");
            input.put("repo","CO");
            input.put("path","PRODUCTS/PRODUCTS.json");
            input.put("commitId","01f05021c5136db6d3979d61f6b5bfac21fdb42f");
            input.put("returnDownloadLink",true);
            payload.put("input",input);

            JSONObject response = contactGitoraAPI(payload);

        }catch(Exception e){
            e.printStackTrace();
        }&lt;/code&gt;&lt;/pre&gt;

&lt;h4 class="wp-block-heading"&gt;Response&lt;/h4&gt;

&lt;p class="wp-block-paragraph"&gt;The response from the server returns a JSON Object in the body. If the &lt;code&gt;get &lt;/code&gt;function is successful and the &lt;code&gt;returnDownloadLink&lt;/code&gt; property is set to &lt;code&gt;false&lt;/code&gt; the object looks like the following:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;{"status":"success", "result":{"fileContent","This is the content of my file."}&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;If the returnDownloadLink property is set to true or the referenced path is a binary file or a folder then the request looks like the following:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt; &lt;code&gt;{"status":"success", "result":{"filePath","use this path with the download function"}&lt;/code&gt; &lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;If the &lt;code&gt;get &lt;/code&gt;function is not successful, the object looks like the following:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;{"status":"error","error":"Some error message"}&lt;/code&gt;&lt;/p&gt;

&lt;h2 class="wp-block-heading"&gt;Download&lt;/h2&gt;

&lt;p class="wp-block-paragraph"&gt;Downloads a file&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;JSON Object Specification:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;&lt;code&gt;method&lt;/code&gt;:&lt;/strong&gt; download&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;&lt;code&gt;input&lt;/code&gt;:&lt;/strong&gt; A JSON Object that contains the input parameters to the get function.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;&lt;code&gt;fileName&lt;/code&gt;:&lt;/strong&gt; A file name that you received from other Gitora For Data API functions. You cannot pass any file name to this function and expect it to return it. The file must be created by another API function.&lt;/p&gt;

&lt;pre class="wp-block-code"&gt;&lt;code&gt;{"method":"download", "input:{"fileName":"rBa1k6lWlDoFIbzD3OqMh6iZxS7gAsVWw7flhoJQ7zQzDThm3fI.zip"}}
&lt;/code&gt;&lt;/pre&gt;

&lt;p class="wp-block-paragraph"&gt;Java example:&lt;/p&gt;

&lt;pre class="wp-block-code"&gt;&lt;code&gt;        try {
            JSONObject payload  = new JSONObject();
            payload.put("method","download");
            JSONObject input = new JSONObject();
            input.put("fileName","rBa1k6lWlDoFIbzD3OqMh6iZxS7gAsVWw7flhoJQ7zQzDThm3fI.zip");
            payload.put("input",input);
            downloadFromGitoraAPI(payload);
        }catch(Exception e){
            e.printStackTrace();
        }
&lt;/code&gt;&lt;/pre&gt;

&lt;h4 class="wp-block-heading"&gt;Response&lt;/h4&gt;

&lt;p class="wp-block-paragraph"&gt;The response from the server can be downloaded using standard http file download. &lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Below are the other Java methods used in these examples:&lt;/p&gt;

&lt;pre class="wp-block-code"&gt;&lt;code&gt;
    private static JSONObject contactGitoraAPI(JSONObject payload) {
        HttpURLConnection http = getHTTPConnection();
        try {

            http.getOutputStream().write(payload.toString().getBytes());

            int responseCode = http.getResponseCode();

            JSONObject responseJson = null;
            if (responseCode == HttpURLConnection.HTTP_OK) {
                BufferedReader reader = new BufferedReader(new InputStreamReader(http.getInputStream()));
                String line;
                StringBuilder response = new StringBuilder();
                while ((line = reader.readLine()) != null) {
                    response.append(line);
                }
                reader.close();
                responseJson = parseResponse(response.toString());

            } else {
                System.out.println("contactGitoraAPI:Request failed. Response Code: " + responseCode);
            }
            return responseJson;
        } catch (Exception e) {
            e.printStackTrace();

        }finally{
            http.disconnect();
        }
    }

    private static void downloadFromGitoraAPI(JSONObject payload) {
        HttpURLConnection http = getHTTPConnection();
        try {

            http.getOutputStream().write(payload.toString().getBytes());
            String savePath = "c:\\downloadedfiles\\downloaded_file.zip"; 
            int responseCode = http.getResponseCode();

            if (responseCode == HttpURLConnection.HTTP_OK) {
                try (FileOutputStream fileOutputStream = new FileOutputStream(savePath);
                     BufferedOutputStream bufferedOutputStream = new BufferedOutputStream(fileOutputStream)) {

                    // Create input stream connected to the server response
                    try (InputStream inputStream = http.getInputStream();
                         BufferedInputStream bufferedInputStream = new BufferedInputStream(inputStream)) {

                        // Create a buffer and a variable to keep track of how many bytes are read
                        byte&amp;#91;] buffer = new byte&amp;#91;4096];
                        int bytesRead;

                        // Read the file and write it to the output stream
                        while ((bytesRead = bufferedInputStream.read(buffer)) != -1) {
                            bufferedOutputStream.write(buffer, 0, bytesRead);
                        }
                    }
                }

            } else {
                System.out.println("contactGitoraAPI:Request failed. Response Code: " + responseCode);
            }
            //return responseJson;
        } catch (Exception e) {
            e.printStackTrace();

        }finally{
            http.disconnect();
        }
    }&lt;/code&gt;&lt;/pre&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;/p&gt;</description><pubDate>Fri, 06 Oct 2023 16:20:43 +0300</pubDate></item><item><title>Introducing Gitora For Data</title><link>https://blog.gitora.com/introducing-gitora-for-data/</link><guid>https://blog.gitora.com/introducing-gitora-for-data/</guid><description>&lt;p class="wp-block-paragraph"&gt;We are thrilled to announce the release of a brand new app: Gitora For Data.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Gitora For Data seamlessly integrates data in your tables with Git, enabling robust version control. Utilize any Git command for collaboration and effortlessly import any dataset version back into your chosen database. Gitora For Data is ideal for versioning metadata, business logic, Large Objects (LOBs), and value lists in your tables.&lt;/p&gt;

&lt;figure class="wp-block-image size-large"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/09/repo.png"&gt;&lt;img decoding="async" width="1024" height="582" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/09/repo-1024x582.png" alt="" class="wp-image-1089" srcset="https://blog.gitora.com/wp-content/uploads/2023/09/repo-1024x582.png 1024w, https://blog.gitora.com/wp-content/uploads/2023/09/repo-300x171.png 300w, https://blog.gitora.com/wp-content/uploads/2023/09/repo-768x437.png 768w, https://blog.gitora.com/wp-content/uploads/2023/09/repo.png 1293w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;h2 class="wp-block-heading"&gt;&lt;strong&gt;A Solution for Database Centric Applications&lt;/strong&gt;&lt;/h2&gt;

&lt;p class="wp-block-paragraph"&gt;Many teams in the Oracle database community build database centric applications where most of the business logic, code, settings, workflows and even user interfaces are stored in the database tables. This has great benefits but it comes at a great cost: Lack of version control. Deprived of version control, database teams struggle to collaborate. Having two people working on the same application becomes a daunting task, a trivial undertaking for middle tier and web developers. Deploying changes from the development database to production fairs no better. A missing row in a table, a forgotten CLOB update causes havoc. Gitora For Data is our first attempt to provide a solution to these shortcomings.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Database centric application development is an area with a lot idiosyncratic implementations and no real industry wide standards. Accommodating the wide range of requirements may take additional features. We are looking forward to hearing from you. We fully anticipate that there will be unique needs and Gitora For Data application architecture is flexible enough to support a wide variety of requirements. &lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;We published two tutorials already. &lt;a rel="noreferrer noopener" href="https://blog.gitora.com/getting-started-with-gitora-for-data/" target="_blank"&gt;One that shows how you can get started&lt;/a&gt; and &lt;a rel="noreferrer noopener" href="https://blog.gitora.com/working-with-a-gitora-for-data-repo/" target="_blank"&gt;one that shows how to start versioning your metadata&lt;/a&gt;.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;a href="https://www.gitora.com/download.html"&gt;You can download Gitora For Data from this link.&lt;/a&gt;&lt;/p&gt;</description><pubDate>Fri, 29 Sep 2023 14:12:02 +0300</pubDate></item><item><title>Working with a Gitora For Data Repo</title><link>https://blog.gitora.com/working-with-a-gitora-for-data-repo/</link><guid>https://blog.gitora.com/working-with-a-gitora-for-data-repo/</guid><description>&lt;p class="wp-block-paragraph"&gt;&lt;em&gt;If you have not done so already, please read&lt;a href="https://blog.gitora.com/getting-started-with-gitora-for-data/" target="_blank" rel="noreferrer noopener"&gt; Getting Started with Gitora For Data&lt;/a&gt; to learn how you can create and open repos.&lt;/em&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;In this tutorial, we will add every table in the Oracle sample schema CO to the CO_REPO, extract the data in the tables, make some modifications to them, issue a git commit and import the data into another database.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Clicking the open button next to the repo in the Home Screen opens the Repo App in a new browser tab.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Below is the screenshot of the CO_REPO in its initial state.&lt;/p&gt;

&lt;figure class="wp-block-image size-large is-resized"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/09/repoapp_init.png"&gt;&lt;img decoding="async" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/09/repoapp_init-1024x894.png" alt="" class="wp-image-1010" width="527" height="460" srcset="https://blog.gitora.com/wp-content/uploads/2023/09/repoapp_init-1024x894.png 1024w, https://blog.gitora.com/wp-content/uploads/2023/09/repoapp_init-300x262.png 300w, https://blog.gitora.com/wp-content/uploads/2023/09/repoapp_init-768x671.png 768w, https://blog.gitora.com/wp-content/uploads/2023/09/repoapp_init.png 1065w" sizes="auto, (max-width: 527px) 100vw, 527px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;At its initial state, the repo CO_REPO is empty and there is only the initial commit that stored the initial Gitora configuration file.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Following tutorials will focus on other git features such as branching, merging etc&amp;#8230;&lt;/p&gt;

&lt;h2 class="wp-block-heading"&gt;Creating Entities&lt;/h2&gt;

&lt;p class="wp-block-paragraph"&gt;To add tables to the repo, click the plus sign on the left of the screen titled under the repo search field.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/09/repo_toolbar.png"&gt;&lt;img decoding="async" width="493" height="263" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/09/repo_toolbar.png" alt="" class="wp-image-1013" srcset="https://blog.gitora.com/wp-content/uploads/2023/09/repo_toolbar.png 493w, https://blog.gitora.com/wp-content/uploads/2023/09/repo_toolbar-300x160.png 300w" sizes="auto, (max-width: 493px) 100vw, 493px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;The Add Table to repo dialog shows up.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/09/add_table.png"&gt;&lt;img decoding="async" width="507" height="669" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/09/add_table.png" alt="" class="wp-image-1014" srcset="https://blog.gitora.com/wp-content/uploads/2023/09/add_table.png 507w, https://blog.gitora.com/wp-content/uploads/2023/09/add_table-227x300.png 227w" sizes="auto, (max-width: 507px) 100vw, 507px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;Select every table by clicking the Select button next to each table. Finally, click OK. Gitora will create an &amp;#8220;Entity&amp;#8221; for each database table. &lt;strong&gt;In Gitora parlance, an Entity is an SQL query with a target table.&lt;/strong&gt; Gitora for Data can export and import entities.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Our repo looks much better now with seven entities.&lt;/p&gt;

&lt;figure class="wp-block-image size-large"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/09/entities-1.png"&gt;&lt;img decoding="async" width="1024" height="370" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/09/entities-1-1024x370.png" alt="" class="wp-image-1016" srcset="https://blog.gitora.com/wp-content/uploads/2023/09/entities-1-1024x370.png 1024w, https://blog.gitora.com/wp-content/uploads/2023/09/entities-1-300x108.png 300w, https://blog.gitora.com/wp-content/uploads/2023/09/entities-1-768x278.png 768w, https://blog.gitora.com/wp-content/uploads/2023/09/entities-1.png 1250w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;We&amp;#8217;ll talk about entities and what you can do with them in another tutorial. For the purposes of this tutorial, we are ready to export the data out of the CO schema in the DEV database.&lt;/p&gt;

&lt;h2 class="wp-block-heading"&gt;Exporting Data to the Git Repo&lt;/h2&gt;

&lt;p class="wp-block-paragraph"&gt;Click the Export button which is the first button from the left, at the top of the screen.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/09/top_menu.png"&gt;&lt;img decoding="async" width="501" height="144" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/09/top_menu.png" alt="" class="wp-image-1018" srcset="https://blog.gitora.com/wp-content/uploads/2023/09/top_menu.png 501w, https://blog.gitora.com/wp-content/uploads/2023/09/top_menu-300x86.png 300w" sizes="auto, (max-width: 501px) 100vw, 501px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;The Export dialog shows up.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/09/export_dialog.png"&gt;&lt;img decoding="async" width="512" height="519" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/09/export_dialog.png" alt="" class="wp-image-1020" srcset="https://blog.gitora.com/wp-content/uploads/2023/09/export_dialog.png 512w, https://blog.gitora.com/wp-content/uploads/2023/09/export_dialog-296x300.png 296w" sizes="auto, (max-width: 512px) 100vw, 512px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;Gitora can export the data in multiple threads in parallel. Gitora displays the number of processors in your server. We recommend picking a number below the processor count as the number of threads to be used for export.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Finally, Gitora adds and commits the generated files to Git. The more files there are the longer this process takes, although JGit is surprisingly fast at adding and committing files.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Enter a Commit Message and click the Export button. A notification will slide in from the right side of the screen, informing you that the export has begun and Gitora will inform you once it is completed. The same message is also displayed in the Messages tab at the bottom of the screen.&lt;/p&gt;

&lt;figure class="wp-block-image size-large"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/09/Export-Started.png"&gt;&lt;img decoding="async" width="1024" height="760" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/09/Export-Started-1024x760.png" alt="" class="wp-image-1021" srcset="https://blog.gitora.com/wp-content/uploads/2023/09/Export-Started-1024x760.png 1024w, https://blog.gitora.com/wp-content/uploads/2023/09/Export-Started-300x223.png 300w, https://blog.gitora.com/wp-content/uploads/2023/09/Export-Started-768x570.png 768w, https://blog.gitora.com/wp-content/uploads/2023/09/Export-Started.png 1239w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;After a short while you will receive a second notification that informing you that the export is completed. The Message tab will also display the same message. The Git tab in the middle of the screen will show the new commit created by the export.&lt;/p&gt;

&lt;figure class="wp-block-image size-large"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/09/export_done.png"&gt;&lt;img decoding="async" width="1024" height="367" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/09/export_done-1024x367.png" alt="" class="wp-image-1023" srcset="https://blog.gitora.com/wp-content/uploads/2023/09/export_done-1024x367.png 1024w, https://blog.gitora.com/wp-content/uploads/2023/09/export_done-300x107.png 300w, https://blog.gitora.com/wp-content/uploads/2023/09/export_done-768x275.png 768w, https://blog.gitora.com/wp-content/uploads/2023/09/export_done.png 1246w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;A Word On Export Speed&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Gitora is not tested with large datasets and the goal of the product is not to support millions of rows. The CO schema has 8783 rows and Gitora exports the data quickly. Please note that the number of files generated by Gitora can change significantly depending on the File Generation Strategy you choose and the number of LOB columns the tables have.&lt;/p&gt;

&lt;h2 class="wp-block-heading"&gt;Browsing the Exported Data&lt;/h2&gt;

&lt;p class="wp-block-paragraph"&gt;Click on the entity names or open the button group for each entity and select Edit Data to browse the generated JSON files. &lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/09/edit_entitydata.png"&gt;&lt;img decoding="async" width="718" height="204" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/09/edit_entitydata.png" alt="" class="wp-image-1024" srcset="https://blog.gitora.com/wp-content/uploads/2023/09/edit_entitydata.png 718w, https://blog.gitora.com/wp-content/uploads/2023/09/edit_entitydata-300x85.png 300w" sizes="auto, (max-width: 718px) 100vw, 718px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;In the screenshot below, we clicked the CUSTOMERS entity to view the contents of the CUSTOMERS folder in the repo&amp;#8217;s working directory.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/09/customers.png"&gt;&lt;img decoding="async" width="519" height="475" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/09/customers.png" alt="" class="wp-image-1026" srcset="https://blog.gitora.com/wp-content/uploads/2023/09/customers.png 519w, https://blog.gitora.com/wp-content/uploads/2023/09/customers-300x275.png 300w" sizes="auto, (max-width: 519px) 100vw, 519px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;h2 class="wp-block-heading"&gt;Editing the JSON Documents&lt;/h2&gt;

&lt;p class="wp-block-paragraph"&gt;To edit the document, click the CUSTOMERS.json link. Click the download icon next to it to download the JSON file.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/09/customers_editor.png"&gt;&lt;img decoding="async" width="997" height="719" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/09/customers_editor.png" alt="" class="wp-image-1027" srcset="https://blog.gitora.com/wp-content/uploads/2023/09/customers_editor.png 997w, https://blog.gitora.com/wp-content/uploads/2023/09/customers_editor-300x216.png 300w, https://blog.gitora.com/wp-content/uploads/2023/09/customers_editor-768x554.png 768w" sizes="auto, (max-width: 997px) 100vw, 997px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;Gitora displays the data in a JSON editor that formats the document properly. Gitora also enforces the JSON syntax for the document. Trying to save the document with a JSON syntax error will cause an error.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;For the purposes of this tutorial, change the name of the first customer to John Doe.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Click the Save button at the top menu to save your changes.&lt;/p&gt;

&lt;h2 class="wp-block-heading"&gt;Viewing the LOB files&lt;/h2&gt;

&lt;p class="wp-block-paragraph"&gt;Click the PRODUCTS entity to view the data Gitora exported for products.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;The PRODUCTS table contains a CLOB and a BLOB column named PRODUCT_DETAILS and PRODUCT_IMAGE respectively. The PRODUCTS folder contains the files generated for these LOB columns.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;As with the JSON documents, you can view the LOB files in the browser (if it is a file type that can be viewed in a browser) or download them.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;To view a CLOB file click on the row_o_PRODUCT_DETAILS.txt link. Gitora opens a plain text editor.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/09/clob_file.png"&gt;&lt;img decoding="async" width="993" height="349" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/09/clob_file.png" alt="" class="wp-image-1029" srcset="https://blog.gitora.com/wp-content/uploads/2023/09/clob_file.png 993w, https://blog.gitora.com/wp-content/uploads/2023/09/clob_file-300x105.png 300w, https://blog.gitora.com/wp-content/uploads/2023/09/clob_file-768x270.png 768w" sizes="auto, (max-width: 993px) 100vw, 993px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;The text data stored in the PRODUCT_DETAILS column happens to be a JSON file (which is confusing for the purposes of this tutorial) but let&amp;#8217;s ignore that for a moment. Stored in a CLOB, it could be any kind text data that we are viewing. Since the data is plain text, you can edit it within the Gitora for Data application and save your changes just like you would with a JSON file. Make a change to the file and click save.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;To view a BLOB file, either click on the link for the file to view it in the browser or click the download button next to the link to download it.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Unfortunately, the original PRODUCTS table in the Oracle sample schema CO does not contain any BLOB data but we&amp;#8217;ve added one for this tutorial.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Clicking the link row_0_PRODUCT_IMAGE.pdf will open the PDF file stored in this file in the browser.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Note that, Gitora can figure out common file types of BLOB data such as PDF&amp;#8217;s, PNG&amp;#8217;s JPEG&amp;#8217;s etc&amp;#8230; , automatically.&lt;/p&gt;

&lt;h2 class="wp-block-heading"&gt;Committing the Changes&lt;/h2&gt;

&lt;p class="wp-block-paragraph"&gt;Committing the changes we made to Git is a straightforward git commit. Click the menu item named git at the top of the application and select Commit.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/09/git_menu.png"&gt;&lt;img decoding="async" width="835" height="436" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/09/git_menu.png" alt="" class="wp-image-1032" srcset="https://blog.gitora.com/wp-content/uploads/2023/09/git_menu.png 835w, https://blog.gitora.com/wp-content/uploads/2023/09/git_menu-300x157.png 300w, https://blog.gitora.com/wp-content/uploads/2023/09/git_menu-768x401.png 768w" sizes="auto, (max-width: 835px) 100vw, 835px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;The Commit dialog shows up.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/09/commit_dialog-1.png"&gt;&lt;img decoding="async" width="809" height="555" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/09/commit_dialog-1.png" alt="" class="wp-image-1035" srcset="https://blog.gitora.com/wp-content/uploads/2023/09/commit_dialog-1.png 809w, https://blog.gitora.com/wp-content/uploads/2023/09/commit_dialog-1-300x206.png 300w, https://blog.gitora.com/wp-content/uploads/2023/09/commit_dialog-1-768x527.png 768w" sizes="auto, (max-width: 809px) 100vw, 809px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;The Commit dialog lists the changed files that can be committed to the repo. Click the name of the file to open the diff editor in a new browser tab that highlights the changes made to the file since the last commit.&lt;/p&gt;

&lt;figure class="wp-block-image size-large"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/09/diff_editor.png"&gt;&lt;img decoding="async" width="1024" height="118" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/09/diff_editor-1024x118.png" alt="" class="wp-image-1039" srcset="https://blog.gitora.com/wp-content/uploads/2023/09/diff_editor-1024x118.png 1024w, https://blog.gitora.com/wp-content/uploads/2023/09/diff_editor-300x34.png 300w, https://blog.gitora.com/wp-content/uploads/2023/09/diff_editor-768x88.png 768w, https://blog.gitora.com/wp-content/uploads/2023/09/diff_editor-1536x177.png 1536w, https://blog.gitora.com/wp-content/uploads/2023/09/diff_editor.png 1914w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;Select the files by either clicking Select All or by clicking the Select link for each file. Enter a short explanation to the Commit Message field and click the Commit button.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/09/commit_dialog_selected.png"&gt;&lt;img decoding="async" width="812" height="564" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/09/commit_dialog_selected.png" alt="" class="wp-image-1040" srcset="https://blog.gitora.com/wp-content/uploads/2023/09/commit_dialog_selected.png 812w, https://blog.gitora.com/wp-content/uploads/2023/09/commit_dialog_selected-300x208.png 300w, https://blog.gitora.com/wp-content/uploads/2023/09/commit_dialog_selected-768x533.png 768w" sizes="auto, (max-width: 812px) 100vw, 812px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;Clicking the Commit button closes the dialog and refreshes the Git tab to display your latest commit.&lt;/p&gt;

&lt;figure class="wp-block-image size-large"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/09/latest_changes.png"&gt;&lt;img decoding="async" width="1024" height="373" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/09/latest_changes-1024x373.png" alt="" class="wp-image-1041" srcset="https://blog.gitora.com/wp-content/uploads/2023/09/latest_changes-1024x373.png 1024w, https://blog.gitora.com/wp-content/uploads/2023/09/latest_changes-300x109.png 300w, https://blog.gitora.com/wp-content/uploads/2023/09/latest_changes-768x280.png 768w, https://blog.gitora.com/wp-content/uploads/2023/09/latest_changes.png 1246w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;h2 class="wp-block-heading"&gt;Ordering Entities for Import&lt;/h2&gt;

&lt;p class="wp-block-paragraph"&gt;Gitora For Data allows you to set an import order for entities.  Click the icon that looks like a hierarchy in the repo menu bar, the second icon from the right among the icons.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/09/repo_menu.png"&gt;&lt;img decoding="async" width="264" height="216" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/09/repo_menu.png" alt="" class="wp-image-1057"/&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;The Import Order Dialog shows up.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/09/import_order.png"&gt;&lt;img decoding="async" width="519" height="592" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/09/import_order.png" alt="" class="wp-image-1058" srcset="https://blog.gitora.com/wp-content/uploads/2023/09/import_order.png 519w, https://blog.gitora.com/wp-content/uploads/2023/09/import_order-263x300.png 263w" sizes="auto, (max-width: 519px) 100vw, 519px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;The CO schema has the necessary foreign key constraints to automatically infer the import order. Click the Order Automatically button for Gitora to order the entities.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Not all tables have the foreign key constraints to automatically infer the import order though. In such cases, drag and drop the entity names in the dialog to their correct order in the import. Gitora will start the import from the top of the list.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Below is the order of entities after Gitora sorted them automatically. Click OK to accept and save the order.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/09/sorted_imports.png"&gt;&lt;img decoding="async" width="517" height="583" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/09/sorted_imports.png" alt="" class="wp-image-1059" srcset="https://blog.gitora.com/wp-content/uploads/2023/09/sorted_imports.png 517w, https://blog.gitora.com/wp-content/uploads/2023/09/sorted_imports-266x300.png 266w" sizes="auto, (max-width: 517px) 100vw, 517px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;On the main screen, click the first icon on the right in the repo toolbar. Click the Sort By Import Order button to view the entities according to the order they will be imported to the database.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/09/sory_by_import_order.png"&gt;&lt;img decoding="async" width="501" height="455" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/09/sory_by_import_order.png" alt="" class="wp-image-1063" srcset="https://blog.gitora.com/wp-content/uploads/2023/09/sory_by_import_order.png 501w, https://blog.gitora.com/wp-content/uploads/2023/09/sory_by_import_order-300x272.png 300w" sizes="auto, (max-width: 501px) 100vw, 501px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/09/sorted_stores_first.png"&gt;&lt;img decoding="async" width="304" height="428" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/09/sorted_stores_first.png" alt="" class="wp-image-1064" srcset="https://blog.gitora.com/wp-content/uploads/2023/09/sorted_stores_first.png 304w, https://blog.gitora.com/wp-content/uploads/2023/09/sorted_stores_first-213x300.png 213w" sizes="auto, (max-width: 304px) 100vw, 304px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;Finally, commit the changes to the import order to the repo.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/09/commit_order.png"&gt;&lt;img decoding="async" width="811" height="515" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/09/commit_order.png" alt="" class="wp-image-1071" srcset="https://blog.gitora.com/wp-content/uploads/2023/09/commit_order.png 811w, https://blog.gitora.com/wp-content/uploads/2023/09/commit_order-300x191.png 300w, https://blog.gitora.com/wp-content/uploads/2023/09/commit_order-768x488.png 768w" sizes="auto, (max-width: 811px) 100vw, 811px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;A Note About the repoConfig.json File&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;repoConfig.json file is the JSON document that stores the Gitora specific information about your repo. It is part of your repo just like any other file. You should commit it to your repo just like any other file.&lt;/p&gt;

&lt;h2 class="wp-block-heading"&gt;Moving Changes to Another Database&lt;/h2&gt;

&lt;p class="wp-block-paragraph"&gt;In the tutorial&lt;em&gt; Getting Started with Gitora For Data &lt;/em&gt;, we clones the repo CO_REPO from the DEV database to the TEST database. The repo was empty then. Now we have data in the repo and even some changes.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Go back to the Home screen and open the CO_REPO in the TEST database. A new browser tabs opens displaying the CO_REPO@TEST repo.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;From the top menu select git &amp;#8211; &amp;gt; Other Gitora Repos &amp;#8211; &amp;gt; Pull&lt;/p&gt;

&lt;figure class="wp-block-image size-large"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/09/pull_menu_item.png"&gt;&lt;img decoding="async" width="1024" height="410" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/09/pull_menu_item-1024x410.png" alt="" class="wp-image-1042" srcset="https://blog.gitora.com/wp-content/uploads/2023/09/pull_menu_item-1024x410.png 1024w, https://blog.gitora.com/wp-content/uploads/2023/09/pull_menu_item-300x120.png 300w, https://blog.gitora.com/wp-content/uploads/2023/09/pull_menu_item-768x308.png 768w, https://blog.gitora.com/wp-content/uploads/2023/09/pull_menu_item.png 1121w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;The Pull Dialog shows up. Select the DEV database, the CO_REPO and the master branch from the select boxes respectively.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/09/pull_dialog.png"&gt;&lt;img decoding="async" width="511" height="404" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/09/pull_dialog.png" alt="" class="wp-image-1044" srcset="https://blog.gitora.com/wp-content/uploads/2023/09/pull_dialog.png 511w, https://blog.gitora.com/wp-content/uploads/2023/09/pull_dialog-300x237.png 300w" sizes="auto, (max-width: 511px) 100vw, 511px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;Click the Pull button to move the changes from the CO_REPO@DEV to the CO_REPO@TEST.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;The dialog closes and the Repo app is refreshed with the newly pulled commits and entities.&lt;/p&gt;

&lt;figure class="wp-block-image size-large"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/09/test_main.png"&gt;&lt;img decoding="async" width="1024" height="401" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/09/test_main-1024x401.png" alt="" class="wp-image-1072" srcset="https://blog.gitora.com/wp-content/uploads/2023/09/test_main-1024x401.png 1024w, https://blog.gitora.com/wp-content/uploads/2023/09/test_main-300x118.png 300w, https://blog.gitora.com/wp-content/uploads/2023/09/test_main-768x301.png 768w, https://blog.gitora.com/wp-content/uploads/2023/09/test_main.png 1230w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;h2 class="wp-block-heading"&gt;Importing the Data&lt;/h2&gt;

&lt;p class="wp-block-paragraph"&gt;Gitora For Data generates insert statements based on the data data in the working directory of the git repo. In other words, you should set the state of the files to the commit id you want to import into the database. In this tutorial, we will import the latest version of the data which is already active in the working directory.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Connect to the CO@TEST database using Gitora PL/SQL Editor. Delete any unwanted rows from the CO schema tables. Since our repo contains all the data we need, we deleted all the rows from the schema by shamelessly plugging our Gitora Editor&amp;#8217;s AI Chat feature to this tutorial:&lt;/p&gt;

&lt;figure class="wp-block-image size-large"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/09/delete_all_rows.png"&gt;&lt;img decoding="async" width="1024" height="607" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/09/delete_all_rows-1024x607.png" alt="" class="wp-image-1047" srcset="https://blog.gitora.com/wp-content/uploads/2023/09/delete_all_rows-1024x607.png 1024w, https://blog.gitora.com/wp-content/uploads/2023/09/delete_all_rows-300x178.png 300w, https://blog.gitora.com/wp-content/uploads/2023/09/delete_all_rows-768x455.png 768w, https://blog.gitora.com/wp-content/uploads/2023/09/delete_all_rows-1536x910.png 1536w, https://blog.gitora.com/wp-content/uploads/2023/09/delete_all_rows.png 1580w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;Next, go back to the Gitora For Data app and click the Import button, the second icon from the left.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/09/toolbar-1.png"&gt;&lt;img decoding="async" width="231" height="60" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/09/toolbar-1.png" alt="" class="wp-image-1049"/&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;The Import Dialog shows up.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/09/import_dialog.png"&gt;&lt;img decoding="async" width="516" height="198" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/09/import_dialog.png" alt="" class="wp-image-1051" srcset="https://blog.gitora.com/wp-content/uploads/2023/09/import_dialog.png 516w, https://blog.gitora.com/wp-content/uploads/2023/09/import_dialog-300x115.png 300w" sizes="auto, (max-width: 516px) 100vw, 516px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;Click the Import button. Gitora will populate the CO schema with the data in the repo and inform you with a notification and a message in the Messages section at the bottom.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/09/succesful_import.png"&gt;&lt;img decoding="async" width="601" height="179" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/09/succesful_import.png" alt="" class="wp-image-1065" srcset="https://blog.gitora.com/wp-content/uploads/2023/09/succesful_import.png 601w, https://blog.gitora.com/wp-content/uploads/2023/09/succesful_import-300x89.png 300w" sizes="auto, (max-width: 601px) 100vw, 601px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;In this tutorial we showed how you can use Gitora For Data to: &lt;/p&gt;

&lt;ul class="wp-block-list"&gt;&lt;li&gt;Export data from a database to a Git repo&lt;br&gt;&lt;/li&gt;&lt;li&gt;Browse and edit the data in the repo and commit the changes.&lt;br&gt;&lt;/li&gt;&lt;li&gt;Move the repo and import the data to another database.&lt;/li&gt;&lt;/ul&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;/p&gt;</description><pubDate>Fri, 29 Sep 2023 12:05:54 +0300</pubDate></item><item><title>Getting Started with Gitora For Data</title><link>https://blog.gitora.com/getting-started-with-gitora-for-data/</link><guid>https://blog.gitora.com/getting-started-with-gitora-for-data/</guid><description>&lt;h2 class="wp-block-heading"&gt;Starting the Application the First Time&lt;/h2&gt;

&lt;p class="wp-block-paragraph"&gt;The first time you start Gitora For Data (usually via http://yourdomain/gitorafordata/index.html) the login screen shows up. Enter the default username and password admin/admin and click the Sign In button.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Since there are no databases registered to Gitora For Data yet, the Create New Database Connection Screen will show up.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Gitora will create database sessions using the credentials you enter on this screen so that it can query the tables and perform DML operations. Therefore it is important that the database user you enter has the necessary privileges to perform these tasks. You can add additional users to a database later but you need at least one. &lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Click the Save button to register your first database.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;We will use the Oracle sample schema CO throughout this tutorial.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/09/connection_example.png"&gt;&lt;img decoding="async" width="510" height="684" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/09/connection_example.png" alt="" class="wp-image-951" srcset="https://blog.gitora.com/wp-content/uploads/2023/09/connection_example.png 510w, https://blog.gitora.com/wp-content/uploads/2023/09/connection_example-224x300.png 224w" sizes="auto, (max-width: 510px) 100vw, 510px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;h2 class="wp-block-heading"&gt;The Home Screen&lt;/h2&gt;

&lt;p class="wp-block-paragraph"&gt;Clicking the Save button takes you to the Home Screen.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;The Home Screen is used for the following functions:&lt;/p&gt;

&lt;ol class="wp-block-list"&gt;&lt;li&gt;Search, register, edit and unregister databases from Gitora.&lt;br&gt;&lt;/li&gt;&lt;li&gt;Create, clone, delete, search and open repos.&lt;br&gt;&lt;/li&gt;&lt;li&gt;Create, edit and delete database users.&lt;br&gt;&lt;/li&gt;&lt;li&gt;Search, create, edit and delete Gitora For Data application users.&lt;br&gt;&lt;/li&gt;&lt;/ol&gt;

&lt;figure class="wp-block-image size-large"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/09/home.png"&gt;&lt;img decoding="async" width="1024" height="570" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/09/home-1024x570.png" alt="" class="wp-image-952" srcset="https://blog.gitora.com/wp-content/uploads/2023/09/home-1024x570.png 1024w, https://blog.gitora.com/wp-content/uploads/2023/09/home-300x167.png 300w, https://blog.gitora.com/wp-content/uploads/2023/09/home-768x427.png 768w, https://blog.gitora.com/wp-content/uploads/2023/09/home.png 1095w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;The Home Screen consists of two sections. The navigation column and the main area.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;By default, the home screen starts with the Databases tab which lists all the databases that are registered to Gitora. &lt;/p&gt;

&lt;h2 class="wp-block-heading"&gt;Creating Your First Repo&lt;/h2&gt;

&lt;p class="wp-block-paragraph"&gt;In Gitora For Data, each registered database is represented with a Database Card on the home screen. The database card can be used to edit and delete a database as well as to search, create, clone, delete and open Git repos associated with the database.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Our first database does not have a repo yet. So let&amp;#8217;s create one.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Click the Create Repo link in the DEV database card. The Create Repo dialog shows up.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/09/create_repo.png"&gt;&lt;img decoding="async" width="512" height="748" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/09/create_repo.png" alt="" class="wp-image-954" srcset="https://blog.gitora.com/wp-content/uploads/2023/09/create_repo.png 512w, https://blog.gitora.com/wp-content/uploads/2023/09/create_repo-205x300.png 205w" sizes="auto, (max-width: 512px) 100vw, 512px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;The dialog displays several fields. Let&amp;#8217;s go over them one by one:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Name:&lt;/strong&gt; This is the name of your repo. It will be the name of the top folder of your Git repo where the .git folder resides.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Database User:&lt;/strong&gt; Gitora needs to know which database user this repo will connect to so that it can query data from the DEV database.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Export Format: &lt;/strong&gt;Select the notation the exported data is represented in. (Currently, JSON format is supported. More options will be added based on customer feedback.)&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;File Generation:&lt;/strong&gt; Gitora can generate file or files for the rows in a table using the following output strategies:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;em&gt;a) One File Per Entity&lt;/em&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Using this strategy, Gitora will create one JSON file that contains all the rows in the table. For example, if you want to export the data from the EMPLOYEES table, Gitora will create a file at EMPLOYEES/EMPLOYEES.json and store all the rows in the EMPLOYEES table in this file.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;em&gt;b) One File Per Row&lt;/em&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Using this strategy, Gitora will create a new JSON file for each row in the table. For example, for the table EMPLOYEES it will create files like so: EMPLOYEES/row_0.json, EMPLOYEES/row_1.json, EMPLOYEES/row_2.json etc&amp;#8230;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;em&gt;c) One Folder Per Row&lt;/em&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Using this strategy, Gitora will create one folder for each row like so: EMPLOYEES/row_0/row.json, EMPLOYEES/row_1/row.json. This option is more suitable if your tables contain LOB columns. For example, if the EMPLOYEES table contained a column named PICTURE_BL, the output would look like the following: EMPLOYEES/row_0/row.json,  EMPLOYEES/row_0/PICTURE_BL.png.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Location for LOB Files&lt;/strong&gt;: Gitora can export LOB data to files. You can choose one of the following options to create the files for LOBs.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;a)&lt;em&gt; Entity Folder&lt;/em&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Gitora will create the LOB files under the entity folder which is usually named after the table. For example, files for LOB data in the EMPLOYEES table will be created under the EMPLOYEES folder in the repository like so: EMPLOYEES/row_0_PICTURE_BL.png,  EMPLOYEES/row_1_PICTURE_BL.png etc&amp;#8230;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;em&gt;b) Subfolder under Entity Folder&lt;/em&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Gitora will create the LOB files under the lobs directory of each entity. For example the file structure under the EMPLOYEES folder will look like the following: EMPLOYEES/lobs/row_0_PICTURE_BL.png,  EMPLOYEES/lobs/row_1_PICTURE_BL.png&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;em&gt;c) One Folder Per Row&lt;/em&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Gitora will create a folder for each row and place the LOB files of the row under it like so:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;EMPLOYEES/row_0/PICTURE_BL.png&lt;br&gt;EMPLOYEES/row_1/PICTURE_BL.png&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Note that, this option can be used in conjunction with the File Generation strategy &lt;em&gt;One File Per Entity&lt;/em&gt;. In this case, all rows of the EMPLOYEES table will be in the EMPLOYEES/EMPLOYEES.json file and the files for LOBs will be in folders generated for each row:  EMPLOYEES/row_0/PICTURE_BL.png, EMPLOYEES/row_1/PICTURE_BL.png etc&amp;#8230;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Row File Naming Strategy:&lt;/strong&gt; This option determines the strategy Gitora uses to name the files Gitora creates for each row. Gitora can create a file for each row and/or a file for each LOB column in the row. Gitora will use the selected strategy whenever it creates these files.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;em&gt;a) Default&lt;/em&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;The Default strategy assigns a number to each row starting from 0. The rows are numbered in the order they are received from the Entity&amp;#8217;s SQL query. Therefore, it is important to order the data by a column (or columns) that do not change their value over time. By default, Gitora orders rows by their primary key column value(s). If the table does not have a primary key constraint, Gitora uses the first column in the Entity query like so: select * from table order by 1&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;em&gt;b) From Primary Key&lt;/em&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Gitora generates row file names using the primary key column value(s) of the table. Assuming the primary key of the COUNTRIES table is NAME_TX, the rows Gitora generates will be: COUNTRIES/row_USA.json, COUNTRIES/row_GERMANY.json etc&amp;#8230;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Please note that, the primary key values must not contain any characters that cannot be used in file names.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Column Order:&lt;/strong&gt; Specify the order in which the table columns appear in the JSON document.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;a) Default&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;The columns are ordered as they appear in the SQL query of the Entity. For example, if the query for the COUNTRIES entity is &amp;#8220;select region, name from countries&amp;#8221; then the JSON document for the country USA will look as follows:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;{&amp;#8220;region&amp;#8221;:&amp;#8221;North America&amp;#8221;, &amp;#8220;name&amp;#8221;:&amp;#8221;USA&amp;#8221;}&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;b) Alphabetically&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;As the name of the option suggests, the columns will be ordered alphabetically in the JSON document. For the same query as above, the JSON document will be as follows:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;{&amp;#8220;name&amp;#8221;:&amp;#8221;USA&amp;#8221;, &amp;#8220;region&amp;#8221;:&amp;#8221;North America&amp;#8221;}&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Below are the values for each field for our first repo:&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/09/first_repo-1.png"&gt;&lt;img decoding="async" width="507" height="743" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/09/first_repo-1.png" alt="" class="wp-image-959" srcset="https://blog.gitora.com/wp-content/uploads/2023/09/first_repo-1.png 507w, https://blog.gitora.com/wp-content/uploads/2023/09/first_repo-1-205x300.png 205w" sizes="auto, (max-width: 507px) 100vw, 507px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;Click OK to create your first repo.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;The database card for DEV database shows the first repo you created.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/09/database_card_first_repo.png"&gt;&lt;img decoding="async" width="344" height="450" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/09/database_card_first_repo.png" alt="" class="wp-image-961" srcset="https://blog.gitora.com/wp-content/uploads/2023/09/database_card_first_repo.png 344w, https://blog.gitora.com/wp-content/uploads/2023/09/database_card_first_repo-229x300.png 229w" sizes="auto, (max-width: 344px) 100vw, 344px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;h2 class="wp-block-heading"&gt;Working with a Repo&lt;/h2&gt;

&lt;p class="wp-block-paragraph"&gt;Clicking the Open button opens a new browser tab and takes you to the Repo App where the actual stuff happens. Therefore, the repo maintenance deserves its own tutorial.  &lt;a href="https://blog.gitora.com/working-with-a-gitora-for-data-repo/" target="_blank" rel="noreferrer noopener"&gt;Click here&lt;/a&gt; to learn how you can edit a repo, export data to a repo, perform Git operations on the data and finally import your data back to a database.&lt;/p&gt;

&lt;h2 class="wp-block-heading"&gt;Deleting a Repo&lt;/h2&gt;

&lt;p class="wp-block-paragraph"&gt;Click the red Delete button next to a repo to remove it and its contents. Select Yes to confirm and your repo will be deleted.&lt;/p&gt;

&lt;h2 class="wp-block-heading"&gt;Cloning a Repo&lt;/h2&gt;

&lt;p class="wp-block-paragraph"&gt;The Clone button in the Database Card clones a repo and associates the clone with a database.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Although you can clone a repo and associate the clone to the same database, it makes more sense to clone a repo and associate it to a new database. This is how you can move your data from one database to another using Gitora For Data.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;To achieve this, let&amp;#8217;s create another database first. &lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Click the Register New Database button and repeat the steps you followed to register your first database. It goes without saying that you should use a different name and JDBC connection string for the new database.&lt;/p&gt;

&lt;figure class="wp-block-image size-large"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/09/two_databases.png"&gt;&lt;img decoding="async" width="1024" height="559" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/09/two_databases-1024x559.png" alt="" class="wp-image-962" srcset="https://blog.gitora.com/wp-content/uploads/2023/09/two_databases-1024x559.png 1024w, https://blog.gitora.com/wp-content/uploads/2023/09/two_databases-300x164.png 300w, https://blog.gitora.com/wp-content/uploads/2023/09/two_databases-768x419.png 768w, https://blog.gitora.com/wp-content/uploads/2023/09/two_databases.png 1074w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;Click the Clone button under the TEST Database Card. The Clone Repo dialog shows up.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Fill out the fields as follows:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Name:&lt;/strong&gt; Enter a name for your new repo. Since we are cloning the CO_REPO repo, it makes sense to name this repo CO_REPO as well.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Database User:&lt;/strong&gt; Specify the database user Gitora should use to perform export/import functions for this repo. Since this repo manages data in the CO user, it makes sense to select the CO user.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Clone From Database:&lt;/strong&gt; We want to clone the CO_REPO from the DEV database to the TEST database, so select the DEV database in this select box.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Original Repo:&lt;/strong&gt; Select the repo you want to clone from the DEV database. In our case, this is the CO_REPO.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/09/clone-dialog-1.png"&gt;&lt;img decoding="async" width="508" height="489" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/09/clone-dialog-1.png" alt="" class="wp-image-1004" srcset="https://blog.gitora.com/wp-content/uploads/2023/09/clone-dialog-1.png 508w, https://blog.gitora.com/wp-content/uploads/2023/09/clone-dialog-1-300x289.png 300w" sizes="auto, (max-width: 508px) 100vw, 508px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;Click the OK button to clone the repo.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;The TEST database card shows the cloned repo.&lt;/p&gt;

&lt;figure class="wp-block-image size-large"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/09/cloned-repo.png"&gt;&lt;img decoding="async" width="1024" height="562" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/09/cloned-repo-1024x562.png" alt="" class="wp-image-966" srcset="https://blog.gitora.com/wp-content/uploads/2023/09/cloned-repo-1024x562.png 1024w, https://blog.gitora.com/wp-content/uploads/2023/09/cloned-repo-300x165.png 300w, https://blog.gitora.com/wp-content/uploads/2023/09/cloned-repo-768x422.png 768w, https://blog.gitora.com/wp-content/uploads/2023/09/cloned-repo.png 1064w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;h2 class="wp-block-heading"&gt;Unregistering a Database&lt;/h2&gt;

&lt;p class="wp-block-paragraph"&gt;Click the Delete Database button on a database card and select Yes to confirm to remove the database and all its associated repos from Gitora For Data.&lt;/p&gt;

&lt;h2 class="wp-block-heading"&gt;Editing a Registered Database and Its Users&lt;/h2&gt;

&lt;p class="wp-block-paragraph"&gt;Click the Edit Database button on the database card. The Edit Database screen shows up.&lt;/p&gt;

&lt;figure class="wp-block-image size-large"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/09/edit_database.png"&gt;&lt;img decoding="async" width="1024" height="543" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/09/edit_database-1024x543.png" alt="" class="wp-image-968" srcset="https://blog.gitora.com/wp-content/uploads/2023/09/edit_database-1024x543.png 1024w, https://blog.gitora.com/wp-content/uploads/2023/09/edit_database-300x159.png 300w, https://blog.gitora.com/wp-content/uploads/2023/09/edit_database-768x407.png 768w, https://blog.gitora.com/wp-content/uploads/2023/09/edit_database.png 1283w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;Use this screen to edit the database name and the JDBC URL to connect to the database. &lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Use the Register New User button to add additional credentials to connect to the database. Use the Edit and Delete buttons to update and remove the existing credentials respectively.&lt;/p&gt;

&lt;h2 class="wp-block-heading"&gt;Working With Gitora For Data Users&lt;/h2&gt;

&lt;p class="wp-block-paragraph"&gt;Click the Users tab to work with the application users.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/09/users.png"&gt;&lt;img decoding="async" width="938" height="300" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/09/users.png" alt="" class="wp-image-971" srcset="https://blog.gitora.com/wp-content/uploads/2023/09/users.png 938w, https://blog.gitora.com/wp-content/uploads/2023/09/users-300x96.png 300w, https://blog.gitora.com/wp-content/uploads/2023/09/users-768x246.png 768w" sizes="auto, (max-width: 938px) 100vw, 938px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;Use the Create New User and Delete buttons to add or remove a user respectively. Click on a user to change its password.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/09/edit_user.png"&gt;&lt;img decoding="async" width="517" height="585" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/09/edit_user.png" alt="" class="wp-image-972" srcset="https://blog.gitora.com/wp-content/uploads/2023/09/edit_user.png 517w, https://blog.gitora.com/wp-content/uploads/2023/09/edit_user-265x300.png 265w" sizes="auto, (max-width: 517px) 100vw, 517px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;h2 class="wp-block-heading"&gt;Generating and Using API Keys to work with the Gitora For Data API&lt;/h2&gt;

&lt;p class="wp-block-paragraph"&gt;The Edit User screen is also where you can generate and update a user&amp;#8217;s API key. You need a valid API key to be able to work with the Gitora For Data API.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Click the refresh button to generate a new API key. Generating a new key, invalidates the existing key of the user. Click the copy button to copy the key to your clipboard.&lt;/p&gt;</description><pubDate>Fri, 29 Sep 2023 12:05:38 +0300</pubDate></item><item><title>Introducing the Gitora PL/SQL Editor 2.0</title><link>https://blog.gitora.com/introducing-the-gitora-pl-sql-editor-2-0/</link><guid>https://blog.gitora.com/introducing-the-gitora-pl-sql-editor-2-0/</guid><description>&lt;p class="wp-block-paragraph"&gt;Today I am happy to introduce the latest version of the Gitora Editor. &lt;a href="https://www.gitora.com/download.html" target="_blank" rel="noreferrer noopener"&gt;You can download it here.&lt;/a&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;There are two new features in this release.&lt;/p&gt;

&lt;ul class="wp-block-list"&gt;&lt;li&gt;The PL/SQL Debugger&lt;br&gt;&lt;/li&gt;&lt;li&gt;The AI Assistant&lt;/li&gt;&lt;/ul&gt;

&lt;h2 class="wp-block-heading"&gt;The PL/SQL Debugger&lt;/h2&gt;

&lt;p class="wp-block-paragraph"&gt;Gitora 2.0 has a fully featured PL/SQL Debugger. Best to my knowledge, &lt;strong&gt;Gitora PL/SQL Debugger is the first and the only web application with a PL/SQL debugger.&lt;/strong&gt;&lt;/p&gt;

&lt;figure class="wp-block-image size-large"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/07/second_package.png"&gt;&lt;img decoding="async" width="1024" height="541" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/07/second_package-1024x541.png" alt="" class="wp-image-878" srcset="https://blog.gitora.com/wp-content/uploads/2023/07/second_package-1024x541.png 1024w, https://blog.gitora.com/wp-content/uploads/2023/07/second_package-300x158.png 300w, https://blog.gitora.com/wp-content/uploads/2023/07/second_package-768x405.png 768w, https://blog.gitora.com/wp-content/uploads/2023/07/second_package.png 1076w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;Gitora Debugger also supports multiple debugging session at the same time.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;a href="https://blog.gitora.com/gitora-pl-sql-debugger/" target="_blank" rel="noreferrer noopener"&gt;You can learn more about the Gitora PL/SQL Debugger at this link.&lt;/a&gt;&lt;/p&gt;

&lt;h2 class="wp-block-heading"&gt;The AI Assistant for SQL and PL/SQL&lt;/h2&gt;

&lt;p class="wp-block-paragraph"&gt;First a foreword: AI is real and it is here. Its implications for knowledge workers will be enormous, including you the database developers.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;There is no escaping AI in our line of work. Therefore, while building this version of Gitora, I&amp;#8217;ve fully embraced it.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;The last few months have been the most interesting, rewarding and productive period of my professional life.&lt;/strong&gt; I&amp;#8217;ve practically stopped using Google search and StackOverflow, two websites I&amp;#8217;d consider essential to my work just a few months ago.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;I&amp;#8217;ve coded the Gitora PL/SQL debugger virtually without reading a single line of documentation about how to build debuggers in Java or the specifics of how to build a Java debugger for PL/SQL. I am not even sure if there is any documentation available about building a PL/SQL debugger on the Internet.&lt;br&gt;&lt;br&gt;I just talked about these topics with ChatGPT and analyzed the code snippets it produced.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;All CSS and almost all of the run-of-the-mill code I needed to write for the debugger and the AI Assistant (oh the irony!) is either written by ChatGPT or GitHub CoPilot. Heck, I even had the previous sentence grammatically verified by ChatGPT. I got it right in my first attempt and ChatGPT congratulated me.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/07/chatgpt.png"&gt;&lt;img decoding="async" width="864" height="364" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/07/chatgpt.png" alt="" class="wp-image-924" srcset="https://blog.gitora.com/wp-content/uploads/2023/07/chatgpt.png 864w, https://blog.gitora.com/wp-content/uploads/2023/07/chatgpt-300x126.png 300w, https://blog.gitora.com/wp-content/uploads/2023/07/chatgpt-768x324.png 768w" sizes="auto, (max-width: 864px) 100vw, 864px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;h3 class="wp-block-heading"&gt;&lt;strong&gt;I view AI as an amazing junior pair programmer who I am working with. My goal is to create the same feeling for you with the Gitora AI Assistant.&lt;/strong&gt;&lt;/h3&gt;

&lt;p class="wp-block-paragraph"&gt;In Gitora Editor 2.0 the AI Assistant shows up in several places.&lt;/p&gt;

&lt;h3 class="wp-block-heading"&gt;Chat with the AI Assistant&lt;/h3&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;You can chat with the AI Assistant to write, debug, explain and improve your SQL and PL/SQL code.&lt;/strong&gt;&lt;/p&gt;

&lt;figure class="wp-block-image size-large"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/07/AIChat2_small.png"&gt;&lt;img decoding="async" width="1024" height="811" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/07/AIChat2_small-1024x811.png" alt="" class="wp-image-925" srcset="https://blog.gitora.com/wp-content/uploads/2023/07/AIChat2_small-1024x811.png 1024w, https://blog.gitora.com/wp-content/uploads/2023/07/AIChat2_small-300x238.png 300w, https://blog.gitora.com/wp-content/uploads/2023/07/AIChat2_small-768x608.png 768w, https://blog.gitora.com/wp-content/uploads/2023/07/AIChat2_small.png 1119w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;This is a free form conversation with the AI Assistant very much like the experience with the ChatGPT. &lt;strong&gt;The difference is that Gitora automatically informs the AI about the context of your message.&lt;/strong&gt; Behind the scenes, Gitora sends the information about the tables, their structure and their relationships to the AI Assistant, helping it to write SQL and PL/SQL relevant to your context.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;You can send the code you are working on and the errors you receive during execution to the AI Assistant with just a click, along with the relevant context of course.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/08/ai_error_response.png"&gt;&lt;img decoding="async" width="768" height="853" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/08/ai_error_response.png" alt="" class="wp-image-927" srcset="https://blog.gitora.com/wp-content/uploads/2023/08/ai_error_response.png 768w, https://blog.gitora.com/wp-content/uploads/2023/08/ai_error_response-270x300.png 270w" sizes="auto, (max-width: 768px) 100vw, 768px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;Links for the tutorials with complete details about how to configure and use the Gitora AI Assistant are below:&lt;br&gt;&lt;br&gt;&lt;a rel="noreferrer noopener" href="https://blog.gitora.com/how-to-use-the-gitora-ai-assistant/" target="_blank"&gt;Configuring the AI Assistant&lt;/a&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;a rel="noreferrer noopener" href="https://blog.gitora.com/how-to-use-the-ai-sql-query-builder/" target="_blank"&gt;How Chat with the AI Assistant&lt;/a&gt;&lt;/p&gt;

&lt;h3 class="wp-block-heading"&gt;PL/SQL Code Assistant&lt;/h3&gt;

&lt;p class="wp-block-paragraph"&gt;While you are coding, the Gitora AI Assistant uses the OpenAI GPT Turbo to suggest SQL and PL/SQL code and entire functions, procedures in real-time, right from the editor.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/08/ai2.png"&gt;&lt;img decoding="async" width="473" height="212" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/08/ai2.png" alt="" class="wp-image-928" srcset="https://blog.gitora.com/wp-content/uploads/2023/08/ai2.png 473w, https://blog.gitora.com/wp-content/uploads/2023/08/ai2-300x134.png 300w" sizes="auto, (max-width: 473px) 100vw, 473px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;The Code Assistant is not aware of your database objects, their structures and relationships yet, so it is more of an experimental feature.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;I&amp;#8217;ll continue integrating AI to all aspects of database development to create your favorite junior pair programmer. If you think this is interesting, please &lt;a rel="noreferrer noopener" href="https://www.gitora.com/download.html" target="_blank"&gt;download the Gitora PL/SQL Editor&lt;/a&gt;. You can support my work by providing feedback via &lt;a href="contact@gitora.com"&gt;email&lt;/a&gt;, &lt;a rel="noreferrer noopener" href="https://twitter.com/GitoraForPLSQL" target="_blank"&gt;Twitter &lt;/a&gt;or &lt;a rel="noreferrer noopener" href="https://www.linkedin.com/company/gitora/" target="_blank"&gt;LinkedIn&lt;/a&gt;. Obviously, the best way to support my work is to &lt;a href="https://www.gitora.com/buy.html?tab=editor"&gt;purchase a subscription&lt;/a&gt;. 🙂&lt;/p&gt;</description><pubDate>Tue, 01 Aug 2023 00:36:39 +0300</pubDate></item><item><title>How to Use the AI Chat to write, debug and explain SQL and PL/SQL</title><link>https://blog.gitora.com/how-to-use-the-ai-sql-query-builder/</link><guid>https://blog.gitora.com/how-to-use-the-ai-sql-query-builder/</guid><description>&lt;p class="wp-block-paragraph"&gt;This article explains how to use the Gitora AI Chat feature.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;The Gitora AI Assistant can help you write, debug, explain and improve SQL and PL/SQL code.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Gitora AI Chat uses OpenAI GPT. If you have not done so already, please follow the steps &lt;a rel="noreferrer noopener" href="https://blog.gitora.com/how-to-use-the-gitora-ai-assistant/" target="_blank"&gt;at this link&lt;/a&gt; to create an OpenAI account, register your API Key with the Gitora and open the PL/SQL Editor.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;The AI Chat UI&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;If one is not already open, click the + sign in the editor and open an SQL Pad.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/07/plus_button.png"&gt;&lt;img decoding="async" width="286" height="83" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/07/plus_button.png" alt="" class="wp-image-901"/&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;An SQL Pad will show up. Using the plug icon, assign a database connection to the SQL Pad, if it does not have one already. &lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Gitora uses this database connection to teach AI about the tables and their relationships in your database. &lt;strong&gt;Gitora NEVER queries the data in the tables and send them to the OpenAI servers.&lt;/strong&gt;&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/07/sqlpad_menu.png"&gt;&lt;img decoding="async" width="346" height="172" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/07/sqlpad_menu.png" alt="" class="wp-image-902" srcset="https://blog.gitora.com/wp-content/uploads/2023/07/sqlpad_menu.png 346w, https://blog.gitora.com/wp-content/uploads/2023/07/sqlpad_menu-300x149.png 300w" sizes="auto, (max-width: 346px) 100vw, 346px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;The SQL Pad has two button on the right that are of interest. We&amp;#8217;ll start from the robot icon. Click the robot to open the AI Chat window.&lt;/p&gt;

&lt;figure class="wp-block-image size-large"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/07/aichat_start.png"&gt;&lt;img decoding="async" width="1024" height="615" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/07/aichat_start-1024x615.png" alt="" class="wp-image-903" srcset="https://blog.gitora.com/wp-content/uploads/2023/07/aichat_start-1024x615.png 1024w, https://blog.gitora.com/wp-content/uploads/2023/07/aichat_start-300x180.png 300w, https://blog.gitora.com/wp-content/uploads/2023/07/aichat_start-768x461.png 768w, https://blog.gitora.com/wp-content/uploads/2023/07/aichat_start.png 1105w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;The AI Chat window has two sections. The upper section displays your dialog with the AI. The lower section is where you type your messages to the AI.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;The Ai Chat window has a three menu button. From left to right:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;SQL Only:&lt;/strong&gt; Toggling this button on will make the AI skip the explanations and reasoning and return only code. &lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Start Over:&lt;/strong&gt; Clicking this button will erase all the context and the previous conversation with the AI.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Table Sensor:&lt;/strong&gt; The AI examines your message and automatically infers what tables it needs to know about. This feature is on by default and &lt;strong&gt;I highly recommend to keep it that way&lt;/strong&gt;. If you have more than 1500 tables in the schema SQL Pad is connected to &lt;strong&gt;and&lt;/strong&gt; if you are not happy with response times of the AI, experiment with turning the Table Sensor off to improve response times.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Chatting with the Gitora AI Assitant&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;In this example, we are connected to the Oracle Sample Schema CO which contains the following tables:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;CUSTOMERS, INVENTORY, ORDER_ITEMS, ORDERS, PRODUCTS, SHIPMENTS, STORES&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;We ask the AI to write a query for us: List product inventory for each store.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/07/typing_a_message.png"&gt;&lt;img decoding="async" width="776" height="305" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/07/typing_a_message.png" alt="" class="wp-image-904" srcset="https://blog.gitora.com/wp-content/uploads/2023/07/typing_a_message.png 776w, https://blog.gitora.com/wp-content/uploads/2023/07/typing_a_message-300x118.png 300w, https://blog.gitora.com/wp-content/uploads/2023/07/typing_a_message-768x302.png 768w" sizes="auto, (max-width: 776px) 100vw, 776px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Hint:&lt;/strong&gt; As you type, the auto suggest feature in the editor recommends completions. Making a selection from the list will add the selected table to the AI&amp;#8217;s context explicitly. If the Table Sensor is on, making a selection is unnecessary almost all the time. So do not feel compelled to make a selection or get the table name right. The AI will figure it out. However, if the Table Sensor is off, making an explicit selection from the completions dialog is the only way you can inform the AI about the context of the question.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Pressing the Enter key or clicking the Send button will submit your message. In a few seconds, the AI response will show up.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/07/ai_response.png"&gt;&lt;img decoding="async" width="778" height="610" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/07/ai_response.png" alt="" class="wp-image-905" srcset="https://blog.gitora.com/wp-content/uploads/2023/07/ai_response.png 778w, https://blog.gitora.com/wp-content/uploads/2023/07/ai_response-300x235.png 300w, https://blog.gitora.com/wp-content/uploads/2023/07/ai_response-768x602.png 768w" sizes="auto, (max-width: 778px) 100vw, 778px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;There are a few things you can do with this response. Hover your mouse over the highlighted SQL in the AI response. A menu will show up.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/07/ai_sql_menu.png"&gt;&lt;img decoding="async" width="738" height="156" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/07/ai_sql_menu.png" alt="" class="wp-image-906" srcset="https://blog.gitora.com/wp-content/uploads/2023/07/ai_sql_menu.png 738w, https://blog.gitora.com/wp-content/uploads/2023/07/ai_sql_menu-300x63.png 300w" sizes="auto, (max-width: 738px) 100vw, 738px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;From left the right, the menu buttons are as follows:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Execute:&lt;/strong&gt; Runs the Ai generated SQL and displays the results in the SQL Pad.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Info:&lt;/strong&gt; Hovering over this menu item, lists the tables the AI considered while generating the query. &lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/07/ai_info.png"&gt;&lt;img decoding="async" width="770" height="294" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/07/ai_info.png" alt="" class="wp-image-907" srcset="https://blog.gitora.com/wp-content/uploads/2023/07/ai_info.png 770w, https://blog.gitora.com/wp-content/uploads/2023/07/ai_info-300x115.png 300w, https://blog.gitora.com/wp-content/uploads/2023/07/ai_info-768x293.png 768w" sizes="auto, (max-width: 770px) 100vw, 770px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Hint:&lt;/strong&gt; If the Table Sensor is on and you do not see a table that you expect the AI to include to the query, in the information popover, then add the table to your next message. For example write something like &amp;#8220;Use ORDER_ITEMS table.&amp;#8221;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Append to Pad:&lt;/strong&gt; Appends the query to the SQL Pad.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Paste to Pad:&lt;/strong&gt; Overwrites the text in the SQL Pad and pastes the query.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Copy:&lt;/strong&gt; Copies the query to the clipboard.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;The AI does not always produce correct SQL queries. If this is the case, you can inform the AI about the error to help it fix its mistake.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;For example, if write the following message, the AI creates an invalid query:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;product count per store&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;The AI produces the following query:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;SELECT s.store_id, s.store_name, COUNT(p.product_id) AS product_count  &lt;/code&gt;&lt;br&gt;&lt;code&gt;FROM stores s  &lt;/code&gt;&lt;br&gt;&lt;code&gt;LEFT JOIN products p ON s.store_id = p.store_id  &lt;/code&gt;&lt;br&gt;&lt;code&gt;GROUP BY s.store_id, s.store_name;&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;This query is wrong because there is not relationship between the STORES and the PRODUCTS table. Executing the query using the Execute menu button produces an error that is visible in the SQL Pad&amp;#8217;s error tab.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/07/ai_error.png"&gt;&lt;img decoding="async" width="919" height="730" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/07/ai_error.png" alt="" class="wp-image-909" srcset="https://blog.gitora.com/wp-content/uploads/2023/07/ai_error.png 919w, https://blog.gitora.com/wp-content/uploads/2023/07/ai_error-300x238.png 300w, https://blog.gitora.com/wp-content/uploads/2023/07/ai_error-768x610.png 768w" sizes="auto, (max-width: 919px) 100vw, 919px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;Note the new red button that showed up in the menu. Gitora detected that the query did not run successfully and displayed the &amp;#8220;Send Error to AI&amp;#8221; button. Click this button to inform the AI about the error. Gitora will automatically package the query and the error and send a message to the AI on your behalf.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/07/ai_inform_about_error.png"&gt;&lt;img decoding="async" width="441" height="562" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/07/ai_inform_about_error.png" alt="" class="wp-image-910" srcset="https://blog.gitora.com/wp-content/uploads/2023/07/ai_inform_about_error.png 441w, https://blog.gitora.com/wp-content/uploads/2023/07/ai_inform_about_error-235x300.png 235w" sizes="auto, (max-width: 441px) 100vw, 441px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Using the AI Assistant to Analyze Errors&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;The Gitora AI Assistant can also be used to analyze errors during SQL, PL/SQL execution.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;In the screenshot below, I wrote a simple query but misspelled the table name.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/07/senderrorinsqlpad.png"&gt;&lt;img decoding="async" width="432" height="522" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/07/senderrorinsqlpad.png" alt="" class="wp-image-913" srcset="https://blog.gitora.com/wp-content/uploads/2023/07/senderrorinsqlpad.png 432w, https://blog.gitora.com/wp-content/uploads/2023/07/senderrorinsqlpad-248x300.png 248w" sizes="auto, (max-width: 432px) 100vw, 432px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;Clicking the question mark button under the Errors tab sends the error message along with the text (or the selected text) in the SQL pad to the AI Assistant like so:&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/07/ai_error_response.png"&gt;&lt;img decoding="async" width="768" height="853" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/07/ai_error_response.png" alt="" class="wp-image-914" srcset="https://blog.gitora.com/wp-content/uploads/2023/07/ai_error_response.png 768w, https://blog.gitora.com/wp-content/uploads/2023/07/ai_error_response-270x300.png 270w" sizes="auto, (max-width: 768px) 100vw, 768px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Using the AI Assistant to Explain Queries&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;The AI Assistant can also be used to explain SQL queries (and PL/SQL blocks.)&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;In the screenshot below , the SQL pad contains an SQL query with the PIVOT command.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/07/pivot.png"&gt;&lt;img decoding="async" width="814" height="397" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/07/pivot.png" alt="" class="wp-image-916" srcset="https://blog.gitora.com/wp-content/uploads/2023/07/pivot.png 814w, https://blog.gitora.com/wp-content/uploads/2023/07/pivot-300x146.png 300w, https://blog.gitora.com/wp-content/uploads/2023/07/pivot-768x375.png 768w" sizes="auto, (max-width: 814px) 100vw, 814px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;Clicking the question mark button in the toolbar will send a message to the AI Assistant asking it to explain the code.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/07/explain2.png"&gt;&lt;img decoding="async" width="780" height="810" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/07/explain2.png" alt="" class="wp-image-917" srcset="https://blog.gitora.com/wp-content/uploads/2023/07/explain2.png 780w, https://blog.gitora.com/wp-content/uploads/2023/07/explain2-289x300.png 289w, https://blog.gitora.com/wp-content/uploads/2023/07/explain2-768x798.png 768w" sizes="auto, (max-width: 780px) 100vw, 780px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;These are just a few examples about how you can use the Gitora AI Assistant and its schema-aware capabilities. OpenAI GPT models are very capable and I am sure you will come up with many more use cases.&lt;/p&gt;</description><pubDate>Mon, 31 Jul 2023 22:01:09 +0300</pubDate></item><item><title>How to Use The Gitora AI Assistant</title><link>https://blog.gitora.com/how-to-use-the-gitora-ai-assistant/</link><guid>https://blog.gitora.com/how-to-use-the-gitora-ai-assistant/</guid><description>&lt;p class="wp-block-paragraph"&gt;This article explains how to configure and use the Gitora AI Assistant.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Create an OpenAI Account&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Gitora AI Assistant uses OpenAI GPT to suggest PL/SQL code, functions, procedures and SQL in real time, right from the editor. Therefore it requires an OpenAI account and subscription. The OpenAI subscription is on a pay-as-you-go basis and is extremely affordable. To give you a rough idea, during the development of this feature I&amp;#8217;ve spent about a dollar a month to use the OpenAI API&amp;#8217;s.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;You can create your account from the &lt;a href="https://openai.com/" target="_blank" rel="noreferrer noopener"&gt;OpenAI website&lt;/a&gt;.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Enter Your Credit Card Information&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;After you create your account, go to Manage Account -&amp;gt; Billing -&amp;gt; Payment Methods and enter your credit card information. You will only be billed for what you use.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Generate an API Key&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Finally, generate your API Key. You will enter this key to the Gitora PL/SQL Editor so that it can start making suggestions while you code.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Start The Gitora PL/SQL Editor&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;From the home screen, register a database and a database user if you have not already done so. To learn how you can register a database and a database user please read &lt;a rel="noreferrer noopener" href="https://blog.gitora.com/getting-started-with-the-gitora-pl-sql-editor/" target="_blank"&gt;Getting Started with the Gitora PL/SQL Editor&lt;/a&gt;.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Click one of the connect buttons in the home screen. The PL/SQL Editor will open in a new tab.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Note the new AI icon on the toolbar of the PL/SQL Editor.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/07/ai_connect.png"&gt;&lt;img decoding="async" width="991" height="50" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/07/ai_connect.png" alt="" class="wp-image-889" srcset="https://blog.gitora.com/wp-content/uploads/2023/07/ai_connect.png 991w, https://blog.gitora.com/wp-content/uploads/2023/07/ai_connect-300x15.png 300w, https://blog.gitora.com/wp-content/uploads/2023/07/ai_connect-768x39.png 768w" sizes="auto, (max-width: 991px) 100vw, 991px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;Click the small arrow text to the AI icon. The AI Assistant Settings button will show up.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/07/ai_settings.png"&gt;&lt;img decoding="async" width="254" height="111" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/07/ai_settings.png" alt="" class="wp-image-890"/&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;Click the button. The AI Settings dialog will show up.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/07/ai_settings2.png"&gt;&lt;img decoding="async" width="818" height="332" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/07/ai_settings2.png" alt="" class="wp-image-891" srcset="https://blog.gitora.com/wp-content/uploads/2023/07/ai_settings2.png 818w, https://blog.gitora.com/wp-content/uploads/2023/07/ai_settings2-300x122.png 300w, https://blog.gitora.com/wp-content/uploads/2023/07/ai_settings2-768x312.png 768w" sizes="auto, (max-width: 818px) 100vw, 818px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;Enter your Open API Key to the API Key field.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;The settings dialog has two more parameters:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Temperature:&lt;/strong&gt; This is the setting that tells the AI how creative it should be while making suggestions. It accepts any value between 0 and 2. In my experience, 0 worked best but feel free to experiment with different values.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Delay:&lt;/strong&gt; The AI Assistant makes suggestions when you stop typing. This is the amount of time it waits in milliseconds, before it starts the process to come up with a suggestion. 1000 milliseconds may be a little bit on the higher end depending on your style. I recommend you to experiment with lower values such as 500, 250 etc&amp;#8230;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;The shorter the delay, the more requests Gitora will make to the OpenAI API, meaning you will spend more money. The API is extremely affordable though so I don&amp;#8217;t think this will be an issue but I thought I&amp;#8217;d mention it. At the time of the writing of this tutorial, the API costs about $0.002 per 1,000 tokens. 1000 tokens is about 750 words. Again, for reference, I spent about a dollar a month while building this feature.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;After you are done with the AI Settings Dialog, click save.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;The AI icon should turn black on the toolbar to indicate that the AI is on. (or if you are in the dark mode, the icon will turn white.) If it is not turn on, click the AI icon to enable it. Clicking the icon again will disable the AI Assistant. &lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;From this point on, by default, the AI Assistant will be enabled whenever you open a new PL/SQL Editor as long as you have a registered OpenAI API Key. &lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;If you&amp;#8217;d like to remove your OpenAI API Key, enter a space character as the API Key in the AI Assistant Settings dialog and click save.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Using the Gitora AI Assistant&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Open a package or any code object and start coding. You can also open an SQL Pad. When you stop typing, the code suggestions of the AI Assistant will show up as lightly colored text in the editor. Click the &lt;code&gt;tab&lt;/code&gt; button to accept the code suggestion. If you&amp;#8217;d like to accept just a part of the suggestion, hover over the suggestion. A small dialog window will pop up.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/07/accept_word.png"&gt;&lt;img decoding="async" width="412" height="202" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/07/accept_word.png" alt="" class="wp-image-892" srcset="https://blog.gitora.com/wp-content/uploads/2023/07/accept_word.png 412w, https://blog.gitora.com/wp-content/uploads/2023/07/accept_word-300x147.png 300w" sizes="auto, (max-width: 412px) 100vw, 412px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;Using this dialog, you can accept individual words in the suggestion.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;That&amp;#8217;s it! Happy coding!&lt;/p&gt;</description><pubDate>Fri, 21 Jul 2023 13:48:51 +0300</pubDate></item><item><title>Configuring the PL/SQL Debugger</title><link>https://blog.gitora.com/configuring-the-pl-sql-debugger/</link><guid>https://blog.gitora.com/configuring-the-pl-sql-debugger/</guid><description>&lt;p class="wp-block-paragraph"&gt;Gitora Editor includes a PL/SQL debugger. For the PL/SQL debugger to work, the database session being debugged must be able to access the debugger. This requires you or your DBA to open a port or a range of ports in your Oracle database. To achieve this, follow the steps below:&lt;/p&gt;

&lt;ol class="wp-block-list"&gt;&lt;li&gt;Execute the script at &lt;code&gt;gitora/GITORA_DEBUGGER_ACL_SCRIPT.sql&lt;/code&gt; in the zip file, for every database user that you’d like to use with the debugger. The script is a very small PL/SQL code block:&lt;/li&gt;&lt;/ol&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;begin&lt;/code&gt;&lt;br&gt;  &lt;code&gt;DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(&lt;/code&gt;&lt;br&gt;    &lt;code&gt;host =&gt; '192.168.1.42',&lt;/code&gt;&lt;br&gt;    &lt;code&gt;lower_port =&gt; 4000,&lt;/code&gt;&lt;br&gt;    &lt;code&gt;upper_port =&gt; 4999,&lt;/code&gt;&lt;br&gt;    &lt;code&gt;ace =&gt; xs$ace_type(privilege_list =&gt; xs$name_list('jdwp'),&lt;/code&gt;&lt;br&gt;    &lt;code&gt;principal_name =&gt; [ORACLE_USER_NAME],&lt;/code&gt;&lt;br&gt;    &lt;code&gt;principal_type =&gt; xs_acl.ptype_db));&lt;/code&gt;&lt;br&gt;&lt;code&gt;end;&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Replace the&lt;code&gt; [ORACLE&lt;/code&gt;_USER_NAME] in the text above with the actual name of the Oracle user that you want to be able to use with the debugger and execute the script. Run this script once for every Oracle user that needs to be able to connect to the debugger.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Change the start and end port numbers (both inclusive) as you see fit.&lt;/p&gt;

&lt;ol class="wp-block-list" start="2"&gt;&lt;li&gt;Update the following parameters in the &lt;code&gt;Settings.properties&lt;/code&gt; file.&lt;/li&gt;&lt;/ol&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;debug.port.range.start&lt;/code&gt;: Set this value to the same value you used for the lower_port input parameter.&lt;br&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;debug.port.range.end&lt;/code&gt; : Set this value to the same value you used for the upper_port input parameter.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;debug.server.ip&lt;/code&gt;: This is the IP address of the Apache Tomcat server that is running the Gitora Editor web application. This is NOT your desktop’s IP address (although it could be if you are running Gitora locally.) This IP address will be used by the Oracle database session to be able to find and connect to the Gitora debugger.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Below is an example of how the three parameters are set:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;debug.port.range.start = 4000&lt;/code&gt;&lt;br&gt;&lt;code&gt;debug.port.range.end = 4999&lt;/code&gt;&lt;br&gt;&lt;code&gt;debug.server.ip = 192.168.1.42&lt;/code&gt;&lt;/p&gt;</description><pubDate>Wed, 12 Jul 2023 14:30:48 +0300</pubDate></item><item><title>Gitora PL/SQL Debugger</title><link>https://blog.gitora.com/gitora-pl-sql-debugger/</link><guid>https://blog.gitora.com/gitora-pl-sql-debugger/</guid><description>&lt;p class="wp-block-paragraph"&gt;This tutorial explains how to use the PL/SQL debugger that comes with the Gitora PL/SQL Editor.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Open a database object in the editor. Next, click the debug icon in the editor to activate the debug mode.&lt;/p&gt;

&lt;figure class="wp-block-image size-large"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/07/turn_debug_mode_on.png"&gt;&lt;img decoding="async" width="1024" height="181" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/07/turn_debug_mode_on-1024x181.png" alt="" class="wp-image-872" srcset="https://blog.gitora.com/wp-content/uploads/2023/07/turn_debug_mode_on-1024x181.png 1024w, https://blog.gitora.com/wp-content/uploads/2023/07/turn_debug_mode_on-300x53.png 300w, https://blog.gitora.com/wp-content/uploads/2023/07/turn_debug_mode_on-768x135.png 768w, https://blog.gitora.com/wp-content/uploads/2023/07/turn_debug_mode_on.png 1038w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;The icon changes color. The change of color indicates that the open database object (in our example, a PL/SQL package), is now compiled in debug mode. As long as the debug icon has color, every save you make will compile the object in debug mode.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Click left of the line numbers to create a breakpoint. Click again to remove the breakpoint.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/07/set_breakpoint.png"&gt;&lt;img decoding="async" width="695" height="138" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/07/set_breakpoint.png" alt="" class="wp-image-873" srcset="https://blog.gitora.com/wp-content/uploads/2023/07/set_breakpoint.png 695w, https://blog.gitora.com/wp-content/uploads/2023/07/set_breakpoint-300x60.png 300w" sizes="auto, (max-width: 695px) 100vw, 695px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;Create a new SQL Pad to run the procedure/function with the breakpoint.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/07/sql_pad.png"&gt;&lt;img decoding="async" width="564" height="244" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/07/sql_pad.png" alt="" class="wp-image-874" srcset="https://blog.gitora.com/wp-content/uploads/2023/07/sql_pad.png 564w, https://blog.gitora.com/wp-content/uploads/2023/07/sql_pad-300x130.png 300w" sizes="auto, (max-width: 564px) 100vw, 564px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;Click the Run button to execute the PL/SQL code block. The execution will stop at the breakpoint. The Debug Tab will show up.&lt;/p&gt;

&lt;figure class="wp-block-image size-large"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/07/debug_tab.png"&gt;&lt;img decoding="async" width="1024" height="618" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/07/debug_tab-1024x618.png" alt="" class="wp-image-875" srcset="https://blog.gitora.com/wp-content/uploads/2023/07/debug_tab-1024x618.png 1024w, https://blog.gitora.com/wp-content/uploads/2023/07/debug_tab-300x181.png 300w, https://blog.gitora.com/wp-content/uploads/2023/07/debug_tab-768x463.png 768w, https://blog.gitora.com/wp-content/uploads/2023/07/debug_tab.png 1450w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;On the left side of the editor, you can view the current parameters and their values. Please note that, Oracle does not provide support to view the values of every variable type.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;In the middle of the screen, you will see that the execution has stopped at the breakpoint. You can add additional breakpoints, or remove existing ones while debugging.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;The debug tab toolbar has five buttons that should be familiar to all programmers. From left to right, you can Step Over, Step In, Step Out of each line of code. The forth button is to resume the execution until the next breakpoint. If there are no breakpoints, the PL/SQL block will execute until completion. The final button suspends all breakpoints for the duration of one execution.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Changing Runtime Values of Variables&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Gitora PL/SQL Debugger enables you to change the values of PL/SQL variables during runtime. To change the value of a variable, simply update its value on the left of the screen. To apply your changes to the execution, click the checkbox button at the top of the current parameters view.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/07/apple_changes.png"&gt;&lt;img decoding="async" width="468" height="279" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/07/apple_changes.png" alt="" class="wp-image-876" srcset="https://blog.gitora.com/wp-content/uploads/2023/07/apple_changes.png 468w, https://blog.gitora.com/wp-content/uploads/2023/07/apple_changes-300x179.png 300w" sizes="auto, (max-width: 468px) 100vw, 468px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;Click the X button if you&amp;#8217;d like to revert the changes you made to the variable values.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Adding Breakpoints to Multiple Database Objects&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;In our example, the GITORA_EDITOR.DEBUG_TEST procedure references other procedures, for example the DEBUG_PACKAGE.DEBUG_TEST procedure. You may want to add additional breakpoints to those procedures as well. &lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;To achieve this, locate the procedure in the Schema Navigator and click edit as shown below.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/07/open_package.png"&gt;&lt;img decoding="async" width="490" height="452" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/07/open_package.png" alt="" class="wp-image-877" srcset="https://blog.gitora.com/wp-content/uploads/2023/07/open_package.png 490w, https://blog.gitora.com/wp-content/uploads/2023/07/open_package-300x277.png 300w" sizes="auto, (max-width: 490px) 100vw, 490px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;The package opens in another browser tab. Since we activated the debug mode, the new tab is also opened in debug mode. Therefore, the DEBUG_PACKAGE is already compiled in debug mode.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Set a breakpoint in the DEBUG_TEST procedure. Go back to the first browser tab and run the PL/SQL block again. &lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;First, the execution will stop at our initial breakpoint. Click the resume button and the execution will stop at the new breakpoint we created in the DEBUG_PACKAGE.DEBUG_TEST procedure.&lt;/p&gt;

&lt;figure class="wp-block-image size-large"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/07/second_package.png"&gt;&lt;img decoding="async" width="1024" height="541" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/07/second_package-1024x541.png" alt="" class="wp-image-878" srcset="https://blog.gitora.com/wp-content/uploads/2023/07/second_package-1024x541.png 1024w, https://blog.gitora.com/wp-content/uploads/2023/07/second_package-300x158.png 300w, https://blog.gitora.com/wp-content/uploads/2023/07/second_package-768x405.png 768w, https://blog.gitora.com/wp-content/uploads/2023/07/second_package.png 1076w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Joining a Debug Session&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;It is also possible to join an existing debug session if you already have a PL/SQL object open in an editor.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Lets assume that we already had the DEBUG_PACKAGE open and would like to add a breakpoint.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Click the triangle icon to the right of the debug button. You will see an additional button&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/07/join_debug_session.png"&gt;&lt;img decoding="async" width="549" height="97" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/07/join_debug_session.png" alt="" class="wp-image-879" srcset="https://blog.gitora.com/wp-content/uploads/2023/07/join_debug_session.png 549w, https://blog.gitora.com/wp-content/uploads/2023/07/join_debug_session-300x53.png 300w" sizes="auto, (max-width: 549px) 100vw, 549px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;Click Join Existing Debug Session button. The Open Debug Sessions dialog shows up.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/07/debug_sessions.png"&gt;&lt;img decoding="async" width="584" height="341" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/07/debug_sessions.png" alt="" class="wp-image-880" srcset="https://blog.gitora.com/wp-content/uploads/2023/07/debug_sessions.png 584w, https://blog.gitora.com/wp-content/uploads/2023/07/debug_sessions-300x175.png 300w" sizes="auto, (max-width: 584px) 100vw, 584px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;Click on the &amp;#8220;Debug Session Red&amp;#8221; button and the package will become part of your debug session.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Multiple Debug Sessions&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Gitora Editor can manage multiple debug sessions concurrently. Each debug session is identified with a unique color for the debug icon. For example, all tabs with a red debug icon belong to the same debug session.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;To create a new debug session, open two database objects in separate tabs as shown below&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/07/two_tabs.png"&gt;&lt;img decoding="async" width="387" height="43" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/07/two_tabs.png" alt="" class="wp-image-881" srcset="https://blog.gitora.com/wp-content/uploads/2023/07/two_tabs.png 387w, https://blog.gitora.com/wp-content/uploads/2023/07/two_tabs-300x33.png 300w" sizes="auto, (max-width: 387px) 100vw, 387px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;In the GITORA_EDITOR tab, click the debug icon to make it red (if it is not already). In the DEBUG_PACKAGE tab, click the same debug icon. The debug icon will turn blue indicating that the DEBUG_PACKAGE is in a different debug session than the GITORA_EDITOR.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/07/blue_session.png"&gt;&lt;img decoding="async" width="644" height="244" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/07/blue_session.png" alt="" class="wp-image-882" srcset="https://blog.gitora.com/wp-content/uploads/2023/07/blue_session.png 644w, https://blog.gitora.com/wp-content/uploads/2023/07/blue_session-300x114.png 300w" sizes="auto, (max-width: 644px) 100vw, 644px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;Breakpoints are only visible to the debugger if they are in the same sessions. For example, in the setup above, breakpoints you will create in DEBUG_PACKAGE will not be visible to the other tab that has the GITORA_EDITOR open, because that tab is in a different debug session.&lt;/p&gt;</description><pubDate>Wed, 12 Jul 2023 14:16:07 +0300</pubDate></item><item><title>Introduction to the PL/SQL Editor</title><link>https://blog.gitora.com/introduction-to-the-pl-sql-editor/</link><guid>https://blog.gitora.com/introduction-to-the-pl-sql-editor/</guid><description>&lt;p class="wp-block-paragraph"&gt;In the Gitora Editor Home, click the &lt;strong&gt;Connect&lt;/strong&gt; button next to an Oracle username to open the Gitora PL/SQL Editor in a new tab.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/05/home.png"&gt;&lt;img decoding="async" width="1004" height="592" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/05/home.png" alt="" class="wp-image-761" srcset="https://blog.gitora.com/wp-content/uploads/2023/05/home.png 1004w, https://blog.gitora.com/wp-content/uploads/2023/05/home-300x177.png 300w, https://blog.gitora.com/wp-content/uploads/2023/05/home-768x453.png 768w" sizes="auto, (max-width: 1004px) 100vw, 1004px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;The PL/SQL Editor shows up with an empty SQL Pad that uses the Oracle user you clicked, as its default connection information. The &lt;strong&gt;database object browser&lt;/strong&gt; on the right shows the database objects in the Oracle user you clicked.&lt;/p&gt;

&lt;figure class="wp-block-image size-large"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/05/fromhome.png"&gt;&lt;img decoding="async" width="1024" height="495" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/05/fromhome-1024x495.png" alt="" class="wp-image-794" srcset="https://blog.gitora.com/wp-content/uploads/2023/05/fromhome-1024x495.png 1024w, https://blog.gitora.com/wp-content/uploads/2023/05/fromhome-300x145.png 300w, https://blog.gitora.com/wp-content/uploads/2023/05/fromhome-768x371.png 768w, https://blog.gitora.com/wp-content/uploads/2023/05/fromhome-1536x742.png 1536w, https://blog.gitora.com/wp-content/uploads/2023/05/fromhome.png 1910w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;Expand the &lt;strong&gt;Packages Accordion&lt;/strong&gt; in the object navigator. The list of packages in the schema will show up. Click the &lt;strong&gt;Edit &lt;/strong&gt;button next to a package.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/05/packages2.png"&gt;&lt;img decoding="async" width="412" height="713" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/05/packages2.png" alt="" class="wp-image-833" srcset="https://blog.gitora.com/wp-content/uploads/2023/05/packages2.png 412w, https://blog.gitora.com/wp-content/uploads/2023/05/packages2-173x300.png 173w" sizes="auto, (max-width: 412px) 100vw, 412px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;The Gitora PL/SQL Editor opens the package spec and body in the current browser tab. The editor will open any subsequent database object in a new browser tab.&lt;/p&gt;

&lt;figure class="wp-block-image size-large"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/04/open_package-2.png"&gt;&lt;img decoding="async" width="1024" height="641" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/04/open_package-2-1024x641.png" alt="" class="wp-image-745" srcset="https://blog.gitora.com/wp-content/uploads/2023/04/open_package-2-1024x641.png 1024w, https://blog.gitora.com/wp-content/uploads/2023/04/open_package-2-300x188.png 300w, https://blog.gitora.com/wp-content/uploads/2023/04/open_package-2-768x481.png 768w, https://blog.gitora.com/wp-content/uploads/2023/04/open_package-2.png 1426w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;Before we start editing, let&amp;#8217;s go over the list of buttons and features in the editor.&lt;/p&gt;

&lt;h2 class="wp-block-heading"&gt;The Toolbar&lt;/h2&gt;

&lt;figure class="wp-block-image size-large"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/05/toolbar.png"&gt;&lt;img decoding="async" width="1024" height="20" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/05/toolbar-1024x20.png" alt="" class="wp-image-797" srcset="https://blog.gitora.com/wp-content/uploads/2023/05/toolbar-1024x20.png 1024w, https://blog.gitora.com/wp-content/uploads/2023/05/toolbar-300x6.png 300w, https://blog.gitora.com/wp-content/uploads/2023/05/toolbar-768x15.png 768w, https://blog.gitora.com/wp-content/uploads/2023/05/toolbar-1536x30.png 1536w, https://blog.gitora.com/wp-content/uploads/2023/05/toolbar.png 1914w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;The toolbar is always at the top of the screen. Below is the list of buttons in the toolbar from left to right and a brief description for each one:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Show/Hide Method List&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;The Gitora PL/SQL Editor shows a powerful content navigator when a package or an object type is displayed in the editor. This button hides/shows the content navigator. It can be used to create more space for the PL/SQL editors and the SQL Pads.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Undo/Redo&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Use these buttons to undo/redo changes you made in the current editor. Since a package and an object type have two editors, one for the spec and one for the body, these editors have separate undo queues.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;However, if an editor is split in two using the split editor feature. The split editors share a single undo queue.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Comment Out/In&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Select a block of code and click the Comment button to turn it into a block of comment. Conversely, select a block of comment and click the same button to turn the comment to a code block. This feature uses the &amp;#8212; notation to create comments and similarly can reverse comments that start with &amp;#8211;.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Indent&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Select a code block and click the Indent button to shift the block 1 tab size to the right.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Outdent&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Select a code block and click the Outdent button to shift the block 1 tab size to the left. &lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;The Context Label&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;The context label in the middle of the toolbar displays the Oracle username and the database you clicked to open this tab as well as your Gitora Editor user name.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Save &lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Used to save the changes made to the database object open in the editor. The icon turns dark if there are changes to save.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Split Editor&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Splits both the spec and the body editors in two horizontally.  The icon turns dark if it is active.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Back/Forward&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;These buttons work similar to back and forward buttons in a browser. Gitora tracks the locations your cursor has been to in the editors. Clicking the back button takes your cursor to the previous location it was. Conversely, clicking forward button takes the cursor back to the next location. &lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Find and Replace&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;The Gitora PL/SQL Editor has a powerful Find&amp;amp;Replace widget that you can use to search for letters, whole words and replace them. You can even search using regular expressions. Clicking the icon the first time displays the widget. Clicking it the second time hides it. You can also use CTRL-F to show the widget.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Feedback&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Please use the feedback button to share you comments or inform us about bugs and issues.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Color Mode&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Click the color mode button to switch between light and dark mode.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Settings&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Clicking the settings button displays the settings window.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/05/settings.png"&gt;&lt;img decoding="async" width="318" height="441" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/05/settings.png" alt="" class="wp-image-801" srcset="https://blog.gitora.com/wp-content/uploads/2023/05/settings.png 318w, https://blog.gitora.com/wp-content/uploads/2023/05/settings-216x300.png 216w" sizes="auto, (max-width: 318px) 100vw, 318px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;In this window, you can set the font size, font family, tab size values for the Gitora PL/SQL editor. &lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Max Rows&lt;/strong&gt; value determines the maximum number of rows a query you execute returns. &lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Text Length&lt;/strong&gt; sets the maximum length of the text the editor returns. If set, longer text values will be cut at the length you specify. &lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Tick the &lt;strong&gt;Save Layout&lt;/strong&gt; checkbox, if you&amp;#8217;d like the Gitora PL/SQL editor to open reusing the widths and heights you set for the &lt;strong&gt;Method&lt;/strong&gt; &lt;strong&gt;List&lt;/strong&gt; on the left and the &lt;strong&gt;Object Navigator&lt;/strong&gt; on the right.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Click the Save button to store your changes.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;About&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Click the icon to display the version and build number of the Gitora PL/SQL Editor.&lt;/p&gt;

&lt;h2 class="wp-block-heading"&gt;The Workspace&lt;/h2&gt;

&lt;figure class="wp-block-image size-large"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/05/workspace.png"&gt;&lt;img decoding="async" width="1024" height="377" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/05/workspace-1024x377.png" alt="" class="wp-image-805" srcset="https://blog.gitora.com/wp-content/uploads/2023/05/workspace-1024x377.png 1024w, https://blog.gitora.com/wp-content/uploads/2023/05/workspace-300x110.png 300w, https://blog.gitora.com/wp-content/uploads/2023/05/workspace-768x282.png 768w, https://blog.gitora.com/wp-content/uploads/2023/05/workspace-1536x565.png 1536w, https://blog.gitora.com/wp-content/uploads/2023/05/workspace.png 1917w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;The middle part of the Gitora PL/SQL Editor is your workspace. It consists of three columns. From left to right: the &lt;strong&gt;Method List&lt;/strong&gt; (Package Navigator), the &lt;strong&gt;Editors&lt;/strong&gt; area and the &lt;strong&gt;Database Object Navigator&lt;/strong&gt;.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Each column is separated with a &lt;strong&gt;splitter&lt;/strong&gt;. You can move these splitters left or right to adjust the width each column covers on the screen.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Method List (Package Navigator)&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;This column displays the procedures and functions in the package or object type that is open for editing in the editor. &lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;The &lt;strong&gt;Search Box&lt;/strong&gt; can be used to filter the methods in the list.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;The &lt;strong&gt;Refresh&lt;/strong&gt; button can be used to update the list if any of the new functions or procedures you created is not shown in the list.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;The functions and procedures that are both on the spec and the body have a lighter color than the ones that exists only in the body. &lt;strong&gt;If a method only exists in the spec, its color is yellow.&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Clicking a method name will take the cursor to its location in the active editor. &lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;The Editors&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;The center of the workspace is where the code editors are. The editor has two types of editors: The PL/SQL editors and the SQL editors.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;The Gitora PL/SQL Editor opens the first database object in the current tab. Subsequent objects are opened in new browser tabs.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Both editors provide &lt;strong&gt;auto complete&lt;/strong&gt; suggestions. The default list of suggestions are all the words in the current open database object. After you type a dot character, the editor reads the word left of the dot and shows relevant suggestions depending on whether the word is a schema, a table, a view, a package or an object type. In the picture below, you see the editor recommending a list of method names because the user typed a package name.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/05/auto_suggest2.png"&gt;&lt;img decoding="async" width="696" height="376" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/05/auto_suggest2.png" alt="" class="wp-image-809" srcset="https://blog.gitora.com/wp-content/uploads/2023/05/auto_suggest2.png 696w, https://blog.gitora.com/wp-content/uploads/2023/05/auto_suggest2-300x162.png 300w" sizes="auto, (max-width: 696px) 100vw, 696px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Note the arrow sign &gt; in the upper right corner of the suggestions box.&lt;/strong&gt; Clicking the sign will expand the highlighted selection to display its full text. Change your selection and the expanded area will change with your selection. This is a toggle you can turn on/off with each editor separately.&lt;/p&gt;

&lt;figure class="wp-block-image size-large"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/05/auto_suggest3.png"&gt;&lt;img decoding="async" width="1024" height="330" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/05/auto_suggest3-1024x330.png" alt="" class="wp-image-810" srcset="https://blog.gitora.com/wp-content/uploads/2023/05/auto_suggest3-1024x330.png 1024w, https://blog.gitora.com/wp-content/uploads/2023/05/auto_suggest3-300x97.png 300w, https://blog.gitora.com/wp-content/uploads/2023/05/auto_suggest3-768x248.png 768w, https://blog.gitora.com/wp-content/uploads/2023/05/auto_suggest3.png 1076w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;Gitora detects &lt;strong&gt;&lt;code&gt;[schema].[package]&lt;/code&gt;&lt;/strong&gt;. syntax and can show suggestions for database objects in other schemas. In the example below, Gitora recommends the methods in the &lt;code&gt;twi_call&lt;/code&gt; package which is in the HR schema.&lt;/p&gt;

&lt;figure class="wp-block-image size-large"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/05/auto_suggest4.png"&gt;&lt;img decoding="async" width="1024" height="237" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/05/auto_suggest4-1024x237.png" alt="" class="wp-image-811" srcset="https://blog.gitora.com/wp-content/uploads/2023/05/auto_suggest4-1024x237.png 1024w, https://blog.gitora.com/wp-content/uploads/2023/05/auto_suggest4-300x70.png 300w, https://blog.gitora.com/wp-content/uploads/2023/05/auto_suggest4-768x178.png 768w, https://blog.gitora.com/wp-content/uploads/2023/05/auto_suggest4.png 1105w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;The SQL Pad&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Clicking the plus button next to the Body tab, creates a new SQL Pad which you can use to execute PL/SQL blocks, SQL queries, DML and DDL statements. You can create as many SQL Pads as you&amp;#8217;d like. &lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;SQL Pads consist of four rows. The toolbar, the worksheet, the query results and the messages rows. Let&amp;#8217;s go over these rows one bye one:&lt;/p&gt;

&lt;figure class="wp-block-image size-large"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/05/sqlpad.png"&gt;&lt;img decoding="async" width="1024" height="565" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/05/sqlpad-1024x565.png" alt="" class="wp-image-813" srcset="https://blog.gitora.com/wp-content/uploads/2023/05/sqlpad-1024x565.png 1024w, https://blog.gitora.com/wp-content/uploads/2023/05/sqlpad-300x166.png 300w, https://blog.gitora.com/wp-content/uploads/2023/05/sqlpad-768x424.png 768w, https://blog.gitora.com/wp-content/uploads/2023/05/sqlpad.png 1210w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;&lt;em&gt;The SQL Pad Toolbar&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Each SQL Pad has its own toolbar with five buttons. From left to right:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Execute&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Click this button to run your SQL statements.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Commit&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Use this button to commit your changes. This button works only with a persistent database connection. &lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Rollback&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt; Use this button to roll back your changes. This button works only with a persistent database connection.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;DBMS Output&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Use this button to toggle the DBMS Output on or off.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Connection&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Use this button to change the current database connection of the SQL Pad. &lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;When you create a new SQL Pad, by default it is connected to the same database user you clicked on to open the Gitora PL/SQL Editor. This connection is not persistent i.e. the Gitora Editor creates temporary database connections when you run the SQL statements by clicking the Execute button.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;To change the database connection an SQL Pad is using click the Connect button. The database connection selection dialog shows up.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/05/select_connection.png"&gt;&lt;img decoding="async" width="510" height="483" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/05/select_connection.png" alt="" class="wp-image-823" srcset="https://blog.gitora.com/wp-content/uploads/2023/05/select_connection.png 510w, https://blog.gitora.com/wp-content/uploads/2023/05/select_connection-300x284.png 300w" sizes="auto, (max-width: 510px) 100vw, 510px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;The dialog has the following actions:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;No Connection&lt;/strong&gt;: Select this option if you&amp;#8217;d like to disconnect the editor from all database connections.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Persistent Connection&lt;/strong&gt;: Toggle this button to on, if you&amp;#8217;d like the connection you will select to be a persistent connection.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;New Database:&lt;/strong&gt; Click this button if the database you&amp;#8217;d like to connect to does not exist as an option. This will take you to the Create New Database screen explained the the Introduction to the Gitora Editor Home tutorial.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Under the New Database button, you will see the list of databases you can connect. Expand the database you&amp;#8217;d like to connect to see the available Oracle users that you can connect to.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/05/select_connection_2.png"&gt;&lt;img decoding="async" width="504" height="475" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/05/select_connection_2.png" alt="" class="wp-image-825" srcset="https://blog.gitora.com/wp-content/uploads/2023/05/select_connection_2.png 504w, https://blog.gitora.com/wp-content/uploads/2023/05/select_connection_2-300x283.png 300w" sizes="auto, (max-width: 504px) 100vw, 504px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;Select the Oracle user you&amp;#8217;d like the SQL Pad to use and the dialog will close. Your SQL Pad is now using your selection as its connection.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Select &lt;strong&gt;&lt;em&gt;New User&lt;/em&gt;&lt;/strong&gt; if you&amp;#8217;d like to add a new Oracle username to the registered usernames. Your SQL Pad will use the new Oracle user you will register.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Persistent Database Connections&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;SQL Pads in Gitora PL/SQL Editor support persistent database connections.&lt;/strong&gt; To create a persistent connection toggle the Persistent Connection button in the Connection Selection dialog as shown above. &lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;After you select a connection, Gitora will create a persistent connection that the SQL Pad will to reuse every time you execute an SQL statement. &lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;You can also share a persistent connection among other SQL Pads you create. To share a persistent connection: &lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Create a new SQL Pad.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Click the Connection button.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Toggle the Persistent Connection button to on. A new row titled &lt;strong&gt;Open Sessions&lt;/strong&gt; will show up.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/05/persistent_sessions.png"&gt;&lt;img decoding="async" width="509" height="478" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/05/persistent_sessions.png" alt="" class="wp-image-827" srcset="https://blog.gitora.com/wp-content/uploads/2023/05/persistent_sessions.png 509w, https://blog.gitora.com/wp-content/uploads/2023/05/persistent_sessions-300x282.png 300w" sizes="auto, (max-width: 509px) 100vw, 509px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;Clicking on the &lt;strong&gt;Open Sessions&lt;/strong&gt; row will display existing persistent connections. Click the one you&amp;#8217;d like the new SQL Pad to use and the new pad will share the same database session with the previous pad you created.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Gitora manages the persistent database connections automatically. Closing the last SQL Pad that uses an open database session will close it. Closing the browser tab will also close any unused database sessions. &lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;The file at &lt;code&gt;/gitora/datastore/GitoraEditor/default_pool_properties.json&lt;/code&gt; manages several properties that you can edit.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;{"maxSizePerUser":25,&lt;br&gt;"timeout":3600,&lt;br&gt;"timeoutCheck":300}&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;maxSizePerUser&lt;/strong&gt; property sets the maximum number of open database sessions per user.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;timeout&lt;/strong&gt; property sets the maximum number of seconds a session can remain idle before being closed by Gitora.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;timeoutCheck&lt;/strong&gt; property sets the number of seconds Gitora waits before checking if any session has timed out.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;&lt;em&gt;The Worksheet&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;The worksheet is where you write your SQL statements.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;&lt;em&gt;The Query Result&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;If you execute an SQL query, the results will show up in this row.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;&lt;em&gt;The Messages&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;The messages row has two tabs. The Errors tab shows the errors received while executing the SQL statement in the pad and the DBMS Output tab shows the results of the DBMS Output if there are any. Each SQL pad has its own message row.&lt;/p&gt;

&lt;h2 class="wp-block-heading"&gt;The Database Object Navigator&lt;/h2&gt;

&lt;p class="wp-block-paragraph"&gt;The &lt;strong&gt;Database Object Navigator&lt;/strong&gt; consists of two tabs. The &lt;strong&gt;Database Search&lt;/strong&gt; tab and the &lt;strong&gt;Schema Object Navigator&lt;/strong&gt;.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/05/object_navigator.png"&gt;&lt;img decoding="async" width="383" height="674" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/05/object_navigator.png" alt="" class="wp-image-815" srcset="https://blog.gitora.com/wp-content/uploads/2023/05/object_navigator.png 383w, https://blog.gitora.com/wp-content/uploads/2023/05/object_navigator-170x300.png 170w" sizes="auto, (max-width: 383px) 100vw, 383px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;The schema object navigator shows the seven most commonly used database objects in the database user you are connected to. Just like in the &lt;strong&gt;Method List&lt;/strong&gt; column, you can filter the lists for each object by its name and click the refresh button to display newly created objects.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Selecting and copying an object&amp;#8217;s name with CTRL+C copies the objects name in lowercase to the clipboard. &lt;strong&gt;The object name is not clickable to make copying easier.&lt;/strong&gt; &lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Tables&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Each table has a &lt;strong&gt;table widget&lt;/strong&gt; that shows its columns and the foreign keys. Both the column list and he foreign keys can be filtered and refreshed. &lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;In the &lt;strong&gt;Columns&lt;/strong&gt; tab, the &lt;strong&gt;column names with a star * indicate primary key columns&lt;/strong&gt;.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Views&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Each view has a view widget that displays its columns. &lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Each view also has a dropdown button with a list of actions. Clicking the &lt;strong&gt;&lt;em&gt;Edit&lt;/em&gt;&lt;/strong&gt; button opens the view in the Gitora Editor (current browser tab or a new tab). You can also &lt;strong&gt;&lt;em&gt;Compile&lt;/em&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;em&gt;Drop&lt;/em&gt;&lt;/strong&gt; a view.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/05/view_actions.png"&gt;&lt;img decoding="async" width="331" height="331" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/05/view_actions.png" alt="" class="wp-image-817" srcset="https://blog.gitora.com/wp-content/uploads/2023/05/view_actions.png 331w, https://blog.gitora.com/wp-content/uploads/2023/05/view_actions-300x300.png 300w, https://blog.gitora.com/wp-content/uploads/2023/05/view_actions-150x150.png 150w" sizes="auto, (max-width: 331px) 100vw, 331px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Packages (Types)&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Package and Types work the same way. So we will only go over packages. &lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Each package has a widget that displays its procedures and functions. Similar to the Method List column, the private methods are in dark color and the public methods are in a light color.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Uncompiled packages have a red icon.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Each package also has a dropdown button with a list of actions. Clicking the Edit button opens the package spec and body in the Gitora Editor. If the current tab already has an open database object, the object is opened in a new browser tab. Otherwise, it is opened in the current tab. You can also compile or drop the spec and the body of a package.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/05/package_actions.png"&gt;&lt;img decoding="async" width="354" height="494" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/05/package_actions.png" alt="" class="wp-image-818" srcset="https://blog.gitora.com/wp-content/uploads/2023/05/package_actions.png 354w, https://blog.gitora.com/wp-content/uploads/2023/05/package_actions-215x300.png 215w" sizes="auto, (max-width: 354px) 100vw, 354px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;If a package&amp;#8217;s spec or body is in an uncompiled state, the dropdown will show the relevant compile action in red.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/05/package_red.png"&gt;&lt;img decoding="async" width="323" height="219" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/05/package_red.png" alt="" class="wp-image-819" srcset="https://blog.gitora.com/wp-content/uploads/2023/05/package_red.png 323w, https://blog.gitora.com/wp-content/uploads/2023/05/package_red-300x203.png 300w" sizes="auto, (max-width: 323px) 100vw, 323px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;If a package is missing the body, the compile and drop actions for the body will not show up in the button dropdown.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/05/package_no_body.png"&gt;&lt;img decoding="async" width="351" height="148" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/05/package_no_body.png" alt="" class="wp-image-820" srcset="https://blog.gitora.com/wp-content/uploads/2023/05/package_no_body.png 351w, https://blog.gitora.com/wp-content/uploads/2023/05/package_no_body-300x126.png 300w" sizes="auto, (max-width: 351px) 100vw, 351px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Functions&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Each function has a dropdown button with a list of actions. Clicking the &lt;strong&gt;&lt;em&gt;Edit&lt;/em&gt;&lt;/strong&gt; button opens the function in the Gitora Editor (current browser tab or a new tab). You can also &lt;strong&gt;&lt;em&gt;Compile&lt;/em&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;em&gt;Drop&lt;/em&gt;&lt;/strong&gt; a function. &lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Procedures&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Each procedure has a dropdown button with a list of actions. Clicking the &lt;strong&gt;&lt;em&gt;Edit&lt;/em&gt;&lt;/strong&gt; button opens the procedure in the Gitora Editor (current browser tab or a new tab). You can also &lt;strong&gt;&lt;em&gt;Compile&lt;/em&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;em&gt;Drop&lt;/em&gt;&lt;/strong&gt; a procedure.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Triggers&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Each trigger has a dropdown button with a list of actions. Clicking the &lt;strong&gt;&lt;em&gt;Edit&lt;/em&gt;&lt;/strong&gt; button opens the trigger in the Gitora Editor (current browser tab or a new tab). You can also &lt;strong&gt;&lt;em&gt;Compile&lt;/em&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;em&gt;Drop&lt;/em&gt;&lt;/strong&gt; a trigger.&lt;/p&gt;

&lt;h2 class="wp-block-heading"&gt;Messages&lt;/h2&gt;

&lt;p class="wp-block-paragraph"&gt;The bottom row in the editor shows error messages received from the database when you save a database object. Clicking an error will take the cursor to the location of where the error has occurred and highlight that row for a few seconds.&lt;/p&gt;

&lt;figure class="wp-block-image size-large"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/05/error.png"&gt;&lt;img decoding="async" width="1024" height="343" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/05/error-1024x343.png" alt="" class="wp-image-821" srcset="https://blog.gitora.com/wp-content/uploads/2023/05/error-1024x343.png 1024w, https://blog.gitora.com/wp-content/uploads/2023/05/error-300x100.png 300w, https://blog.gitora.com/wp-content/uploads/2023/05/error-768x257.png 768w, https://blog.gitora.com/wp-content/uploads/2023/05/error-1536x514.png 1536w, https://blog.gitora.com/wp-content/uploads/2023/05/error.png 1917w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Database Search&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;The other tab in the third column of the workspace is the &lt;strong&gt;Database Search&lt;/strong&gt; tab. In this tab, you can search for any text in the entire database code base or only in a schema. &lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;The searches are case insensitive.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;The results are grouped by schema and database object.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/05/database_search.png"&gt;&lt;img decoding="async" width="406" height="785" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/05/database_search.png" alt="" class="wp-image-865" srcset="https://blog.gitora.com/wp-content/uploads/2023/05/database_search.png 406w, https://blog.gitora.com/wp-content/uploads/2023/05/database_search-155x300.png 155w" sizes="auto, (max-width: 406px) 100vw, 406px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;The icons indicate the type of object that the searched term is found in. The closed package icon indicates a package spec and an open package icon indicates a package body.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Click on an object to view the lines in the object that contain the searched term.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/05/database_search_lines.png"&gt;&lt;img decoding="async" width="406" height="792" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/05/database_search_lines.png" alt="" class="wp-image-866" srcset="https://blog.gitora.com/wp-content/uploads/2023/05/database_search_lines.png 406w, https://blog.gitora.com/wp-content/uploads/2023/05/database_search_lines-154x300.png 154w" sizes="auto, (max-width: 406px) 100vw, 406px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Clicking the line number will open a new Gitora PL/SQL Editor in a new tab. The new tab will have the database object with the search term open in the editor and the line number you clicked on will be the top line in the editor.&lt;/strong&gt;&lt;/p&gt;</description><pubDate>Wed, 10 May 2023 15:42:57 +0300</pubDate></item><item><title>Getting Started With the Gitora Editor Home App</title><link>https://blog.gitora.com/getting-started-with-the-gitora-pl-sql-editor/</link><guid>https://blog.gitora.com/getting-started-with-the-gitora-pl-sql-editor/</guid><description>&lt;p class="wp-block-paragraph"&gt;The first time you sign in, the Gitora PL/SQL Editor Home Screen will detect that you do not have any databases saved and ask you to create your first database and the first Oracle username and password for it.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/05/create_new_database.png"&gt;&lt;img decoding="async" width="826" height="859" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/05/create_new_database.png" alt="" class="wp-image-768" srcset="https://blog.gitora.com/wp-content/uploads/2023/05/create_new_database.png 826w, https://blog.gitora.com/wp-content/uploads/2023/05/create_new_database-288x300.png 288w, https://blog.gitora.com/wp-content/uploads/2023/05/create_new_database-768x799.png 768w" sizes="auto, (max-width: 826px) 100vw, 826px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;Enter a descriptive &lt;strong&gt;&lt;em&gt;name&lt;/em&gt;&lt;/strong&gt; and the &lt;strong&gt;&lt;em&gt;JDBC URL&lt;/em&gt;&lt;/strong&gt; to connect to the database as seen in the screenshot above.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;If you are a Gitora Version Control (GVC) customer, enter your credentials for this database under the &lt;em&gt;&lt;strong&gt;Gitora Version Control Credentials&lt;/strong&gt;&lt;/em&gt; header.  The Editor will use this information to automatically sign you in to the GVC every time you open a database session. Otherwise, leave these fields empty.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Enter the Oracle username and password you’d like to use to open a session and select the role you’d like to connect as, if it is different from the default.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;If you are a GVC customer and use your Oracle user as your GVC credentials, tick the checkbox otherwise leave it unchecked.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Click save.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;The &lt;em&gt;&lt;strong&gt;Databases&lt;/strong&gt;&lt;/em&gt; screen shows up.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Please note that Gitora Editor Home does not create databases or database users for you. The screens below are used to add existing databases and database users to your home screen.&lt;/strong&gt;&lt;/p&gt;

&lt;h2 class="wp-block-heading"&gt;&lt;strong&gt;The Databases Tab&lt;/strong&gt;&lt;/h2&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;This is your Gitora Editor Home screen where you can jump to all of your databases with the user you&amp;#8217;d like to connect as.&lt;/strong&gt;&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/05/home.png"&gt;&lt;img decoding="async" width="1004" height="592" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/05/home.png" alt="" class="wp-image-761" srcset="https://blog.gitora.com/wp-content/uploads/2023/05/home.png 1004w, https://blog.gitora.com/wp-content/uploads/2023/05/home-300x177.png 300w, https://blog.gitora.com/wp-content/uploads/2023/05/home-768x453.png 768w" sizes="auto, (max-width: 1004px) 100vw, 1004px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;Clicking the &lt;em&gt;&lt;strong&gt;Connect&lt;/strong&gt;&lt;/em&gt; button will open a the PL/SQL Editor in a new tab.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Click the &lt;em&gt;&lt;strong&gt;Delete&lt;/strong&gt;&lt;/em&gt; button removes the database from your list of databases.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;The &lt;strong&gt;&lt;em&gt;Create New Database&lt;/em&gt;&lt;/strong&gt; button show you the screen where you created your first database.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Click the &lt;em&gt;&lt;strong&gt;Edit&lt;/strong&gt;&lt;/em&gt; button to manage the Oracle users you can use to connect to a database.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;The &lt;em&gt;&lt;strong&gt;Edit Database&lt;/strong&gt;&lt;/em&gt; screen show up.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;The Edit Database Screen&lt;/strong&gt;&lt;/p&gt;

&lt;figure class="wp-block-image size-large"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/05/editdatabase.png"&gt;&lt;img decoding="async" width="1024" height="442" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/05/editdatabase-1024x442.png" alt="" class="wp-image-775" srcset="https://blog.gitora.com/wp-content/uploads/2023/05/editdatabase-1024x442.png 1024w, https://blog.gitora.com/wp-content/uploads/2023/05/editdatabase-300x129.png 300w, https://blog.gitora.com/wp-content/uploads/2023/05/editdatabase-768x331.png 768w, https://blog.gitora.com/wp-content/uploads/2023/05/editdatabase-1536x662.png 1536w, https://blog.gitora.com/wp-content/uploads/2023/05/editdatabase.png 1867w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;You can edit the &lt;em&gt;&lt;strong&gt;name&lt;/strong&gt;&lt;/em&gt; and the &lt;em&gt;&lt;strong&gt;JDBC URL&lt;/strong&gt;&lt;/em&gt; on this screen.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;If you are a GVC customer, enter your Gitora Version Control user name and password to the &lt;em&gt;&lt;strong&gt;credentials&lt;/strong&gt;&lt;/em&gt; fields, if not leave these fields empty.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Click the &lt;em&gt;&lt;strong&gt;Create New User&lt;/strong&gt;&lt;/em&gt; button to add a new Oracle user to the database. The &lt;strong&gt;&lt;em&gt;Create Database User&lt;/em&gt;&lt;/strong&gt; screen shows up.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/05/create_database_user.png"&gt;&lt;img decoding="async" width="815" height="461" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/05/create_database_user.png" alt="" class="wp-image-776" srcset="https://blog.gitora.com/wp-content/uploads/2023/05/create_database_user.png 815w, https://blog.gitora.com/wp-content/uploads/2023/05/create_database_user-300x170.png 300w, https://blog.gitora.com/wp-content/uploads/2023/05/create_database_user-768x434.png 768w" sizes="auto, (max-width: 815px) 100vw, 815px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;Enter your Oracle username and password. Select the role the user should connect as if it is different from the default. If you are a GVC customer, check the &lt;em&gt;&lt;strong&gt;Use as Gitora Version Control Credentials&lt;/strong&gt;&lt;/em&gt;&lt;strong&gt; &lt;/strong&gt;checkbox if you are using this Oracle user also as your Gitora User Name.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Click save to add a new user to the database.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Use the &lt;em&gt;&lt;strong&gt;Edit&lt;/strong&gt;&lt;/em&gt; button to update the credentials for a user and the &lt;em&gt;&lt;strong&gt;Delete&lt;/strong&gt;&lt;/em&gt; button to remove it from the database.&lt;/p&gt;

&lt;h2 class="wp-block-heading"&gt;&lt;strong&gt;The Users Tab&lt;/strong&gt;&lt;/h2&gt;

&lt;p class="wp-block-paragraph"&gt;The &lt;strong&gt;&lt;em&gt;Users Tab&lt;/em&gt;&lt;/strong&gt; shows up for users with the admin role and can be used to manage the Gitora Editor users.&lt;/p&gt;

&lt;figure class="wp-block-image size-large"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/05/users.png"&gt;&lt;img decoding="async" width="1024" height="309" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/05/users-1024x309.png" alt="" class="wp-image-759" srcset="https://blog.gitora.com/wp-content/uploads/2023/05/users-1024x309.png 1024w, https://blog.gitora.com/wp-content/uploads/2023/05/users-300x91.png 300w, https://blog.gitora.com/wp-content/uploads/2023/05/users-768x232.png 768w, https://blog.gitora.com/wp-content/uploads/2023/05/users.png 1422w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;You can filter users using the search field. Click the &lt;em&gt;&lt;strong&gt;Delete&lt;/strong&gt;&lt;/em&gt; button to remove a user from the application. Click the username to edit a user.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Click the &lt;em&gt;&lt;strong&gt;Create New User&lt;/strong&gt;&lt;/em&gt; button, to add a new Gitora Editor user. The &lt;em&gt;&lt;strong&gt;Create New User&lt;/strong&gt;&lt;/em&gt; screen shows up.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/05/create_user.png"&gt;&lt;img decoding="async" width="309" height="504" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/05/create_user.png" alt="" class="wp-image-760" srcset="https://blog.gitora.com/wp-content/uploads/2023/05/create_user.png 309w, https://blog.gitora.com/wp-content/uploads/2023/05/create_user-184x300.png 184w" sizes="auto, (max-width: 309px) 100vw, 309px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;Enter a username (not to be confused with the an Oracle username. This is your Gitora Editor username.) and a password. Select a role for the user (admin or regular) and click save.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;/p&gt;</description><pubDate>Mon, 08 May 2023 16:53:04 +0300</pubDate></item><item><title>Introducing Gitora 7</title><link>https://blog.gitora.com/introducing-gitora-7/</link><guid>https://blog.gitora.com/introducing-gitora-7/</guid><description>&lt;p class="wp-block-paragraph"&gt;We are excited to announce the launch of Gitora 7, which includes a groundbreaking addition to our suite of tools:&lt;/p&gt;

&lt;h2 class="wp-block-heading"&gt;&lt;strong&gt;The Gitora PL/SQL Editor&lt;/strong&gt;&lt;/h2&gt;

&lt;figure class="wp-block-image size-large"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2023/04/open_package-2.png"&gt;&lt;img decoding="async" width="1024" height="641" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2023/04/open_package-2-1024x641.png" alt="" class="wp-image-745" srcset="https://blog.gitora.com/wp-content/uploads/2023/04/open_package-2-1024x641.png 1024w, https://blog.gitora.com/wp-content/uploads/2023/04/open_package-2-300x188.png 300w, https://blog.gitora.com/wp-content/uploads/2023/04/open_package-2-768x481.png 768w, https://blog.gitora.com/wp-content/uploads/2023/04/open_package-2.png 1426w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;a href="https://www.gitora.com/plsql_editor.html" target="_blank" rel="noreferrer noopener"&gt;The Gitora PL/SQL Editor&lt;/a&gt; represents a fresh approach to writing PL/SQL code, drawing on the latest advances in code editors to deliver an unparalleled experience to the PL/SQL community. Packed with modern features that are intuitive and easy to use, this editor represents a significant leap forward in coding in PL/SQL.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Let&amp;#8217;s take a quick look at some of the features that make the Gitora PL/SQL Editor so remarkable:&lt;/p&gt;

&lt;ul class="wp-block-list"&gt;&lt;li&gt;&lt;strong&gt;Beautiful Design&lt;/strong&gt;&lt;br&gt;The Gitora PL/SQL Editor boasts a beautiful, modern design that makes it easy on the eyes and intuitive to use. With Bootstrap 5 components and Font Awesome icons, you can rest assured that the editor will be both stylish and functional.&lt;br&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Dark Mode&lt;/strong&gt;&lt;br&gt;When you&amp;#8217;re working long hours on code, the last thing you want is to strain your eyes. That&amp;#8217;s why the Gitora PL/SQL Editor comes with a gorgeous dark mode that is easy on the eyes and perfect for long coding sessions.&lt;br&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Single Page Web Application&lt;/strong&gt;&lt;br&gt;Designed from the ground up for a multi-monitor, multi-tab world, the Gitora PL/SQL Editor is a single-page web application that allows you to open multiple editors in many browser tabs across multiple monitors. This means that you can work on complicated tasks without losing your place.&lt;br&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Auto Complete Suggestions&lt;/strong&gt;&lt;br&gt;The editor&amp;#8217;s smart auto-complete suggestions make it easy to find what you&amp;#8217;re looking for. Whether you&amp;#8217;re typing package, procedure or function names, the editor will suggest relevant options to help speed up your workflow.&lt;br&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Package (and Object Type) Content Navigator&lt;/strong&gt;&lt;br&gt;Navigating between package procedures, and functions is a breeze with the package content navigator. With just a single click, you can easily move between different parts of your code.&lt;br&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Split Editor&lt;/strong&gt;&lt;br&gt;The split editor lets you work on two sections of your code simultaneously, making it easy to compare code or write related sections side by side.&lt;br&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Go Back/Forward in the Editor&lt;/strong&gt;&lt;br&gt;The editor remembers the locations of your cursor, allowing you to easily navigate back and forth between different parts of your code with just a click, much like a browser&amp;#8217;s back/forward buttons.&lt;br&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Go to Definition&lt;/strong&gt;&lt;br&gt;With the CTRL+click command, you can quickly go to the definition of any database object in the code, allowing you to move between different parts of your project with ease.&lt;br&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Code Folding&lt;/strong&gt;&lt;br&gt;Code folding lets you get a better view of the code structure by folding code blocks, making it easier to read and understand large chunks of code.&lt;br&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Integrated with the Gitora Version Control&lt;/strong&gt;&lt;br&gt;Finally, the editor is fully integrated with the Gitora Version Control, allowing you to use it independently or from within the Gitora Version Control application. This makes it easy to manage your code changes and keep track of your work as you go.&lt;br&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;p class="wp-block-paragraph"&gt;We hope you&amp;#8217;re as excited about the Gitora PL/SQL Editor as we are! With its many powerful features and intuitive design, we&amp;#8217;re confident that it will be a game-changer for Oracle database developers everywhere. &lt;br&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;a href="https://www.gitora.com/download.html" data-type="URL" data-id="https://www.gitora.com/download.html"&gt;Download Gitora 7 today to see what it can do for you!&lt;/a&gt;&lt;/p&gt;</description><pubDate>Fri, 28 Apr 2023 11:36:59 +0300</pubDate></item><item><title>Gitora 6.5 is available</title><link>https://blog.gitora.com/gitora-6-5-is-available/</link><guid>https://blog.gitora.com/gitora-6-5-is-available/</guid><description>&lt;p class="wp-block-paragraph"&gt;We are happy to announce that Gitora 6.5 is available for download. This version&amp;#8217;s new feature is Jira integration.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Gitora customers can now associate a Git repo with a Jira project and enforce that each commit message in the repo references a Jira issue.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;To associate a Jira project with your repo, select the repo from the main screen and select the Repo -&amp;gt; Edit Repo menu option.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2022/12/Screenshot-2022-12-12-180658.png"&gt;&lt;img decoding="async" width="814" height="624" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2022/12/Screenshot-2022-12-12-180658.png" alt="" class="wp-image-730" srcset="https://blog.gitora.com/wp-content/uploads/2022/12/Screenshot-2022-12-12-180658.png 814w, https://blog.gitora.com/wp-content/uploads/2022/12/Screenshot-2022-12-12-180658-300x230.png 300w, https://blog.gitora.com/wp-content/uploads/2022/12/Screenshot-2022-12-12-180658-768x589.png 768w" sizes="auto, (max-width: 814px) 100vw, 814px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;Enter your Jira user name (usually an email) your API Token, your Jira domain and the issue key you are using for the project and click save.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;From this point on, Gitora will not let developers commit to Git without a reference to a Jira issue in their commit message.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;For example, the screenshot below shows a failed commit attempt, because the developer did not reference a Jira issue in the commit message:&lt;/p&gt;

&lt;figure class="wp-block-image size-large"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2022/12/127.0.0.1_7101_gitora_index.html.png"&gt;&lt;img decoding="async" width="1024" height="847" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2022/12/127.0.0.1_7101_gitora_index.html-1024x847.png" alt="" class="wp-image-731" srcset="https://blog.gitora.com/wp-content/uploads/2022/12/127.0.0.1_7101_gitora_index.html-1024x847.png 1024w, https://blog.gitora.com/wp-content/uploads/2022/12/127.0.0.1_7101_gitora_index.html-300x248.png 300w, https://blog.gitora.com/wp-content/uploads/2022/12/127.0.0.1_7101_gitora_index.html-768x635.png 768w, https://blog.gitora.com/wp-content/uploads/2022/12/127.0.0.1_7101_gitora_index.html.png 1367w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;Typing GIT-1 in the commit message will reference the Jira issue GIT-1 and the commit will go through. After a push to BitBucket, this reference will show up as a link in BitBucket, pointing back to the referenced Jira issue. Similarly, the Jira issue will show this commit as a related commit.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Gitora will check if the referenced Jira issue in the commit message exists in the Jira issue repository.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;To remove the Jira project from a repo, open the repo edit dialog and remove all information related to the Jira project and click save.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;You can obtain your Jira API key from your Atlassian account&amp;#8217;s security page. Here is a direct link to the API Token management page: &lt;a href="https://id.atlassian.com/manage-profile/security/api-tokens" target="_blank" rel="noreferrer noopener"&gt;https://id.atlassian.com/manage-profile/security/api-tokens&lt;/a&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Please note that, your account must have read access to the Jira project so that Gitora can query the Jira issue references.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;a href="https://www.gitora.com/download.html" data-type="URL" data-id="https://www.gitora.com/download.html"&gt;You can download Gitora 6.5 from this link.&lt;/a&gt;&lt;/p&gt;</description><pubDate>Mon, 12 Dec 2022 18:18:46 +0300</pubDate></item><item><title>Gitora 6.4 is available</title><link>https://blog.gitora.com/gitora-6-4-is-available/</link><guid>https://blog.gitora.com/gitora-6-4-is-available/</guid><description>&lt;p class="wp-block-paragraph"&gt;Gitora 6.4 is available for download. This version has the following changes:&lt;/p&gt;

&lt;ul class="wp-block-list"&gt;&lt;li&gt;Many bug fixes&lt;/li&gt;&lt;li&gt;Minor UI improvements&lt;/li&gt;&lt;li&gt;Completely new internals for the web application.&lt;/li&gt;&lt;li&gt;A new repo level security model. Admins can now determine who can access which repo.&lt;/li&gt;&lt;li&gt;Redesigned Gitora API&amp;#8217;s. (&lt;a href="https://blog.gitora.com/gitora-api-documentation/" target="_blank" rel="noreferrer noopener"&gt;https://blog.gitora.com/gitora-api-documentation/&lt;/a&gt;)&lt;/li&gt;&lt;li&gt;Enforce Compilation feature.&lt;/li&gt;&lt;/ul&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Enforce Compilation Feature:&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Starting with 6.4 you can enforce that database objects developers commit to Git must be in a valid state. To do this, select your repo from the main select box and click the Edit Repo menu option.&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2022/11/Screenshot-2022-11-24-123338.png"&gt;&lt;img decoding="async" width="488" height="322" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2022/11/Screenshot-2022-11-24-123338.png" alt="" class="wp-image-721" srcset="https://blog.gitora.com/wp-content/uploads/2022/11/Screenshot-2022-11-24-123338.png 488w, https://blog.gitora.com/wp-content/uploads/2022/11/Screenshot-2022-11-24-123338-300x198.png 300w" sizes="auto, (max-width: 488px) 100vw, 488px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;The Edit Repo Dialog shows up:&lt;/p&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2022/11/Screenshot-2022-11-24-124715.png"&gt;&lt;img decoding="async" width="815" height="293" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2022/11/Screenshot-2022-11-24-124715.png" alt="" class="wp-image-723" srcset="https://blog.gitora.com/wp-content/uploads/2022/11/Screenshot-2022-11-24-124715.png 815w, https://blog.gitora.com/wp-content/uploads/2022/11/Screenshot-2022-11-24-124715-300x108.png 300w, https://blog.gitora.com/wp-content/uploads/2022/11/Screenshot-2022-11-24-124715-768x276.png 768w" sizes="auto, (max-width: 815px) 100vw, 815px" /&gt;&lt;/a&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;Simply, check the Enforce Compilation checkbox and click save. From this point on, Gitora will ensure that every database object being committed to Git is in a valid state.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;What Should be in a Valid State to Commit?&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;If the Enforce Compilation checkbox is checked, Gitora will follow the rules below to determine if an object can be committed to the repo:&lt;/p&gt;

&lt;ul class="wp-block-list"&gt;&lt;li&gt;The object must be in a valid state&lt;br&gt;&lt;/li&gt;&lt;li&gt;If the object is a package or an object type and has a body, the body must also be in a valid state.&lt;br&gt;&lt;/li&gt;&lt;li&gt;If the object is being referenced by other database objects, and the references are NOT checked out by other developers, these database objects must also be in a valid state.&lt;br&gt;&lt;/li&gt;&lt;li&gt;If Gitora finds an invalid object, it will attempt to compile it and will not allow the developer to commit if the compilation fails.&lt;br&gt;&lt;/li&gt;&lt;li&gt;Gitora will not allow developers to add a database object to a repo, if it is in an invalid state.&lt;/li&gt;&lt;/ul&gt;

&lt;p class="wp-block-paragraph"&gt;You can download Gitora 6.4 &lt;a href="https://www.gitora.com/download.html" data-type="URL" data-id="https://www.gitora.com/download.html"&gt;from this link&lt;/a&gt;.&lt;/p&gt;</description><pubDate>Thu, 24 Nov 2022 12:48:07 +0300</pubDate></item><item><title>Signing In to Gitora For Database Development</title><link>https://blog.gitora.com/loging-in-to-gitora-for-database-development/</link><guid>https://blog.gitora.com/loging-in-to-gitora-for-database-development/</guid><description>&lt;p class="wp-block-paragraph"&gt;After you add a database object to Gitora, it cannot be edited unless the developer authenticates herself to Gitora from the database session she opened to edit the object.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;There are two ways to log in to Gitora:&lt;/p&gt;

&lt;h2 class="wp-block-heading"&gt;Signing In with a Gitora User&lt;/h2&gt;

&lt;p class="wp-block-paragraph"&gt;Use the &lt;code&gt;api_gitora.login&lt;/code&gt; procedure to authenticate yourself to Gitora. After a successful sign in you can edit the database objects managed by Gitora (based on your Gitora privileges).&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Procedure: &lt;code&gt;api_gitora.login(in_user_cd varchar2, in_password_tx varchar2)&lt;/code&gt;&lt;/p&gt;

&lt;h2 class="wp-block-heading"&gt;Signing In with a Database User&lt;/h2&gt;

&lt;p class="wp-block-paragraph"&gt;Gitora can recognize Oracle users as valid Gitora users. This is a quick and easy way to give all your developers a Gitora user if each of them use separate Oracle users to log in to the database. There won&amp;#8217;t be additional user names and password for your developers to remember and they will not need to authenticate with Gitora after they open a database session, saving them a step in their workflow. Gitora will automatically recognize their database sessions as authenticated.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;To achieve this follow the steps below:&lt;/p&gt;

&lt;ol class="wp-block-list"&gt;&lt;li&gt;Sign in to the Gitora web app as admin.&lt;br&gt;&lt;/li&gt;&lt;li&gt;Select the menu option Database -&amp;gt; Users. The Users screen shows up.&lt;br&gt;&lt;/li&gt;&lt;li&gt;Click the Create New User button. The Create New User screen shows up.&lt;br&gt;&lt;/li&gt;&lt;li&gt;Enter the Oracle User Name of the developer to the User Name field. This will disable the password fields. Select a role for the user. This role specifies the priviliges the user has in Gitora. Click Save and your Oracle User is ready to be used as a Gitora user.&lt;/li&gt;&lt;/ol&gt;

&lt;figure class="wp-block-image size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2022/11/Screenshot-2022-11-15-122402.png"&gt;&lt;img decoding="async" width="830" height="602" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2022/11/Screenshot-2022-11-15-122402.png" alt="" class="wp-image-702" srcset="https://blog.gitora.com/wp-content/uploads/2022/11/Screenshot-2022-11-15-122402.png 830w, https://blog.gitora.com/wp-content/uploads/2022/11/Screenshot-2022-11-15-122402-300x218.png 300w, https://blog.gitora.com/wp-content/uploads/2022/11/Screenshot-2022-11-15-122402-768x557.png 768w" sizes="auto, (max-width: 830px) 100vw, 830px" /&gt;&lt;/a&gt;&lt;/figure&gt;</description><pubDate>Tue, 15 Nov 2022 12:26:32 +0300</pubDate></item><item><title>Gitora API Documentation</title><link>https://blog.gitora.com/gitora-api-documentation/</link><guid>https://blog.gitora.com/gitora-api-documentation/</guid><description>&lt;p class="wp-block-paragraph"&gt;This is the Gitora API documentation for version 6.2 and above. For the API documentation of the older versions please &lt;a href="https://blog.gitora.com/gitora-apis/" data-type="URL" data-id="https://blog.gitora.com/gitora-apis/"&gt;go to this link&lt;/a&gt;.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Gitora Enterprise has a set of API&amp;#8217;s that enables developers to programatically execute tasks that users can perform via the Gitora Web App such as reset, create branch, commit etc&amp;#8230;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Below is the list of API&amp;#8217;s with their description, input parameters and outputs.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Gitora API&amp;#8217;s respect the authorization scheme defined in the Gitora Web App. In other words, if a user lacks the necessary privilege to perform an operation in the Gitora Web App, the corresponding API will also fail for the same user.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;After the default installation, Gitora API&amp;#8217;s can be accesses from the URL &lt;code&gt;http://[IP ADDRESS]:8080/gitora/api&lt;/code&gt;.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;The &lt;code&gt;method&lt;/code&gt; parameter specifies the name of the method you&amp;#8217;d like to execute like so:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;http://localhost:8080/gitora?method=login.....&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Output of API Calls&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Each API call returns a &lt;code&gt;JSON Object&lt;/code&gt;. This object has the following three properties:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;message:&lt;/code&gt; The message returned from the API, if any.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;result:&lt;/code&gt; returns the word &lt;code&gt;success&lt;/code&gt; if the API was executed successfully or the word &lt;code&gt;error&lt;/code&gt; if there was an error during the execution.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;If the result property returns the value &lt;code&gt;error&lt;/code&gt; then the &lt;code&gt;message&lt;/code&gt; property contains the error message.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;token:&lt;/code&gt; Returns the token value to be used to call other API&amp;#8217;s. This property is only populated after a successful call to the &lt;code&gt;login&lt;/code&gt; API.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Developers must receive a token from the &lt;code&gt;login&lt;/code&gt; API before executing any other API call. Therefore, it makes sense to describe the login method first.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Method&lt;/strong&gt;: &lt;code&gt;authenticate&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Use to sign in to Gitora. It returns a token that you can use to execute other API&amp;#8217;s.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Parameters:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;user&lt;/code&gt;: A valid Gitora username.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;password&lt;/code&gt;: Password of the Gitora user.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;database&lt;/code&gt;: The name of the database to log in to. This name is specified in the &lt;em&gt;Settings-&amp;gt;Database Connections&lt;/em&gt; screen in Gitora.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Example: &lt;code&gt;http://localhost:8080/gitora/api?method=authenticate&amp;amp;user=admin&amp;amp;password=admin&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Method&lt;/strong&gt;: &lt;code&gt;add&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Add a database object to a Gitora repo.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Parameters:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;name&lt;/code&gt;: Name of the database object&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;repo&lt;/code&gt;: Name of the repo to add the database object to.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;schema&lt;/code&gt;: Schema of the database object to be added.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;token&lt;/code&gt;: A valid token string received from a login API call.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;type&lt;/code&gt;: Type of the database object to be added. Valid values are TABLE, PACKAGE, VIEW, PROCEDURE, FUNCTION, TRIGGER, SYNONYM, TYPE, SEQUENCE, MATERIALIZED_VIEW&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Example: &lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;http://localhost:8080/gitora/api?method=add&amp;amp;name=EMP_PKG&amp;amp;repo=HR_REPO&amp;amp;schema=HR&amp;amp;token=YhfhseY45&amp;amp;type=PACKAGE&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Method&lt;/strong&gt;: &lt;code&gt;changebranch&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Changes the active branch of a Gitora repo.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Parameters:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;branch&lt;/code&gt;: Name of the branch to switch to.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;repo&lt;/code&gt;: Name of the repo this operation will be performed.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;token&lt;/code&gt;: A valid token string received from a &lt;code&gt;login&lt;/code&gt; API call.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Example:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;http://localhost:8080/gitora/api?changebranch&amp;amp;branch=dev&amp;amp;repo=HR_REPO&amp;amp;token=Hhjfir7hd87&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Method&lt;/strong&gt;: &lt;code&gt;checkout&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Checks out the database object for a specific user.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Parameters:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;schema&lt;/code&gt;: Schema of the object to check out.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;type&lt;/code&gt;: Type of the object to check out: Valid values are:  &lt;code&gt;TABLE, PACKAGE, VIEW, PROCEDURE, FUNCTION, TRIGGER, SYNONYM, TYPE, SEQUENCE, MATERIALIZED_VIEW.&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;name&lt;/code&gt;: Name of the object to check out. &lt;code&gt; &lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;token&lt;/code&gt;: A valid token string received from a &lt;code&gt;login&lt;/code&gt; API call.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Example:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;http://localhost:8080/gitora/api?checkout&amp;amp;object=1234&amp;amp;token=Hdyhed7645g&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Method&lt;/strong&gt;: &lt;code&gt;reset&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Performs the Git reset command on the active branch of the specified repo.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Parameters:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;repo&lt;/code&gt;: Name of the repo to perform the Git reset.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;commitid&lt;/code&gt;: Git commit ID or tag name to reset the active branch to.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;token&lt;/code&gt;: A valid token string received from a &lt;code&gt;login&lt;/code&gt; API call.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Output:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Returns the Git message received from Git.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Example:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;http://localhost:8080/gitora/api?method=reset&amp;amp;commitid=375hfhd&amp;amp;repo=HR_REPO&amp;amp;token=Hjfnh894jhhnfr&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Method&lt;/strong&gt;:&amp;nbsp;&lt;code&gt;commit&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Commits a list of objects to the specified repo.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Parameters:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;message&lt;/code&gt;: Commit message.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;ddls&lt;/code&gt;: A JSON array of DDL statement ID&amp;#8217;s captured by Gitora.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;objects= A JSON array of database objects. Example: [{&amp;#8220;schema&amp;#8221;:&amp;#8221;DEV&amp;#8221;, &amp;#8220;type&amp;#8221;:&amp;#8221;PACKAGE&amp;#8221;, &amp;#8220;name&amp;#8221;:&amp;#8221;HR_PKG&amp;#8221;},{&amp;#8220;schema&amp;#8221;:&amp;#8221;DEV&amp;#8221;, &amp;#8220;type&amp;#8221;:&amp;#8221;PROCEDURE&amp;#8221;, &amp;#8220;name&amp;#8221;:&amp;#8221;HIRE_EMP&amp;#8221;}] . Valid values for type are:  &lt;code&gt;TABLE, PACKAGE, VIEW, PROCEDURE, FUNCTION, TRIGGER, SYNONYM, TYPE, SEQUENCE, MATERIALIZED_VIEW.&lt;/code&gt; &lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;repo&lt;/code&gt;: Repo name.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;token&lt;/code&gt;: A valid token string received from a&amp;nbsp;&lt;code&gt;login&lt;/code&gt;&amp;nbsp;API call.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Output:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Returns the message received from Git.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Example:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;http://localhost:8080/gitora/api?commit&amp;amp;message=Fixed%20the%20employee%20queries&amp;amp;objects= [{"schema":"DEV", "type":"PACKAGE", "name":"HR_PKG"},{"schema":"DEV", "type":"PROCEDURE", "name":"HIRE_EMP"}]  &amp;amp;ddls=["3642","7854"&amp;amp;repo=HR_REPO&amp;amp;token=jirHJj8rfnJi&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Method&lt;/strong&gt;:&amp;nbsp;&lt;code&gt;createbranch&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Creates a new branch in the specified repo.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Parameters:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;branch&lt;/code&gt;: Name of the new branch.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;checkout&lt;/code&gt;: Indicates whether the new branch should be set as the active branch. Set to true to make the new branch the active branch, to false if you&amp;#8217;d like the keep the current active branch.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;commitid&lt;/code&gt;: Git commit ID, tag name or branch name to create the new branch from.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;repo&lt;/code&gt;: Name of the repo to create a branch in.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;token&lt;/code&gt;: A valid token string received from a&amp;nbsp;&lt;code&gt;login&lt;/code&gt;&amp;nbsp;API call.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Example:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;http://localhost:8080/gitora/api?createbranch&amp;amp;checkout=true&amp;amp;commitid=Hdjdjhuend8874h29jdij&amp;amp;repo=HR_REPO&amp;amp;token=Kjirjdnc767yHy3&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Method&lt;/strong&gt;:&amp;nbsp;&lt;code&gt;createrepo&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Creates a Gitora repo.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Parameters:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;repo&lt;/code&gt;: Name of the repo to be created.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;type&lt;/code&gt;: Type of the repo to be created. Valid values: &lt;code&gt;msr &lt;/code&gt;(Multi Schema Repo), &lt;code&gt;ssr &lt;/code&gt;(Single Schema Repo)&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;schema&lt;/code&gt;: This parameter is only valid for single schema repos. It indicated which schema the repo is for.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;track&lt;/code&gt;: Indicates whether this repo should track hard object changes in this repo. Valid values are: &lt;code&gt;Y&lt;/code&gt; (for the schema to track the hard object changes), &lt;code&gt;N&lt;/code&gt; (for the schema not to track hard object changes.)&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;token&lt;/code&gt;: A valid token string received from a&amp;nbsp;&lt;code&gt;login&lt;/code&gt;&amp;nbsp;API call.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Example:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;http://localhost:8080/gitora/api?createrepo&amp;amp;repo=HR_REPO&amp;amp;type=msr&amp;amp;token=HJndnr8783dj&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt; &lt;code&gt;http://localhost:8080/gitora/api?createrepo&amp;amp;repo=HR_REPO2&amp;amp;type=ssr&amp;amp;schema=HR&amp;amp;track=Y&amp;amp;token=HJndnr8783dj&lt;/code&gt; &lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Method&lt;/strong&gt;:&amp;nbsp;&lt;code&gt;deletebranch&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Deletes the specified branch.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Parameters:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;branch&lt;/code&gt;: Name of the branch to be deleted.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;repo&lt;/code&gt;: Name of the repo the branch is in.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;token&lt;/code&gt;: A valid token string received from a&amp;nbsp;&lt;code&gt;login&lt;/code&gt;&amp;nbsp;API call.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Example:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;http://localhost:8080/gitora/api?deletebranch&amp;amp;branch=dev&amp;amp;repo=HR_REPO&amp;amp;token=Hjfurns75bdy&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Method&lt;/strong&gt;:&amp;nbsp;&lt;code&gt;fetchfromdb&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Fetches a branch from a Gitora repo to another.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Parameters:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;fromdatabase&lt;/code&gt;: The name of the database to fetch from.  (Name of the database connection in Gitora.)     &lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;fromrepo&lt;/code&gt;: The name of the repo to fetch from. &lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;frombranch&lt;/code&gt;: The name of the branch to fetch.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;torepo&lt;/code&gt;: The name of the repo to fetch to. (The destination repo.)&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;tobranch&lt;/code&gt;: The name of the branch in the destination repo.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;token&lt;/code&gt;: A valid token string received from a&amp;nbsp;&lt;code&gt;login&lt;/code&gt;&amp;nbsp;API call.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Example:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;http://localhost:8080/gitora/api?fetchfromdb&amp;amp;frombranch=feature_1&amp;amp;fromrepo=HR_REPO&amp;amp;fromdatabase=DEV&amp;amp;torepo=HR_REPO&amp;amp;tobranch=feature_1&amp;amp;&amp;amp;token=Hjnf74hehd&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Method&lt;/strong&gt;:&amp;nbsp;&lt;code&gt;fetchfromremote&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Fetches a branch from a remote repo to a Gitora repo.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Parameters:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;torepo&lt;/code&gt;: The name of the Gitora repo. to fetch to.     &lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;tobranch&lt;/code&gt;: The name of the branch to fetch to. &lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;remote&lt;/code&gt;: The alias specified for the remote database in Gitora.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;remotebranch&lt;/code&gt;: The name of the remote branch to fetch from.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;user&lt;/code&gt;: user name to connect to the remote repo. For example your GitHub user name. This parameter is optional. Do not use it if the remote repo does not need a user name to access.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;password&lt;/code&gt;: The password or the personal access token to connect to the remote repo. For example your GitHub personal access token. This parameter is optional. Don’t use it if the remote repo does not need a password to access.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;token&lt;/code&gt;: A valid token string received from a&amp;nbsp;&lt;code&gt;login&lt;/code&gt;&amp;nbsp;API call.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Example:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;http://localhost:8080/gitora/api?fetchfromremote&lt;code&gt;&amp;amp;torepo=HR_REPO&amp;amp;tobranch=feature_1&lt;/code&gt; &amp;amp;remotebranch=feature_1&amp;amp;password=myPersonalAcessToken1&amp;amp;remote=myRemoteHRRepo&amp;amp;user=myGitHubUser&amp;amp;token=Hjnf74hehd&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Method&lt;/strong&gt;:&amp;nbsp;&lt;code&gt;getmanagedschemascript&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Returns the “managed schemas script” of the specified repo.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Parameters:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;repo&lt;/code&gt;: Name of the repo of which the developer is getting the managed schemas script.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;token&lt;/code&gt;: A valid token string received from a&amp;nbsp;&lt;code&gt;login&lt;/code&gt;&amp;nbsp;API call.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Example:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;http://localhost:8080/gitora/api?getmanagedschemascript&amp;amp;repo=HR_REPO&amp;amp;token=Kjfur03nd8&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Method&lt;/strong&gt;:&amp;nbsp;&lt;code&gt;getmyobjects&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Returns the list of checked out database objects by the signed in user.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Parameters:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;repo&lt;/code&gt;: The repo for which the API queries the objects the user has checked out.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;token&lt;/code&gt;: A valid token string received from a&amp;nbsp;&lt;code&gt;login&lt;/code&gt;&amp;nbsp;API call.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Output:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Returns a JSON array. Each object in the array represents a database object that is checked out by the user. Each JSON object in the array has the following attributes:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;id&lt;/code&gt;: ID of the database object in Gitora.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;name&lt;/code&gt;: Name of the object.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;schema&lt;/code&gt;: Schema of the object.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;type&lt;/code&gt;: Type of the object. (PACKAGE, PROCEDURE etc…)&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;token&lt;/code&gt;: A valid token string received from a&amp;nbsp;&lt;code&gt;login&lt;/code&gt;&amp;nbsp;API call.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Example:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;http://localhost:8080/gitora/api?method=getmyobjects&amp;amp;repo=HR_REPO&amp;amp;token=Jnjf744jn&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Method&lt;/strong&gt;:&amp;nbsp;&lt;code&gt;getrepoobjects&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Returns a JSON array of database objects in the repo.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Parameters:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;repo&lt;/code&gt;: Name of the repo to return the objects for.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;token&lt;/code&gt;: A valid token string received from a&amp;nbsp;&lt;code&gt;login&lt;/code&gt;&amp;nbsp;API call.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Output:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Returns a JSON array. Each object in the array represents a database object managed by the specified repo. Each JSON object in the array has the following attributes:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;id&lt;/code&gt;: ID of the database object in Gitora.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;name&lt;/code&gt;: Name of the object.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;schema&lt;/code&gt;: Schema of the object.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;token&lt;/code&gt;: A valid token string received from a&amp;nbsp;&lt;code&gt;login&lt;/code&gt;&amp;nbsp;API call.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;type&lt;/code&gt;: Type of the object. (PACKAGE, PROCEDURE etc…)&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;user&lt;/code&gt;: Name of the user who checked out the database object.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Example:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;http://localhost:8080/gitora/api?method=getrepoobjects&amp;amp;repo=HR_REPO&amp;amp;token=Nkjf8nf8&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Method&lt;/strong&gt;:&amp;nbsp;&lt;code&gt;merge&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Performs git merge.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Parameters:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;commitid&lt;/code&gt;: Git commit ID, branch or tag name to merge to the active branch.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;repo&lt;/code&gt;: Name of the repo to perform merge on.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;token&lt;/code&gt;: A valid token string received from a&amp;nbsp;&lt;code&gt;login&lt;/code&gt;&amp;nbsp;API call.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Example:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;http://localhost:8080/gitora/api?method=merge&amp;amp;repo=HR_REPO&amp;amp;commitid=Uhee8jGdy&amp;amp;token=Hjfur84bnfr&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Method&lt;/strong&gt;:&amp;nbsp;&lt;code&gt;pullfromdb&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Performs a Git pull from a Gitora repo for another database to the specified repo’s active branch. For example, you can pull the master branch of HR_REPO in DEV database to the master branch of HR_REPO in TEST database to move your latest code to the testing environment.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Parameters:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;fromdatabase&lt;/code&gt;:  Name of the database the pull from. (Name of the database connection in Gitora.)     &lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;fromrepo&lt;/code&gt;: Repo to pull from.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;frombranch&lt;/code&gt;: Branch name to pull. &lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;torepo&lt;/code&gt;: Repo to pull to. &lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;token&lt;/code&gt;: A valid token string received from a&amp;nbsp;&lt;code&gt;login&lt;/code&gt;&amp;nbsp;API call.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Example:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Assume thet the developer is connected to the TEST database. The example below pulls the master branch from the HR_REPO repo for DEV database to the master branch of HR_REPO repo for the TEST database.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;http://localhost:8080/gitora/api?method=pullfromdb&amp;amp;fromdatabase=DEV&amp;amp;fromrepo=HR_REPO&amp;amp;frombranch=master&amp;amp;torepo=HR_REPO&amp;amp;token=Hjgg6ghf&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Method&lt;/strong&gt;:&amp;nbsp;&lt;code&gt;push&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Pushes the specified repo’s branch to a remote Git repo (which commonly resides in GitHub, GitBlit, BitBucket or a similar cloud service).&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Parameters:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;branch&lt;/code&gt;: Name of the branch to push.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;password&lt;/code&gt;: Password or the personal access token to connect to the remote repo.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;remote&lt;/code&gt;: The alias specified for the remote repo in the Gitora Web App under Settings–&amp;gt;Manage Remote Connections.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;repo&lt;/code&gt;: Name of the repo to push.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;token&lt;/code&gt;: A valid token string received from a&amp;nbsp;&lt;code&gt;login&lt;/code&gt;&amp;nbsp;API call.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;user&lt;/code&gt;: User name to connect to the remote repo.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Output:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Returns the message received from Git.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Example:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;http://localhost:8080/gitora/api?method=push&amp;amp;branch=master&amp;amp;password=1234&amp;amp;remote=GitHubHRRepo&amp;amp;repo=HR_REPO&amp;amp;user=myGitHubUser1&amp;amp;token=Hjf85jf&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Method&lt;/strong&gt;: &lt;code&gt;setmanagedschemascript&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Updates the &amp;#8220;Managed Schema Script&amp;#8221; content and commits it.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Paramaters:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;message&lt;/code&gt;: Commit message to be used when the new script is committed to Git.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;repo&lt;/code&gt;: Name of the repo to set the script for.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;script&lt;/code&gt;: The new text of the script.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;token&lt;/code&gt;: A valid token string received from a &lt;code&gt;login&lt;/code&gt; API call.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Example:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;http://localhost:8080/gitora/api?method=setmanagedschemascript&amp;amp;messageScript%23updated.&amp;amp;repo=HR_REPO&amp;amp;script=ALTER%23EMPLOYEES%23ADD%23COLUMN%23(MIDDLE_NAME%23VARCHAR2(200);&amp;amp;token=Hjhu837h&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Method&lt;/strong&gt;:&amp;nbsp;&lt;code&gt;release&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Releases the lock placed by a user on a database object. Overwrites the content of the object with the latest version available in the active branch.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Parameters:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;object&lt;/code&gt;=JSON Object specifying the database object to be released. Example: {&amp;#8220;schema&amp;#8221;:&amp;#8221;HR&amp;#8221;, &amp;#8220;type&amp;#8221;:&amp;#8221;PACKAGE&amp;#8221;, &amp;#8220;name&amp;#8221;:&amp;#8221;HR_PKG&amp;#8221;}. Valid values for type are:  &lt;code&gt;TABLE, PACKAGE, VIEW, PROCEDURE, FUNCTION, TRIGGER, SYNONYM, TYPE, SEQUENCE, MATERIALIZED_VIEW.&lt;/code&gt;  &lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;token&lt;/code&gt;: A valid token string received from a&amp;nbsp;&lt;code&gt;login&lt;/code&gt;&amp;nbsp;API call.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Example:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;http://localhost:8080/gitora/api?method=release&amp;amp;object= {"schema":"HR", "type":"PACKAGE", "name":"HR_PKG"} &amp;amp;token=Hjfu57hf&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Method&lt;/strong&gt;:&amp;nbsp;&lt;code&gt;remove&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Removes the specified database object from Gitora.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Parameters:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;name&lt;/code&gt;: Name of the database object.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;repo&lt;/code&gt;: Name of the repo the database object will be removed from.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;schema&lt;/code&gt;: The schema of the object&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;type&lt;/code&gt;: The type of the object.  Valid values for type are:  &lt;code&gt;TABLE, PACKAGE, VIEW, PROCEDURE, FUNCTION, TRIGGER, SYNONYM, TYPE, SEQUENCE, MATERIALIZED_VIEW.&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;token&lt;/code&gt;: A valid token string received from a&amp;nbsp;&lt;code&gt;login&lt;/code&gt;&amp;nbsp;API call.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Example:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;http://localhost:8080/gitora/api?method=remove&amp;amp;name=EMP_PKG&amp;amp;repo=HR_REPO&amp;amp;schema=HR&amp;amp;type=PACKAGE&amp;amp;token=Hfjuh784hnd&lt;/code&gt;&lt;/p&gt;</description><pubDate>Mon, 14 Nov 2022 18:40:19 +0300</pubDate></item><item><title>Are You Really Using a Version Control System for Your Database or Are You Ticking a Box?</title><link>https://blog.gitora.com/gitora-is-useful/</link><guid>https://blog.gitora.com/gitora-is-useful/</guid><description>&lt;p class="wp-block-paragraph"&gt;You use a version control system to solve certain problems, to accomplish certain tasks. These are:&lt;/p&gt;

&lt;ul class="wp-block-list"&gt;&lt;li&gt;Keep track of who changes what, when and why.&lt;br&gt;&lt;/li&gt;&lt;li&gt;If necessary, use previous versions of the code base for testing, development etc&amp;#8230;&lt;br&gt;&lt;/li&gt;&lt;li&gt;Move changes between environments faster, with fewer errors during deployment.&lt;br&gt;&lt;/li&gt;&lt;li&gt;Improve productivity of the team (i.e. less time coordinating manually and more time developing. For example different developers working on the same parts of the code base simultaneously and merging their changes at a later time, hopefully mostly automatically.).&lt;/li&gt;&lt;/ul&gt;

&lt;p class="wp-block-paragraph"&gt;If you are using a version control system but not accomplishing any of the things above, are you really using a version control system?&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Here is a perfectly reasonable scenario that I&amp;#8217;ve seen in the real world. I&amp;#8217;ve seen this scenario with teams using Git with SQL Developer, SVN/Git with another Oracle PL/SQL IDE. Invariably, they all end up here:&lt;/p&gt;

&lt;ol class="wp-block-list"&gt;&lt;li&gt;In the DEV database, you make changes to the package PKG_HIRING in the HR schema and then commit the package under /HR/PKG_HIRING.sql file in Git.&lt;br&gt;&lt;/li&gt;&lt;li&gt;Next, another developer makes changes to the same package. He commits his changes under /HR/next_version/PKG_HIRING.sql, because&amp;#8230; why not? It&amp;#8217;s not like there is any enforcement.&lt;br&gt;&lt;/li&gt;&lt;li&gt;A third developer commits his changes to /HR/PKG_HIRING.pkb because for some reason, the tool he uses for editing uses the .pkb suffix for packages.&lt;br&gt;&lt;/li&gt;&lt;li&gt;The fourth developer named John, decides to copy PKG_HIRING to a file and work on it. He thinks he can move his changes to the database later. So he creates /HR/JOHN_DO_NOT_TOUCH/PKG_HIRING.sql&lt;br&gt;&lt;/li&gt;&lt;li&gt;A fifth developer, makes changes to the HR.PKG_HIRING package but forgets to commit the package to Git. Hey it happens&amp;#8230;&lt;br&gt;&lt;/li&gt;&lt;li&gt;A sixth developer makes even more changes. He commits the package to Git under HR/PKG_HIRING.sql thereby committing not only his changes but also the fifth developers changes.&lt;/li&gt;&lt;/ol&gt;

&lt;p class="wp-block-paragraph"&gt;Three months later, you are tasked with deploying the latest version of the HR application to the TEST database. Which PKG_HIRING package are you going to deploy to TEST?&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;I actually know the answer to this question. You will deploy the one in the HR schema. It&amp;#8217;s the safest option. I cannot help but wonder tough.. in these past three months, did John save his changes to the database? If so, how did he do it? Did he simply overwrite the package? What if some changes were lost?&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;At this point, I have to ask&amp;#8230; Why do you even have a version control system? Why does that Git/SVN repo even exist? Is it useful at all or are you just doing all this just to tick a box and to be able to say that you are using a version control system?&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Gitora solves all these problems above. It creates a version control system around Git and enforces it at the database level.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Let&amp;#8217;s repeat the same steps for the six developers but this time let them use Gitora:&lt;/p&gt;

&lt;ol class="wp-block-list"&gt;&lt;li&gt;In DEV, you make changes to the PKG_HIRING package in the HR schema. When you are done, you open the Gitora web app, you see the list of database objects you changed, you select the ones you want to commit (in this case PKG_HIRING) you add a comment to the commit (such as the ticket number) and click the commit button.&lt;br&gt;&lt;/li&gt;&lt;li&gt;The second developer follows the same process as you. He cannot make any changes to the package until you are done with it. Once you are done, he can make his changes. He opens the Gitora App, commit his changes to Git and is done. Note that, he doesn&amp;#8217;t get to choose which folder he saves the PKG_HIRING.sql file to. Gitora creates a well structured working directory with reasonable folder and file names for database objects. The locations of these files are also standard. When there is human decision involved with naming and putting files in the file system, a lot of errors can occur. Gitora prevents these errors.&lt;br&gt;&lt;/li&gt;&lt;li&gt;The third developer&amp;#8217;s IDE used the .pkb extension for his file. Since developers don&amp;#8217;t get to name the files or choose the folders they save database object scripts to, the third developer also has no choice but to follow the same process as the first two developers. By the way, Gitora works with any IDE. You can use SQL Developer, SQL Navigaor, TOAD or PL/SQL Developer. It doesn&amp;#8217;t matter. Everyone in your team can use a different editor if they choose to do so. Gitora still works.&lt;br&gt;&lt;/li&gt;&lt;li&gt;The fourth developer was impatient. He created a new file under JOHN_DO_NOT_TOUCH and saved his changes to that file. With Gitora, he has no direct access to Git and the Git working folder. (Gitora is a server side solution. You don&amp;#8217;t install Git to developer&amp;#8217;s computers.) So he cannot do that. However, if he wants to do mischief, he still can copy the PKG_HIRING package to a new file in his computer and make changes there. Then, he can simply overwrite everything in the PKG_HIRING package with his version at a later time. This will cause some changes to be lost in the package depending on when he does it. He can even go ahead and commit his changes to Gitora. But hold on a second. At some point, either during development or testing, the mistake he made will be detected. In the first scenario, there is no way to know for certain who erased all the functioning code and exactly what code should be put back to the package. It will be trivial to use Git to figure out who deleted the perfectly functioning code from PKG_HIRING because Gitora always keeps track of who changed what, when and why. Since we can know when the mistake happened, we will know the correct version of the package to put back to. John will take the heat for his egregious mistake and merge his changes to the correct version of the package. No one wants that kind of heat. It is easy to see that Gitora incentivizes the right kind of behavior among teammates by keeping everyone accountable for their actions as well as making it possible to recover from critical mistakes.&lt;br&gt;&lt;/li&gt;&lt;li&gt;The fifth developer simply forgot to commit his changes to Git. With Gitora there are two ways this can be caught. First, the sixth developer who wants to edit the package will contact the fifth developer to ask when the package will be available. Second, Gitora web app always shows which objects are locked by whom. So before preparing a deployment, you can always check if there are any database objects that are locked.&lt;br&gt;&lt;/li&gt;&lt;li&gt;In the first scenario, the sixth developer committed fifth developers changes along with his. With Gitora, the sixth developer will always commit only his changes because there is no way he can gain access to the PKG_HIRING without the fifth developer releasing the package first. Gitora enforces that if an object is being edited by someone, no one else can edit it. With Gitora, version control is not something you do on the side but it is tightly integrated into your workflow and enforced.&lt;/li&gt;&lt;/ol&gt;

&lt;p class="wp-block-paragraph"&gt;And finally, three months later, you are tasked with preparing the deployment to TEST. How are you going to move the changes to the TEST database? With Gitora, all you need to do is to open the Gitora app, connect to the TEST database and pull the HR repo from DEV to TEST and you are done.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Going back to the begining of the article; Gitora makes Git a useful version control system for the Oracle Database.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;As shown in the second scenario with Gitora you can: &lt;/p&gt;

&lt;ul class="wp-block-list"&gt;&lt;li&gt;&lt;span style="font-size: revert; color: initial;"&gt;Keep track of who changes what, when and why.&lt;/span&gt; &lt;br&gt;&lt;em&gt;We caught John misbehaving.&lt;/em&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;If necessary, use previous versions of the code base for testing, development etc… &lt;br&gt;&lt;em&gt;We recovered an old version of PKG_HIRING and have John merge his changes to it.&lt;/em&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;Move changes between environments faster, with fewer errors during deployment. &lt;br&gt;&lt;em&gt;Done via point and click Gitora Web Application.&lt;/em&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;Improve productivity of the team (i.e. less time coordinating manually and more time developing. For example different developers working on the same parts of the code base simultaneously and merging their changes at a later time, hopefully mostly automatically.). &lt;br&gt;&lt;em&gt;The second scenario reduced manual coordination significantly. Gitora can do a lot more. You can have different teams work on the same code base at the same time and merge their changes just like Java, JavaScript developers. However that&amp;#8217;s beyond the scope of this article. Please read &lt;a rel="noreferrer noopener" href="https://blog.gitora.com/agile-development-with-a-single-database/" target="_blank"&gt;this article&lt;/a&gt; and &lt;a rel="noreferrer noopener" href="https://blog.gitora.com/plsql-how-to-develop-two-features-simultaneously-but-deploy-only-one/" target="_blank"&gt;this article&lt;/a&gt; to learn more about how you can implement parallel development with Gitora.&lt;/em&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;p class="wp-block-paragraph"&gt; &lt;/p&gt;</description><pubDate>Thu, 13 Oct 2022 12:32:42 +0300</pubDate></item><item><title>Automatically log in to Gitora when connecting to Oracle</title><link>https://blog.gitora.com/automatically-log-in-to-gitora-when-connecting-to-oracle/</link><guid>https://blog.gitora.com/automatically-log-in-to-gitora-when-connecting-to-oracle/</guid><description>&lt;p class="wp-block-paragraph"&gt;In order to modify database objects that are managed by Gitora source control, the user first needs to log in to Gitora with a user name and password.&lt;br&gt;&lt;br&gt;Usually this is no problem, but we lately encountered a case where this was a problem.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;To be more specific, we still use Oracle Designer (yes, i know..) to maintain our Database Models. From Designer we generate database changes to our development database that is managed by Gitora.&lt;br&gt;Almost all changes from Designer can be generated as scripts and you can add the Gitora login there,&lt;br&gt;but we also generate TAPI packages from Designer and these are generated directly to the database without the option of generating scripts. So that was a problem. Also having to manually add the Gitora login&amp;nbsp;to all scripts is quite tedious.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;The solution is to use a database after logon trigger.&lt;br&gt;But we had more requirements:&lt;/p&gt;

&lt;ul class="wp-block-list"&gt;&lt;li&gt;Log in to Gitora as an actual user, not a database user&lt;/li&gt;&lt;li&gt;Track what applications are used to log on&lt;/li&gt;&lt;li&gt;Log succesfull and failed login attemps&lt;/li&gt;&lt;/ul&gt;

&lt;p class="wp-block-paragraph"&gt;Here is how we solved it:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;First we need a table to match the Gitora username and passwords with the possible Operating System user names.&lt;br&gt;(I will not secure the passwords in this example, i leave that up to you if you need it)&lt;/p&gt;

&lt;pre class="wp-block-preformatted"&gt;create table GITORA_USERS_MATCH
(
  os_user     VARCHAR2(64) not null,
  gitora_user VARCHAR2(64) not null,
  gitora_pw   VARCHAR2(64) not null
);

alter table GITORA_USERS_MATCH
  add constraint GUH_PK primary key (OS_USER);
&lt;/pre&gt;

&lt;p class="wp-block-paragraph"&gt;Then a second table to log successfull and failed login attempts.&lt;/p&gt;

&lt;pre class="wp-block-preformatted"&gt;create table GITORA_LOGON_TRG_LOG
(
  logon_message VARCHAR2(512) not null,
  logon_date    DATE not null
);
&lt;/pre&gt;

&lt;p class="wp-block-paragraph"&gt;Now we can create a trigger:&lt;/p&gt;

&lt;pre class="wp-block-preformatted"&gt;create or replace trigger gitora_auto_logon_trg
   after logon on database
declare
   l_program     varchar2(100);
   l_gitora_user gitora_users_match.gitora_user%type;
   l_gitora_pw   gitora_users_match.gitora_pw%type;

   cursor c_gitora_user
   is
      select guh.gitora_user
      ,      guh.gitora_pw
      from tmi_sys.gitora_users_match guh
      where upper(guh.os_user) = upper(sys_context('userenv','OS_USER'))
      ;

begin
   /* Get the program that is connecting.
      For example:
     'dwfde61.exe'      -- Oracle Designer Generator
     'sqlplusw.exe'     -- Oracle sqlplus
     'sqlplus.exe'      -- Oracle sqlplus
     'SQL Developer'    -- Oracle SQL developer
     'Toad.exe'         -- Toad
     'plsqldev.exe'     -- PL/SQL Developer
     'JDBC Thin Client' 
   */
   select program
   into   l_program
   from   v$session
   where  audsid=sys_context('USERENV','SESSIONID');

   insert into tmi_sys.gitora_logon_trg_log 
      (logon_date
      ,logon_message
      ) 
   values 
      (sysdate
      ,'logon: os_user: '''||sys_context('userenv','OS_USER')||''' program: '||l_program
      );

   open  c_gitora_user;
   fetch c_gitora_user
   into  l_gitora_user
   ,     l_gitora_pw;
   close c_gitora_user;

   if l_gitora_user is null
   then
      -- log failure to match os_usr to Gitora user
      insert into tmi_sys.gitora_logon_trg_log 
         (logon_date
         ,logon_message
         )
      values 
         (sysdate
         ,'os_user name '''||sys_context('userenv','OS_USER')||''' cannot be matched to a Gitora user)'
         );
   else
      -- try to log on to Gitora. 
      begin
         gitora.api_gitora.login(l_gitora_user,l_gitora_pw);
      exception
         when others
         then
            -- just log, no need to raise
            insert into tmi_sys.gitora_logon_trg_log 
               (logon_date
               ,logon_message
               ) 
            values 
               (sysdate
               ,'Login to Gitora failed for username '||l_gitora_user
               );
         end;
   end if;
exception
  when others
  then
     -- this trigger should never cause a user to not be able to log in to the database.
     -- It only needs to check if an os_name can be linked to a Gitora user.
     null; 
end; 
&lt;/pre&gt;

&lt;p class="wp-block-paragraph"&gt;With this in place, you can connect to the database with any tool you want and log in to Gitora automatically. &lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Michiel Arentsen, Rhenus&lt;/p&gt;</description><pubDate>Wed, 07 Sep 2022 17:22:59 +0300</pubDate></item><item><title>Managing Tables with Single Schema Repos</title><link>https://blog.gitora.com/managing-tables-with-single-schema-repos/</link><guid>https://blog.gitora.com/managing-tables-with-single-schema-repos/</guid><description>&lt;p class="wp-block-paragraph"&gt;This article describes how you can track schema changes with a &lt;strong&gt;Single Schema Repo (SSR)&lt;/strong&gt;. If you haven&amp;#8217;t done so already, we recommend you to read &lt;a href="https://blog.gitora.com/managing-tables/" data-type="URL" data-id="https://blog.gitora.com/managing-tables/"&gt;this article&lt;/a&gt; first, which explains how Gitora manages tables.&lt;/p&gt;

&lt;h2 class="wp-block-heading"&gt;Terminology&lt;/h2&gt;

&lt;p class="wp-block-paragraph"&gt;In Gitora parlance, any object that can be created with the CREATE OR REPLACE syntax is called a &lt;strong&gt;soft object&lt;/strong&gt;. Objects such as tables, sequences and materialized views which cannot be created with the CREATE OR REPLACE syntax are called &lt;strong&gt;hard objects&lt;/strong&gt;.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Altough one repo can store both hard and soft objects without any issues, we recommend users to store hard and soft objects of a project in separate repos.&lt;/strong&gt;&lt;/p&gt;

&lt;h2 class="wp-block-heading"&gt;Managing Schema Changes with Gitora&lt;/h2&gt;

&lt;p class="wp-block-paragraph"&gt;Gitora repos can track all changes to hard objects and SSR&amp;#8217;s are no different. However, an SSR can only track the hard objects changes in the schema it is associated to.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;You can enable this feature by checking the Manage Schema Changes checkbox while creating or editing the SRR.&lt;/p&gt;

&lt;div class="wp-block-image"&gt;&lt;figure class="aligncenter size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2022/05/ssr_manage_schema-1.png"&gt;&lt;img decoding="async" width="808" height="377" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2022/05/ssr_manage_schema-1.png" alt="" class="wp-image-623" srcset="https://blog.gitora.com/wp-content/uploads/2022/05/ssr_manage_schema-1.png 808w, https://blog.gitora.com/wp-content/uploads/2022/05/ssr_manage_schema-1-300x140.png 300w, https://blog.gitora.com/wp-content/uploads/2022/05/ssr_manage_schema-1-768x358.png 768w" sizes="auto, (max-width: 808px) 100vw, 808px" /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/div&gt;

&lt;p class="wp-block-paragraph"&gt;If a schema is managed by a Gitora repo, Gitora will not allow any user to create or edit any hard object in the schema without connecting to Gitora first.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;An SSR can only manage the changes in the schema it is associated to. &lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;A schema can only be managed by one repo.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;The DDL statements captured by an SSR will be committed to Git without the schema prefixes.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;In the example below, we add a column named DEPARTMENT_CD to the HR.DEPARTMENTS table. The DDL statement in Gitora does not have the schema prefix HR.&lt;/p&gt;

&lt;div class="wp-block-image"&gt;&lt;figure class="aligncenter size-large"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2022/05/ssr_schema_commit.png"&gt;&lt;img decoding="async" width="1024" height="574" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2022/05/ssr_schema_commit-1024x574.png" alt="" class="wp-image-625" srcset="https://blog.gitora.com/wp-content/uploads/2022/05/ssr_schema_commit-1024x574.png 1024w, https://blog.gitora.com/wp-content/uploads/2022/05/ssr_schema_commit-300x168.png 300w, https://blog.gitora.com/wp-content/uploads/2022/05/ssr_schema_commit-768x430.png 768w, https://blog.gitora.com/wp-content/uploads/2022/05/ssr_schema_commit.png 1144w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/div&gt;

&lt;p class="wp-block-paragraph"&gt;After the commit, the DDL statement shows up in the Git repo. It is appended to the previous list of committed DDL statements. You can access committed DDL statements to Gitora by clicking the Schema Changes tree node:&lt;/p&gt;

&lt;div class="wp-block-image"&gt;&lt;figure class="aligncenter size-large"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2022/05/ssr_schema_changeslist.png"&gt;&lt;img decoding="async" width="1024" height="369" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2022/05/ssr_schema_changeslist-1024x369.png" alt="" class="wp-image-626" srcset="https://blog.gitora.com/wp-content/uploads/2022/05/ssr_schema_changeslist-1024x369.png 1024w, https://blog.gitora.com/wp-content/uploads/2022/05/ssr_schema_changeslist-300x108.png 300w, https://blog.gitora.com/wp-content/uploads/2022/05/ssr_schema_changeslist-768x277.png 768w, https://blog.gitora.com/wp-content/uploads/2022/05/ssr_schema_changeslist.png 1388w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/div&gt;

&lt;h2 class="wp-block-heading"&gt;Moving Hard Object Changes Between Schemas&lt;/h2&gt;

&lt;p class="wp-block-paragraph"&gt;Single Schema Repos enable developers to move hard object changes among schemas easily. This is best explained with a simplified example. A real world situation will probably be more complex but the principles will remain the same.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Assume that HR is our master schema and HR_HARD_OBJECTS_REPO is the single schema repo where we manage the hard object changes in the HR schema. Further, assume that two developers Joe and Jane are working in the same database but in their own schemas named HR_JOE and HR_JANE respectively. They can manage hard object changes with the following setup:&lt;/p&gt;

&lt;ol class="wp-block-list"&gt;&lt;li&gt;Create two single schema repos, one for Joe and one for Jane, named HR_JOE_HARD_OBJECTS_REPO and HR_JANE_HARD_OBJECTS_REPO respectively. Associate the HR_JOE_HARD_OBJECTS_REPO with HR_JOE and HR_JANE_HARD_OBJECTS_REPO with HR_JANE. Do &lt;strong&gt;NOT&lt;/strong&gt; check the Manage Schema Changes checkbox for each repo during creation.&lt;br&gt;&lt;/li&gt;&lt;li&gt;Pull from HR_HARD_OBJECTS_REPO to HR_JOE_HARD_OBJECTS_REPO and to HR_JANE_HARD_OBJECTS_REPO.&lt;br&gt;&lt;/li&gt;&lt;li&gt;Open HR_JOE_HARDOBJECTS_REPO in Gitora. From the menu bar, select to Git&amp;#8211;&amp;gt;Repo&amp;#8211;&amp;gt;Edit Repo menu item and check the Manage Schema Changes checkbox. Repeat this step for HR_JANE_HARDOBJECTS_REPO as well.&lt;/li&gt;&lt;/ol&gt;

&lt;p class="wp-block-paragraph"&gt;Now that our developers&amp;#8217; repos are initialized, they can pull hard object changes from each other&amp;#8217;s repos. Not having the schema prefixes in the DDL statements makes executing these DDL statements in their own schema easier.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Obviously, in a real world scenario this flow will be more complex. It will most likely involve pushing to and pulling from repos in GitHub, GitBlit or similar services. Developers may also need to manually edit the document that contains the schema changes.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Fortunately, Gitora works seamlessly with GitHub GitLab and similar services. It also allows developers to edit the schema changes document and commit their changes right within the Gitora app. Finally, after a pull, developers can compare old and new versions of the schema changes document to determine which DDL statements they need to execute in their own schema. This comparison can be done in the Gitora application, as well.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;For development teams, Gitora makes managing schema changes much easier. It helps the teams use Git with their code base and implement modern development workflows to increase productivity and stay compliant.&lt;/p&gt;</description><pubDate>Thu, 05 May 2022 16:56:42 +0300</pubDate></item><item><title>Introducing Gitora 6</title><link>https://blog.gitora.com/introducing-gitora-6/</link><guid>https://blog.gitora.com/introducing-gitora-6/</guid><description>&lt;p class="wp-block-paragraph"&gt;&lt;a href="https://www.gitora.com/download.html" data-type="URL" data-id="https://www.gitora.com/download.html"&gt;We are happy to annouce that Gitora 6 is available for download.&lt;/a&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;With Gitora 6, developers can work on the same code base (i.e. a package, procedure etc&amp;#8230;) in the same database without blocking each other.&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Many development teams use a single database for development. Many of them use the same database for testing, as well. They achieve this by using different schemas for different purposes. Gitora 6 enables these teams to create Git repos for these schemas and pull updates between them.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;With Gitora 6, you can even create a different schema for every developer and have them merge their code using Git.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Gitora 6 enables you to implement any modern development workflow in a single database.&lt;/strong&gt;&lt;/p&gt;

&lt;h2 class="wp-block-heading"&gt;How does Gitora 6 work?&lt;/h2&gt;

&lt;p class="wp-block-paragraph"&gt;Gitora 6 introduces a new repo type called &lt;strong&gt;Single Schema Repo (SSR)&lt;/strong&gt;. As its name suggests an SSR manages database objects from a single schema. The DDL scripts in SSR&amp;#8217;s don&amp;#8217;t contain the schema prefixes so that Gitora can execute them in other schemas in the same database.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;This enables developers to work on the same package, procedure, function, view etc&amp;#8230; (i.e. anything that can be created with the CREATE OR REPLACE command) at the same time, in the same database in different schemas.&lt;/p&gt;

&lt;h2 class="wp-block-heading"&gt;An Example&lt;/h2&gt;

&lt;p class="wp-block-paragraph"&gt;Let&amp;#8217;s go through an example: Let&amp;#8217;s assume that the team is working on a logistics software and have a schema named LOGISTICS that stores all their database objects. The team can create a schema (or already have one) called LOGISTICS_TEST in the same database. Here are the steps the team needs to follow so that they can pull their changes to LOGISTICS_TEST.&lt;/p&gt;

&lt;ol class="wp-block-list"&gt;&lt;li&gt;Create a single schema Gitora repo that manages the LOGISTICS schema. Let&amp;#8217;s call it the REPO_LOGISTICS.&lt;br&gt;&lt;/li&gt;&lt;li&gt;Add all relevant database objects in the LOGISTICS schema to the LOGISTICS_REPO.&lt;br&gt;&lt;/li&gt;&lt;li&gt;Create another single schema Gitora repo that manages the LOGISTICS_TEST schema. Let&amp;#8217;s call it the REPO_LOGISTICS_TEST&lt;br&gt;&lt;/li&gt;&lt;li&gt;Pull from the REPO_LOGISTICS to REPO_LOGISTICS_TEST&lt;/li&gt;&lt;/ol&gt;

&lt;p class="wp-block-paragraph"&gt;That&amp;#8217;s it. That&amp;#8217;s all there is to it. From this point on, any change you make to the code in the LOGISTICS schema can be pulled to the LOGISTICS_TEST schema using Gitora (and vice versa).&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Single Schema Repos can also be used to create separate development environments in the same database for every developer in the team.&lt;/strong&gt;&lt;/p&gt;

&lt;h2 class="wp-block-heading"&gt;Multiple Developers, Same Database&lt;/h2&gt;

&lt;p class="wp-block-paragraph"&gt;Assuming we already have the LOGISTICS schema and the REPO_LOGISTICS repo from the previous example, here is how that would work:&lt;/p&gt;

&lt;ol class="wp-block-list"&gt;&lt;li&gt;Create a schema for each developer: LOGISTICS_JOE, LOGISTICS_MARY, LOGISTICS_PAUL.&lt;br&gt;&lt;/li&gt;&lt;li&gt;Create a single schema Gitora repo for each schema. Let&amp;#8217;s call them REPO_LOGISTICS_JOE, REPO_LOGISTICS_MARY, REPO_LOGISTICS_PAUL respectively.&lt;br&gt;&lt;/li&gt;&lt;li&gt;Pull from the REPO_LOGISTICS to REPO_LOGISTICS_JOE, REPO_LOGISTICS_MARY and REPO_LOGISTICS_PAUL.&lt;/li&gt;&lt;/ol&gt;

&lt;p class="wp-block-paragraph"&gt;From this point on, all three developers can work in their own schema and edit any package, procedure, view etc&amp;#8230; freely, without overwriting each other&amp;#8217;s changes or being affected by them. Using Gitora, they can create new branches in their own repo, for features or bugs they work on without affecting anyone else.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;When the time comes to put it all together, they can use Gitora to merge their changes. &lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;We wrote a few articles to get you started:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;a rel="noreferrer noopener" href="https://blog.gitora.com/how-to-create-a-single-schema-repo/" data-type="URL" data-id="https://blog.gitora.com/how-to-create-a-single-schema-repo/" target="_blank"&gt;Creating Single Schema Repos.&lt;/a&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;a rel="noreferrer noopener" href="https://blog.gitora.com/plsql-how-to-develop-two-features-simultaneously-but-deploy-only-one/" data-type="URL" data-id="https://blog.gitora.com/plsql-how-to-develop-two-features-simultaneously-but-deploy-only-one/" target="_blank"&gt;How to implement agile development in a single database&lt;/a&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;a href="https://blog.gitora.com/managing-tables-with-single-schema-repos/" data-type="URL" data-id="https://blog.gitora.com/managing-tables-with-single-schema-repos/" target="_blank" rel="noreferrer noopener"&gt;How to manage changes to tables with Single Schema Repos&lt;/a&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Before Gitora 6, agile database development with Gitora required multiple databases to implement. With Gitora 6 you can achieve it in a single database.&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;We are incredibly excited to release Gitora 6. We believe it will bring a massive productivity boost to Oracle database development teams worldwide. We can&amp;#8217;t wait for you to try it. &lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;a href="https://www.gitora.com/download.html" data-type="URL" data-id="https://www.gitora.com/download.html"&gt;Gitora 6 is available now. You can download it from this link.&lt;/a&gt;&lt;/p&gt;</description><pubDate>Thu, 05 May 2022 16:54:31 +0300</pubDate></item><item><title>Agile Development with a Single Database</title><link>https://blog.gitora.com/agile-development-with-a-single-database/</link><guid>https://blog.gitora.com/agile-development-with-a-single-database/</guid><description>&lt;p class="wp-block-paragraph"&gt;Here&amp;nbsp;is the number one question I receive from PL/SQL developers, DBA&amp;#8217;s and IT managers who are implementing a version control solution for their Oracle Database:&lt;/p&gt;

&lt;figure class="wp-block-pullquote"&gt;&lt;blockquote&gt;&lt;p&gt;Developer 1 (or Team 1) works on Feature A (or issue A, bug A, project A). Developer 2 works on Feature B. Both developers make many changes to the PL/SQL code and many commits to the version control repository. We move to testing. Based on the test results, even more commits are made by both developers. Now at the last minute, due to some reason we&amp;nbsp;decide to ship Feature B only. How can we remove Feature A from the source code easily?&amp;nbsp;How does version control help in such a situation?&lt;/p&gt;&lt;/blockquote&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;There are multiple answers to this question. Below, I&amp;#8217;ll go over two possible solutions for two potential setups:&lt;/p&gt;

&lt;ol class="wp-block-list"&gt;&lt;li&gt;&lt;a href="#shared"&gt;If you are using one shared development schema in a single database&lt;/a&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="#multiple"&gt;If you are using multiple development schemas in a single database&lt;/a&gt; (or at least if you are open to the idea.)&lt;/li&gt;&lt;/ol&gt;

&lt;h2 class="wp-block-heading" id="shared"&gt;If You Are Using One Shared Development Schema&lt;/h2&gt;

&lt;p class="wp-block-paragraph"&gt;Let&amp;#8217;s assume that our development database is called DEV and the shared development schema in DEV is called HR. In other words, both Feature A and Feature B are being developed in the same code base. Let&amp;#8217;s also assume&amp;nbsp;that there is no other database for testing. We test in DEV in the schema called HR_TEST.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Assume that HR and HR_TEST schemas are managed by two Gitora single schema repos (SSR) repos named HR_REPO and HR_TEST_REPO, respectively.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;In this case, the commit history in HR_REPO has changes both for Feature A and B in a random order and looks something like this:&lt;/p&gt;

&lt;div class="wp-block-image"&gt;&lt;figure class="aligncenter"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2017/05/shareddb-commit-history.jpg"&gt;&lt;img decoding="async" width="213" height="291" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2017/05/shareddb-commit-history.jpg" alt="" class="wp-image-227"/&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/div&gt;

&lt;p class="wp-block-paragraph"&gt;There is no easy&amp;nbsp;way to remove the commits for Feature B in this setup. If the team decides to deliver Feature A to production but postpone the delivery of Feature B here are the steps they should follow:&lt;/p&gt;

&lt;ul class="wp-block-list"&gt;&lt;li&gt;Go over the commit history in HR_REPO and find the commits that are related to Feature A.&lt;br&gt;&lt;/li&gt;&lt;li&gt;Comment out/revert back/change the edits made for Feature A. Git will help the developers to see what&amp;#8217;s changed, added, deleted and what the previous versions of code objects looked like.&lt;br&gt;&lt;/li&gt;&lt;li&gt;Commit these new changes to HR_REPO.&lt;/li&gt;&lt;/ul&gt;

&lt;p class="wp-block-paragraph"&gt;At this point the commit history in HR_REPO looks something like this:&lt;/p&gt;

&lt;div class="wp-block-image"&gt;&lt;figure class="aligncenter"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2017/05/shareddb-commit-history-4.jpg"&gt;&lt;img decoding="async" width="237" height="348" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2017/05/shareddb-commit-history-4.jpg" alt="" class="wp-image-287" srcset="https://blog.gitora.com/wp-content/uploads/2017/05/shareddb-commit-history-4.jpg 237w, https://blog.gitora.com/wp-content/uploads/2017/05/shareddb-commit-history-4-204x300.jpg 204w" sizes="auto, (max-width: 237px) 100vw, 237px" /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/div&gt;

&lt;p class="wp-block-paragraph"&gt;And finally, the next steps are:&lt;/p&gt;

&lt;ul class="wp-block-list"&gt;&lt;li&gt;Pull the new version from HR_REPO to HR_TEST_REPO using Gitora.&lt;br&gt;&lt;/li&gt;&lt;li&gt;Run tests on the HR_TEST schema. If there are no errors, deliver the new version to production. If there are errors, go to the second&amp;nbsp;step, rinse and repeat until the desired outcome is reached.&lt;/li&gt;&lt;/ul&gt;

&lt;p class="wp-block-paragraph"&gt;In such a setup Gitora&amp;nbsp;provides the following benefits:&lt;/p&gt;

&lt;ul class="wp-block-list"&gt;&lt;li&gt;Gitora&amp;nbsp;keeps track of all changes made to the PL/SQL code in the HR schema, automatically. Developer 2 does not have to remember which&amp;nbsp;PL/SQL objects she modified and what she modified in those objects.&lt;br&gt;&lt;/li&gt;&lt;li&gt;Moving the code between HR and HR_TEST schemas is as easy as clicking a button. The team does not need to manually prepare scripts.&lt;/li&gt;&lt;/ul&gt;

&lt;p class="wp-block-paragraph"&gt;The downside of this approach is that it involves manual work which is error prone. Developer 2 still has to manually go through the commit history and make&amp;nbsp;the changes to the source code in the HR schema to disable/remove Feature A. With only one shared development database ( i.e. development environment), there is no easy way to remove Feature A.&lt;/p&gt;

&lt;h2 class="wp-block-heading" id="multiple"&gt;If You Are Using Multiple Development Schemas&lt;/h2&gt;

&lt;p class="wp-block-paragraph"&gt;Now things get more interesting. Below is a simplified workflow that uses only two development databases. This setup&amp;nbsp;enables the IT team to deliver&amp;nbsp;only Feature B to deployment&amp;nbsp;without manually editing PL/SQL code objects to remove Feature A. &lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Here is our initial set up:&lt;/p&gt;

&lt;ul class="wp-block-list"&gt;&lt;li&gt;Developer 1&amp;nbsp;works in the schema HR_DEV1 schema and Developer 2 works in the HR_DEV2 schema i.e. both developers (teams) have their own private schemas while they are developing their respective features.&lt;br&gt;&lt;/li&gt;&lt;li&gt;Our only test schema is in the same database and is called HR_TEST.&lt;br&gt;&lt;/li&gt;&lt;li&gt;HR_DEV1 is schema managed by Gitora single schema repo DEV1, HR_DEV2 is managed by Gitora SSR DEV2 and the HR_TEST is managed by Gitora SSR TEST.&lt;br&gt;&lt;/li&gt;&lt;li&gt;DEV1, DEV2 and TEST repos start with the same version of the code which is stored in their master branch.(In other words, DEV1/master and DEV2/master are clones of TEST/master)&lt;/li&gt;&lt;/ul&gt;

&lt;p class="wp-block-paragraph"&gt;Obviously, all Git operations mentioned below are executed using Gitora. Gitora takes care of updating the database code after a Git command is executed.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Developer 1:&lt;/strong&gt;&lt;/p&gt;

&lt;ul class="wp-block-list"&gt;&lt;li&gt;Using Gitora, create a new branch named featureA (DEV1/featureA). Switch DEV1 to use this new branch.&lt;br&gt;&lt;/li&gt;&lt;li&gt;Write code in DEV1.&lt;br&gt;&lt;/li&gt;&lt;li&gt;Commit code changes to the DEV1/featureA&amp;nbsp;(using Gitora). Go back to step 2 as many times as needed.&lt;/li&gt;&lt;/ul&gt;

&lt;p class="wp-block-paragraph"&gt;As an example, the commit history of DEV1 looks like this:&lt;/p&gt;

&lt;div class="wp-block-image"&gt;&lt;figure class="aligncenter"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2017/05/shareddb-commit-history-1.jpg"&gt;&lt;img decoding="async" width="193" height="231" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2017/05/shareddb-commit-history-1.jpg" alt="" class="wp-image-254"/&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/div&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Developer 2:&lt;/strong&gt;&lt;/p&gt;

&lt;ul class="wp-block-list"&gt;&lt;li&gt;Create new branch named featureB (DEV2/featureB). Switch DEV2 to use this new branch.&lt;br&gt;&lt;/li&gt;&lt;li&gt;Write code in DEV2.&lt;br&gt;&lt;/li&gt;&lt;li&gt;Commit code changes to the repository to DEV2/featureB (using Gitora). Go back to step 2 as many times as needed.&lt;/li&gt;&lt;/ul&gt;

&lt;p class="wp-block-paragraph"&gt;The Git commit history in Gitora DEV2 looks like this:&lt;/p&gt;

&lt;div class="wp-block-image"&gt;&lt;figure class="aligncenter"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2017/05/multi-db-dev2.jpg"&gt;&lt;img decoding="async" width="192" height="225" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2017/05/multi-db-dev2.jpg" alt="" class="wp-image-258"/&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/div&gt;

&lt;h3 class="wp-block-heading"&gt;Moving Code Between Schemas&lt;/h3&gt;

&lt;p class="wp-block-paragraph"&gt;At any point in time, if Developer 1 or Developer 2 decides to send code to the HR_TEST schema (for example, for integration testing purposes..), they follow the steps below.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Please note that in real world development, the workflows described below&amp;nbsp;can be performed simultaneously in DEV1 and DEV2 repos, in no particular&amp;nbsp;order, any number of times until both features are ready to be deployed to production.&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;The steps below are merely a simplified example of how this workflow takes place.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Developer 1:&lt;/strong&gt;&lt;/p&gt;

&lt;ul class="wp-block-list"&gt;&lt;li&gt;In our example , we assume that Developer 1 is the first developer sending her commits to the HR_TEST schema.&lt;br&gt;&lt;/li&gt;&lt;li&gt;Merge DEV1/featureA to DEV1/master. (DEV1/featureA &amp;#8211;&amp;gt; DEV1/master)&lt;br&gt;After the merge, commit history in DEV1 looks like this:&lt;/li&gt;&lt;/ul&gt;

&lt;div class="wp-block-image"&gt;&lt;figure class="aligncenter"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2017/05/multi-db-dev1-merged-1.jpg"&gt;&lt;img decoding="async" width="209" height="284" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2017/05/multi-db-dev1-merged-1.jpg" alt="" class="wp-image-255"/&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/div&gt;

&lt;ul class="wp-block-list"&gt;&lt;li&gt;Pull master branch from DEV1 to TEST. (DEV1/master &amp;#8211;&amp;gt; TEST/master). A &amp;#8220;Pull&amp;#8221; is simply a two step process of fetching a branch from a remote Git repository and then merging it to a local branch. In our example TEST fetches DEV1/master from the DEV1 repo and merges it to TEST/master which we simply show as DEV1/master &amp;#8211;&amp;gt; TEST/master.&lt;br&gt;&lt;br&gt;After the pull, commit history of both TEST and DEV1 looks like this:&lt;/li&gt;&lt;/ul&gt;

&lt;div class="wp-block-image"&gt;&lt;figure class="aligncenter"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2017/05/multi-db-dev1-merged2.jpg"&gt;&lt;img decoding="async" width="327" height="341" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2017/05/multi-db-dev1-merged2.jpg" alt="" class="wp-image-268" srcset="https://blog.gitora.com/wp-content/uploads/2017/05/multi-db-dev1-merged2.jpg 327w, https://blog.gitora.com/wp-content/uploads/2017/05/multi-db-dev1-merged2-288x300.jpg 288w" sizes="auto, (max-width: 327px) 100vw, 327px" /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/div&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;br&gt;&lt;strong&gt;Developer 2:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;Now it is time for Developer 2 to send her changes to the HR_TEST schema. She does the following steps:&lt;/p&gt;

&lt;ul class="wp-block-list"&gt;&lt;li&gt;Pull master branch from the TEST repo to the master branch in DEV2. (TEST/master &amp;#8211;&amp;gt; DEV2/master). (In our example, this is necessary, because TEST/master has received new commits&amp;nbsp;from DEV1/master.) After the pull, the commit history looks like this: (Remember, previously we pulled commits from DEV1/master to TEST/master and we also made commits to DEV2/featureB)&lt;/li&gt;&lt;/ul&gt;

&lt;div class="wp-block-image"&gt;&lt;figure class="aligncenter"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2017/05/multidb-dev2-pull-from-test-to-dev2.jpg"&gt;&lt;img decoding="async" width="350" height="219" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2017/05/multidb-dev2-pull-from-test-to-dev2.jpg" alt="" class="wp-image-260" srcset="https://blog.gitora.com/wp-content/uploads/2017/05/multidb-dev2-pull-from-test-to-dev2.jpg 350w, https://blog.gitora.com/wp-content/uploads/2017/05/multidb-dev2-pull-from-test-to-dev2-300x188.jpg 300w" sizes="auto, (max-width: 350px) 100vw, 350px" /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/div&gt;

&lt;ul class="wp-block-list"&gt;&lt;li&gt;Merge DEV2/featureB&amp;nbsp;to DEV2/master. (DEV2/featureB &amp;#8211;&amp;gt; DEV2/master) After the merge, the commit history looks like this:&lt;/li&gt;&lt;/ul&gt;

&lt;div class="wp-block-image"&gt;&lt;figure class="aligncenter"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2017/05/multidb-dev2-merge-fb-to-master.jpg"&gt;&lt;img decoding="async" width="350" height="280" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2017/05/multidb-dev2-merge-fb-to-master.jpg" alt="" class="wp-image-261" srcset="https://blog.gitora.com/wp-content/uploads/2017/05/multidb-dev2-merge-fb-to-master.jpg 350w, https://blog.gitora.com/wp-content/uploads/2017/05/multidb-dev2-merge-fb-to-master-300x240.jpg 300w" sizes="auto, (max-width: 350px) 100vw, 350px" /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/div&gt;

&lt;ul class="wp-block-list"&gt;&lt;li&gt;Pull master branch from the DEV2 repo to the TEST repo. (DEV2/master &amp;#8211;&amp;gt; TEST/master). After the pull, the commit history looks like this:&lt;/li&gt;&lt;/ul&gt;

&lt;div class="wp-block-image"&gt;&lt;figure class="aligncenter"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2017/05/multidb-dev2-merge-dev2-master-to-test-master.jpg"&gt;&lt;img decoding="async" width="350" height="339" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2017/05/multidb-dev2-merge-dev2-master-to-test-master.jpg" alt="" class="wp-image-262" srcset="https://blog.gitora.com/wp-content/uploads/2017/05/multidb-dev2-merge-dev2-master-to-test-master.jpg 350w, https://blog.gitora.com/wp-content/uploads/2017/05/multidb-dev2-merge-dev2-master-to-test-master-300x291.jpg 300w" sizes="auto, (max-width: 350px) 100vw, 350px" /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/div&gt;

&lt;p class="wp-block-paragraph"&gt;In other words, in its final state, the source code in the HR_TEST schema (and in the TEST repo) is a merge of Feature A and B.&amp;nbsp;In our example, the full commit history of DEV1, DEV2 and TEST repositories look like this:&lt;/p&gt;

&lt;div class="wp-block-image"&gt;&lt;figure class="aligncenter"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2017/05/full-history-2.jpg"&gt;&lt;img decoding="async" width="405" height="749" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2017/05/full-history-2.jpg" alt="" class="wp-image-277" srcset="https://blog.gitora.com/wp-content/uploads/2017/05/full-history-2.jpg 405w, https://blog.gitora.com/wp-content/uploads/2017/05/full-history-2-162x300.jpg 162w" sizes="auto, (max-width: 405px) 100vw, 405px" /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/div&gt;

&lt;p class="wp-block-paragraph"&gt;Note that at all times, DEV1/featureA only contains the code for Feature A. Similarly, DEV2/featureB only contains the code for Feature B.&lt;/p&gt;

&lt;h2 class="wp-block-heading"&gt;Removing Feature A from the Deployment&lt;/h2&gt;

&lt;p class="wp-block-paragraph"&gt;This workflow enables the IT team to exclude Feature A from the next version of the software at any point in time before deploying it to the production environment.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;To exclude Feature A from the deployment in the example above, follow the&amp;nbsp;steps below:&lt;/p&gt;

&lt;ul class="wp-block-list"&gt;&lt;li&gt;Revert DEV2/master back to its initial state where no code&amp;nbsp;for&amp;nbsp;Feature B has been committed&amp;nbsp;yet. (This uses the Git reset command.)&lt;/li&gt;&lt;/ul&gt;

&lt;div class="wp-block-image"&gt;&lt;figure class="aligncenter"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2017/05/dev2-master-reset-to-initial-state-3.jpg"&gt;&lt;img decoding="async" width="399" height="741" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2017/05/dev2-master-reset-to-initial-state-3.jpg" alt="" class="wp-image-278" srcset="https://blog.gitora.com/wp-content/uploads/2017/05/dev2-master-reset-to-initial-state-3.jpg 399w, https://blog.gitora.com/wp-content/uploads/2017/05/dev2-master-reset-to-initial-state-3-162x300.jpg 162w" sizes="auto, (max-width: 399px) 100vw, 399px" /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/div&gt;

&lt;ul class="wp-block-list"&gt;&lt;li&gt;Merge DEV2/featureB to DEV2/master. (DEV2/featureB &amp;#8211;&amp;gt; DEV2/master)&lt;/li&gt;&lt;/ul&gt;

&lt;div class="wp-block-image"&gt;&lt;figure class="aligncenter"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2017/05/featureB-merged-to-new-dev2-master.jpg"&gt;&lt;img decoding="async" width="399" height="741" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2017/05/featureB-merged-to-new-dev2-master.jpg" alt="" class="wp-image-279" srcset="https://blog.gitora.com/wp-content/uploads/2017/05/featureB-merged-to-new-dev2-master.jpg 399w, https://blog.gitora.com/wp-content/uploads/2017/05/featureB-merged-to-new-dev2-master-162x300.jpg 162w" sizes="auto, (max-width: 399px) 100vw, 399px" /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/div&gt;

&lt;ul class="wp-block-list"&gt;&lt;li&gt;Reset TEST/master to its original state.&lt;/li&gt;&lt;/ul&gt;

&lt;div class="wp-block-image"&gt;&lt;figure class="aligncenter"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2017/05/test-master-reset-to-origin-2.jpg"&gt;&lt;img decoding="async" width="399" height="613" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2017/05/test-master-reset-to-origin-2.jpg" alt="" class="wp-image-284" srcset="https://blog.gitora.com/wp-content/uploads/2017/05/test-master-reset-to-origin-2.jpg 399w, https://blog.gitora.com/wp-content/uploads/2017/05/test-master-reset-to-origin-2-195x300.jpg 195w" sizes="auto, (max-width: 399px) 100vw, 399px" /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/div&gt;

&lt;ul class="wp-block-list"&gt;&lt;li&gt;Finally, pull master branch of DEV2 to the master branch of TEST. (DEV2/master &amp;#8211;&amp;gt; TEST/master)&lt;/li&gt;&lt;/ul&gt;

&lt;div class="wp-block-image"&gt;&lt;figure class="aligncenter"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2017/05/featureB-merged-to-test-master-2.jpg"&gt;&lt;img decoding="async" width="399" height="800" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2017/05/featureB-merged-to-test-master-2.jpg" alt="" class="wp-image-285" srcset="https://blog.gitora.com/wp-content/uploads/2017/05/featureB-merged-to-test-master-2.jpg 399w, https://blog.gitora.com/wp-content/uploads/2017/05/featureB-merged-to-test-master-2-150x300.jpg 150w" sizes="auto, (max-width: 399px) 100vw, 399px" /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/div&gt;

&lt;p class="wp-block-paragraph"&gt;After these steps are completed, the HR_TEST schema only contains code changes related to Feature B. We can use Gitora to extract a DDL script from HR_TEST which contains only the changes made between the initial and final state of TEST/master and use this script to deploy Feature B to the production environment.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Gitora helps developers execute this workflow with a point&amp;amp;click GUI:&lt;/p&gt;

&lt;ul class="wp-block-list"&gt;&lt;li&gt;Gitora&amp;nbsp;keeps track of all changes made to the PL/SQL code in HR_DEV1, HR_DEV2 and HR_TEST schemas automatically.&lt;br&gt;&lt;/li&gt;&lt;li&gt;Gitora updates the source code in the Oracle Database automatically when the executed Git command changes the files in a Git working directory.&lt;/li&gt;&lt;/ul&gt;

&lt;p class="wp-block-paragraph"&gt;Therefore:&lt;/p&gt;

&lt;ul class="wp-block-list"&gt;&lt;li&gt;Developers don&amp;#8217;t have to remember which&amp;nbsp;PL/SQL objects they modified and what they&amp;nbsp;modified in those objects.&lt;br&gt;&lt;/li&gt;&lt;li&gt;Moving the code between HR_DEV1, HR_DEV2 and HR_TEST is as easy as clicking a button. The team does not need to manually prepare scripts. Gitora can either generate the scripts or update the databases automatically.&lt;br&gt;&lt;/li&gt;&lt;li&gt;Crucially, Gitora enables Developer 1 and Developer 2 to switch between code branches automatically. (For example if the DEV1 repo switches its active branch from featureA to the master branch, Gitora automatically updates the code in the HR_DEV1 schema&amp;nbsp;to reflect this change.)&lt;/li&gt;&lt;/ul&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;a href="http://www.gitora.com/download.php"&gt;Download Gitora&lt;/a&gt; now and try this workflow in your environment.&lt;/p&gt;</description><pubDate>Thu, 05 May 2022 16:54:19 +0300</pubDate></item><item><title>How to Create a Single Schema Repo</title><link>https://blog.gitora.com/how-to-create-a-single-schema-repo/</link><guid>https://blog.gitora.com/how-to-create-a-single-schema-repo/</guid><description>&lt;p class="wp-block-paragraph"&gt;This article shows how you can create a &lt;strong&gt;Single Schema Repo (SSR)&lt;/strong&gt; wit Gitora 6.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Sign in to Gitora. Next click Git &amp;#8211;&amp;gt; Repo &amp;#8211;&amp;gt; Create Repo &amp;#8211;&amp;gt; Single Schema Repo.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;The Single Schema Repo Creation Dialog show up.&lt;/p&gt;

&lt;div class="wp-block-image"&gt;&lt;figure class="aligncenter size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2022/04/ssr_creation_dialog.png"&gt;&lt;img decoding="async" width="817" height="389" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2022/04/ssr_creation_dialog.png" alt="" class="wp-image-605" srcset="https://blog.gitora.com/wp-content/uploads/2022/04/ssr_creation_dialog.png 817w, https://blog.gitora.com/wp-content/uploads/2022/04/ssr_creation_dialog-300x143.png 300w, https://blog.gitora.com/wp-content/uploads/2022/04/ssr_creation_dialog-768x366.png 768w" sizes="auto, (max-width: 817px) 100vw, 817px" /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/div&gt;

&lt;ol class="wp-block-list"&gt;&lt;li&gt;Enter a unique repo name. (In this example, we&amp;#8217;ll call it SSR_1)&lt;br&gt;&lt;/li&gt;&lt;li&gt;Select the schema the SSR is associated to. (In this example it will be associted to the HR schema)&lt;br&gt;&lt;/li&gt;&lt;li&gt;Leave the Manage Schema Changes unchecked for now.&lt;br&gt;&lt;/li&gt;&lt;li&gt;Click save.&lt;/li&gt;&lt;/ol&gt;

&lt;p class="wp-block-paragraph"&gt;The repo SSR_1 is created. SSR_1 can only manage objects that are in the HR schema. (Other than this limitation, the SSR_1 repo works just like any other repo.)&lt;/p&gt;

&lt;h2 class="wp-block-heading"&gt;Adding Database Objects To a Single Schema Repo&lt;/h2&gt;

&lt;p class="wp-block-paragraph"&gt;This process is the same as adding objects to a regular Gitora repo (which is now called a Multi Schema Repo MSR)&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Select the SSR_1 repo from the example above from the combobox if it is not already selected.&lt;/p&gt;

&lt;div class="wp-block-image"&gt;&lt;figure class="aligncenter size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2022/04/select_ssr_1.png"&gt;&lt;img decoding="async" width="323" height="194" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2022/04/select_ssr_1.png" alt="" class="wp-image-607" srcset="https://blog.gitora.com/wp-content/uploads/2022/04/select_ssr_1.png 323w, https://blog.gitora.com/wp-content/uploads/2022/04/select_ssr_1-300x180.png 300w" sizes="auto, (max-width: 323px) 100vw, 323px" /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/div&gt;

&lt;p class="wp-block-paragraph"&gt;In the menu bar, click to Git &amp;#8211;&amp;gt; Add/Remove Objects. The Add or Remove Database Objects Dialog shows up.&lt;/p&gt;

&lt;div class="wp-block-image"&gt;&lt;figure class="aligncenter size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2022/04/add_remove_ssr-1.png"&gt;&lt;img decoding="async" width="810" height="746" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2022/04/add_remove_ssr-1.png" alt="" class="wp-image-618" srcset="https://blog.gitora.com/wp-content/uploads/2022/04/add_remove_ssr-1.png 810w, https://blog.gitora.com/wp-content/uploads/2022/04/add_remove_ssr-1-300x276.png 300w, https://blog.gitora.com/wp-content/uploads/2022/04/add_remove_ssr-1-768x707.png 768w" sizes="auto, (max-width: 810px) 100vw, 810px" /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/div&gt;

&lt;p class="wp-block-paragraph"&gt;Select the database objects you&amp;#8217;d like to manage with this repo and click Save. Use the Object Type dropdown to switch between different object types.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Note that the schema dropdown is disabled because we are working with a Single Schema Repo.&lt;/p&gt;

&lt;h2 class="wp-block-heading"&gt;Commit, Reset, Create/Change/Merge/Delete Branch Operations&lt;/h2&gt;

&lt;p class="wp-block-paragraph"&gt;These commands work just like they do for regular repos. There are no changes.&lt;/p&gt;

&lt;h2 class="wp-block-heading"&gt;Pulling from Other Repos&lt;/h2&gt;

&lt;p class="wp-block-paragraph"&gt;In Gitora 5, repos could only pull from repos managing objects in other databases. In Gitora 6, single schema repos can also pull from other single schema repos managing objects in the same database.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;The example below shows how you can pull from one SSR to another managing objects in the same database. All three pull operations (i.e. Pull, Fetch&amp;amp;Merge, Switch to Branch in Another Repo) work the same way. &lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Let&amp;#8217;s assume we have two schemas named LOGISTICS and LOGISTICS_TEST and two SSR&amp;#8217;s named REPO_LOGISTICS and REPO_LOGISTICS_TEST, managing these schemas, respectively. &lt;a href="https://blog.gitora.com/introducing-gitora-6/(opens in a new tab)" data-type="URL" data-id="https://blog.gitora.com/introducing-gitora-6/(opens in a new tab)" target="_blank" rel="noreferrer noopener"&gt;Read this article to learn how you can initialize these repos, correctly.&lt;/a&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Here are the steps to pull from REPO_LOGISTICS to REPO_LOGISTICS_TEST.&lt;/p&gt;

&lt;ol class="wp-block-list"&gt;&lt;li&gt;Open the REPO_LOGISTICS_TEST repo in Gitora.&lt;br&gt;&lt;/li&gt;&lt;li&gt;From the menu, select Git &amp;#8211;&amp;gt; Pull&lt;/li&gt;&lt;/ol&gt;

&lt;p class="wp-block-paragraph"&gt;The Pull from Another Repo to Active Branch Dialog shows up.&lt;/p&gt;

&lt;div class="wp-block-image"&gt;&lt;figure class="aligncenter size-full"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2022/04/pull_ssr.png"&gt;&lt;img decoding="async" width="816" height="281" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2022/04/pull_ssr.png" alt="" class="wp-image-609" srcset="https://blog.gitora.com/wp-content/uploads/2022/04/pull_ssr.png 816w, https://blog.gitora.com/wp-content/uploads/2022/04/pull_ssr-300x103.png 300w, https://blog.gitora.com/wp-content/uploads/2022/04/pull_ssr-768x264.png 768w" sizes="auto, (max-width: 816px) 100vw, 816px" /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/div&gt;

&lt;p class="wp-block-paragraph"&gt;3. Select the name of the single schema repo you want to pull from. (In our case, it is the LOGISTICS_REPO.)&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;4. Type the name of the branch you want to pull from.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;5. Click the Pull button.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;That&amp;#8217;s it. All changes in LOGISTICS_REPO are now merged to the LOGISTICS_REPO.&lt;/p&gt;

&lt;h2 class="wp-block-heading"&gt;FAQ&lt;/h2&gt;

&lt;h3 class="wp-block-heading"&gt;Can I create multiple Single Schema Repos that are associated to the same schema?&lt;/h3&gt;

&lt;p class="wp-block-paragraph"&gt;Yes. You can create multiple SSR&amp;#8217;s that are associated to the same schema. This is especially useful in dividing the database objects in the schema into multiple logical groups.&lt;/p&gt;

&lt;h3 class="wp-block-heading"&gt;Can Single Schema Repos pull from other databases?&lt;/h3&gt;

&lt;p class="wp-block-paragraph"&gt;Yes. It works exactly like it does in Gitora 5. In the Gitora app, select Git&amp;#8211;&amp;gt;Other Databases&amp;#8211;&amp;gt;Pull from the menu bar.&lt;/p&gt;

&lt;h3 class="wp-block-heading"&gt;Can I track changes to tables with a Single Schema Repo?&lt;/h3&gt;

&lt;p class="wp-block-paragraph"&gt;Yes. Just like with regular repos, the same SSR can be used for both managing packages, procedures etc&amp;#8230; and tracking table DDL&amp;#8217;s. A single schema repo can only track the table changes in the schema it is connected to. &lt;a rel="noreferrer noopener" href="https://blog.gitora.com/managing-tables/" data-type="URL" data-id="https://blog.gitora.com/managing-tables/" target="_blank"&gt;Please read this article to learn how Schema Management in Gitora works&lt;/a&gt; and &lt;a href="https://blog.gitora.com/managing-tables-with-single-schema-repos/" data-type="URL" data-id="https://blog.gitora.com/managing-tables-with-single-schema-repos/" target="_blank" rel="noreferrer noopener"&gt;read this article to learn how an SSR manages the schema it is assoicated to.&lt;/a&gt;&lt;/p&gt;</description><pubDate>Thu, 05 May 2022 16:54:03 +0300</pubDate></item><item><title>Reserving Database Objects for Authorized Users</title><link>https://blog.gitora.com/reserving-database-objects-for-authorized-developers/</link><guid>https://blog.gitora.com/reserving-database-objects-for-authorized-developers/</guid><description>&lt;p class="wp-block-paragraph"&gt;Gitora 5 Enterprise enables you to reserve database objects so that they can be edited by authorized users only.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;To achieve this, in the Gitora web app, right click the database object you&amp;#8217;d like to reserve and click the Reserve menu option.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;The Manage Object Reservation dialog shows up. In the dialog select the users you&amp;#8217;d like to reserve the object for and click the Done button.&lt;/p&gt;

&lt;figure class="wp-block-image size-large"&gt;&lt;img decoding="async" width="808" height="571" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2021/03/reserve.png" alt="" class="wp-image-568" srcset="https://blog.gitora.com/wp-content/uploads/2021/03/reserve.png 808w, https://blog.gitora.com/wp-content/uploads/2021/03/reserve-300x212.png 300w, https://blog.gitora.com/wp-content/uploads/2021/03/reserve-768x543.png 768w" sizes="auto, (max-width: 808px) 100vw, 808px" /&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;Once an object is reserved for a user (or users) only those users can edit it.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Conversely, users can be excluded from editing a database object.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;To achieve this, right click on the database object and click the Exclude menu option.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;The Manage User Exclusion dialog shows up. &lt;/p&gt;

&lt;figure class="wp-block-image size-large"&gt;&lt;img decoding="async" width="812" height="574" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2021/03/exclude.png" alt="" class="wp-image-569" srcset="https://blog.gitora.com/wp-content/uploads/2021/03/exclude.png 812w, https://blog.gitora.com/wp-content/uploads/2021/03/exclude-300x212.png 300w, https://blog.gitora.com/wp-content/uploads/2021/03/exclude-768x543.png 768w" sizes="auto, (max-width: 812px) 100vw, 812px" /&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;Add the users that you&amp;#8217;d like to restrict from changing this object and click the Done button.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;From this moment on, the selected users cannot edit the database object.&lt;/p&gt;</description><pubDate>Tue, 02 Mar 2021 12:01:45 +0300</pubDate></item><item><title>Database Script Management</title><link>https://blog.gitora.com/database-script-management/</link><guid>https://blog.gitora.com/database-script-management/</guid><description>&lt;p class="wp-block-paragraph"&gt;Database developers and DBA&amp;#8217;s have many scripts that they use for various purposes such as performance monitoring, migration, software upgrades and database maintanance.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;There is often no good way to manage these scripts. DBA&amp;#8217;s, developers end up emailing them to each other. The lack of good management and communication around scripts causes human mistakes during database upgrades and maintanance.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Gitora 5.1 Enterprise Edition introduces a new feature called Scripts. In Gitora 5.1, each Gitora repo has a separete section where you can manage your database scripts with the power of git. &lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Gitora scripts feature provides a single source of truth to DBA&amp;#8217;s and developers.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Simply create any folder hierarchy you want and add your scripts to Gitora.&lt;/p&gt;

&lt;figure class="wp-block-image size-large"&gt;&lt;img decoding="async" width="932" height="527" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2021/03/scripts.png" alt="" class="wp-image-564" srcset="https://blog.gitora.com/wp-content/uploads/2021/03/scripts.png 932w, https://blog.gitora.com/wp-content/uploads/2021/03/scripts-300x170.png 300w, https://blog.gitora.com/wp-content/uploads/2021/03/scripts-768x434.png 768w" sizes="auto, (max-width: 932px) 100vw, 932px" /&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;Git will store the entire version history of your scripts. You can view changes in your scripts over time. Find out who changed what and when.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;You can also restrict who can edit the scripts.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;When you pull a repo from one database to another, the scripts will move with the repo to the target database. This ensures that you always move the right version of a script to the target database, preventing emails, IM messages and many other needless back and forth between developers and DBA&amp;#8217;s.&lt;/p&gt;</description><pubDate>Tue, 02 Mar 2021 10:35:25 +0300</pubDate></item><item><title>Gitora Webinar</title><link>https://blog.gitora.com/gitora-webinar-2/</link><guid>https://blog.gitora.com/gitora-webinar-2/</guid><description>&lt;p class="wp-block-paragraph"&gt;On February 16th, we hosted a webinar about Gitora 5. Many thanks to everyone who attended. The recording of the webinar is below.&lt;/p&gt;

&lt;figure class="wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio"&gt;&lt;div class="wp-block-embed__wrapper"&gt;
&lt;iframe loading="lazy" title="Version Control for PL SQL" width="1170" height="658" src="https://www.youtube.com/embed/H4yxDVnzDtc?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen&gt;&lt;/iframe&gt;
&lt;/div&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;You can view the slides for the webiner below. &lt;a rel="noreferrer noopener" href="https://www.dropbox.com/s/uzfgkou6h8zcw24/Gitora%205.pdf?dl=0" target="_blank"&gt;You can also download the slides from this link.&lt;/a&gt;&lt;/p&gt;

&lt;iframe loading="lazy" src="//www.slideshare.net/slideshow/embed_code/key/yU4LWzoCtQdL6Z" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen=""&gt; &lt;/iframe&gt;

&lt;p class="wp-block-paragraph"&gt;There were a few questions we received several times during the webinar. We&amp;#8217;d like to reiterate our answers below:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;How does Gitora work with GitLab, GitHub or similar services&amp;#8230;?&lt;/strong&gt;&lt;br&gt;Gitora repos work&amp;nbsp;with these services&amp;nbsp;just like any other local Git repo does. From the point of GitLab, GitHub or similar services, Gitora repos are just local repos that you can push to these services.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;How can I create a merge/pull request with Gitora?&lt;/strong&gt;&lt;br&gt;Merge/Pull request is not a Git feature. It is a GitHub/GitLab feature. You can continue creating merge/pull requests on these services using the same workflow you use&amp;nbsp;for any other local repo. To create a merge/pull request&amp;nbsp;for a Gitora repo, first push your repo to GitHub/GitLab using the Gitora web app (or use Git directly). Next, go to your GitHub/GitLab account and create your merge/pull request.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;How can I work on two different projects with different deadlines in the same code base using only one development database and send only code related to one project to the test database?&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Update: Gitora 6 introduced Single Schema Repos (SSR). SSR&amp;#8217;s enable developers to work on different projects with different deadlines in the same code base using only one development database. &lt;a href="https://blog.gitora.com/introducing-gitora-6/" data-type="URL" data-id="https://blog.gitora.com/introducing-gitora-6/"&gt;Please read our Gitora 6 announcement post for more.&lt;/a&gt;&lt;/p&gt;</description><pubDate>Thu, 11 Feb 2021 20:32:22 +0300</pubDate></item><item><title>User Privileges in Gitora Enterprise</title><link>https://blog.gitora.com/user-privileges-in-gitora-enterprise/</link><guid>https://blog.gitora.com/user-privileges-in-gitora-enterprise/</guid><description>&lt;p class="wp-block-paragraph"&gt;Gitora Enterprise comes with a comprehensive authorization module. Using this module, Gitora admins and other privileged users can assign various roles to Gitora users to limit or enhance what they can do during database development and using Gitora&amp;#8217;s capabilities.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Authorization settings in Gitora can be set at three levels:&lt;/p&gt;

&lt;ul class="wp-block-list"&gt;&lt;li&gt;Database &lt;/li&gt;&lt;li&gt;Repo&lt;/li&gt;&lt;li&gt;Database Object&lt;/li&gt;&lt;/ul&gt;

&lt;h3 class="wp-block-heading"&gt;Database Level Authorization&lt;/h3&gt;

&lt;p class="wp-block-paragraph"&gt;The highest level where privileges for users can be set is the database level. Only admins can set database level authorization. Each database managed by Gitora has its own authorization scheme that can be set separately.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Gitora Enterprise comes with two default roles: Developer and Release Manager. Customers can edit the database level authorization according to their needs by either editing existing default roles, deleting them or creating new ones.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Each user in Gitora Enterprise must be assigned a database level role.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Gitora provides database level privileges to execute the following functions. These priveleges can be given or taken from a role as desired:&lt;/p&gt;

&lt;h4 class="wp-block-heading"&gt;System Privileges:&lt;/h4&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Edit Repos&lt;/strong&gt;: Create, edit or delete repos.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Edit Remotes&lt;/strong&gt;: Create, edit or delete remote repo entries.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Edit Repo Roles&lt;/strong&gt;: Create, edit, delete or assign repo level roles.&lt;/p&gt;

&lt;h4 class="wp-block-heading"&gt;Developer Privileges&lt;/h4&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Checkout&lt;/strong&gt;: Take control of a database object to edit it.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Commit&lt;/strong&gt;: Commit database objects to Git.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Edit Managed Schema Script&lt;/strong&gt;: Edit the contents of the &amp;#8220;Managed Schema Script&amp;#8221; file in Gitora.&lt;/p&gt;

&lt;h4 class="wp-block-heading"&gt;Repo Management Privileges&lt;/h4&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Add/Remove Objects&lt;/strong&gt;: Add or remove database objects to/from a repo.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Add/Remove Schemas&lt;/strong&gt;: Add or remove schemas to/from a repo for Gitora to keepo track of DDL statements executed in that schema.&lt;/p&gt;

&lt;h4 class="wp-block-heading"&gt;Local Git Command Privileges&lt;/h4&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Reset&lt;/strong&gt;: Execute the Git Reset command for a repo.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Create Branch&lt;/strong&gt;: Execute the Git create branch command for a repo.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Change Branch&lt;/strong&gt;: Change the active branch in the database for the repo.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Merge Branch&lt;/strong&gt;: Perform a Git Merge for a repo.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Delete Branch&lt;/strong&gt;: Delete a branch in a repo.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Tag&lt;/strong&gt;: Mark a Git commit ID in a repo with a recognizable indentifier.&lt;/p&gt;

&lt;h4 class="wp-block-heading"&gt;Remote Git Command Privileges&lt;/h4&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Push&lt;/strong&gt;: Perform a Git Push to a remote repository.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Pull&lt;/strong&gt;: Perform a Git Pull from a remote repo.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Fetch and Merge&lt;/strong&gt;: Fetch a commit ID from a remote repo and merge it to the current branch.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Switch to Remote Branch&lt;/strong&gt;: Fetch a remote branch and make it the active branch of the current repo.&lt;/p&gt;

&lt;h4 class="wp-block-heading"&gt;Other Privileges&lt;/h4&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Get Script&lt;/strong&gt;: Download the diff DDL script of two commit ID&amp;#8217;s of a repo.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Rebuild from Working Directory&lt;/strong&gt;: Execute the DDL statement file of a database object (or all database objects) in the working directory folder of a repo in the database.&lt;/p&gt;

&lt;h4 class="wp-block-heading"&gt;Managing Database Level Authorization&lt;/h4&gt;

&lt;p class="wp-block-paragraph"&gt;Log in to Gitora as an admin. Select [Connected Database Name] &amp;#8211; &gt; Database Authorization menu item from the main menubar.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;The Manage Database Roles page shows up.&lt;/p&gt;

&lt;figure class="wp-block-image size-large"&gt;&lt;img decoding="async" width="772" height="707" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_managedbroles.png" alt="" class="wp-image-520" srcset="https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_managedbroles.png 772w, https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_managedbroles-300x275.png 300w, https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_managedbroles-768x703.png 768w" sizes="auto, (max-width: 772px) 100vw, 772px" /&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;Gitora Enterprise comes with two built-in roles: Developer and Release Manager. Privileges for both of these roles are editable. You can also create your own roles.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;To create a role click the Add button. The Create Role Dialog shows up. Enter a descriptive name for the role. Check the checkboxes next to the functions that you want the new role to be able to perform. Click the Save button.&lt;/p&gt;

&lt;figure class="wp-block-image size-large"&gt;&lt;img decoding="async" width="828" height="754" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_adddbrole.png" alt="" class="wp-image-521" srcset="https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_adddbrole.png 828w, https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_adddbrole-300x273.png 300w, https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_adddbrole-768x699.png 768w" sizes="auto, (max-width: 828px) 100vw, 828px" /&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;Editing existing roles work in a similar way.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Click the delete button on the Manage Database Role page to delete a role.&lt;/p&gt;

&lt;h3 class="wp-block-heading"&gt;Repo Level Authorization&lt;/h3&gt;

&lt;p class="wp-block-paragraph"&gt;Repo level authorization is optional. An admin or a user with the database level privilege Edit Repo Roles can manage repo level privileges. When activated, repo level privileges override any privileges set at the database level for the database objects in the repo and Gitora functions performed for the repo. When users work with a database object that belongs to a repo with an active authorization scheme, they are assigned a repo level role that overrides their database level role. For example, a user with a database level Release Manager role, can act with a Developer role in the context of a repo with an authorization scheme of its own.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Once repo level authorization is activated for a repo, a repo level role must be given to a user explicitly. If no repo level role is assigned to a user, she will have no privileges in the context of the repo with repo level privileges. Admins are not affected by repo level authorization.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Repo level privileges that Gitora Enterprise provides are a subset of the database level privileges. System privileges are only set at the database level. The following privileges can be set at the repo level:&lt;/p&gt;

&lt;h4 class="wp-block-heading"&gt;Developer Privileges&lt;/h4&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Checkout&lt;/strong&gt;: Take control of a database object to edit it.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Commit&lt;/strong&gt;: Commit database objects to Git.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Edit Managed Schema Script&lt;/strong&gt;: Edit the contents of the &amp;#8220;Managed Schema Script&amp;#8221; file in Gitora.&lt;/p&gt;

&lt;h4 class="wp-block-heading"&gt;Repo Management Privileges&lt;/h4&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Add/Remove Objects&lt;/strong&gt;: Add or remove database objects to/from a repo.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Add/Remove Schemas&lt;/strong&gt;: Add or remove schemas to/from a repo for Gitora to keepo track of DDL statements executed in that schema.&lt;/p&gt;

&lt;h4 class="wp-block-heading"&gt;Local Git Command Privileges&lt;/h4&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Reset&lt;/strong&gt;: Execute the Git Reset command for a repo.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Create Branch&lt;/strong&gt;: Execute the Git create branch command for a repo.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Change Branch&lt;/strong&gt;: Change the active branch in the database for the repo.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Merge Branch&lt;/strong&gt;: Perform a Git Merge for a repo.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Delete Branch&lt;/strong&gt;: Delete a branch in a repo.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Tag&lt;/strong&gt;: Mark a Git commit ID in a repo with a recognizable indentifier.&lt;/p&gt;

&lt;h4 class="wp-block-heading"&gt;Remote Git Command Privileges&lt;/h4&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Push&lt;/strong&gt;: Perform a Git Push to a remote repository.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Pull&lt;/strong&gt;: Perform a Git Pull from a remote repo.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Fetch and Merge&lt;/strong&gt;: Fetch a commit ID from a remote repo and merge it to the current branch.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Switch to Remote Branch&lt;/strong&gt;: Fetch a remote branch and make it the active branch of the current repo.&lt;/p&gt;

&lt;h4 class="wp-block-heading"&gt;Other Privileges&lt;/h4&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Get Script&lt;/strong&gt;: Download the diff DDL script of two commit ID&amp;#8217;s of a repo.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Rebuild from Working Directory&lt;/strong&gt;: Execute the DDL statement file of a database object (or all database objects) in the working directory folder of a repo in the database.&lt;/p&gt;

&lt;h4 class="wp-block-heading"&gt;Managing Repo Level Authorization&lt;/h4&gt;

&lt;p class="wp-block-paragraph"&gt;Select a repo from the main select box in the Gitora Web App. Click the Git -&gt; Repo -&gt; Repo Authorization  menu item from the menubar. The Manage Repo Roles page shows up.&lt;/p&gt;

&lt;figure class="wp-block-image size-large"&gt;&lt;img decoding="async" width="957" height="715" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_reporoles.png" alt="" class="wp-image-526" srcset="https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_reporoles.png 957w, https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_reporoles-300x224.png 300w, https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_reporoles-768x574.png 768w" sizes="auto, (max-width: 957px) 100vw, 957px" /&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;Use the Add, Delete and Edit buttons to manage repo level roles.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Check the Enable Repo Level Authorization Scheme checkbox so that the repo level roles take effect. You can disable repo level roles by unchecking this checkbox at any time.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;To assign a repo level role to a user, click the [Connected Database Name] &amp;#8211; &gt; Users menu item from the menubar. Click the Edit button next to a user. The Edit User screen shows up. &lt;/p&gt;

&lt;figure class="wp-block-image size-large"&gt;&lt;img decoding="async" width="1024" height="705" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_edituser-1024x705.png" alt="" class="wp-image-527" srcset="https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_edituser-1024x705.png 1024w, https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_edituser-300x207.png 300w, https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_edituser-768x529.png 768w, https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_edituser.png 1172w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;Please note that the top portion of this screen where you can edit a users name, password, database role etc&amp;#8230; will only show up for admins.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;The table at the bottom of the screen with the title Repo Specific Roles for User displays the roles a user has for a specific repo. To add a role click the Add button. The Add Repo Role Dialog shows up.&lt;/p&gt;

&lt;figure class="wp-block-image size-large"&gt;&lt;img decoding="async" width="828" height="291" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_addreporole.png" alt="" class="wp-image-528" srcset="https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_addreporole.png 828w, https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_addreporole-300x105.png 300w, https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_addreporole-768x270.png 768w" sizes="auto, (max-width: 828px) 100vw, 828px" /&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;Select the repo and the role you&amp;#8217;d like to assign to the user in this repo. Please note that the repo select box only shows repos with repo level roles. Click the Save button.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;The assigned role will show up in the edit user page.&lt;/p&gt;

&lt;figure class="wp-block-image size-large"&gt;&lt;img decoding="async" width="1024" height="705" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_reporoles2-1024x705.png" alt="" class="wp-image-529" srcset="https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_reporoles2-1024x705.png 1024w, https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_reporoles2-300x207.png 300w, https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_reporoles2-768x529.png 768w, https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_reporoles2.png 1202w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;Please note that, a user can only have one role for a repo. To change the user&amp;#8217;s role, delete the current role and create a new one.&lt;/p&gt;

&lt;h3 class="wp-block-heading"&gt;Database Object Level Authorization&lt;/h3&gt;

&lt;p class="wp-block-paragraph"&gt;Gitora Enterprise enables admins and users with database level privilege Edit Repo Roles to reserve a database object for a user or group of users. This way, only the users in the reservation list can check out (and therefore edit) an object.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;To achieve this, in the main select box, select the repo the obejct is in. Navigate to the object in the tree and right click to it. In the context menu, click Reserve. &lt;/p&gt;

&lt;figure class="wp-block-image size-large"&gt;&lt;img decoding="async" width="437" height="593" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_reservebutton.png" alt="" class="wp-image-533" srcset="https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_reservebutton.png 437w, https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_reservebutton-221x300.png 221w" sizes="auto, (max-width: 437px) 100vw, 437px" /&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;The Manage Object Reservation Dialog shows up. Select the user and click the Add link to add the user to the list of users for whom this object is reserved. Click the Done button when you are finished.&lt;/p&gt;

&lt;figure class="wp-block-image size-large"&gt;&lt;img decoding="async" width="823" height="582" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_reserve_screen.png" alt="" class="wp-image-534" srcset="https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_reserve_screen.png 823w, https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_reserve_screen-300x212.png 300w, https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_reserve_screen-768x543.png 768w" sizes="auto, (max-width: 823px) 100vw, 823px" /&gt;&lt;/figure&gt;</description><pubDate>Tue, 26 Jan 2021 13:40:10 +0300</pubDate></item><item><title>Gitora API’s</title><link>https://blog.gitora.com/gitora-apis/</link><guid>https://blog.gitora.com/gitora-apis/</guid><description>&lt;p class="wp-block-paragraph"&gt;This is the Gitora API documentation for version 6.1 and below. For the latest API documentation please &lt;a href="https://blog.gitora.com/gitora-api-documentation/" data-type="URL" data-id="https://blog.gitora.com/gitora-api-documentation/"&gt;go to this link&lt;/a&gt;.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Gitora Enterprise has a set of API&amp;#8217;s that enables developers to programatically execute tasks that users can perform via the Gitora Web App such as reset, create branch, commit etc&amp;#8230;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Below is the list of API&amp;#8217;s with their description, input parameters and outputs.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Gitora API&amp;#8217;s respect the authorization scheme defined in the Gitora Web App. In other words, if a user lacks the necessary privilege to perform an operation in the Gitora Web App, the corresponding API will also fail for the same user.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;After the default installation, Gitora API&amp;#8217;s can be accesses from the URL &lt;code&gt;http://[IP ADDRESS]:8080/gitora/api&lt;/code&gt;.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;The &lt;code&gt;method&lt;/code&gt; parameter specifies the name of the method you&amp;#8217;d like to execute like so:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;http://localhost:8080/gitora?method=login.....&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Developers must log in to the API server before executing any other API call. Therefore, it makes sense to describe the login method first.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Method&lt;/strong&gt;: &lt;code&gt;login&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Use to sign in to Gitora.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Parameters:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;user&lt;/code&gt;: A valid Gitora username.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;password&lt;/code&gt;: Password of the Gitora user.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;database&lt;/code&gt;: The name of the database. This name is specified in the &lt;em&gt;Settings-&amp;gt;Database Connections&lt;/em&gt; screen in Gitora.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Output:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;The &lt;code&gt;login&lt;/code&gt; method returns a &lt;code&gt;token&lt;/code&gt; that you need to use in every other API call.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Example: &lt;code&gt;http://localhost:8080/gitora/api?method=login&amp;amp;user=admin&amp;amp;password=admin&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Method&lt;/strong&gt;: &lt;code&gt;add&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Add a database object to a Gitora repo.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Parameters:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;name&lt;/code&gt;: Name of the database object&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;repo&lt;/code&gt;: Name of the repo to add the database object to.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;schema&lt;/code&gt;: Schema of the database object to be added.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;token&lt;/code&gt;: A valid token string received from a login API call.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;type&lt;/code&gt;: Type of the database object to be added. Valid values are TABLE, PACKAGE, VIEW, PROCEDURE, FUNCTION, TRIGGER, SYNONYM, TYPE, SEQUENCE, MATERIALIZED_VIEW&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Output:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Returns &lt;code&gt;null&lt;/code&gt; if it completes successfully. It returns an error message if the operation fails.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Example: &lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;http://localhost:8080/gitora/api?method=add&amp;amp;name=EMP_PKG&amp;amp;repo=HR_REPO&amp;amp;schema=HR&amp;amp;token=YhfhseY45&amp;amp;type=PACKAGE&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Method&lt;/strong&gt;: &lt;code&gt;changebranch&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Changes the active branch of a Gitora repo.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Parameters:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;branch&lt;/code&gt;: Name of the branch to switch to.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;repo&lt;/code&gt;: Name of the repo this operation will be performed.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;token&lt;/code&gt;: A valid token string received from a &lt;code&gt;login&lt;/code&gt; API call.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Output:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Returns &lt;code&gt;null&lt;/code&gt; if it completes successfully. It returns an error message if the operation fails.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Example:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;http://localhost:8080/gitora/api?changebranch&amp;amp;branch=dev&amp;amp;repo=HR_REPO&amp;amp;token=Hhjfir7hd87&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Method&lt;/strong&gt;: &lt;code&gt;checkout&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Checks out the database object for a specific user.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Parameters:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;object&lt;/code&gt;: ID of the object to check out&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;token&lt;/code&gt;: A valid token string received from a &lt;code&gt;login&lt;/code&gt; API call.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Output:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Returns &lt;code&gt;null&lt;/code&gt; if it completes successfully. It returns an error message if the operation fails.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Example:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;http://localhost:8080/gitora/api?checkout&amp;amp;object=1234&amp;amp;token=Hdyhed7645g&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Method&lt;/strong&gt;: &lt;code&gt;commit&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Commits a list of objects to the specified repo.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Parameters:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;message&lt;/code&gt;: Commit message.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;ddls&lt;/code&gt;: A comma separated list of ID&amp;#8217;s of DDL statements captured by Gitora.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;objects&lt;/code&gt;=Comma separated list of object ID&amp;#8217;s to be committed.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;repo&lt;/code&gt;: Repo name.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;token&lt;/code&gt;: A valid token string received from a &lt;code&gt;login&lt;/code&gt; API call.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Output:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Returns the message received from Git.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Example:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;http://localhost:8080/gitora/api?commit&amp;amp;message=Fixed%20the%20employee%20queries&amp;amp;objects=1234,4523&amp;amp;ddls=3642,7854&amp;amp;repo=HR_REPO&amp;amp;token=jirHJj8rfnJi&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Method&lt;/strong&gt;: &lt;code&gt;createbranch&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Creates a new branch in the specified repo.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Parameters:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;branch&lt;/code&gt;: Name of the new branch.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;checkout&lt;/code&gt;: Indicated whether the new branch should be set as the active branch. Set to true to make the new branch the active branch, to false otherwise.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;commitid&lt;/code&gt;: Git commit ID, tag name or branch name to create the new branch from.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;repo&lt;/code&gt;: Name of the repo to create a branch in.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;token&lt;/code&gt;: A valid token string received from a &lt;code&gt;login&lt;/code&gt; API call.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Output:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Returns a list of modified database objects if there are any or an error message.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Example:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;http://localhost:8080/gitora/api?createbranch&amp;amp;checkout=true&amp;amp;commitid=Hdjdjhuend8874h29jdij&amp;amp;repo=HR_REPO&amp;amp;token=Kjirjdnc767yHy3&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Method&lt;/strong&gt;: &lt;code&gt;createrepo&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Creates a Gitora repo.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Parameters:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;repo&lt;/code&gt;: Name of the repo to be created.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;token&lt;/code&gt;: A valid token string received from a &lt;code&gt;login&lt;/code&gt; API call.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Output:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Returns the message received from Git.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Example:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;http://localhost:8080/gitora/api?createrepo&amp;amp;repo=HR_REPO&amp;amp;token=HJndnr8783dj&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Method&lt;/strong&gt;: &lt;code&gt;deletebranch&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Deletes the specified branch.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Parameters:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;branch&lt;/code&gt;: Name of the branch to be deleted.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;repo&lt;/code&gt;: Name of the repo the branch is in.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;token&lt;/code&gt;: A valid token string received from a &lt;code&gt;login&lt;/code&gt; API call.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Output:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Returns the message received from Git or an error message.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Example:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;http://localhost:8080/gitora/api?deletebranch&amp;amp;branch=dev&amp;amp;repo=HR_REPO&amp;amp;token=Hjfurns75bdy&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Method&lt;/strong&gt;: &lt;code&gt;fetchmerge&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Fetches a specific commit ID from a remote repo and merges it to the specified repo&amp;#8217;s active branch.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Parameters:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;branch&lt;/code&gt;: The name of the remote branch to fetch from.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;commitid&lt;/code&gt;: Git commit ID to fetch from the remote branch and merge to the active branch.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;password&lt;/code&gt;: The password or the personal access token to connect to the remote repo. For example your GitHub personal access token. This parameter is optional. Don&amp;#8217;t use it if the remote repo does not need a password to access.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;remote&lt;/code&gt;: The alias specified for the remote database in the Gitora Web App.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;repo&lt;/code&gt;: The name of the local repo.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;token&lt;/code&gt;: A valid token string received from a &lt;code&gt;login&lt;/code&gt; API call.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;user&lt;/code&gt;: user name to connect to the remote repo. For example your GitHub user name. This parameter is optional. Do not use it if the remote repo does not need a user name to access.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Output:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Returns the message received from Git.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Example:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;http://localhost:8080/gitora/api?fetchmerge&amp;amp;branch=dev&amp;amp;commitid=Jdudnr75hfgsj84fj&amp;amp;password=myPersonalAcessToken1&amp;amp;remote=myRemoteHRRepo&amp;amp;repo=HR_REPO&amp;amp;user=myGitHubUser&amp;amp;token=Hjnf74hehd&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Method&lt;/strong&gt;: &lt;code&gt;fetchmergefromdb&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Fetches a specific commit ID from a Gitora repo for another database and merges it to the specified repo&amp;#8217;s active branch.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Parameters:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;branch&lt;/code&gt;: Name of the branch to fetch from the fromrepo.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;commitid&lt;/code&gt;= Git commit ID to fetch from the branch and merge to the active branch.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;database&lt;/code&gt;: Name of the database the fromrepo is for.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;fromrepo&lt;/code&gt;: Name of the repo to fetch from.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;torepo&lt;/code&gt;: Name of the repo to merge to.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;token&lt;/code&gt;: A valid token string received from a &lt;code&gt;login&lt;/code&gt; API call.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Output:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Returns message received from Git.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Example:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Assume Gitora is connected to the TEST database. The example below fetches the commitid 1234 on branch master from the HR_REPO_DEV repo at the DEV database to the active branch of the HR_REPO at the TEST database.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;http://localhost:8080/gitora/api?fetchmergefromdb&amp;amp;branch=master&amp;amp;commitid=1234&amp;amp;database=DEV&amp;amp;fromrepo=HR_REPO_DEV&amp;amp;torepo=HR_REPO&amp;amp;token=Hjnf74hehd&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Method&lt;/strong&gt;: &lt;code&gt;getmanagedschemascript&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Returns the &amp;#8220;managed schemas script&amp;#8221; of the specified repo.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Parameters:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;repo&lt;/code&gt;: Name of the repo of which the developer is getting the managed schemas script.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;token&lt;/code&gt;: A valid token string received from a &lt;code&gt;login&lt;/code&gt; API call.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Output:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;The contents of the managed schemas scrpt file, represented as the &lt;code&gt;DDL_SCRIPT.sql&lt;/code&gt; in the Git repo.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Example:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;http://localhost:8080/gitora/api?getmanagedschemasscript&amp;amp;repo=HR_REPO&amp;amp;token=Kjfur03nd8&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Method&lt;/strong&gt;: &lt;code&gt;getmyobjects&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Returns the list of checked out database objects by the current user.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Parameters:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;repo&lt;/code&gt;: The repo for which the API queries the objects the user has checked out.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;token&lt;/code&gt;: A valid token string received from a &lt;code&gt;login&lt;/code&gt; API call.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Output:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Returns a JSON array. Each object in the array represents an database object that is checked out by the user. Each JSON object in the array has the following attributes:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;id&lt;/code&gt;: ID of the database object in Gitora.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;name&lt;/code&gt;: Name of the object.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;schema&lt;/code&gt;: Schema of the object.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;status&lt;/code&gt;: Indicates the modification state of the object. Valid values are: UNMODIFIED,MODIFIED, DELETED&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;type&lt;/code&gt;: Type of the object. (PACKAGE, PROCEDURE etc&amp;#8230;)&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;token&lt;/code&gt;: A valid token string received from a &lt;code&gt;login&lt;/code&gt; API call.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Example:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;http://localhost:8080/gitora/api?method=getmyobjects&amp;amp;repo=HR_REPO&amp;amp;token=Jnjf744jn&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Method&lt;/strong&gt;: &lt;code&gt;getrepoobjects&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Returns a JSON array of database objects in the repo.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Parameters:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;repo&lt;/code&gt;: Name of the repo to return the objects for.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;token&lt;/code&gt;: A valid token string received from a &lt;code&gt;login&lt;/code&gt; API call.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Output:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Returns a JSON array. Each object in the array represents a database object managed by the specified repo. Each JSON object in the array has the following attributes:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;id&lt;/code&gt;: ID of the database object in Gitora.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;name&lt;/code&gt;: Name of the object.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;schema&lt;/code&gt;: Schema of the object.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;status&lt;/code&gt;: Indicates the modification state of the object. Valid values are:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;token&lt;/code&gt;: A valid token string received from a &lt;code&gt;login&lt;/code&gt; API call.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;type&lt;/code&gt;: Type of the object. (PACKAGE, PROCEDURE etc&amp;#8230;)&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;UNMODIFIED,MODIFIED, DELETED&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;user&lt;/code&gt;: Name of the user who checked out the database object.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Example:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;http://localhost:8080/gitora/api?method=getrepoobjects&amp;amp;repo=HR_REPO&amp;amp;token=Nkjf8nf8&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Method&lt;/strong&gt;: &lt;code&gt;merge&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Performs git merge.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Parameters:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;commitid&lt;/code&gt;: Git commit ID, branch or tag name to merge to the active branch.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;repo&lt;/code&gt;: Name of the repo to perform merge on.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;token&lt;/code&gt;: A valid token string received from a &lt;code&gt;login&lt;/code&gt; API call.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Output:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Returns the the text value &lt;code&gt;conflict&lt;/code&gt; if there is a conflict after the merge or &lt;code&gt;noconflict&lt;/code&gt; if there isn&amp;#8217;t any.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt; Example:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;http://localhost:8080/gitora/api?method=merge&amp;amp;commitid=dev&amp;amp;token=Hjfur84bnfr&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Method&lt;/strong&gt;: &lt;code&gt;pullfromdb&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Performs a Git pull from a Gitora repo for another database to the specified repo&amp;#8217;s active branch. For example, you can pull the master branch of HR_REPO in DEV database to the master branch of HR_REPO in TEST database to move your latest code to the testing environment.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Parameters:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;branch&lt;/code&gt;: Branch name on the fromrepo to pull.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;database&lt;/code&gt;: Name of the database (identified in Gitora Web App under Settings-&amp;gt;Database Connections) the from repo is for.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;fromrepo&lt;/code&gt;: Repo to pull from.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;token&lt;/code&gt;: A valid token string received from a &lt;code&gt;login&lt;/code&gt; API call.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;torepo&lt;/code&gt;: Repo to pull to.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Output:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Returns the message received from Git.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Example:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Assume thet the developer is connected to the TEST database. The example below pulls the master branch from the HR_REPO repo for DEV database to the master branch of HR_REPO repo for the TEST database.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;http://localhost:8080/gitora/api?method=pullfromdb&amp;amp;fromrepo=HR_REPO&amp;amp;torepo=HR_REPO&amp;amp;branch=master&amp;amp;database=DEV&amp;amp;token=Hjgg6ghf&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Method&lt;/strong&gt;: &lt;code&gt;push&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Pushes the specified repo&amp;#8217;s branch to a remote Git repo (which commonly resides in GitHub, GitBlit, BitBucket or a similar cloud service).&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Parameters:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;branch&lt;/code&gt;: Name of the branch to push.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;password&lt;/code&gt;: Password or the personal access token to connect to the remote repo.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;remote&lt;/code&gt;: The alias specified for the remote repo in the Gitora Web App under Settings&amp;#8211;&amp;gt;Manage Remote Connections.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;repo&lt;/code&gt;: Name of the repo to push.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;token&lt;/code&gt;: A valid token string received from a &lt;code&gt;login&lt;/code&gt; API call.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;user&lt;/code&gt;: User name to connect to the remote repo.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Output:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Returns the message received from Git.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Example:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;http://localhost:8080/gitora/api?method=push&amp;amp;branch=master&amp;amp;password=1234&amp;amp;remote=GitHubHRRepo&amp;amp;repo=HR_REPO&amp;amp;user=myGitHubUser1&amp;amp;token=Hjf85jf&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Method&lt;/strong&gt;: &lt;code&gt;release&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Releases the lock placed by a user on a database object. Overwrites the content of the object with the latest version available in the active branch.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Parameters:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;object&lt;/code&gt;=ID of the database object to be released.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;token&lt;/code&gt;: A valid token string received from a &lt;code&gt;login&lt;/code&gt; API call.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Output:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Returns &lt;code&gt;null&lt;/code&gt; if succeeds or an error message if it fails.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Example:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;http://localhost:8080/gitora/api?method=release&amp;amp;object=3455&amp;amp;token=Hjfu57hf&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Method&lt;/strong&gt;: &lt;code&gt;remove&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Removes the specified database object from Gitora.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Parameters:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;name&lt;/code&gt;: Name of the database object.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;repo&lt;/code&gt;: Name of the repo the database object will be removed from.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;schema&lt;/code&gt;: The schema of the object&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;token&lt;/code&gt;: A valid token string received from a &lt;code&gt;login&lt;/code&gt; API call.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;type&lt;/code&gt;: The type of the object. Valid values are: Valid values are TABLE, PACKAGE, VIEW, PROCEDURE, FUNCTION, TRIGGER, SYNONYM, TYPE, SEQUENCE, MATERIALIZED_VIEW.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Output:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Returns null if succeeds or an error message if it fails.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Example:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;http://localhost:8080/gitora/api?method=remove&amp;amp;name=EMP_PKG&amp;amp;repo=HR_REPO&amp;amp;schema=HR&amp;amp;type=PACKAGE&amp;amp;token=Hfjuh784hnd&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Method&lt;/strong&gt;: &lt;code&gt;reset&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Performs the Git reset command on the active branch of the specified repo.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Parameters:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;commitid&lt;/code&gt;: Git commit ID or tag name to reset the active branch to.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;repo&lt;/code&gt;: Name of the repo to perform the Git reset.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;token&lt;/code&gt;: A valid token string received from a &lt;code&gt;login&lt;/code&gt; API call.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Output:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Returns the Git message received from Git.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Example:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;http://localhost:8080/gitora/api?method=reset&amp;amp;commitid=375hfhd&amp;amp;repo=HR_REPO&amp;amp;token=Hjfnh894jhhnfr&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Method&lt;/strong&gt;: &lt;code&gt;setmanagedschemascript&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Updates the &amp;#8220;Managed Schema Script&amp;#8221; content and commits it.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Paramaters:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;message&lt;/code&gt;: Commit message to be used when the new script is committed to Git.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;repo&lt;/code&gt;: Name of the repo to set the script for.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;script&lt;/code&gt;: The new text of the script.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;token&lt;/code&gt;: A valid token string received from a &lt;code&gt;login&lt;/code&gt; API call.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Output:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Returns the message received from Git.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Example:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;http://localhost:8080/gitora/api?method=setmanagedschemascript&amp;amp;messageScript%23updated.&amp;amp;repo=HR_REPO&amp;amp;script=ALTER%23EMPLOYEES%23ADD%23COLUMN%23(MIDDLE_NAME%23VARCHAR2(200);&amp;amp;token=Hjhu837h&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Method&lt;/strong&gt;: &lt;code&gt;switchtobranchfromdb&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Fetches the branch in a repo for another database and makes it the active branch in the specified repo for the currently connected database. Used if the fetched branch is not present in the repo for the currently connected database. For example the &lt;code&gt;featureA&lt;/code&gt; branch in &lt;code&gt;HR_REPO&lt;/code&gt; for the &lt;code&gt;DEV&lt;/code&gt; database may not exist in the &lt;code&gt;HR_REPO&lt;/code&gt; for the &lt;code&gt;TEST&lt;/code&gt; database. Using this API will bring over the &lt;code&gt;featureA&lt;/code&gt; branch from &lt;code&gt;DEV&lt;/code&gt; to &lt;code&gt;TEST&lt;/code&gt; and make it the active branch.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Parameters:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;branch&lt;/code&gt;: Name of the branch to fetch and make active.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;database&lt;/code&gt;: The database the &lt;code&gt;fromrepo&lt;/code&gt; is for.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;fromrepo&lt;/code&gt;: Name of the repo to fetch the branch from.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;token&lt;/code&gt;: A valid token string received from a &lt;code&gt;login&lt;/code&gt; API call.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;torepo&lt;/code&gt;: Name of the repo to fetch the branch to. It is expected that &lt;code&gt;torepo&lt;/code&gt; does not have this branch.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Output:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Returns the message received from Git.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Example:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Assume that the &lt;code&gt;featureA&lt;/code&gt; branch is in &lt;code&gt;DEV&lt;/code&gt; but not in &lt;code&gt;TEST&lt;/code&gt; database and the developer is connected to the &lt;code&gt;TEST&lt;/code&gt; database. The example below fetches the &lt;code&gt;featureA&lt;/code&gt; branch from the &lt;code&gt;DEV&lt;/code&gt; database to the &lt;code&gt;TEST&lt;/code&gt; database and makes it the active branch.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;http://localhost:8080/gitora/api?method=switchtobranchfromdb&amp;amp;fromrepo=HR_REPO&amp;amp;database=DEV&amp;amp;torepo=HR_REPO&amp;amp;branch=featureA&amp;amp;token=Hjfi94fj4&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Method: &lt;code&gt;switchtoremotebranch&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Fetches the branch in the remote repo and makes it the active branch in the specified repo for the currently connected database. Used if the fetched branch is not present in the repo for the currently connected database. For example the &lt;code&gt;featureA&lt;/code&gt; branch in the remote repo &lt;code&gt;GitHubHRREPO&lt;/code&gt;may not exist in the &lt;code&gt;HR_REPO&lt;/code&gt; for the &lt;code&gt;TEST&lt;/code&gt; database. Using this API will bring over the &lt;code&gt;featureA&lt;/code&gt; branch from remote repo to the &lt;code&gt;TEST&lt;/code&gt; database and make it the active branch.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Parameters:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;branch&lt;/code&gt;: Name of the branch to fetch from the remote and make active.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;database&lt;/code&gt;: The database the &lt;code&gt;fromrepo&lt;/code&gt; is for.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;password&lt;/code&gt;: The password or personal access token to connect to the remote repo.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;remote&lt;/code&gt;: Alias of the remote repo specified in the Gitora Web App under Settings&amp;#8211;&amp;gt;Manage Remote Repos.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;repo&lt;/code&gt;: Name of the repo to fetch the branch to. It is expected that &lt;code&gt;torepo&lt;/code&gt; does not have this branch.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;token&lt;/code&gt;: A valid token string received from a &lt;code&gt;login&lt;/code&gt; API call.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;user&lt;/code&gt;: User name to connect to the remote repo.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Output:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Returns the message received from Git.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Example:&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Assume that the &lt;code&gt;featureA&lt;/code&gt; branch is in remote &lt;code&gt;GitHubHRRepo &lt;/code&gt;but not in local &lt;code&gt;HR_REPO&lt;/code&gt; for the &lt;code&gt;TEST&lt;/code&gt; database and the developer is connected to the &lt;code&gt;TEST&lt;/code&gt; database. The example below fetches the &lt;code&gt;featureA&lt;/code&gt; branch from the &lt;code&gt;GitHubHRRepo&lt;/code&gt;to the &lt;code&gt;TEST&lt;/code&gt; database and makes it the active branch.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;http://localhost:8080/gitora/api?method=switchtoremotebranch&amp;amp;remote=GitHubHRRepo&amp;amp;torepo=HR_REPO&amp;amp;branch=featureA&amp;amp;user=myGitHubUser&amp;amp;password=1234&amp;amp;token=Hjfi94fj4&lt;/code&gt;&lt;/p&gt;</description><pubDate>Sun, 24 Jan 2021 16:17:22 +0300</pubDate></item><item><title>Managing Tables</title><link>https://blog.gitora.com/managing-tables/</link><guid>https://blog.gitora.com/managing-tables/</guid><description>&lt;p class="wp-block-paragraph"&gt;With Gitora 5 users can track changes made to any table&amp;#8217;s definition individually. &lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;The way tables work in Gitora is very similar to the way soft objects such as packages, procedures work but there are a few key differences. We&amp;#8217;ll go over them briefly.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Adding a Table to a Repo&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;You can add a table to a Gitora repo just like you add any other object. Simply open a repo from the main select box. Click Git-&amp;gt;Add/Remove Object from the menubar. The Add/Remove Database Objects dialog shows up. &lt;/p&gt;

&lt;figure class="wp-block-image size-large"&gt;&lt;img decoding="async" width="814" height="755" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_table_management.png" alt="" class="wp-image-459" srcset="https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_table_management.png 814w, https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_table_management-300x278.png 300w, https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_table_management-768x712.png 768w" sizes="auto, (max-width: 814px) 100vw, 814px" /&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;Simply, select, add the tables you&amp;#8217;d like to include to the open repo and click the Done button.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Gitora will generate a DDL script for the table and save it as a file in the Git repo. The DDL script will contain the table&amp;#8217;s definition as well as any constraints and indexes created on it.&lt;/p&gt;

&lt;figure class="wp-block-image size-large"&gt;&lt;img decoding="async" width="757" height="769" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_tableddl_screen.png" alt="" class="wp-image-460" srcset="https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_tableddl_screen.png 757w, https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_tableddl_screen-295x300.png 295w" sizes="auto, (max-width: 757px) 100vw, 757px" /&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Making Changes To a Table Definition&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;The workflow for executing a DDL on a table managed by Gitora is exactly the same as any other object managed by Gitora.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Once a table is added to a Gitora repo, developers must log in to Gitora in their database session to be able to make modifications to its definition. (The table must also be available for checkout for the developer to execute a DDL statement on the table.)&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;After a developer executes a DDL statement for the table (such as adding a column), Gitora automatically checks out the table for the developer if the table is not checked out by another developer already.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;The developer can commit her changes to Git just like she commits any other object in the Gitora app, namely by clicking the &amp;#8220;Git-&amp;gt;Commit&amp;#8221; item in the menubar and including the table in her commit.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Effects of Executing Git Commands on Tables&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Executing Git commands such as reset, change branch, merge may change the file that contains the table DDL. The file will contain the correct DDL statement for the current Git commit ID. However, Gitora will &lt;strong&gt;not&lt;/strong&gt; reflect this change in the database. This behavior differs from how Gitora behaves for soft objects such as packages, views, procedures etc&amp;#8230; If there are changes, Gitora updates these objects in the database after a Git command is executed.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Sequences and materialized views work the same way as tables.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;In Gitora parlance, any object that can be used with CREATE OR REPLACE syntax is called a soft object. Objects such as tables, sequences and materialized views which cannot be used with CREATE OR REPLACE are called hard objects. &lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Altough one repo can store both hard and soft objects without any issues, we recommend users to store hard and soft objects of a project in separate repos.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Moving Hard Object Changes between Databases&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Gitora can move soft objects (packages, procedures, views etc&amp;#8230;) between databases with a single click or an API call (enterprise edition only) automatically.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;The method described above to track tables is very useful to create schemas from scretch, to track changes over a period of time and see the definition of an object in a previous state. However, it is not very useful to move hard object changes to another database. To achieve this, Gitora has a &amp;#8220;Managed Schemas&amp;#8221; feature. You can register one ore more schemas to a Gitora repo so that it tracks every hard object DDL statement executed in these schemas.  To achieve this, click &lt;em&gt;Git-&amp;gt;Add/Remove Managed Schema&lt;/em&gt;. Select the schemas you want to manage and click Done.&lt;/p&gt;

&lt;figure class="wp-block-image size-large"&gt;&lt;img decoding="async" width="828" height="595" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_managedschema_screen.png" alt="" class="wp-image-461" srcset="https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_managedschema_screen.png 828w, https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_managedschema_screen-300x216.png 300w, https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_managedschema_screen-768x552.png 768w" sizes="auto, (max-width: 828px) 100vw, 828px" /&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;In the picture above, Gitora will track DDL statements executed in the HR user. &lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Let&amp;#8217;s assume that we execute the following DDL statement in the HR schema: &lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;code&gt;ALTER TABLE EMPLOYEES ADD (MIDDLE_NAME VARCHAR2 (25));&lt;/code&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;DDL statements show up in the &amp;#8220;Managed Schema DDL&amp;#8221; section of the Commit Changes page. &lt;/p&gt;

&lt;figure class="wp-block-image size-large"&gt;&lt;img decoding="async" width="953" height="636" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_commitchangesddl_screen.png" alt="" class="wp-image-462" srcset="https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_commitchangesddl_screen.png 953w, https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_commitchangesddl_screen-300x200.png 300w, https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_commitchangesddl_screen-768x513.png 768w" sizes="auto, (max-width: 953px) 100vw, 953px" /&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;Once committed, these DDL statements show up in a file named &lt;em&gt;&amp;#8220;Managed Schema DDL&amp;#8217;s&amp;#8221;&lt;/em&gt; in the Gitora main screen. Please note that the DDL statement above shows up at the end of the document after it is committed.&lt;/p&gt;

&lt;figure class="wp-block-image size-large"&gt;&lt;img decoding="async" width="978" height="791" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_ddl_script_screen-1.png" alt="" class="wp-image-464" srcset="https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_ddl_script_screen-1.png 978w, https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_ddl_script_screen-1-300x243.png 300w, https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_ddl_script_screen-1-768x621.png 768w" sizes="auto, (max-width: 978px) 100vw, 978px" /&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;As developers commit their DDL statements, they are added to this file. Gitora users can edit this file by clicking Edit in its right click menu.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;If we pull this repo (say from DEV to TEST) the &amp;#8220;Managed Schema DDL&amp;#8217;s&amp;#8221; will also be pulled. &lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Once the pull is completed, the DDL statement we executed in DEV is now in TEST but not yet executed.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;To determine which DDL statements we need to execute, we simply need the diff between the Managed Schema DDL&amp;#8217;s file&amp;#8217;s current state and previous state before the pull. We get this diff by right clicking the Compare button in the right click menu of the Manage Schema DDL&amp;#8217;s file.&lt;/p&gt;

&lt;figure class="wp-block-image size-large"&gt;&lt;img decoding="async" width="815" height="323" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_compareddl_screen3.png" alt="" class="wp-image-465" srcset="https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_compareddl_screen3.png 815w, https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_compareddl_screen3-300x119.png 300w, https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_compareddl_screen3-768x304.png 768w" sizes="auto, (max-width: 815px) 100vw, 815px" /&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;The Compare Versions dialog shows up. Left Side and Right Side fields accept any Git commit ID. Clicking the compare button shows a screen which highights the differences between the two versions of the Manage Schema DDL&amp;#8217;s file.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;HEAD@{1} is a Git shorthand that represents the previous commit ID (before the pull) and similarly HEAD represents the current commit ID (after the pull). Clicking the Compare button gives the following result:&lt;/p&gt;

&lt;figure class="wp-block-image size-large"&gt;&lt;img decoding="async" width="1016" height="536" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_diff_screen.png" alt="" class="wp-image-466" srcset="https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_diff_screen.png 1016w, https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_diff_screen-300x158.png 300w, https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_diff_screen-768x405.png 768w" sizes="auto, (max-width: 1016px) 100vw, 1016px" /&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;The DDL statement we need to execute in TEST to sync it with DEV is highlighted in green.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Any Gitora repo can manage any number of schemas. However, we recommend users to create a separate repo to manage schemas of a project.&lt;/p&gt;</description><pubDate>Thu, 21 Jan 2021 16:57:40 +0300</pubDate></item><item><title>Introducing Gitora 5</title><link>https://blog.gitora.com/introducing-gitora-5/</link><guid>https://blog.gitora.com/introducing-gitora-5/</guid><description>&lt;p class="wp-block-paragraph"&gt;We are very excited to announce that Gitora 5 is now available for download.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Gitora 5 is a huge step forward for version management of database objects.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Gitora 5 has many new features. Below are just six of our favorites:&lt;/p&gt;

&lt;div class="wp-block-group"&gt;&lt;div class="wp-block-group__inner-container is-layout-flow wp-block-group-is-layout-flow"&gt;
&lt;ul class="wp-block-list"&gt;&lt;li&gt;A Brand New User Interface and Application&lt;/li&gt;&lt;li&gt;One Gitora Installation to Manage Any Number of Databases&lt;/li&gt;&lt;li&gt;Gitora Now Manages Tables&lt;/li&gt;&lt;li&gt;No-login development experience&lt;/li&gt;&lt;li&gt;A Comprehensive Developer Privileges Management Module&lt;/li&gt;&lt;li&gt;Full API To Completely Automate Your Workflow&lt;/li&gt;&lt;/ul&gt;
&lt;/div&gt;&lt;/div&gt;

&lt;p class="wp-block-paragraph"&gt;Let’s go over these new features briefly:&lt;br&gt;&lt;br&gt;&lt;strong&gt;A Brand New User Interface and Application&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;We redesigned every screen in Gitora from the ground up. The new design gives Gitora 5 a beautiful modern look with large components, easy to read, fresh colors and updated icons.&amp;nbsp;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;We also rebuilt the application with Java. This reduced Gitora’s database footprint by more than 95% making it much easier to install and manage.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;One Gitora Installation to Manage Any Number of Databases&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;This was probably one of the most requested features. Previously, if you wanted to manage a database with Gitora, you needed a new Gitora installation. This is no longer the case.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Thanks to Gitora 5’s new architecture, users can now manage any number of databases with Gitora 5 from a single application.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;This makes moving code and switching between databases much easier. Maintenance and upgrade tasks are also much simpler because there is only one application to manage.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Moreover, we made installing Gitora much easier. No more running hundreds of database scripts or changing database settings. Once you create a database user for Gitora, the application will automatically install its database objects.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Gitora Now Manages Tables&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Tables are now first class citizens in Gitora. You can manage every table’s DDL in Git repos along with its constraints and indexes, in its own file with its complete history, automatically.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;No-login Development Experience&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Previously, signing in to Gitora required an extra step for database developers. Every time they opened a database session, they had to execute one line of code to sign in to Gitora. Gitora 5 can be configured to recognize selected database users as valid Gitora users. This way, Gitora 5 becomes completely transparent during regular development activities.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;A Comprehensive Developer Privileges Management Module&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Gitora 5 Enterprise comes with a sophisticated authorization module with which you can manage who can edit which database object and perform which Git operation. You can define privileges for actions such as check out, commit, pull, push etc&amp;#8230; at database level and at repo level. You can even restrict access to certain objects to specific developers.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Full API To Completely Automate Your Workflow&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Last but not least, Gitora 5 Enterprise comes with a set of API’s so that you can fully automate your workflow. The API’s are easy to use and support the restrictions you specify in the authorization module.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;These are our top six features but there are many more. Here is just a few of them:&lt;/p&gt;

&lt;ul class="wp-block-list"&gt;&lt;li&gt;A new and improved diff screen&lt;/li&gt;&lt;li&gt;A new way to track every DDL you execute in the database&lt;/li&gt;&lt;li&gt;Table DDL generation that is master-detail relationship aware&lt;/li&gt;&lt;li&gt;Support for sequences, materialized views&lt;/li&gt;&lt;/ul&gt;

&lt;p class="wp-block-paragraph"&gt;Gitora 5 comes with the features you are already familiar with:&lt;/p&gt;

&lt;ul class="wp-block-list"&gt;&lt;li&gt;Create Git repos with any of your database code objects such as Packages, Views, Types, Triggers etc…&lt;/li&gt;&lt;li&gt;Gitora doesn’t miss a change. Capture every change in these objects automatically and commit them to Git with a single click.&lt;/li&gt;&lt;li&gt;Perform Git operations such as reset, branch, merge, pull etc.. These operations will update your database objects automatically.&lt;/li&gt;&lt;li&gt;Push your repos to any cloud service such as GitHub, GitLab etc&amp;#8230;&lt;/li&gt;&lt;/ul&gt;

&lt;p class="wp-block-paragraph"&gt;Gitora is a unique tool that integrates Git to the Oracle Database. It enables you to use Git just like a Java, JavaScript or C# developer.&amp;nbsp;&amp;nbsp;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Gitora 5 is by far our biggest and most important release since releasing the first version of Gitora in 2015. Gitora 5 is an indispensable tool to improve developer productivity, implement modern development workflows and cut delivery times significantly.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;a href="https://www.gitora.com/download.html" target="_blank" rel="noreferrer noopener"&gt;Try Gitora 5 today.&lt;/a&gt;&lt;/p&gt;</description><pubDate>Wed, 20 Jan 2021 16:07:25 +0300</pubDate></item><item><title>How to Pull/Push using Gitora</title><link>https://blog.gitora.com/how-to-pull-push-using-gitora-4/</link><guid>https://blog.gitora.com/how-to-pull-push-using-gitora-4/</guid><description>&lt;p class="wp-block-paragraph"&gt;Gitora enables Oracle developers to pull code from other databases managed by Gitora with a single click. It also enables them to push to and pull from other Git repositories including the ones hosted by GitHub, GitLab, Bitbucket etc&amp;#8230;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Below are the steps to achieve this:&lt;/p&gt;

&lt;h3 class="wp-block-heading"&gt;&lt;strong&gt;Moving Code from one Database to Another Using Gitora&lt;/strong&gt;&lt;/h3&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Gitora 5 can manage any number of databases. It also enables these databases to pull code from each other&lt;/strong&gt;. This makes moving code in your delivery pipeline (from dev to test, from test to preprod etc&amp;#8230;) much less error prone and easier.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Open the Gitora app. Select the repo you want to pull to from the main select box. &lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;In order pull code from another database managed by Gitora, click the &lt;em&gt;&amp;#8220;Git-&amp;gt;Other Databases -&amp;gt; Pull&amp;#8221;&lt;/em&gt; menu item. The Pull Dialog shows up.&lt;/p&gt;

&lt;figure class="wp-block-image size-large"&gt;&lt;img decoding="async" width="818" height="345" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_pull_screen.png" alt="" class="wp-image-448" srcset="https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_pull_screen.png 818w, https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_pull_screen-300x127.png 300w, https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_pull_screen-768x324.png 768w" sizes="auto, (max-width: 818px) 100vw, 818px" /&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;Select the database you want to pull from. Next choose a repo and the branch. &lt;/p&gt;

&lt;figure class="wp-block-image size-large"&gt;&lt;img decoding="async" width="819" height="344" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_pull_screen2.png" alt="" class="wp-image-449" srcset="https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_pull_screen2.png 819w, https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_pull_screen2-300x126.png 300w, https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_pull_screen2-768x323.png 768w" sizes="auto, (max-width: 819px) 100vw, 819px" /&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;In the example above, we are connected to our TEST database. We are pulling from the DEV database the MyNewRepo repo&amp;#8217;s master branch. Any code changes that exist in the database objects that are part of MyNewRepo&amp;#8217;s master branch (but don&amp;#8217;t exist in TEST) will move to the TEST database after clicking the Pull button.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Pull is the simplest and most common use case. It moves the latest version of a code base from one database to another. Gitora also supports more sophisticated workflows. For example, you can move the code at a specific commit ID on a specific branch from one database to another database.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;To achieve this click &amp;#8220;Git-&amp;gt;Other Databases-&amp;gt;Fetch and Merge&amp;#8221; menu item. The Fetch and Merge Dialog shows up. To further extend the example above, using this dialog, you can specify which commit ID you want to fetch from the other database. The example below fetches and earlier commit ID from the MyNewRepo&amp;#8217;s master branch in DEV. (Pull always fetches the current code in the DEV database.)&lt;/p&gt;

&lt;figure class="wp-block-image size-large"&gt;&lt;img decoding="async" width="818" height="402" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_fetchmerge_screen.png" alt="" class="wp-image-450" srcset="https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_fetchmerge_screen.png 818w, https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_fetchmerge_screen-300x147.png 300w, https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_fetchmerge_screen-768x377.png 768w" sizes="auto, (max-width: 818px) 100vw, 818px" /&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;Finally, we may want to fetch a new branch in another database that does not exist in the database we are connected to. For example, we may want to test a new feature developed in the feature branch FEATURE1. To test this feature, we need to pull it to the TEST database. To achieve this, click &lt;em&gt;&amp;#8220;Git-&amp;gt;Other Databases-&amp;gt; Switch to Branch in Another Database&amp;#8221;&lt;/em&gt; menu item. A Dailog shows up. Enter the database, repo and the branch name you want to bring over to the database you are connected to. In the example above, we are brining the FEATURE1 branch from MyNewRepo in DEV to the TEST database.&lt;/p&gt;

&lt;figure class="wp-block-image size-large"&gt;&lt;img decoding="async" width="823" height="346" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_fetchnewbranch_screen.png" alt="" class="wp-image-451" srcset="https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_fetchnewbranch_screen.png 823w, https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_fetchnewbranch_screen-300x126.png 300w, https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_fetchnewbranch_screen-768x323.png 768w" sizes="auto, (max-width: 823px) 100vw, 823px" /&gt;&lt;/figure&gt;

&lt;h3 class="wp-block-heading"&gt;&lt;strong&gt;Pull from/Push to Remote Repos&lt;/strong&gt;&lt;/h3&gt;

&lt;p class="wp-block-paragraph"&gt;In the Gitora web application, click the Settings &amp;#8211;&amp;gt; Manage Remote Repos from the menubar.  &lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;The Manage Remote Repos page shows up.&lt;/p&gt;

&lt;figure class="wp-block-image size-large"&gt;&lt;img decoding="async" width="967" height="685" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_remoterepos_screen.png" alt="" class="wp-image-455" srcset="https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_remoterepos_screen.png 967w, https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_remoterepos_screen-300x213.png 300w, https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_remoterepos_screen-768x544.png 768w" sizes="auto, (max-width: 967px) 100vw, 967px" /&gt;&lt;figcaption&gt;Remote Git Repositories Dialog&lt;/figcaption&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;Click the add button. The Add Remote dialog shows up. Enter a friendly alias for the remote Git repo. Finally, enter the URL that points to the remote repo. If you are using a service like GitHub, refer to the service provider website for the correct URL. For GitHub, the URL is in the following format: https://github.com/[github user name]/[gitreponame].git&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Moving Code from Remote Repos to Databases using Gitora&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Pulling from remote repos work the same way as pulling from other databases. Please note that in order for Gitora to successfully pull from a remote repo and update the database the structure, the remote repo must be either created by Gitora initially or the structure, folder and file names of  the repo must be as if they are created by Gitora.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Pushing to a remote Git Repo&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Open the Gitora app, select the repo you&amp;#8217;d like to push from the main select box. Netx, click &lt;em&gt;Git-&amp;gt;Remote-&amp;gt;Push&lt;/em&gt;. The Push dialog shows up.&lt;/p&gt;

&lt;figure class="wp-block-image size-large"&gt;&lt;img decoding="async" width="822" height="405" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_push_screen.png" alt="" class="wp-image-456" srcset="https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_push_screen.png 822w, https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_push_screen-300x148.png 300w, https://blog.gitora.com/wp-content/uploads/2021/01/gitora5_push_screen-768x378.png 768w" sizes="auto, (max-width: 822px) 100vw, 822px" /&gt;&lt;figcaption&gt;The Push Dialog&lt;/figcaption&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;Select the branch you&amp;#8217;d like to push and the target remote repository you&amp;#8217;d like to push this branch to. Enter the user name and password to connect to the remote repository. Leave these fields empty if the remote repository is not protected by a user name and a password. For example, if you are pushing to GitHub, the credentials you should enter are your GitHub user name and password.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Click the push button and wait for the response message to show up.&lt;/p&gt;</description><pubDate>Thu, 02 Apr 2020 22:43:52 +0300</pubDate></item><item><title>Gitora 4 is available for download</title><link>https://blog.gitora.com/gitora-4-is-available-for-download/</link><guid>https://blog.gitora.com/gitora-4-is-available-for-download/</guid><description>&lt;p class="wp-block-paragraph"&gt;We’re happy to announce the general availability of Gitora 4.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Gitora 4 builds on top of the great foundation of Gitora 3 and makes it even easier for Oracle developers to integrate version control to their daily workflow.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Gitora 4 comes with three new improvements:&lt;/p&gt;

&lt;ul class="wp-block-list"&gt;&lt;li&gt;Pull from and push to Github, Gitlab, Bitbucket or any other Git repository&amp;#8230;&lt;/li&gt;&lt;li&gt;Simplified workflow and vastly improved working folder organization.&lt;/li&gt;&lt;li&gt;SQL Developer Plugin (Coming soon.)&lt;/li&gt;&lt;/ul&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;a href="http://www.gitora.com/download.php"&gt;You can download Gitora 4 from this link.&lt;/a&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;/p&gt;</description><pubDate>Tue, 31 Mar 2020 21:31:03 +0300</pubDate></item><item><title>Introducing Gitora 3, version control for the Oracle Database</title><link>https://blog.gitora.com/introducing-gitora-3-version-control-for-the-oracle-database/</link><guid>https://blog.gitora.com/introducing-gitora-3-version-control-for-the-oracle-database/</guid><description>&lt;p&gt;Today, we&amp;#8217;re happy to announce the general availability of Gitora 3.&lt;/p&gt;
&lt;p&gt;Gitora 2 enabled developers to manage database objects that support the CREATE OR REPLACE command, namely PACKAGES, PROCEDURES, FUNCTIONS, TRIGGERS, VIEWS, SYNONYMS and TYPES in a Git repository. (In Gitora terminology, we call these &lt;em&gt;&lt;strong&gt;&amp;#8220;Soft Objects&amp;#8221;&lt;/strong&gt;&lt;/em&gt;).&lt;/p&gt;
&lt;p&gt;Gitora 3 goes a step further and enables developers to &lt;strong&gt;manage every database object in an Oracle Database with Git&lt;/strong&gt; even if the object does not support the CREATE OR REPLACE command. (In Gitora terminology, we call these &lt;em&gt;&lt;strong&gt;&amp;#8220;Hard Objects&amp;#8221;&lt;/strong&gt;&lt;/em&gt;.)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Specifically, Gitora 3 allows developers to manage TABLES, INDEXES, SEQUENCES, CONSTRAINTS, TABLESPACES, MATERIALIZED VIEWS and every other schema or non-schema objects with Git.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Let&amp;#8217;s examine how you can manage these objects with Gitora 3 with an example.&lt;/p&gt;
&lt;h3&gt;Introducing Managed Schemas&lt;/h3&gt;
&lt;p&gt;Gitora 3 introduces the concept of a Managed Schema. A managed schema is an Oracle Database Schema that Gitora tracks for execution of Hard Object DDL&amp;#8217;s. In other words, you register one or more Oracle Schemas to a Gitora repository. Once a schema is registered to a repository, Gitora will track every hard object DDL executed for that schema. A repository can manage many schemas but a schema can only be managed by one repository.&lt;/p&gt;
&lt;h3&gt;Adding A Managed Schema to a Gitora Repository&lt;/h3&gt;
&lt;p&gt;In the Gitora App, select a repository. Click Local Commands &amp;#8211;&amp;gt; Add/Remove Managed Schemas menu option. A dialog shows up.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2017/09/add-managed-schemas.jpg"&gt;&lt;img decoding="async" loading="lazy" class="aligncenter size-full wp-image-323" src="https://blog.gitora.com/wp-content/uploads/2017/09/add-managed-schemas.jpg" alt="" width="504" height="504" srcset="https://blog.gitora.com/wp-content/uploads/2017/09/add-managed-schemas.jpg 504w, https://blog.gitora.com/wp-content/uploads/2017/09/add-managed-schemas-150x150.jpg 150w, https://blog.gitora.com/wp-content/uploads/2017/09/add-managed-schemas-300x300.jpg 300w" sizes="auto, (max-width: 504px) 100vw, 504px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Select the schema(s) you&amp;#8217;d like to manage.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2017/09/add-managed-schemas-HR-selected.jpg"&gt;&lt;img decoding="async" loading="lazy" class="aligncenter size-full wp-image-324" src="https://blog.gitora.com/wp-content/uploads/2017/09/add-managed-schemas-HR-selected.jpg" alt="" width="504" height="505" srcset="https://blog.gitora.com/wp-content/uploads/2017/09/add-managed-schemas-HR-selected.jpg 504w, https://blog.gitora.com/wp-content/uploads/2017/09/add-managed-schemas-HR-selected-150x150.jpg 150w, https://blog.gitora.com/wp-content/uploads/2017/09/add-managed-schemas-HR-selected-300x300.jpg 300w" sizes="auto, (max-width: 504px) 100vw, 504px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Click OK. The dialog closes. The screenshots above show the HR schema being added to a repo as a managed schema.&lt;/p&gt;
&lt;h3&gt;The Model Package&lt;/h3&gt;
&lt;p&gt;After a schema becomes managed, Gitora creates a new package in the schema automatically. This package is always called GITORA_MODEL[X] where [X] is a unique number that identifies the package. In our example above, Gitora created the GITORA_MODEL1 package in the HR schema and added this package to the Git repository which is managing the HR schema:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2017/09/gitora-app-tree-showing-gitora_model1-package.jpg"&gt;&lt;img decoding="async" loading="lazy" class="aligncenter size-full wp-image-325" src="https://blog.gitora.com/wp-content/uploads/2017/09/gitora-app-tree-showing-gitora_model1-package.jpg" alt="" width="273" height="241" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The screenshot above tells us that repo1 is managing the HR schema.&lt;/p&gt;
&lt;h3&gt;Tracking Soft Objects&lt;/h3&gt;
&lt;p&gt;There are no changes in Gitora 3 for soft objects. You continue managing soft objects just like you&amp;#8217;ve been managing them with Gitora 2. In other words, &lt;strong&gt;any repo can manage any number of soft objects and any number of schemas.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;To demonstrate this let&amp;#8217;s add a dummy package called PACKAGE1 to HR and manage it with the same repo named repo1:&lt;/p&gt;
&lt;p&gt;Select Local Commands &amp;#8211;&amp;gt; Add/Remove Soft Objects menu item. A dialog shows up where you can select which soft objects you&amp;#8217;d like to manage with repo1. &lt;strong&gt;Note that, GITORA_MODEL1 package shows up as a managed package because it was automatically created to manage the hard objects in the HR schema. &lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2017/09/soft-object-selection.jpg"&gt;&lt;img decoding="async" loading="lazy" class="aligncenter size-full wp-image-326" src="https://blog.gitora.com/wp-content/uploads/2017/09/soft-object-selection.jpg" alt="" width="522" height="522" srcset="https://blog.gitora.com/wp-content/uploads/2017/09/soft-object-selection.jpg 522w, https://blog.gitora.com/wp-content/uploads/2017/09/soft-object-selection-150x150.jpg 150w, https://blog.gitora.com/wp-content/uploads/2017/09/soft-object-selection-300x300.jpg 300w" sizes="auto, (max-width: 522px) 100vw, 522px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Add PACKAGE1 as a managed package and click OK. The Gitora App shows the following object list for repo1:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2017/09/package1-added.jpg"&gt;&lt;img decoding="async" loading="lazy" class="aligncenter size-full wp-image-327" src="https://blog.gitora.com/wp-content/uploads/2017/09/package1-added.jpg" alt="" width="274" height="261" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;Tracking Hard Object DDL&amp;#8217;s&lt;/h3&gt;
&lt;p&gt;Let&amp;#8217;s execute the following DDL statements for the HR schema: (Note that in the database session we first have to log in to Gitora with a valid Gitora user. In this case, we logged in as admin.)&lt;/p&gt;
&lt;p&gt;[sql]&lt;br /&gt;
ALTER TABLE COUNTRIES MODIFY (COUNTRY_NAME VARCHAR2 (200))&lt;/p&gt;
&lt;p&gt;ALTER TABLE EMPLOYEES ADD (MIDDLE_NAME VARCHAR2 (25))&lt;/p&gt;
&lt;p&gt;ALTER TABLE COUNTRIES ADD (CURRENCY_NAME VARCHAR2 (200))&lt;br /&gt;
[/sql]&lt;/p&gt;
&lt;p&gt;Finally, let&amp;#8217;s also modify a soft object and add a new dummy function to PACKAGE1 called function1.&lt;/p&gt;
&lt;p&gt;To commit our changes, let&amp;#8217;s switch to Gitora App and click the commit button. The My Objects Dialog shows up, displaying the list of soft objects and hard object DDL&amp;#8217;s ready to be committed to Git. Note that the dialog only shows the changes made by the signed in developer:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2017/09/commit-list.jpg"&gt;&lt;img decoding="async" loading="lazy" class="aligncenter size-full wp-image-329" src="https://blog.gitora.com/wp-content/uploads/2017/09/commit-list.jpg" alt="" width="778" height="721" srcset="https://blog.gitora.com/wp-content/uploads/2017/09/commit-list.jpg 778w, https://blog.gitora.com/wp-content/uploads/2017/09/commit-list-300x278.jpg 300w, https://blog.gitora.com/wp-content/uploads/2017/09/commit-list-768x712.jpg 768w" sizes="auto, (max-width: 778px) 100vw, 778px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In this dialog, you can choose which packages or hard object DDL&amp;#8217;s you&amp;#8217;d like to include in this commit by checking/unchecking the checkbox in the Include? columns of both grids.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note that, the commit registers the package update and the table DDL statement as a single logical commit which is a key benefit we&amp;#8217;d like to get from the version control system.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;After the commit, we receive the following message from Git:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2017/09/git-message.jpg"&gt;&lt;img decoding="async" loading="lazy" class="aligncenter size-full wp-image-330" src="https://blog.gitora.com/wp-content/uploads/2017/09/git-message.jpg" alt="" width="491" height="145" srcset="https://blog.gitora.com/wp-content/uploads/2017/09/git-message.jpg 491w, https://blog.gitora.com/wp-content/uploads/2017/09/git-message-300x89.jpg 300w" sizes="auto, (max-width: 491px) 100vw, 491px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Note that, the Git commit not only included PACKAGE1 but also the GITORA_MODEL1 package. After the Git commit is successful, the new GITORA_MODEL1 package code looks like this:&lt;/p&gt;
&lt;p&gt;[sql]&lt;br /&gt;
CREATE OR REPLACE&lt;br /&gt;
PACKAGE BODY gitora_model1 IS &lt;/p&gt;
&lt;p&gt;function doModel return clob is&lt;br /&gt;
  v_log_cl clob;&lt;br /&gt;
  v_ddl_cl clob;&lt;br /&gt;
  v_cursor_int integer;&lt;br /&gt;
  return_value integer;&lt;br /&gt;
  procedure log(in_text_cl clob) is&lt;br /&gt;
  begin&lt;br /&gt;
    v_log_cl:=v_log_cl||in_text_cl||chr(10);&lt;br /&gt;
  end;&lt;br /&gt;
begin&lt;br /&gt;
  /*GITORA GENERATED COMMENT. DO NOT EDIT OR REMOVE. ONLY WRITE CODE UNDER THIS LINE.*/&lt;br /&gt;
  null;&lt;/p&gt;
&lt;p&gt;  /*SCRIPT FOR HR.COUNTRIES by user:admin */&lt;br /&gt;
  begin&lt;br /&gt;
    v_ddl_cl:=&amp;#8217;ALTER TABLE COUNTRIES&lt;br /&gt;
   MODIFY (&lt;br /&gt;
    COUNTRY_NAME VARCHAR2 (200)&lt;/p&gt;
&lt;p&gt;   )&lt;br /&gt;
  &amp;#8216;;&lt;br /&gt;
    log(v_ddl_cl);&lt;br /&gt;
    execute immediate v_ddl_cl;&lt;br /&gt;
    log(&amp;#8216;DDL executed successfully.&amp;#8217;);&lt;br /&gt;
  exception&lt;br /&gt;
    when others then&lt;br /&gt;
      log(&amp;#8216;ERROR:&amp;#8217;||&amp;#8217; &amp;#8216;||SQLErrm||&amp;#8217; &amp;#8216;||dbms_utility.format_error_backtrace);&lt;br /&gt;
  end;&lt;/p&gt;
&lt;p&gt;  /*SCRIPT FOR HR.EMPLOYEES by user:admin */&lt;br /&gt;
  begin&lt;br /&gt;
    v_ddl_cl:=&amp;#8217;ALTER TABLE EMPLOYEES&lt;br /&gt;
   ADD (&lt;br /&gt;
    MIDDLE_NAME VARCHAR2 (25)&lt;br /&gt;
   )&lt;br /&gt;
  &amp;#8216;;&lt;br /&gt;
    log(v_ddl_cl);&lt;br /&gt;
    execute immediate v_ddl_cl;&lt;br /&gt;
    log(&amp;#8216;DDL executed successfully.&amp;#8217;);&lt;br /&gt;
  exception&lt;br /&gt;
    when others then&lt;br /&gt;
      log(&amp;#8216;ERROR:&amp;#8217;||&amp;#8217; &amp;#8216;||SQLErrm||&amp;#8217; &amp;#8216;||dbms_utility.format_error_backtrace);&lt;br /&gt;
  end;&lt;/p&gt;
&lt;p&gt;  /*SCRIPT FOR HR.COUNTRIES by user:admin */&lt;br /&gt;
  begin&lt;br /&gt;
    v_ddl_cl:=&amp;#8217;ALTER TABLE COUNTRIES&lt;br /&gt;
   ADD (&lt;br /&gt;
    CURRENCY_NAME VARCHAR2 (200)&lt;br /&gt;
   )&lt;br /&gt;
  &amp;#8216;;&lt;br /&gt;
    log(v_ddl_cl);&lt;br /&gt;
    execute immediate v_ddl_cl;&lt;br /&gt;
    log(&amp;#8216;DDL executed successfully.&amp;#8217;);&lt;br /&gt;
  exception&lt;br /&gt;
    when others then&lt;br /&gt;
      log(&amp;#8216;ERROR:&amp;#8217;||&amp;#8217; &amp;#8216;||SQLErrm||&amp;#8217; &amp;#8216;||dbms_utility.format_error_backtrace);&lt;br /&gt;
  end;&lt;br /&gt;
  /*GITORA GENERATED COMMENT. DO NOT EDIT OR REMOVE. ONLY WRITE CODE ABOVE THIS LINE.*/&lt;br /&gt;
  return v_log_cl;&lt;br /&gt;
end;&lt;br /&gt;
end;&lt;br /&gt;
[/sql]&lt;/p&gt;
&lt;h3&gt;The GITORA_MODEL Package&lt;/h3&gt;
&lt;p&gt;The GITORA_MODEL packages contain the DDL statements you commit to your Git repository for the schema they are in. You can edit them any way you&amp;#8217;d like to change the DDL statements, call other functions and procedures etc&amp;#8230; In other words, they are no different than any other package you are managing with Gitora.&lt;/p&gt;
&lt;p&gt;GITORA_MODEL.doModel function executes the DDL statements stored in the package. You can use the doModel function to execute the changes in a target database. For example, after development is completed for a new version, you can pull the new version to from DEV to the TEST database and simply execute the GITORA_MODEL.doModel function to transfer the hard object updates to TEST.&lt;/p&gt;
&lt;p&gt;Errors during its execution does not prevent the doModel function from executing remaning DDL statements. The function captures these errors and returns them as a CLOB value. This way, the same GITORA_MODEL package can be executed many times even if contains DDL statements that are previously executed in the target database (because these statements will silently fail). The GITORA_MODEL packages requires minimal maintanance, if any at all.&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;Non-Schema Objects and GRANTS&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Not every database object has a schema. For example, TABLESPACES do not have an owner schema. DDL statements for non-schema objects are tracked by Gitora if the Oracle User(schema) who executed the statement is being managed by Gitora. For example, in the case above, if a DDL statement to create a TABLESPACE is executed by the Oracle User HR, then this DDL will be tracked by repo1.&lt;/p&gt;
&lt;p&gt;Similarly, any GRANT and REVOKE statement will be tracked by the Gitora repo which is managing the Oracle User(schema).&lt;/p&gt;
&lt;h3&gt;Customization&lt;/h3&gt;
&lt;p&gt;You may not want to manage every object or object type with Gitora. Moreover, you may want to define complex rules to decide which object is managed by which repo. Customizing what types of objects Gitora should manage and in which repo is very easy using PL/SQL. Gitora uses four database level DDL triggers to detect DDL statement execution. By editing these triggers, you can define any kind of rule you like.&lt;/p&gt;
&lt;p&gt;For example, a common rule used by Gitora customers is to allow developers to create tables for testing purposes. These tables do not need to be managed by Gitora. One of the easy ways of implementing this rule is to tell developers to use a certain prefix such as Z_ for test tables, and exclude any table DDL statement from executing Gitora API&amp;#8217;s in the four DDL triggers if the table name starts with Z_.&lt;/p&gt;
&lt;h3&gt;Existing Customers&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Gitora 3 is a free upgrade for all current customers.&lt;/strong&gt; Please allow us 2-3 weeks to send us your new license scripts.&lt;/p&gt;
&lt;p&gt;We&amp;#8217;ll have more tutorials and webinars about Gitora 3 in the near future. &lt;span style="color: #0000ff;"&gt;&lt;a href="http://www.gitora.com/download.php"&gt;Now download the Gitora 3 trial and start playing!&lt;/a&gt;&lt;/span&gt; 🙂&lt;/p&gt;</description><pubDate>Thu, 07 Sep 2017 07:26:48 +0300</pubDate></item><item><title>Agile Development with Oracle PL/SQL</title><link>https://blog.gitora.com/plsql-how-to-develop-two-features-simultaneously-but-deploy-only-one/</link><guid>https://blog.gitora.com/plsql-how-to-develop-two-features-simultaneously-but-deploy-only-one/</guid><description>&lt;p class="wp-block-paragraph"&gt;This articles is about agile development using multiple (pluggable) databases. &lt;a rel="noreferrer noopener" href="https://blog.gitora.com/agile-development-with-a-single-database/" data-type="URL" data-id="https://blog.gitora.com/agile-development-with-a-single-database/" target="_blank"&gt;If you are trying to implement an agile workflow using a single database please read this article.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;iframe loading="lazy" title="Agile Database Development with Gitora" width="1170" height="878" src="https://www.youtube.com/embed/NVVB4MkSA-c?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen&gt;&lt;/iframe&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Here is the number one question we receive from PL/SQL developers, DBA&amp;#8217;s and IT managers who are implementing a version control solution for their Oracle Database:&lt;/p&gt;

&lt;figure class="wp-block-pullquote"&gt;&lt;blockquote&gt;&lt;p&gt;Developer 1 (or Team 1) works on Feature A (or issue A, bug A, project A). Developer 2 works on Feature B. Both developers make many changes to the PL/SQL code and many commits to the version control repository. We move to testing. Based on the test results, even more commits are made by both developers. Now at the last minute, due to some reason  we&amp;nbsp;decide to ship Feature B only. How can we remove Feature A from the source code easily?&amp;nbsp;How does Gitora help in such a situation?&lt;/p&gt;&lt;/blockquote&gt;&lt;/figure&gt;

&lt;p class="wp-block-paragraph"&gt;There are multiple answers to this question. Below, I&amp;#8217;ll go over two possible solutions for two potential setups:&lt;/p&gt;

&lt;ol class="wp-block-list"&gt;&lt;li&gt;&lt;a href="#shared"&gt;If you are using one shared development database&lt;/a&gt;&lt;br&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="#multiple"&gt;If you are using multiple development databases&lt;/a&gt; (or at least you are open to the idea.)&lt;/li&gt;&lt;/ol&gt;

&lt;h2 class="wp-block-heading" id="shared"&gt;If You Are Using One Shared Development Database&lt;/h2&gt;

&lt;p class="wp-block-paragraph"&gt;Let&amp;#8217;s assume that our shared development database is called DEV. In other words, both Feature A and Feature B are being developed in the same code base. Let&amp;#8217;s also assume&amp;nbsp;our only test database is called TEST.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Finally, assume that DEV and TEST are managed by Gitora. All version control operations are done with Gitora.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;In this case, the commit history of the DEV repo has changes both for Feature A and B in a random order and looks something like this:&lt;/p&gt;

&lt;div class="wp-block-image"&gt;&lt;figure class="aligncenter"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2017/05/shareddb-commit-history.jpg"&gt;&lt;img decoding="async" width="213" height="291" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2017/05/shareddb-commit-history.jpg" alt="" class="wp-image-227"/&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/div&gt;

&lt;p class="wp-block-paragraph"&gt;There is no easy&amp;nbsp;way to remove the commits for Feature B in this setup. If the team decides to deliver Feature A to production but postpone the delivery of Feature B here are the steps they should follow:&lt;/p&gt;

&lt;ul class="wp-block-list"&gt;&lt;li&gt;Go over the commit history of the DEV repo and find the commits that are related to Feature A.&lt;br&gt;&lt;/li&gt;&lt;li&gt;Comment out/revert back/change the edits made for Feature A. Git will help the developers to see what&amp;#8217;s changed, added, deleted and what the previous versions of code objects looked like.&lt;br&gt;&lt;/li&gt;&lt;li&gt;Commit these new changes to the DEV repo.&lt;/li&gt;&lt;/ul&gt;

&lt;p class="wp-block-paragraph"&gt;At this point the commit history in the DEV repo looks something like this:&lt;/p&gt;

&lt;div class="wp-block-image"&gt;&lt;figure class="aligncenter"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2017/05/shareddb-commit-history-4.jpg"&gt;&lt;img decoding="async" width="237" height="348" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2017/05/shareddb-commit-history-4.jpg" alt="" class="wp-image-287" srcset="https://blog.gitora.com/wp-content/uploads/2017/05/shareddb-commit-history-4.jpg 237w, https://blog.gitora.com/wp-content/uploads/2017/05/shareddb-commit-history-4-204x300.jpg 204w" sizes="auto, (max-width: 237px) 100vw, 237px" /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/div&gt;

&lt;p class="wp-block-paragraph"&gt;And finally, the next steps are:&lt;/p&gt;

&lt;ul class="wp-block-list"&gt;&lt;li&gt;Pull the new version from DEV to TEST.&lt;br&gt;&lt;/li&gt;&lt;li&gt;Run tests on the TEST database. If there are no errors, deliver the new version to production. If there are errors, go to the second&amp;nbsp;step, wash, rinse and repeat until the desired outcome is reached.&lt;/li&gt;&lt;/ul&gt;

&lt;p class="wp-block-paragraph"&gt;In such a setup Gitora&amp;nbsp;provides the following benefits:&lt;/p&gt;

&lt;ul class="wp-block-list"&gt;&lt;li&gt;Gitora&amp;nbsp;keeps track of all changes made to the PL/SQL code in the DEV database, automatically. Developers do not have to remember which&amp;nbsp;PL/SQL objects they modified and what they modified in those objects.&lt;br&gt;&lt;/li&gt;&lt;li&gt;Moving the code between DEV and TEST is as easy as clicking a button. The team does not need to manually prepare scripts.&lt;/li&gt;&lt;/ul&gt;

&lt;p class="wp-block-paragraph"&gt;The downside of this approach is that it involves manual work which is error prone. Developers still have to manually go through the commit history and make&amp;nbsp;the changes to the source code in DEV to disable/remove Feature A. With only one shared development database, there is no easy way to remove Feature A.&lt;/p&gt;

&lt;h2 class="wp-block-heading" id="multiple"&gt;If You Are Using Multiple Development Databases&lt;/h2&gt;

&lt;p class="wp-block-paragraph"&gt;Now things get more interesting. Below is a simplified workflow that uses only two development databases. This setup&amp;nbsp;enables the IT team to deliver&amp;nbsp;only the Feature B&amp;nbsp;without manually editing PL/SQL code objects to remove Feature A.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Here is our initial set up:&lt;/p&gt;

&lt;div class="wp-block-image"&gt;&lt;figure class="aligncenter"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2017/05/multidb-setup2.jpg"&gt;&lt;img decoding="async" width="648" height="432" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2017/05/multidb-setup2.jpg" alt="" class="wp-image-314" srcset="https://blog.gitora.com/wp-content/uploads/2017/05/multidb-setup2.jpg 648w, https://blog.gitora.com/wp-content/uploads/2017/05/multidb-setup2-300x200.jpg 300w" sizes="auto, (max-width: 648px) 100vw, 648px" /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/div&gt;

&lt;ul class="wp-block-list"&gt;&lt;li&gt;Developer 1&amp;nbsp;works in the database DEV1 and Developer 2 works in the database DEV2 i.e. both developers (teams) have their own private environment while they are developing their respective features.&lt;br&gt;&lt;/li&gt;&lt;li&gt;Our only test database is called TEST.&lt;br&gt;&lt;/li&gt;&lt;li&gt;All databases are managed by Gitora and all Git command are executed using Gitora.&lt;br&gt;&lt;/li&gt;&lt;li&gt;DEV1, DEV2 and TEST start with the same version of the code which is stored in the master branch of their respective Git repositories.&amp;nbsp;(In other words, DEV1/master and DEV2/master are clones of TEST/master)&lt;/li&gt;&lt;/ul&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Developer 1:&lt;/strong&gt;&lt;/p&gt;

&lt;ul class="wp-block-list"&gt;&lt;li&gt;Create a new branch named featureA (DEV1/featureA). Switch DEV1 to use this new branch.&lt;br&gt;&lt;/li&gt;&lt;li&gt;Write code in DEV1&lt;br&gt;&lt;/li&gt;&lt;li&gt;Commit code changes to the DEV1/featureA. Go back to step 2 as many times as needed.&lt;/li&gt;&lt;/ul&gt;

&lt;p class="wp-block-paragraph"&gt;As an example, the Git history in Gitora DEV1 looks like this:&lt;/p&gt;

&lt;div class="wp-block-image"&gt;&lt;figure class="aligncenter"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2017/05/shareddb-commit-history-1.jpg"&gt;&lt;img decoding="async" width="193" height="231" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2017/05/shareddb-commit-history-1.jpg" alt="" class="wp-image-254"/&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/div&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Developer 2:&lt;/strong&gt;&lt;/p&gt;

&lt;ul class="wp-block-list"&gt;&lt;li&gt;Create a new branch named featureB (DEV2/featureB). Switch DEV2 to use this new branch.&lt;br&gt;&lt;/li&gt;&lt;li&gt;Write code in DEV2&lt;br&gt;&lt;/li&gt;&lt;li&gt;Commit code changes to the repository to DEV2/featureB (using Gitora DEV2). Go back to step 2 as many times as needed.&lt;/li&gt;&lt;/ul&gt;

&lt;p class="wp-block-paragraph"&gt;The Git commit history in Gitora DEV2 looks like this:&lt;/p&gt;

&lt;div class="wp-block-image"&gt;&lt;figure class="aligncenter"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2017/05/multi-db-dev2.jpg"&gt;&lt;img decoding="async" width="192" height="225" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2017/05/multi-db-dev2.jpg" alt="" class="wp-image-258"/&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/div&gt;

&lt;h3 class="wp-block-heading"&gt;Moving Code Between Databases&lt;/h3&gt;

&lt;p class="wp-block-paragraph"&gt;At any point in time, if Developer 1 or Developer 2 decides to send code to TEST (for example, for integration testing purposes..), they follow the steps below.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Please note that in real world development, the workflows described below&amp;nbsp;can be performed simultaneously in DEV1 and DEV2, in no particular&amp;nbsp;order, any number of times until both features are ready to be deployed to production.&lt;/strong&gt;&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;The steps below are merely a simplified example of how this workflow takes place.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Developer 1:&lt;/strong&gt;&lt;/p&gt;

&lt;ul class="wp-block-list"&gt;&lt;li&gt;In our example , we assume that Developer 1 is the first developer sending her commits to TEST.&lt;br&gt;&lt;/li&gt;&lt;li&gt;Merge DEV1/featureA to DEV1/master. (DEV1/featureA &amp;#8211;&amp;gt; DEV1/master). After the merge, commit history for DEV1 looks like this:&lt;/li&gt;&lt;/ul&gt;

&lt;div class="wp-block-image"&gt;&lt;figure class="aligncenter"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2017/05/multi-db-dev1-merged-1.jpg"&gt;&lt;img decoding="async" width="209" height="284" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2017/05/multi-db-dev1-merged-1.jpg" alt="" class="wp-image-255"/&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/div&gt;

&lt;ul class="wp-block-list"&gt;&lt;li&gt;Pull master branch from DEV1 to TEST. (DEV1/master &amp;#8211;&amp;gt; TEST/master). A &amp;#8220;Pull&amp;#8221; is simply a two step process of fetching a branch from a remote Git repository and then merging it to a local branch. In our example TEST fetches DEV1/master from DEV1 and merges it to TEST/master which we simply show as DEV1/master &amp;#8211;&amp;gt; TEST/master.&lt;br&gt;&lt;br&gt;After the pull, commit history of both TEST and DEV1 looks like this:&lt;/li&gt;&lt;/ul&gt;

&lt;div class="wp-block-image"&gt;&lt;figure class="aligncenter"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2017/05/multi-db-dev1-merged2.jpg"&gt;&lt;img decoding="async" width="327" height="341" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2017/05/multi-db-dev1-merged2.jpg" alt="" class="wp-image-268" srcset="https://blog.gitora.com/wp-content/uploads/2017/05/multi-db-dev1-merged2.jpg 327w, https://blog.gitora.com/wp-content/uploads/2017/05/multi-db-dev1-merged2-288x300.jpg 288w" sizes="auto, (max-width: 327px) 100vw, 327px" /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/div&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;strong&gt;Developer 2:&lt;/strong&gt;&lt;/p&gt;

&lt;ul class="wp-block-list"&gt;&lt;li&gt;Pull master branch from TEST to the master branch in DEV2. (TEST/master &amp;#8211;&amp;gt; DEV2/master). (In our example, this is necessary, because TEST/master has received new commits from DEV1/master.) After the pull, the commit history looks like this: (Remember, previously we pulled commits from DEV1/master to TEST/master and we also made commits to DEV2/featureB)&lt;/li&gt;&lt;/ul&gt;

&lt;div class="wp-block-image"&gt;&lt;figure class="aligncenter"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2017/05/multidb-dev2-pull-from-test-to-dev2.jpg"&gt;&lt;img decoding="async" width="350" height="219" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2017/05/multidb-dev2-pull-from-test-to-dev2.jpg" alt="" class="wp-image-260" srcset="https://blog.gitora.com/wp-content/uploads/2017/05/multidb-dev2-pull-from-test-to-dev2.jpg 350w, https://blog.gitora.com/wp-content/uploads/2017/05/multidb-dev2-pull-from-test-to-dev2-300x188.jpg 300w" sizes="auto, (max-width: 350px) 100vw, 350px" /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/div&gt;

&lt;ul class="wp-block-list"&gt;&lt;li&gt;Merge DEV2/featureB to DEV2/master. (DEV2/featureB &amp;#8211;&amp;gt; DEV2/master) After the merge, the commit history looks like this:&lt;/li&gt;&lt;/ul&gt;

&lt;div class="wp-block-image"&gt;&lt;figure class="aligncenter"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2017/05/multidb-dev2-merge-fb-to-master.jpg"&gt;&lt;img decoding="async" width="350" height="280" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2017/05/multidb-dev2-merge-fb-to-master.jpg" alt="" class="wp-image-261" srcset="https://blog.gitora.com/wp-content/uploads/2017/05/multidb-dev2-merge-fb-to-master.jpg 350w, https://blog.gitora.com/wp-content/uploads/2017/05/multidb-dev2-merge-fb-to-master-300x240.jpg 300w" sizes="auto, (max-width: 350px) 100vw, 350px" /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/div&gt;

&lt;ul class="wp-block-list"&gt;&lt;li&gt;Pull master branch from DEV2 to TEST. (DEV2/master &amp;#8211;&amp;gt; TEST/master). After the pull, the commit history looks like this:&lt;/li&gt;&lt;/ul&gt;

&lt;div class="wp-block-image"&gt;&lt;figure class="aligncenter"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2017/05/multidb-dev2-merge-dev2-master-to-test-master.jpg"&gt;&lt;img decoding="async" width="350" height="339" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2017/05/multidb-dev2-merge-dev2-master-to-test-master.jpg" alt="" class="wp-image-262" srcset="https://blog.gitora.com/wp-content/uploads/2017/05/multidb-dev2-merge-dev2-master-to-test-master.jpg 350w, https://blog.gitora.com/wp-content/uploads/2017/05/multidb-dev2-merge-dev2-master-to-test-master-300x291.jpg 300w" sizes="auto, (max-width: 350px) 100vw, 350px" /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/div&gt;

&lt;p class="wp-block-paragraph"&gt;In other words, in its final state, the source code in the TEST database is a merge of Feature A and B where the commits in TEST/master branch are combined. In our example, the full commit history of DEV1, DEV2 and TEST repositories look like this:&lt;/p&gt;

&lt;div class="wp-block-image"&gt;&lt;figure class="aligncenter"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2017/05/full-history-2.jpg"&gt;&lt;img decoding="async" width="405" height="749" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2017/05/full-history-2.jpg" alt="" class="wp-image-277" srcset="https://blog.gitora.com/wp-content/uploads/2017/05/full-history-2.jpg 405w, https://blog.gitora.com/wp-content/uploads/2017/05/full-history-2-162x300.jpg 162w" sizes="auto, (max-width: 405px) 100vw, 405px" /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/div&gt;

&lt;p class="wp-block-paragraph"&gt;Note that at all times, DEV1/featureA only contains the code for Feature A. Similarly, DEV2/featureB only contains the code for Feature B.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;This workflow enables the IT team to exclude Feature A from the next deployment at any point in time before going to production.&lt;/p&gt;

&lt;h2 class="wp-block-heading"&gt;Removing Feature A from the Deployment&lt;/h2&gt;

&lt;p class="wp-block-paragraph"&gt;To achieve this in our example, follow the&amp;nbsp;steps below:&lt;/p&gt;

&lt;ul class="wp-block-list"&gt;&lt;li&gt;Revert DEV2/master back to its initial state where no code&amp;nbsp;for&amp;nbsp;Feature B has been committed&amp;nbsp;yet. (This uses the Git reset command.)&lt;/li&gt;&lt;/ul&gt;

&lt;div class="wp-block-image"&gt;&lt;figure class="aligncenter"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2017/05/dev2-master-reset-to-initial-state-3.jpg"&gt;&lt;img decoding="async" width="399" height="741" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2017/05/dev2-master-reset-to-initial-state-3.jpg" alt="" class="wp-image-278" srcset="https://blog.gitora.com/wp-content/uploads/2017/05/dev2-master-reset-to-initial-state-3.jpg 399w, https://blog.gitora.com/wp-content/uploads/2017/05/dev2-master-reset-to-initial-state-3-162x300.jpg 162w" sizes="auto, (max-width: 399px) 100vw, 399px" /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/div&gt;

&lt;ul class="wp-block-list"&gt;&lt;li&gt;Merge DEV2/featureB to DEV2/master. (DEV2/featureB &amp;#8211;&amp;gt; DEV2/master)&lt;/li&gt;&lt;/ul&gt;

&lt;div class="wp-block-image"&gt;&lt;figure class="aligncenter"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2017/05/featureB-merged-to-new-dev2-master.jpg"&gt;&lt;img decoding="async" width="399" height="741" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2017/05/featureB-merged-to-new-dev2-master.jpg" alt="" class="wp-image-279" srcset="https://blog.gitora.com/wp-content/uploads/2017/05/featureB-merged-to-new-dev2-master.jpg 399w, https://blog.gitora.com/wp-content/uploads/2017/05/featureB-merged-to-new-dev2-master-162x300.jpg 162w" sizes="auto, (max-width: 399px) 100vw, 399px" /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/div&gt;

&lt;ul class="wp-block-list"&gt;&lt;li&gt;Reset TEST/master to its original state.&lt;/li&gt;&lt;/ul&gt;

&lt;div class="wp-block-image"&gt;&lt;figure class="aligncenter"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2017/05/test-master-reset-to-origin-2.jpg"&gt;&lt;img decoding="async" width="399" height="613" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2017/05/test-master-reset-to-origin-2.jpg" alt="" class="wp-image-284" srcset="https://blog.gitora.com/wp-content/uploads/2017/05/test-master-reset-to-origin-2.jpg 399w, https://blog.gitora.com/wp-content/uploads/2017/05/test-master-reset-to-origin-2-195x300.jpg 195w" sizes="auto, (max-width: 399px) 100vw, 399px" /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/div&gt;

&lt;ul class="wp-block-list"&gt;&lt;li&gt;Finally, pull the master branch of DEV2 to the master branch of TEST. (DEV2/master &amp;#8211;&amp;gt; TEST/master)&lt;/li&gt;&lt;/ul&gt;

&lt;div class="wp-block-image"&gt;&lt;figure class="aligncenter"&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2017/05/featureB-merged-to-test-master-2.jpg"&gt;&lt;img decoding="async" width="399" height="800" loading="lazy" src="https://blog.gitora.com/wp-content/uploads/2017/05/featureB-merged-to-test-master-2.jpg" alt="" class="wp-image-285" srcset="https://blog.gitora.com/wp-content/uploads/2017/05/featureB-merged-to-test-master-2.jpg 399w, https://blog.gitora.com/wp-content/uploads/2017/05/featureB-merged-to-test-master-2-150x300.jpg 150w" sizes="auto, (max-width: 399px) 100vw, 399px" /&gt;&lt;/a&gt;&lt;/figure&gt;&lt;/div&gt;

&lt;p class="wp-block-paragraph"&gt;After these steps are completed, the TEST database only contains code changes related to Feature B. We can use Gitora to extract a DDL script which contains only the changes made between the initial and final state of TEST/master and use this script to deploy the new version which only includes Feature B to the production database.&lt;/p&gt;

&lt;p class="wp-block-paragraph"&gt;Gitora helps developers execute this workflow with a point&amp;amp;click GUI. Specifically:&lt;/p&gt;

&lt;ul class="wp-block-list"&gt;&lt;li&gt;Gitora&amp;nbsp;keeps track of all changes made to the PL/SQL code in DEV1, DEV2 and TEST automatically.&lt;br&gt;&lt;/li&gt;&lt;li&gt;Gitora updates the source code in the Oracle Database automatically when the executed Git command changes the files in the working directory.&lt;/li&gt;&lt;/ul&gt;

&lt;p class="wp-block-paragraph"&gt;Therefore:&lt;/p&gt;

&lt;ul class="wp-block-list"&gt;&lt;li&gt;Developers don&amp;#8217;t have to remember which&amp;nbsp;PL/SQL objects they modified and what they&amp;nbsp;modified in those objects.&lt;br&gt;&lt;/li&gt;&lt;li&gt;Moving the code between DEV1, DEV2 and TEST is as easy as clicking a button. The team does not need to manually prepare scripts. Gitora can either generate the scripts or update the databases automatically.&lt;br&gt;&lt;/li&gt;&lt;li&gt;Crucially, Gitora enables Developer 1 and Developer 2 to switch between code branches automatically. (For example if the DEV1 database switches from featureA branch to the master branch, Gitora automatically updates the code in the DEV1 database to reflect this change.)&lt;/li&gt;&lt;/ul&gt;

&lt;p class="wp-block-paragraph"&gt;&lt;span style="color: #0000ff;"&gt;&lt;a style="color: #0000ff;" href="http://www.gitora.com/download.php"&gt;Download Gitora&lt;/a&gt;&lt;/span&gt; now and try this workflow in your environment.&lt;/p&gt;</description><pubDate>Thu, 25 May 2017 20:58:57 +0300</pubDate></item><item><title>ODTUG Webinar about Version Control for PL/SQL</title><link>https://blog.gitora.com/odtug-webinar-about-version-control-for-plsql/</link><guid>https://blog.gitora.com/odtug-webinar-about-version-control-for-plsql/</guid><description>&lt;p&gt;This week I hosted a webinar for ODTUG members about how to implement a version control solution for the Oracle Database using Git. Many thanks to the 119 attendees who joined the live event. I am very happy to see that version control is now being recognized as a serious pain point among Oracle Database customers.&lt;/p&gt;
&lt;p&gt;Please see below for the video and the slides of the presentation:&lt;/p&gt;
&lt;p&gt;&lt;iframe loading="lazy" title="Source Control for Oracle" width="1170" height="658" src="https://www.youtube.com/embed/rrYPfpIWypc?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;&lt;iframe loading="lazy" style="border: 1px solid #CCC; border-width: 1px; margin-bottom: 5px; max-width: 100%;" src="//www.slideshare.net/slideshow/embed_code/key/poEnaT9TCw0tAG" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" allowfullscreen="allowfullscreen"&gt; &lt;/iframe&gt;&lt;/p&gt;</description><pubDate>Thu, 23 Feb 2017 20:24:53 +0300</pubDate></item><item><title>Webinar Video and Slides</title><link>https://blog.gitora.com/webinar-video-and-slides-2/</link><guid>https://blog.gitora.com/webinar-video-and-slides-2/</guid><description>&lt;p&gt;Last week, we hosted another webinar to talk about Gitora and how it helps Oracle developers manage their PL/SQL code base. Below are the slides we used during the webinar:&lt;/p&gt;
&lt;p&gt;&lt;iframe loading="lazy" style="border: 1px solid #CCC; border-width: 1px; margin-bottom: 5px; max-width: 100%;" src="//www.slideshare.net/slideshow/embed_code/key/LNwZmDVoMLrnTE" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" allowfullscreen="allowfullscreen"&gt; &lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;You can watch the recording of the webinar below:&lt;/p&gt;
&lt;p&gt;&lt;iframe loading="lazy" title="Version Control for PL SQL" width="1170" height="658" src="https://www.youtube.com/embed/oRLbzYk8el8?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen&gt;&lt;/iframe&gt;&lt;/p&gt;</description><pubDate>Thu, 09 Feb 2017 00:11:39 +0300</pubDate></item><item><title>Gitora in 30 Minutes</title><link>https://blog.gitora.com/gitora-in-30-minutes/</link><guid>https://blog.gitora.com/gitora-in-30-minutes/</guid><description>&lt;p&gt;Gitora is the version control tool for PL/SQL. It hooks Git to the Oracle Database and enables you to manage your PL/SQL code base easily. Below is a 30 minute demo video which explains the benefits of Gitora and how it works.&lt;/p&gt;
&lt;p&gt;&lt;iframe loading="lazy" title="Gitora Demo" width="1170" height="878" src="https://www.youtube.com/embed/kWm20VJuCHU?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen&gt;&lt;/iframe&gt;&lt;/p&gt;</description><pubDate>Mon, 16 Jan 2017 20:09:11 +0300</pubDate></item><item><title>Rhenus Uses Gitora</title><link>https://blog.gitora.com/rhenus-uses-gitora/</link><guid>https://blog.gitora.com/rhenus-uses-gitora/</guid><description>&lt;p&gt;It&amp;#8217;s been a little over three months since we released Gitora 2.0 and the first success stories have already started to surface. Here is one of them:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2016/12/Rhenus-logistics.png"&gt;&lt;img decoding="async" loading="lazy" class="aligncenter wp-image-178 size-large" src="https://blog.gitora.com/wp-content/uploads/2016/12/Rhenus-logistics-1024x191.png" width="620" height="116" srcset="https://blog.gitora.com/wp-content/uploads/2016/12/Rhenus-logistics-1024x191.png 1024w, https://blog.gitora.com/wp-content/uploads/2016/12/Rhenus-logistics-300x56.png 300w, https://blog.gitora.com/wp-content/uploads/2016/12/Rhenus-logistics-768x144.png 768w, https://blog.gitora.com/wp-content/uploads/2016/12/Rhenus-logistics.png 2000w" sizes="auto, (max-width: 620px) 100vw, 620px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Rhenus Logistics, the leading logistics company from Germany uses Gitora to manage their Oracle Database.&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;Problem&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;Rhenus IT uses both Java and PL/SQL to serve their users and customers. They have a team of about 10 PL/SQL developers. &lt;strong&gt;The team manages more than 20,000 database packages, views, functions, procedures, object types and triggers spread over 30+ database schemas.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Rhenus IT wanted to move to a continuous delivery environment in which they can be more agile and deliver solutions to the business faster. &lt;strong&gt;Managing the PL/SQL code was the hardest piece of the puzzle.&lt;/strong&gt;&lt;/p&gt;
&lt;h3&gt;&lt;strong&gt;Solution&lt;/strong&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;After experimenting with other solutions in the market, Rhenus decided to move forward with Gitora.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2016/12/rhenus-success-story.jpg"&gt;&lt;img decoding="async" loading="lazy" class="aligncenter size-large wp-image-189" src="https://blog.gitora.com/wp-content/uploads/2016/12/rhenus-success-story-1024x769.jpg" alt="" width="620" height="466" srcset="https://blog.gitora.com/wp-content/uploads/2016/12/rhenus-success-story-1024x769.jpg 1024w, https://blog.gitora.com/wp-content/uploads/2016/12/rhenus-success-story-300x225.jpg 300w, https://blog.gitora.com/wp-content/uploads/2016/12/rhenus-success-story-768x577.jpg 768w, https://blog.gitora.com/wp-content/uploads/2016/12/rhenus-success-story.jpg 1849w" sizes="auto, (max-width: 620px) 100vw, 620px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Gitora enabled Rhenus Developers to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Use Git, the prominent open source version control system used by millions of developers.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Move their database code between development and various staging databases automatically.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Move code between source and target databases very fast because Gitora only executes differences between source and target databases, without comparing the code bases in both databases first (which can be very time consuming).&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Enforce check-in, check-out of database objects at the database level.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Automate build process for the database code using Gitora API&amp;#8217;s.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Implement an affordable continuous delivery solution compared to alternatives.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Michiel Arentsen, the System Architect at Rhenus who implemented the solution at Rhenus has started an excellent blog in which he writes about his Gitora implementation. We highly recommend you to check it out. Below are the list of blog posts he wrote which should be very useful to anyone who is currently implementing Gitora at his/her company:&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #0000ff; text-decoration: underline;"&gt;&lt;a style="color: #0000ff;" href="http://michielarentsen.blogspot.com/2016/11/using-gitora-with-allround-automations.html"&gt;Using Gitora in PL/SQL Developer dual or multi session mode&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #0000ff; text-decoration: underline;"&gt;&lt;a style="color: #0000ff;" href="http://michielarentsen.blogspot.com/2016/11/automatically-login-to-gitora-when.html"&gt;Automatically log in to Gitora when connecting to Oracle&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #0000ff; text-decoration: underline;"&gt;&lt;a style="color: #0000ff;" href="http://michielarentsen.blogspot.com/2016/11/a-fast-way-to-load-gitora-repository.html"&gt;A fast way to load your database objects to a Gitora repository&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #0000ff; text-decoration: underline;"&gt;&lt;a style="color: #0000ff;" href="http://michielarentsen.blogspot.com/2016/11/automatically-add-new-database-objects.html"&gt;Automatically add new database objects to Gitora&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style="color: #0000ff; text-decoration: underline;"&gt;&lt;a style="color: #0000ff;" href="http://michielarentsen.blogspot.com/2016/11/start-gitora-as-windows-service_20.html"&gt;Start Gitora as a Windows service&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description><pubDate>Mon, 26 Dec 2016 23:10:51 +0300</pubDate></item><item><title>Gitora 2.1 is available with tagging support</title><link>https://blog.gitora.com/gitora-2-1-is-available-for-download/</link><guid>https://blog.gitora.com/gitora-2-1-is-available-for-download/</guid><description>&lt;p&gt;We are happy to announce that Gitora 2.1 is available for download. Along with a few bug fixes, Gitora 2.1 enables PL/SQL developers to use Git Tags to label any commit point in the Git repository.&lt;/p&gt;
&lt;p&gt;Tags can be used for a variety of use cases but the most common one is to label a Commit ID for specific versions of the code base such as tagging a specific commit with the label &amp;#8220;Version 2.0&amp;#8221;.&lt;/p&gt;
&lt;p&gt;It is very easy to create tags in Gitora. Simply, go to the local commands menu, select &amp;#8220;Create Tag&amp;#8221; menu item under &amp;#8220;Tags&amp;#8221;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2016/12/gitora-tags-menu.png"&gt;&lt;img decoding="async" loading="lazy" class="aligncenter size-medium wp-image-163" src="https://blog.gitora.com/wp-content/uploads/2016/12/gitora-tags-menu-300x276.png" alt="gitora-tags-menu" width="300" height="276" srcset="https://blog.gitora.com/wp-content/uploads/2016/12/gitora-tags-menu-300x276.png 300w, https://blog.gitora.com/wp-content/uploads/2016/12/gitora-tags-menu.png 332w" sizes="auto, (max-width: 300px) 100vw, 300px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;A dialog shows up.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2016/12/Gitora-Create-Tag-Dialog.png"&gt;&lt;img decoding="async" loading="lazy" class="aligncenter size-medium wp-image-164" src="https://blog.gitora.com/wp-content/uploads/2016/12/Gitora-Create-Tag-Dialog-300x111.png" alt="Create Tag Dialog" width="300" height="111" srcset="https://blog.gitora.com/wp-content/uploads/2016/12/Gitora-Create-Tag-Dialog-300x111.png 300w, https://blog.gitora.com/wp-content/uploads/2016/12/Gitora-Create-Tag-Dialog.png 512w" sizes="auto, (max-width: 300px) 100vw, 300px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Enter the name of your tag (no spaces). Enter the commit ID you&amp;#8217;d like to attach it to. If you&amp;#8217;d like to attach your tag to the HEAD i.e. the most recent commit in the current branch, leave the Commit ID field empty. You may also use a branch name instead of an actual Commit ID.&lt;/p&gt;
&lt;p&gt;Click OK to create the tag. If the tag is attached to a commit visible in the Gitora repository browser, it will show up in the Gitora Application.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2016/12/Gitora-Repository-Browser.png"&gt;&lt;img decoding="async" loading="lazy" class="aligncenter size-medium wp-image-165" src="https://blog.gitora.com/wp-content/uploads/2016/12/Gitora-Repository-Browser-300x115.png" alt="Gitora Repository Browser" width="300" height="115" srcset="https://blog.gitora.com/wp-content/uploads/2016/12/Gitora-Repository-Browser-300x115.png 300w, https://blog.gitora.com/wp-content/uploads/2016/12/Gitora-Repository-Browser-1024x395.png 1024w, https://blog.gitora.com/wp-content/uploads/2016/12/Gitora-Repository-Browser.png 1425w" sizes="auto, (max-width: 300px) 100vw, 300px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;To delete a tag, select the Delete a Tag menu item under the Tags menu, enter the name of the Tag you&amp;#8217;d like to delete and click OK.&lt;/p&gt;
&lt;p&gt;Tags are available in Gitora 2.1 Professional Edition. Enjoy! 🙂&lt;/p&gt;
&lt;p&gt;Kind Regards,&lt;br /&gt;
The Gitora  Team&lt;/p&gt;</description><pubDate>Tue, 06 Dec 2016 12:13:01 +0300</pubDate></item><item><title>Gitora Webinar Video and Slides</title><link>https://blog.gitora.com/gitora-webinar-video-and-slides/</link><guid>https://blog.gitora.com/gitora-webinar-video-and-slides/</guid><description>&lt;p&gt;We hosted a webinar about Gitora last week. It received more than 400 signups and over 120 people have attended the event. The interest to the webinar was so high that we hit the 100 attendee limit of the webinar software we are using. Thanks to everyone who attended and helped us to do a better webinar with their questions and comments.&lt;/p&gt;
&lt;p&gt;If you could not make it to the webinar, you can watch it or view the slides below. The webinar consists of two parts. In the first part, we talk about transition strategies to move an organization from manual version control for PL/SQL to version control with Gitora. In the second part, we showed the capabilities of Gitora with a live demo.&lt;/p&gt;
&lt;p&gt;&lt;iframe loading="lazy" title="Version Control for PL SQL" width="1170" height="658" src="https://www.youtube.com/embed/H4yxDVnzDtc?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;&lt;iframe loading="lazy" style="border: 1px solid #CCC; border-width: 1px; margin-bottom: 5px; max-width: 100%;" src="//www.slideshare.net/slideshow/embed_code/key/wYz4glXHx4GZia" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" allowfullscreen="allowfullscreen"&gt; &lt;/iframe&gt;&lt;/p&gt;
&lt;div style="margin-bottom: 5px;"&gt;&lt;strong&gt; &lt;a title="Gitora, Version Control for PL/SQL" href="//www.slideshare.net/YalmKGerger/gitora-version-control-for-plsql" target="_blank" rel="noopener noreferrer"&gt;Gitora, Version Control for PL/SQL&lt;/a&gt; &lt;/strong&gt; from &lt;strong&gt;&lt;a href="//www.slideshare.net/YalmKGerger" target="_blank" rel="noopener noreferrer"&gt;Gitora&lt;/a&gt;&lt;/strong&gt;&lt;/div&gt;</description><pubDate>Tue, 29 Nov 2016 20:41:37 +0300</pubDate></item><item><title>Gitora Webinar</title><link>https://blog.gitora.com/gitora-webinar/</link><guid>https://blog.gitora.com/gitora-webinar/</guid><description>&lt;p&gt;OK, so you read the web site, downloaded Gitora, installed it successfully, created a few test repositories, added a few packages, issued a few Git commands from the Gitora UI. And it all works fine. But now what? How do you actually start using Gitora in your development life cycle? How can you actually benefit from it?&lt;/p&gt;
&lt;p&gt;In order to show you how you can use Gitora in your daily work we are hosting a free webinar on November 22nd. You can register at: &lt;a href="http://www.prohuddle.com/webinars/Gitora/Version_Control_for_PLSQL_Developers.php" target="_blank"&gt;&lt;span style="text-decoration: underline;"&gt;&lt;span style="color: #0000ff; text-decoration: underline;"&gt;http://www.prohuddle.com/webinars/Gitora/Version_Control_for_PLSQL_Developers.php&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;During the webinar we will cover the following topics &lt;strong&gt;with a live demo&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;How can you use Gitora to manage your PL/SQL code base?&lt;/li&gt;
&lt;li&gt;Why is using version control with PL/SQL is hard and how does Gitora help?&lt;/li&gt;
&lt;li&gt;Why is Gitora the best solution for the problem?&lt;/li&gt;
&lt;li&gt;How will using version control with PL/SQL will help you?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The webinar is free but space is limited. &lt;a href="http://www.prohuddle.com/webinars/Gitora/Version_Control_for_PLSQL_Developers.php"&gt;Sign up today.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Kind Regards,&lt;br /&gt;
Yalim Gerger&lt;br /&gt;
Founder&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description><pubDate>Wed, 09 Nov 2016 20:55:58 +0300</pubDate></item><item><title>Installing Gitora Manually</title><link>https://blog.gitora.com/installing-gitora-manually/</link><guid>https://blog.gitora.com/installing-gitora-manually/</guid><description>&lt;p&gt;We created a solid installer for Gitora which has a very high success rate. However, IT environment can be very complex and restrictive (and understandably so). So having an installer does not work for everyone and every organization.&lt;/p&gt;
&lt;p&gt;&lt;span style="text-decoration: underline;"&gt;&lt;span style="color: #0000ff;"&gt;&lt;a style="color: #0000ff; text-decoration: underline;" href="http://www.gitora.com/download.php"&gt;Therefore, today we are making the Gitora 2.0 installation scripts available for download.&lt;/a&gt;&lt;/span&gt;&lt;/span&gt; Below are the steps you can follow to install Gitora 2.0 to your environment manually.&lt;/p&gt;
&lt;h2&gt;&lt;span style="font-weight: 400;"&gt;Installation of Middletier Components&lt;/span&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li style="font-weight: 400;"&gt;&lt;span style="font-weight: 400;"&gt;For Linux and Mac OS, install Git manually from &lt;/span&gt;&lt;a href="https://git-scm.com/"&gt;&lt;span style="font-weight: 400;"&gt;https://git-scm.com/&lt;/span&gt;&lt;/a&gt;&lt;span style="font-weight: 400;"&gt;&lt;span style="font-weight: 400;"&gt;. For Windows, Git is already included to this setup.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight: 400;"&gt;&lt;span style="font-weight: 400;"&gt;Move Gitora2 folder to the place you want to locate Gitora middle tier components.&lt;br /&gt;
&lt;/span&gt;&lt;i&gt;&lt;i&gt;&lt;span style="font-weight: 400;"&gt;e.g /Users/username/&lt;/span&gt;&lt;/i&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li style="font-weight: 400;"&gt;&lt;span style="font-weight: 400;"&gt;For Windows, open fix_parameters_WINDOWS.bat to edit.&lt;br /&gt;
&lt;/span&gt;For Mac OS, open fix_parameters_MAC.sh to edit.&lt;br /&gt;
For Linux, open fix_parameters_LINUX.sh to edit.&lt;/li&gt;
&lt;li style="font-weight: 400;"&gt;&lt;span style="font-weight: 400;"&gt;Set GITORA_ROOT parameter to the absolute path of the Gitora2 folder from step 1.. &lt;/span&gt;&lt;span style="font-weight: 400;"&gt;&lt;br /&gt;
&lt;/span&gt;&lt;i&gt;&lt;i&gt;&lt;span style="font-weight: 400;"&gt;e.g /Users/username/Gitora2&lt;/span&gt;&lt;/i&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li style="font-weight: 400;"&gt;&lt;span style="font-weight: 400;"&gt;Set GITORA_DATABASE_CONNECTION_STRING parameter to the correct jdbc connection string to your database.&lt;br /&gt;
&lt;/span&gt;&lt;i&gt;&lt;i&gt;&lt;span style="font-weight: 400;"&gt;e.g jdbc:oracle:thin:@192.168.1.99:1521:orcl&lt;/span&gt;&lt;/i&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li style="font-weight: 400;"&gt;&lt;span style="font-weight: 400;"&gt;For Mac OS and Linux, set GIT_EXECUTABLE parameter to the path of git executable.&lt;br /&gt;
&lt;/span&gt;&lt;i&gt;&lt;i&gt;&lt;span style="font-weight: 400;"&gt;e.g. /usr/bin/git&lt;/span&gt;&lt;/i&gt;&lt;/i&gt;&lt;/li&gt;
&lt;li style="font-weight: 400;"&gt;&lt;span style="font-weight: 400;"&gt;Open command line terminal and run fix_parameters_WINDOWS.bat for Windows, fix_parameters_MAC.sh for MAC OS, fix_parameters_LINUX.sh for Linux.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;&lt;span style="font-weight: 400;"&gt;Installation of Database Components&lt;/span&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li style="font-weight: 400;"&gt;&lt;span style="font-weight: 400;"&gt;&lt;span style="font-weight: 400;"&gt;Connect to the Oracle Database with the SYS user&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight: 400;"&gt;&lt;span style="font-weight: 400;"&gt;&lt;span style="font-weight: 400;"&gt;Run 01_SYS.sql&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight: 400;"&gt;&lt;span style="font-weight: 400;"&gt;&lt;span style="font-weight: 400;"&gt;Disconnect from SYS&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight: 400;"&gt;&lt;span style="font-weight: 400;"&gt;&lt;span style="font-weight: 400;"&gt;Connect to the database with the GITORA user&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight: 400;"&gt;&lt;span style="font-weight: 400;"&gt;&lt;span style="font-weight: 400;"&gt;Run 02_GITORA.sql&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight: 400;"&gt;&lt;span style="font-weight: 400;"&gt;&lt;span style="font-weight: 400;"&gt;Ensure that there are no invalid packages in GITORA schema.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight: 400;"&gt;&lt;span style="font-weight: 400;"&gt;&lt;span style="font-weight: 400;"&gt;Create a row in table GITORA.T_TEMP_APPLICATION&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight: 400;"&gt;&lt;span style="font-weight: 400;"&gt;&lt;span style="font-weight: 400;"&gt;Copy the contents of Gitora.xml to this newly created row&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight: 400;"&gt;&lt;span style="font-weight: 400;"&gt;&lt;span style="font-weight: 400;"&gt;Issue a commit to save this row to the database.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight: 400;"&gt;&lt;span style="font-weight: 400;"&gt;&lt;span style="font-weight: 400;"&gt;Run 03_GITORA.sql&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight: 400;"&gt;&lt;span style="font-weight: 400;"&gt;&lt;span style="font-weight: 400;"&gt;Disconnect from GITORA user&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight: 400;"&gt;&lt;span style="font-weight: 400;"&gt;&lt;span style="font-weight: 400;"&gt;Connect to the database with SYS user&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight: 400;"&gt;&lt;span style="font-weight: 400;"&gt;&lt;span style="font-weight: 400;"&gt;Open 04_SYS.sql and replace the two occurrences of @VERSIONCONTROL_HOST@ keyword with the IP address of your Gitora middle tier machine, where Gitora web server and middle tier components are installed. You need to ensure that your middle tier machine is accessible from database machine by checking network and firewall settings of both machines.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight: 400;"&gt;&lt;span style="font-weight: 400;"&gt;&lt;span style="font-weight: 400;"&gt;For Windows, change the value of “folderSeparator” parameter from &amp;#8216;/&amp;#8217; to &amp;#8216;\&amp;#8217;.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight: 400;"&gt;&lt;span style="font-weight: 400;"&gt;&lt;span style="font-weight: 400;"&gt;Run 04_SYS.sql&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li style="font-weight: 400;"&gt;&lt;span style="font-weight: 400;"&gt;Disconnect from SYS.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;&lt;span style="font-weight: 400;"&gt;Starting Up Gitora&lt;/span&gt;&lt;/h2&gt;
&lt;ol&gt;
&lt;li style="font-weight: 400;"&gt;For Windows, run Gitora2/apache-tomcat-7.0.69/bin/startup.bat.&lt;br /&gt;
For Mac OS and Linux, run Gitora2/apache-tomcat-7.0.69/bin/startup.sh&lt;/li&gt;
&lt;li style="font-weight: 400;"&gt;&lt;span style="font-weight: 400;"&gt;Open your browser and type http://[MIDDLE TIER IP ADDRESS]:7997/gitora/main.html name=Gitora&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;</description><pubDate>Thu, 29 Sep 2016 15:34:16 +0300</pubDate></item><item><title>Generating a Diff Script with Gitora</title><link>https://blog.gitora.com/generating-a-diff-script-in-gitora/</link><guid>https://blog.gitora.com/generating-a-diff-script-in-gitora/</guid><description>&lt;p&gt;Gitora enables developers to move changes between databases with a single click.&lt;/p&gt;
&lt;p&gt;Gitora can also be used to generate a DDL script from the Git repository which can be used to synchronize the source code between two databases. For example, this feature can be used to generate a script to syncronize a production database to the latest version of the source code in the pre-prod database. This tutorial explains how to use this feature in Gitora.&lt;/p&gt;
&lt;p&gt;Assume that we are connected to the preprod database and would like to generate a sync script to upgrade prod to the same state the preprod database is in.&lt;/p&gt;
&lt;p&gt;Open the Gitora Application. Select a repo. Next, click the  &lt;em&gt;Git &amp;#8211;&amp;gt; Utilities &amp;#8211;&amp;gt; Get Script&lt;/em&gt; button from the menubar. A dialog shows up.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2016/09/gitora5_sync_screen.png"&gt;&lt;img decoding="async" loading="lazy" class="aligncenter wp-image-469 size-full" src="https://blog.gitora.com/wp-content/uploads/2016/09/gitora5_sync_screen.png" alt="" width="814" height="398" srcset="https://blog.gitora.com/wp-content/uploads/2016/09/gitora5_sync_screen.png 814w, https://blog.gitora.com/wp-content/uploads/2016/09/gitora5_sync_screen-300x147.png 300w, https://blog.gitora.com/wp-content/uploads/2016/09/gitora5_sync_screen-768x376.png 768w" sizes="auto, (max-width: 814px) 100vw, 814px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The Starting Commit ID is the Git Commit ID that is currently deployed in prod. Target Commit ID is the Git Commit ID that we would like to upgrade the prod database to.&lt;/p&gt;
&lt;p&gt;Enter the Starting Git Commit ID and the Target Git Commit ID. Use the keyword HEAD if you&amp;#8217;d like to use the latest commit in the current active branch as the Target Commit ID.&lt;/p&gt;
&lt;p&gt;If you&amp;#8217;d like the script to include soft objects (i.e. database objects that execute with CREATE OR REPLACE such as packages, views etc&amp;#8230;) check the Include Soft Objects checkbox.&lt;/p&gt;
&lt;p&gt;If you&amp;#8217;d like the script to include hard objects (i.e. database objects that doesn&amp;#8217;t execute with CREATE OR REPLACE such as tables) check the Include Hard Objects checkbox.&lt;/p&gt;
&lt;p&gt;Click the Download DDL Script button. Gitora will generate a DDL script which, if executed, will syncronize a schema (or a group of schemas) which is currently at the Starting Commit ID, to the Target Commit ID.&lt;/p&gt;
&lt;p&gt;As seen in this example, this feature can be used to apply the latest version of the source code to a production database. If the production database is at Git Commit Point A and the new production-ready version of the source code is at Git Commit Point B, a developer can enter A as the Starting Commit ID and B as the Target Commit ID and then execute the generated script in the production database.&lt;/p&gt;
&lt;p&gt;Please note that the table generation is master-detail relationhip aware i.e. the generated tables will be in the correct order with master tables coming before detail tables that reference them.&lt;/p&gt;</description><pubDate>Mon, 26 Sep 2016 14:52:31 +0300</pubDate></item><item><title>Introducing Gitora 2.0</title><link>https://blog.gitora.com/introducing-gitora-2-0/</link><guid>https://blog.gitora.com/introducing-gitora-2-0/</guid><description>&lt;p&gt;Today, we are happy to announce the general availability of Gitora 2.0. We listened to the feature requests coming from the community and we think we are addressing the majority of them with this new version.&lt;/p&gt;
&lt;h4&gt;Object Type Support&lt;/h4&gt;
&lt;p&gt;Gitora now supports Object Types. Object Types are supported for the Oracle version 11g and above.&lt;/p&gt;
&lt;h4&gt;Generate Diff Scripts&lt;/h4&gt;
&lt;p&gt;Gitora 2.0 helps you create diff scripts between two commit points in your Git repository. Simply, enter the starting Commit Point ID and the target Commit Point ID and Gitora will generate a diff script for you to run in your target database.&lt;/p&gt;
&lt;h4&gt;Clone Source Code from Another Database&lt;/h4&gt;
&lt;p&gt;Gitora 2.0 supports cloning Git repositories from remote databases. Connect your local Gitora to the remote Gitora (which manages a remote database) and move the code base from one database to the other automatically.&lt;/p&gt;
&lt;h4&gt;Pull(Merge), Fetch Source Code from Another Database&lt;/h4&gt;
&lt;p&gt;Similar to cloning, developers can now pull(merge) source code from a remote database to the source code in a local database automatically if both database are running Gitora 2.0.&lt;/p&gt;
&lt;h4&gt;Many small improvements and bug fixes&lt;/h4&gt;
&lt;p&gt;Gitora 2.0 also comes with a number of improvements such as:&lt;br /&gt;
&amp;#8211; A nicer Git repository browser&lt;br /&gt;
&amp;#8211; Ability to view changes made in each object prior to issuing a commit&lt;br /&gt;
&amp;#8211; Cancel any edits made to a PL/SQL object since check-out by clicking a button.&lt;/p&gt;
&lt;h3&gt;New Gitora Editions&lt;/h3&gt;
&lt;p&gt;Gitora 2.0 comes in three editions:&lt;/p&gt;
&lt;h4&gt;Gitora Community Edition&lt;/h4&gt;
&lt;p&gt;Every feature from Gitora 1.0 continues to be free in Gitora 2.0 Community Edition. We even added new features to it such as object type support, ability to view changes made in each object and canceling edits, along with many bug fixes.&lt;/p&gt;
&lt;h4&gt;Gitora Professional Edition&lt;/h4&gt;
&lt;p&gt;We believe proper version control is a big problem in the PL/SQL community, hurting the productivity of many PL/SQL developers and discouraging organizations from using PL/SQL. We think we can help. In order to justify further development on Gitora to help the community to solve this problem, remote database features in Gitora 2.0 will be available in the professional addition. The professional edition also comes with email support and unlimited access to 2.X released of Gitora. We think the benefits you will get from Gitora Professional Edition will far outweigh the small price tag we put on it.&lt;/p&gt;
&lt;h4&gt;Gitora Enterprise Edition&lt;/h4&gt;
&lt;p&gt;We know that large enterprises usually have their own unique needs. They might need customizations, new features, integration with other products and services they use, training, more timely and intensive support covered with an SLA etc&amp;#8230; For these types of customers, we offer a fully customizable version of Gitora.&lt;/p&gt;
&lt;p&gt;Gitora 2.0 Professional Edition comes with a long trial period and even if you decide not to purchase it, it gracefully downgrades to the community edition.&lt;/p&gt;
&lt;h4&gt;So what are you waiting for?&lt;span style="color: #0000ff;"&gt; &lt;a style="color: #0000ff;" href="http://www.gitora.com/download.php"&gt;Go download Gitora 2.0&lt;/a&gt;!&lt;/span&gt; 🙂&lt;/h4&gt;</description><pubDate>Thu, 22 Sep 2016 19:55:02 +0300</pubDate></item><item><title>Benefits of using Gitora, Git for PL/SQL Developers</title><link>https://blog.gitora.com/benefits-of-gitora/</link><guid>https://blog.gitora.com/benefits-of-gitora/</guid><description>&lt;p&gt;Outside of the Database World (Java, JavaScript etc..) developers use version control systems more effectively. When used appropriately in the software development life cycle, a version control tool can shorten delivery times significantly by improving the manageability of the code base.&lt;/p&gt;
&lt;p&gt;Using version control with PL/SQL (and other database objects) has always been challenging. In our experience very few, if any, IT departments use version control systems to manage their database. Most are content with a basic check-in check-out mechanism.&lt;/p&gt;
&lt;p&gt;We created Gitora to help database developers manage their code base better. Gitora achieves this by bridging the gap between the Oracle Database and Git, the most prominent and popular version control system used by millions of developers around the world.&lt;/p&gt;
&lt;p&gt;With Gitora you can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Perform the version control operations using a point and click interface. This reduces the barrier to entry for Git. Only a basic understanding of version control principles is good enough to get value from the product.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Move your code base automatically to a specific version (for example to match it to the version in production.)&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Create new branches to work on new features without affecting the master code base.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Change between different branches of your code base automatically.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Merge your branches to the master code base automatically.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Push your changes to remote repos in cloud services such as GitHub, GitLab and BitBucket.&lt;/li&gt;
&lt;li&gt;Pull changes from other databases and merge these changes with your database code.&lt;/li&gt;
&lt;/ul&gt;
&lt;ul&gt;
&lt;li&gt;Browse the Git repository and see your commit history and changes associated with each commit.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;b&gt;Collaboration vs. Parallel Development&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Gitora can be used in collaboration mode in which all database developers work in the same Oracle Schema(s). In this case Gitora supports a check-in check-out mechanism. This check in/out mechanism is tool independent. It works with SQL Developer, TOAD and PL/SQL Developer (or any other tool for that matter).&lt;/p&gt;
&lt;p&gt;More importantly, Gitora can also be used in parallel development mode in which every database developer works in her own schema(s). In this way of working, (which is exactly how Java, .NET, JavaScript developers etc.. are working) each developer has her own copy of the database code and is free to make changes to them related to the task she has at hand. In parallel mode, no developer blocks the other because she is the only one who checks out the objects in her own schema(s). This improves development times significantly because more than one developer can work on the same logical object at the same time.&lt;/p&gt;
&lt;p&gt;The software development team establishes a workflow to merge the changes of each developer and propagate these changes to the master code base. Gitora (via Git) also helps with this process with automated merging of changes. In the event of a conflict (where Git cannot figure out how to merge changes done by two developers to the same code unit) Gitora asks the user to resolve the conflict. Gitora creates multiple versions of the database code objects in question and helps the developers to resolve the issue. (Please see &lt;a href="https://blog.gitora.com/introduction-to-gitora-git-for-plsql-developers/"&gt;Introduction to Gitora, Git for PL/SQL developers&lt;/a&gt; for more information on this topic)&lt;/p&gt;
&lt;p&gt;Best to our knowledge, Gitora is the only tool that is specifically designed to be used for parallel development with PL/SQL. We think parallel development is where a software team starts to get a lot of value from using a version control system. This helps establishing a formal workflow of incorporating changes to the master code base and to production.&lt;/p&gt;
&lt;p&gt;Gitora integrates to your software development lifecycle. We cannot overstate how important this is. Gitora is not something you do on the side and it does not have back doors where you can circumvent version control. It becomes an essential part of your daily workflow. There are version control tools that people use on the side by copying and pasting scripts. This is a very error prone process because it requires developers to “remember” to do version control. Some version control tools only work within a specific tool (such as TOAD) and do not prevent the developer from opening another tool (such as PL/SQL developer) and modify code without using proper version control mechanisms.&lt;/p&gt;
&lt;p&gt;For more information about Gitora, we recommend you to visit the following links:&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.gitora.com/webinar-video-and-slides/"&gt;Gitora Webinar Recording (and Slides)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.gitora.com/six-questions-about-gitora/"&gt;Six Common Question About Gitora&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.gitora.com/what-is-the-difference-between-gitora-and-sql-developers-git-interface/"&gt;What is the Difference between Gitora and SQL Developer’s Git Interface&lt;/a&gt;&lt;/p&gt;</description><pubDate>Tue, 04 Aug 2015 14:33:10 +0300</pubDate></item><item><title>Webinar Video and Slides</title><link>https://blog.gitora.com/webinar-video-and-slides/</link><guid>https://blog.gitora.com/webinar-video-and-slides/</guid><description>&lt;p&gt;Below you can find the recording and the slides of the Gitora Webinar. Thanks to everyone who attended. What a turnout!&lt;/p&gt;
&lt;p&gt;&lt;iframe loading="lazy" src="https://player.vimeo.com/video/121172482" width="500" height="313" frameborder="0" allowfullscreen="allowfullscreen"&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="https://vimeo.com/121172482"&gt;Introducing Gitora, the free version control tool for PL/SQL&lt;/a&gt; from &lt;a href="https://vimeo.com/formspider"&gt;Yalim K. Gerger&lt;/a&gt; on &lt;a href="https://vimeo.com"&gt;Vimeo&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;iframe loading="lazy" style="border: 1px solid #CCC; border-width: 1px; margin-bottom: 5px; max-width: 100%;" src="//www.slideshare.net/slideshow/embed_code/45418876" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" allowfullscreen="allowfullscreen"&gt; &lt;/iframe&gt;&lt;/p&gt;
&lt;div style="margin-bottom: 5px;"&gt;&lt;strong&gt; &lt;a title="Introducing Gitora, free version control tool for PL/SQL" href="//www.slideshare.net/YalmKGerger/gitora-webinar" target="_blank"&gt;Introducing Gitora, free version control tool for PL/SQL&lt;/a&gt; &lt;/strong&gt; from &lt;strong&gt;&lt;a href="//www.slideshare.net/YalmKGerger" target="_blank"&gt;Yalım K. Gerger&lt;/a&gt;&lt;/strong&gt;&lt;/div&gt;</description><pubDate>Mon, 09 Mar 2015 14:47:46 +0200</pubDate></item><item><title>Six Questions About Gitora</title><link>https://blog.gitora.com/six-questions-about-gitora/</link><guid>https://blog.gitora.com/six-questions-about-gitora/</guid><description>&lt;p&gt;Recently. we received an email from a Gitora user with six questions. We think our answers might be interesting for others as well. So here they are:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;1. Where is the remote repository created? &lt;/strong&gt;&lt;br /&gt;
Gitora does not use a remote repository in its first version. Everything is handled using local repositories. You can still use a remote repository if you want. There is nothing in Gitora preventing you from doing that.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;2. How do you lock database objects?&lt;/strong&gt;&lt;br /&gt;
The users decide which database objects Gitora should manage. When a DDL is executed, a database level trigger created by Gitora ensures that the Oracle user running the DDL is signed in to Gitora and checked out the database object it is manipulating if it is an object managed by Gitora. If the object is checked out by another user already, the trigger throws an exception. There is a PL/SQL API for a database user to sign in to Gitora in her database session. Optionally, she can use the Gitora App to check out an object. Gitora is also quite pragmatic and automatically checks out the object if it is not currently checked out by anyone else.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;3. Is there any relation between Gitora users and Database Users? If there isn&amp;#8217;t any relation, how do I create Gitora users?&lt;/strong&gt;&lt;br /&gt;
There is no relation between Gitora users and database users. You can use the Gitora App to create Gitora users. Then, to check out an object managed by Gitora, you can sign in to Gitora by either using its PL/SQL API or the Gitora App.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;4. Do I have to log in to Gitora every time I create a new database session?&lt;/strong&gt;&lt;br /&gt;
You have to log in to Gitora in a database session only if you want to modify a database object or check out a database object managed by Gitora. Signing in is a single line API call that probably can be automated by your PL/SQL development tool.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;5. Where is the version history stored?&lt;/strong&gt;&lt;br /&gt;
Everything related to versioning is done and stored in the Git repository. Gitora is only a bridge between the Oracle Database and the Git server.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;6. How can we integrate Gitora to TOAD? Is there a plug-in?&lt;/strong&gt;&lt;br /&gt;
There is no need for a plug-in. Gitora works with any PL/SQL development tool. It has a small set of PL/SQL API&amp;#8217;s that you can call from any development tool. Gitora also has a web app you can use to perform common version control tasks.&lt;/p&gt;</description><pubDate>Mon, 26 Jan 2015 15:57:21 +0200</pubDate></item><item><title>What is the Difference between Gitora and SQL Developer’s Git Interface?</title><link>https://blog.gitora.com/what-is-the-difference-between-gitora-and-sql-developers-git-interface/</link><guid>https://blog.gitora.com/what-is-the-difference-between-gitora-and-sql-developers-git-interface/</guid><description>&lt;p&gt;We&amp;#8217;ve been getting this question a lot lately, so I thought it is a good idea to write a blog post about it.&lt;/p&gt;
&lt;p&gt;In SQL Developer, you work in two ways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You edit objects in the database and then you manually create files in a folder managed by Git.&lt;/li&gt;
&lt;li&gt;You edit files managed by Git and execute them in the database.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;SQL Developer helps you run Git commands on these files. When you issue a Git command that changes your code base, you have to manually carry over the changed code units to the database by running the scripts.&lt;/p&gt;
&lt;p&gt;In Gitora, if you modify a PL/SQL code unit in the database, you do not need to manually copy the updated script to a folder managed by Git. Gitora does that automatically. Similarly, if you issue a Git command using Gitora&amp;#8217;s point and click interface, Gitora automatically updates the PL/SQL code units  in tha database. Gitora also has a check out mechanism that works at the database level, meaning that if you check out a PL/SQL code unit, no one else can edit it until you release or commit it. This is enforced at the database level. So there are no back doors.&lt;/p&gt;
&lt;p&gt;So the advantages of Gitora&amp;#8217;s approach are:&lt;/p&gt;
&lt;p&gt;&amp;#8211; A lot less manual work. Every edit you make is synced to the file system by Gitora. Every Git command you execute, updates your database code automatically.&lt;/p&gt;
&lt;p&gt;&amp;#8211; A lot less human errors. Copying files back and forth manually is very error prone.&lt;/p&gt;
&lt;p&gt;&amp;#8211; Much easier team work. Gitora&amp;#8217;s check out mechanism prevents others from making changes to objects you are working on.&lt;/p&gt;
&lt;p&gt;&amp;#8211; Well structured working directory. Gitora creates a well structured working directory with reasonable folder and file names for database objects. The locations of these files are also standard. When there is human decision involved with naming and putting files in the file system, a lot of errors can occur. Gitora prevents these errors.&lt;/p&gt;
&lt;p&gt;&amp;#8211; No back doors. Gitora enforces that if an object is being edited by someone, no one else can edit it. Version control is not something you do on the side but it is tightly integrated into your workflow and enforced.&lt;/p&gt;
&lt;p&gt;&amp;#8211; It works with any editor. You can use SQL Developer, SQL Navigaor, TOAD or PL/SQL Developer. It doesn&amp;#8217;t matter. Everyone in your team can use a different editor if they choose to do so. Gitora still works.&lt;/p&gt;
&lt;p&gt;Yalim K. Gerger&lt;/p&gt;</description><pubDate>Wed, 21 Jan 2015 17:29:15 +0200</pubDate></item><item><title>Introduction to Gitora, Git for PL/SQL Developers</title><link>https://blog.gitora.com/introduction-to-gitora-git-for-plsql-developers/</link><guid>https://blog.gitora.com/introduction-to-gitora-git-for-plsql-developers/</guid><description>&lt;p&gt;This document explains the core concepts in Gitora and how developers can use them to control the revisions they make to their Oracle database objects.&lt;/p&gt;
&lt;p&gt;Gitora enables &lt;span style="font-weight: 400;"&gt;developers to perform&lt;/span&gt; regular version control tasks on the source code of their applications. Gitora supports every database schema object. It can perform Git commands on objects that can be created using the CREATE OR REPLACE command, namely; Packages, Views, Procedures, Functions, Triggers, Types and Synonyms. It can track every DDL performed on other database objects such as tables, indexes etc&amp;#8230;&lt;/p&gt;
&lt;p&gt;Behind the scenes, Gitora seamlessly integrates with Git, the prominent distributed version control system used by millions of developers worldwide. Gitora supports the following Git operations on the source code it manages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Reset&lt;/li&gt;
&lt;li&gt;Create Branch&lt;/li&gt;
&lt;li&gt;Change Branch&lt;/li&gt;
&lt;li&gt;Merge Branch&lt;/li&gt;
&lt;li&gt;Fetch&lt;/li&gt;
&lt;li&gt;Pull&lt;/li&gt;
&lt;li&gt;Push&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Gitora Web App&lt;/h2&gt;
&lt;p&gt;Gitora has both PL/SQL API’s and a web application to help developers manage their PL/SQL code using Git. Using Gitora Web App developers can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Perform the supported version control functions using a point&amp;amp;click interface.&lt;/li&gt;
&lt;li&gt;Check out database objects for editing&lt;/li&gt;
&lt;li&gt;Browse the source code in the Git repository&lt;/li&gt;
&lt;li&gt;Manage Git repositories.&lt;/li&gt;
&lt;li&gt;Manage users&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_main_screen.png"&gt;&lt;img decoding="async" loading="lazy" class="aligncenter wp-image-422 size-large" src="https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_main_screen-1024x418.png" alt="" width="1024" height="418" srcset="https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_main_screen-1024x418.png 1024w, https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_main_screen-300x123.png 300w, https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_main_screen-768x314.png 768w, https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_main_screen.png 1432w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Creating A Version Control Repository&lt;/h2&gt;
&lt;p&gt;Open Gitora Web App and select &lt;em&gt;Git-&amp;gt;Repo-&amp;gt;  New Repo&lt;/em&gt; from the menu bar. The &lt;em&gt;Create a New Repo&lt;/em&gt; Dialog shows up.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_newrepo_screen.png"&gt;&lt;img decoding="async" loading="lazy" class="aligncenter wp-image-424 size-full" src="https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_newrepo_screen.png" alt="" width="897" height="305" srcset="https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_newrepo_screen.png 897w, https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_newrepo_screen-300x102.png 300w, https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_newrepo_screen-768x261.png 768w" sizes="auto, (max-width: 897px) 100vw, 897px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Enter a name for your repository (A Gitora repository can contain PL/SQL objects from any database schema.) Click Save. Click OK in the Alert Box which shows the message received from Git. Note that the Gitora Web App makes the new repository you created the active one and the repository viewer focuses on it.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_newrepocreated_screen.png"&gt;&lt;img decoding="async" loading="lazy" class="aligncenter wp-image-425 size-large" src="https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_newrepocreated_screen-1024x353.png" alt="" width="1024" height="353" srcset="https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_newrepocreated_screen-1024x353.png 1024w, https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_newrepocreated_screen-300x103.png 300w, https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_newrepocreated_screen-768x265.png 768w, https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_newrepocreated_screen.png 1384w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;Adding Database Objects to a Gitora Repository&lt;/h2&gt;
&lt;p&gt;In order to be able to perform version control tasks with a database object, it must be added to a Gitora repository.&lt;/p&gt;
&lt;p&gt;To add database objects to a Gitora repository, select Git-&amp;gt; &lt;i&gt;“Add/Remove Objects”&lt;/i&gt; item from the menu bar.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2014/10/add-button.png"&gt;&lt;img decoding="async" loading="lazy" class="alignnone size-medium wp-image-14" src="https://blog.gitora.com/wp-content/uploads/2014/10/add-button-300x68.png" alt="Add/Remove Database Objects" width="300" height="68" srcset="https://blog.gitora.com/wp-content/uploads/2014/10/add-button-300x68.png 300w, https://blog.gitora.com/wp-content/uploads/2014/10/add-button.png 799w" sizes="auto, (max-width: 300px) 100vw, 300px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The &lt;i&gt;“Add or Remove Database Objects”&lt;/i&gt; Dialog shows up.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_addremoveobjects_screen.png"&gt;&lt;img decoding="async" loading="lazy" class="aligncenter wp-image-426 size-full" src="https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_addremoveobjects_screen.png" alt="" width="842" height="755" srcset="https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_addremoveobjects_screen.png 842w, https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_addremoveobjects_screen-300x269.png 300w, https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_addremoveobjects_screen-768x689.png 768w" sizes="auto, (max-width: 842px) 100vw, 842px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;To add a database object to the Gitora repository, select the schema the object is in. Next, select the type of the object. Gitora supports the following object types: Table, Procedure, Function, Package, View, Trigger, Type, Synonym, &lt;span style="font-weight: 400;"&gt;Sequence and Materialized&lt;/span&gt; View.&lt;/p&gt;
&lt;p&gt;Finally, select one or more objects from the list of available ones and add them to the list of managed objects. Add as many objects of different types as necessary.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;A Note About Adding a Large Number of Objects&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;The Dialog supports adding tens even hundreds of objects at once, using the Add All button. However, this may take time because Gitora will extract the DDL of these objects and create files. If the number of objects you are adding to the repo at once is very high, the browser may prompt you that the application is unresponsive or the session in the Tomcat Server might expire (in about an hour).&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;If you are building a large Git repo, we recommend that you either add the objects in chunks or use the Gitora API&amp;#8217;s.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Click &lt;i&gt;“Done” &lt;/i&gt;to close the dialog.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A Gitora repository can manage database objects from multiple schemas.&lt;/strong&gt; To add database objects from another schema simply change the schema name selected in the dialog’s select box and continue as described above.&lt;/p&gt;
&lt;h2&gt;Collaboration vs. Parallel Development&lt;/h2&gt;
&lt;p&gt;Unlike middle tier (Java, PHP etc…) or client side programming language code units (JavaScript, Objective-C etc..) PL/SQL code units do not reside in private files on a developer’s computer. They are globally available to every developer who has access to the database with the appropriate privileges. Therefore, PL/SQL developers mostly collaborate on the same PL/SQL code units (Packages, Procedures, Functions etc…) using a check-out mechanism to prevent themselves from overriding each other’s modifications.&lt;/p&gt;
&lt;p&gt;When working together, developers of other programming languages have a different approach. They work on the same logical code unit but they always edit different physical copies of the same logical code unit. In most cases it is impractical for PL/SQL developers to set up their own private environments in which each developer has a private copy of the PL/SQL code units she is working on. Therefore, Gitora features a check-out mechanism to better fit into the regular workflow of PL/SQL developers. This enables a team of developers to collaborate on one branch of the application without stepping on each other&amp;#8217;s toes.&lt;/p&gt;
&lt;p&gt;More importantly however, Gitora also supports a workflow in which each developer works in her own environment and with her own database objects (similar to a middle tier or client developer). This way, developers can freely modify the same logical code units (but different physical copies) and merge their changes at a later point in time.&lt;/p&gt;
&lt;h2&gt;Editing a Database Object Managed by Gitora&lt;/h2&gt;
&lt;p&gt;Developers may continue using their favorite PL/SQL editor to edit database objects managed by Gitora. Since Gitora is implemented at the database level, it works with any editor.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Once a database object is in a Gitora repository, Gitora will only allow changes to it from database sessions which have a logged in Gitora user and if the database object is not already checked out by another Gitora user.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Use the following API&amp;#8217;s in the API_GITORA package to sign in to Gitora with your Gitora user name and password.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;login(in_user_cd varchar2, in_password_tx varchar2)&lt;/code&gt; :signs in to Gitora with a valid Gitora user name and password.&lt;/p&gt;
&lt;p&gt;&lt;code&gt;logout;&lt;/code&gt;signs out of Gitora&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;No Sign In Development&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Gitora 5 can be configured to recognize Oracle Users as valid Gitora users. This eliminates the need to sign in to Gitora using the PL/SQL API above. We recommend this approach in environments where every developer has her own Oracle User.&lt;/p&gt;
&lt;p&gt;To achieve this, log in to Gitora as an admin. Next, click the [Database Name]-&amp;gt; Users menu item from the menu bar. The &lt;em&gt;Manage Users &lt;/em&gt;page shows up.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_manageusers_screen.png"&gt;&lt;img decoding="async" loading="lazy" class="aligncenter size-full wp-image-429" src="https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_manageusers_screen.png" alt="" width="750" height="688" srcset="https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_manageusers_screen.png 750w, https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_manageusers_screen-300x275.png 300w" sizes="auto, (max-width: 750px) 100vw, 750px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Click the Add button on the page. The &lt;em&gt;Add User dialog &lt;/em&gt;shows up.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_adduser_screen.png"&gt;&lt;img decoding="async" loading="lazy" class="aligncenter size-full wp-image-430" src="https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_adduser_screen.png" alt="" width="814" height="542" srcset="https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_adduser_screen.png 814w, https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_adduser_screen-300x200.png 300w, https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_adduser_screen-768x511.png 768w" sizes="auto, (max-width: 814px) 100vw, 814px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Enter the Oracle username to the User Name field (LISA in the screenshot). Check the Oracle User checkbox. The password fields will be disabled. The user will use her Oracle credentials to log in to Gitora. If you are using Gitora Enterprise, select a database role for the user, as well.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_adduser_screen2.png"&gt;&lt;img decoding="async" loading="lazy" class="aligncenter size-full wp-image-431" src="https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_adduser_screen2.png" alt="" width="810" height="540" srcset="https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_adduser_screen2.png 810w, https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_adduser_screen2-300x200.png 300w, https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_adduser_screen2-768x512.png 768w" sizes="auto, (max-width: 810px) 100vw, 810px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Click the Save button.&lt;/p&gt;
&lt;p&gt;From this point on, the user (LISA in the example) can log in to the Gitora application with her Oracle username and password. She also doesn&amp;#8217;t need to sign in to Gitora first to modify database objects managed by it because Gitora will recognize her as a valid user.&lt;/p&gt;
&lt;p&gt;When a developer saves a PL/SQL object to the database, Gitora automatically attempts to check out the object if the database session has a logged in Gitora user.  If the object is already checked out by another developer, Gitora prevents the save with an appropriate error message.&lt;/p&gt;
&lt;p&gt;Developers may also use the Gitora Web App to check out a database object from the navigation tree by right clicking it and selecting the check out menu item from the pop up menu.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_checkout_screen.png"&gt;&lt;img decoding="async" loading="lazy" class="aligncenter wp-image-432 size-full" src="https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_checkout_screen.png" alt="" width="428" height="518" srcset="https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_checkout_screen.png 428w, https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_checkout_screen-248x300.png 248w" sizes="auto, (max-width: 428px) 100vw, 428px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Gitora Web App presents a green lock icon on database objects checked out by the logged in developer and a red lock icon on database objects checked out by other developers.&lt;/p&gt;
&lt;h2&gt;Committing Database Object Modifications&lt;/h2&gt;
&lt;p&gt;At any time the developer can view the list of objects she checked out from the &lt;i&gt;“Git -&amp;gt; Commit”&lt;/i&gt; menu item.&lt;/p&gt;
&lt;p&gt;Alternatively, she can use the &lt;i&gt;“Commit ”&lt;/i&gt; icon in the toolbar to access the same dialog.&lt;/p&gt;
&lt;p&gt;The &lt;i&gt;“Commit Changes”&lt;/i&gt; page has two tabs. The “&lt;i&gt;All Objects”&lt;/i&gt; tab shows the list of every database object in the current repository that is checked out by every developer. The &lt;i&gt;“My Objects”&lt;/i&gt; tab shows only the objects the logged in developer checked out.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_commitchanges_screen.png"&gt;&lt;img decoding="async" loading="lazy" class="aligncenter wp-image-433 size-full" src="https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_commitchanges_screen.png" alt="" width="986" height="815" srcset="https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_commitchanges_screen.png 986w, https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_commitchanges_screen-300x248.png 300w, https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_commitchanges_screen-768x635.png 768w" sizes="auto, (max-width: 986px) 100vw, 986px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The developer can review changes made to each object by clicking the associated Diff link. She can also choose to include/exclude each object from the current commit by using the &lt;em&gt;Include? &lt;/em&gt;checkbox&lt;em&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The page has a section named &amp;#8220;Managed Schema DDL&amp;#8217;s&amp;#8221;. We&amp;#8217;ll talk about this section in a different blog post.&lt;/p&gt;
&lt;p&gt;Gitora requires a developer to enter a short description of the changes she is commiting to the &lt;em&gt;Commit Changes &lt;/em&gt;text area. This description comes in very handy when going over the history logs.&lt;/p&gt;
&lt;p&gt;Clicking the Commit button commits the selected objects to the Git repo.&lt;/p&gt;
&lt;p&gt;Once the Git commit is finished, Gitora displays the message it retrieves from the Git server. This message gives a summary of the updates made to the Git repository.&lt;/p&gt;
&lt;p&gt;After the commit completes, objects included in the commit are automatically released and are no longer checked out by the developer.&lt;/p&gt;
&lt;h2&gt;Releasing an Object&lt;/h2&gt;
&lt;p&gt;If the developer wants to remove her edit lock on an object she checked out, she can do so by right clicking the object in the navigation tree and clicking the &lt;em&gt;Release&lt;/em&gt; menu item. Please note that this will cancel all her changes to the object and the object will revert back to the latest state it is in on the active branch of the repo.&lt;/p&gt;
&lt;h2&gt;Resetting to a Commit ID&lt;/h2&gt;
&lt;p&gt;If a developer wants to cancel changes in an application’s current branch and bring it to a state it was at a certain point back in time, she can do so by using the &lt;em&gt;Git-&amp;gt;Reset&lt;/em&gt; menu item.&lt;/p&gt;
&lt;p&gt;The &lt;em&gt;“Reset&amp;#8221;&lt;/em&gt; operation needs a valid Git Commit ID to function. The Git gives a unique ID to each commit issued by a developer. The developer can browse the Git repos  to determine the Commit ID she wants the application to revert back to.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_reset_commitid.png"&gt;&lt;img decoding="async" loading="lazy" class="aligncenter wp-image-435 size-full" src="https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_reset_commitid.png" alt="" width="777" height="561" srcset="https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_reset_commitid.png 777w, https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_reset_commitid-300x217.png 300w, https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_reset_commitid-768x555.png 768w" sizes="auto, (max-width: 777px) 100vw, 777px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;To move back the application to a commit ID, click the &lt;em&gt;“Git -&amp;gt; Reset”&lt;/em&gt; menu item.  The &lt;em&gt;“Reset”&lt;/em&gt; dialog shows up. Paste the Commit ID value to the field named Commit ID and click the&lt;em&gt;“Reset”&lt;/em&gt; button. The code base goes back to the state it was at that Commit ID and Gitora displays the message it received from the Git Server. The code in the database is also updated.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_reset_screen.png"&gt;&lt;img decoding="async" loading="lazy" class="aligncenter wp-image-437 size-full" src="https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_reset_screen.png" alt="" width="818" height="249" srcset="https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_reset_screen.png 818w, https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_reset_screen-300x91.png 300w, https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_reset_screen-768x234.png 768w" sizes="auto, (max-width: 818px) 100vw, 818px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;As a shortcut, you can revert to the previous state of the repository by entering HEAD@{1} as the Commit ID.&lt;/p&gt;
&lt;p&gt;Please note that the reset command (just like every other command in Gitora) will only update the soft objects in the database. Soft objects are defined as objects that work with the CREATE OR REPLACE command. Therefore, it will not change any table, sequence or &lt;span style="font-weight: 400;"&gt;materialized &lt;/span&gt;view in the database.&lt;/p&gt;
&lt;h2&gt;Creating a Branch&lt;/h2&gt;
&lt;p&gt;Branching is a very powerful feature of version control systems that enables developers to work on multiple versions of a code base easily. For example, a developer can work on the master branch to fix bugs that are reported from the production environment and release maintenance versions while developing a new feature in the dev branch. The deployed new maintenance versions from the master branch never include the code written in the dev branch.&lt;/p&gt;
&lt;p&gt;To create a new Branch click the &lt;em&gt;“Git -&amp;gt; Create Branch”&lt;/em&gt; menu item. A dialog shows up.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_createbranch_screen.png"&gt;&lt;img decoding="async" loading="lazy" class="aligncenter size-large wp-image-439" src="https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_createbranch_screen.png" alt="" width="815" height="340" srcset="https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_createbranch_screen.png 815w, https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_createbranch_screen-300x125.png 300w, https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_createbranch_screen-768x320.png 768w" sizes="auto, (max-width: 815px) 100vw, 815px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Enter a name for the new branch. Enter the name of another branch, a tag name or a Commit ID as the starting point of the new branch. Keep the checkbox checked if you want to make this branch the active branch in the database.&lt;/p&gt;
&lt;p&gt;Click the &lt;em&gt;“Create Branch”&lt;/em&gt; button to create the new branch. Once it is created, the code base automatically switches over to the newly created branch if the &lt;em&gt;Make Active Branch&lt;/em&gt; checkbox is checked.&lt;/p&gt;
&lt;p&gt;Please note that there must not be any checked out objects in the repository for Gitora to be able to create a new branch.&lt;/p&gt;
&lt;h2&gt;Changing Branches&lt;/h2&gt;
&lt;p&gt;In order to change the current branch of the repository, open Gitora Web App, select a repo from the main select box and select the &lt;em&gt;“Git -&amp;gt; Change Branch”&lt;/em&gt; menu item. A dialog shows up.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_changebranch_screen.png"&gt;&lt;img decoding="async" loading="lazy" class="aligncenter size-full wp-image-442" src="https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_changebranch_screen.png" alt="" width="818" height="230" srcset="https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_changebranch_screen.png 818w, https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_changebranch_screen-300x84.png 300w, https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_changebranch_screen-768x216.png 768w" sizes="auto, (max-width: 818px) 100vw, 818px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Select the branch to switch to and click the &lt;em&gt;“Change Branch”&lt;/em&gt; button. The code base in the Oracle Database gets updated to show its state in the selected branch. Please note that there must not be any checked out objects in the code repository for Gitora to be able to switch to another branch.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Important Note: Git commands executed by Gitora only update soft objects. Soft objects are defined as database objects that work with the CREATE OR REPLACE command. Therefore Gitora does not change any tables, sequences and materialized views in the database.&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Merging a Branch to another Branch&lt;/h2&gt;
&lt;p&gt;Creating and switching between branches would not be meaningful unless Gitora also enabled merging of a branch to another. For example, once the development on the dev branch is finished, developers should be able to move the changes to the master branch of the code base. This is called a merge.&lt;/p&gt;
&lt;p&gt;To start a merge click the &lt;em&gt;“Git -&amp;gt; Merge”&lt;/em&gt; menu item. A dialog shows up asking the source branch for the merge operation. The destination branch is always the current branch the code base is on.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_merge_screen.png"&gt;&lt;img decoding="async" loading="lazy" class="aligncenter size-full wp-image-444" src="https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_merge_screen.png" alt="" width="819" height="236" srcset="https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_merge_screen.png 819w, https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_merge_screen-300x86.png 300w, https://blog.gitora.com/wp-content/uploads/2014/10/gitora5_merge_screen-768x221.png 768w" sizes="auto, (max-width: 819px) 100vw, 819px" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Click the &lt;em&gt;“Merge”&lt;/em&gt; button to start the merge operation.&lt;/p&gt;
&lt;p&gt;During the merge operation, Gitora carries over the changes made in the source branch to the destination branch. In some cases Git may not be able to figure out the right operation to perform to bring over a particular change. These cases are called conflicts.&lt;/p&gt;
&lt;p&gt;A conflict may occur if;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;An object deleted in the source branch is modified in the destination branch.&lt;/li&gt;
&lt;li&gt;An object is modified in the source branch and in the destination branch, and Git cannot consolidate these modifications. (For example, in both branches the same line of code in a PL/SQL procedure is modified. There is no way a version control system can figure out the right way to consolidate these two changes.)&lt;/li&gt;
&lt;li&gt;An object modified in the source branch is deleted in the destination branch.&lt;/li&gt;
&lt;li&gt;A newly created object in the source branch and a newly created object in the destination branch have the same name.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If there is a conflict in a database object after a merge, Gitora does the following in the destination schema:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It creates the database object in an uncompiled form with changes from both source and destination in it.&lt;/li&gt;
&lt;li&gt;It creates the database object with “$M” (short for my object) suffix in its name which represents the content of the object in the destination branch  before the merge.&lt;/li&gt;
&lt;li&gt;It creates the database object with “$T” (short for their object) suffix in its name which represents the object in the source branch.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The developer who started the merge is responsible to resolve the conflicts in the database objects that might occur after a merge operation.&lt;/p&gt;
&lt;p&gt;Gitora provides an easy to use merge wizard to the developer so that she can keep track and mark the conflicts as resolved. The merge wizard shows a commit screen after all the conflicts are resolved. If there are no conflicts after a merge operation, the merge wizard does not show up.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Resolving Conflicts in Table, Sequence and Material View DDL&amp;#8217;s.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Gitora 5 keeps track of table DDL&amp;#8217;s just like it keeps track of soft objects. However, it does not update the database with the new definition of a table during a merge. Yet, a merge conflict might still occur in a table DDL if the table DDL was modified in two different branches.&lt;/p&gt;
&lt;p&gt;In such a case, Gitora will show the table in the merge conflict screen. The table name will have a .sql suffix to indicate that the conflict is in a file managed by Git but the database is not affected. Gitora also provides an edit button for the user to edit the DDL text and resolve the conflict.&lt;/p&gt;
&lt;p&gt;Until the merge conflicts are resolved, Gitora does not allow developers to modify the code base subject to the merge operation.&lt;/p&gt;
&lt;p&gt;Please note that the developer is also responsible to fix the compilation errors that might occur after a merge operation which are different from the conflicts. There might be compilation errors after a merge even if there are no conflicts.&lt;/p&gt;</description><pubDate>Fri, 31 Oct 2014 16:52:14 +0200</pubDate></item></channel></rss>