Posts tagged Oracle

Fungsi Terbilang

1

Berikut adalah conoth fungsi tebilang menggunakan Oracle, cukup simple didalam oracle hanya dengan menggunakan fungsi TO_DATE dengan format Jsp.

FUNCTION terbilang (
   v_number   IN   NUMBER
)
   RETURN VARCHAR2
AS
   TYPE myArray IS TABLE OF VARCHAR2 (255);

   str_array    myArray
      := myArray ('',
                  'thousand ',
                  ' million ',
                  ' billion ',
                  ' trillion ',
                  ' quadrillion ',
                  ' quintillion ',
                  ' sextillion ',
                  'septillion ',
                  ' octillion ',
                  ' nonillion ',
                  ' decillion ',
                  ' undecillion ',
                  ' duodecillion '
                 );
   str_number   VARCHAR2 (50);
   l_return     VARCHAR2 (4000);
   trans1       VARCHAR2 (4000);
   trans2       VARCHAR2 (4000);
BEGIN
   str_number := TRUNC (ABS (v_number));

   FOR i IN 1 .. str_array.COUNT
   LOOP
      EXIT WHEN str_number IS NULL;

      IF (SUBSTR (str_number, LENGTH (str_number) - 2, 3) <> 0)
      THEN
         trans1 :=
               TO_CHAR (TO_DATE (SUBSTR (str_number, LENGTH (str_number) - 2,
                                         3),
                                 'J'
                                ),
                        'Jsp'
                       )
            || str_array (i)
            || trans1;
      END IF;

      str_number := SUBSTR (str_number, 1, LENGTH (str_number) - 3);
   END LOOP;

   l_return := trans1;

   IF TO_CHAR (v_number) LIKE '%.%'
   THEN
      str_number :=
           (ABS (v_number) - TRUNC (ABS (v_number)))
         * (TO_NUMBER (RPAD ('1',
                             (LENGTH ((ABS (v_number) - TRUNC (ABS (v_number))
                                      )
                                     )
                             ),
                             RPAD ('0', 50, '0')
                            )
                      )
           );

      FOR i IN 1 .. str_array.COUNT
      LOOP
         EXIT WHEN str_number IS NULL;

         IF (SUBSTR (str_number, LENGTH (str_number) - 2, 3) <> 0)
         THEN
            trans2 :=
                  TO_CHAR (TO_DATE (SUBSTR (str_number,
                                            LENGTH (str_number) - 2,
                                            3
                                           ),
                                    'J'
                                   ),
                           'Jsp'
                          )
               || str_array (i)
               || trans2;
         END IF;

         str_number := SUBSTR (str_number, 1, LENGTH (str_number) - 3);
      END LOOP;

      l_return := trans1 || ' point ' || trans2;
   END IF;

   RETURN l_return;
END terbilang;

untuk mencobanya

SQL> SELECT TERBILANG(100) as AA FROM DUAL;
AA
-----------------
One Hundred

Untuk fungsi terbilang dalam bahasa Indonesia

FUNCTION terbilang_indo(v_number IN NUMBER) RETURN VARCHAR2 AS
BEGIN

    RETURN      REPLACE(REPLACE( REPLACE( REPLACE( REPLACE(
             REPLACE(REPLACE( REPLACE( REPLACE( REPLACE(
             REPLACE(REPLACE( REPLACE( REPLACE( REPLACE(
             REPLACE(REPLACE( REPLACE( REPLACE( REPLACE(
             REPLACE(REPLACE( REPLACE( REPLACE( REPLACE(
             REPLACE(REPLACE( REPLACE( REPLACE( REPLACE(
             REPLACE(REPLACE( REPLACE( REPLACE( REPLACE(
             REPLACE(REPLACE( REPLACE( REPLACE( REPLACE(
             REPLACE(REPLACE( REPLACE( REPLACE(
             LOWER( TERBILANG(v_number))
             , 'trillion'    , 'Trilyun')
             , 'billion'    , 'Milyar')
             , 'million'    , 'Juta')
             , 'onethousand'    , 'Seribu')
             , 'thousand'    , 'Ribu')
             , 'nine hundred'    , 'Sembilan Ratus')
             , 'eigth hundred'    , 'Delapan Ratus')
             , 'seven hundred'    , 'Tujuh Ratus')
             , 'six hundred'    , 'Enam Ratus')
             , 'five hundred'    , 'Lima Ratus')
             , 'four hundred'    , 'Empat Ratus')
             , 'three hundred'    , 'Tiga Ratus')
             , 'two hundred'    , 'Dua Ratus')
             , 'one hundred'    , 'Seratus')
             , 'hundred'    , 'Ratus')
             , 'ninety'        , 'Sembilan Puluh')
             , 'eighty'        , 'Delapan Puluh')
             , 'seventy'    , 'Tujuh Puluh')
             , 'sixty'        , 'Enam Puluh')
             , 'fifty'        , 'Lima Puluh')
             , 'forty'        , 'Empat Puluh')
             , 'thirty'        , 'Tiga Puluh')
             , 'twenty'        , 'Dua Puluh')
             , 'nineteen'    , 'Sembilanbelas')
             , 'eighteen'    , 'Delapanbelas')
             , 'seventeen'    , 'Tujuhbelas')
             , 'sixteen'    , 'Enambelas')
             , 'fifteen'    , 'Limabelas')
             , 'fourteen'    , 'Empatbelas')
             , 'thirteen'    , 'Tigabelas')
             , 'twelve'        , 'Duabelas')
             , 'eleven'        , 'Sebelas')
             , 'ten'        , 'Sepuluh')
             , 'nine'        , 'Sembilan')
             , 'eight'        , 'Delapan')
             , 'seven'        , 'Tujuh')
             , 'six'        , 'Enam')
             , 'five'        , 'Lima')
             , 'four'       , 'Empat')
             , 'three'        , 'Tiga')
             , 'two'        , 'Dua')
             , 'one'        , 'Satu')
             , 'point'        , 'koma')
             , '','');
END terbilang_indo;

untuk mencobanya

SQL> SELECT TERBILANG_INDO(100) as AA FROM DUAL;
AA
-----------------
Seratus

Connecting to Oracle using Java

0

Tutorial kali ini adalah program dalam bahasa java untuk koneksi ke database oracle. Untuk dapat membangun koneksi ke database oracle kita memerlukan sebuah library java yang disebut JDBC (Java DataBase Connectivity). Tidak hanya ke oracle JDBC hampir bisa digunakan untuk semua RDBMS yang ada di pasaran. Untuk mensupport tipe data khusus yang ada di suatu database biasanya setiap vendor database menyediakan JDBC khusus untuk databasenya. Sebagai contoh Oracle, Oracle menyediakan library JDBC khusus oracle dengan tujuan untuk mensupport tipe data khusus yang hanya ada di oracle dan meningkatkan performansi. Kita tidak akan terlalu panjang membahas JDBC sekarang kita akan belajar langkah pertama dari JDBC membangun koneksi ke database. Urutan proses koneksi ke database adalah sebgai berikut :

  1. Load Driver
  2. Setup URL
  3. Membangun koneksi

Ok, sekarang coba kita buat sample java program untuk membuat koneksi ke database oracle. Pada contoh ini kita akan koneksi ke database local skema HR.

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package oracleEx;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;

/**
 *
 * @author Massri
 */
public class OracleConn {
    private String username;
    private String password;
    private String serviceId;
    private String servername;
    private int port;
    private static String driver = "oracle.jdbc.driver.OracleDriver";

    private Connection conn;
    public OracleConn() {
    }

    public OracleConn(String username, String password, String serviceId, String servername, int port) {
        this.username = username;
        this.password = password;
        this.serviceId = serviceId;
        this.servername = servername;
        this.port = port;
        this.conn = null;
    }

    public void Connect(){
        try {
            System.out.println("Conneting ...");
            Class.forName(OracleConn.driver);
            String url = "jdbc:oracle:thin:@" + this.servername + ":" + this.port + ":" + this.serviceId;
            System.out.println("URL = "+ url);

            this.conn = DriverManager.getConnection(url, this.username, this.password);

        } catch (SQLException ex) {
            System.err.println(ex.getMessage());
        } catch (ClassNotFoundException ex) {
            System.err.println(ex.getMessage());
        }
    }

    public Connection getConnection(){
        return this.conn;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public int getPort() {
        return port;
    }

    public void setPort(int port) {
        this.port = port;
    }

    public String getServername() {
        return servername;
    }

    public void setServername(String servername) {
        this.servername = servername;
    }

    public String getServiceId() {
        return serviceId;
    }

    public void setServiceId(String serviceId) {
        this.serviceId = serviceId;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public static void main(String[] args){
        System.out.println("Testing Connecting to Database ");
        OracleConn ora = new OracleConn();
        ora.setServername("127.0.0.1");
        ora.setUsername("HR");
        ora.setPassword("HR");
        ora.setPort(1521);
        ora.setServiceId("ORACL");

        ora.Connect();

        System.out.println("Conn Resource" + ora.getConnection().toString());

    }

}

Simpan program dengan nama file OracleConn.java dan compile kemudian setelah kita jalankan akan muncul hasil seperti berikut :

Testing Connecting to Database
Conneting ...
URL = jdbc:oracle:thin:@127.0.0.1:1521:ORCL
Conn Resourceoracle.jdbc.driver.T4CConnection@12f6684
BUILD SUCCESSFUL (total time: 2 seconds)

Convert XML Document to Oracle Types

0

Mulai versi 9 oracle mengenalkan tipe data XMLTYPE. Untuk penjelasan tentang XMLTYPE bisa dilihat di postingan sebelumnya, sekarang kita mencoba memanfaatkan XMLTYPE. Tujuan tulisan ini adalah mengubah XML document ke Oracle Type. Misal saya mempunyai dokumen XML seperti dibawah ini :

<?xml version="1.0"?>
<SalesDoc>
<salesDate>22/01/2011</salesDate>
<terminalName>BDG01</terminalName>
<Product>
<ProductId>P001</ProductId>
<ProductName>Product 1</ProductName>
<ProductQty>10</ProductQty>
<ProductPrice>200000<ProductPrice>
</Product>
</SalesDoc>

Kita ingin merubah dokumen XML diatas menjadi Oracle Types.Pertama yang harus kita lakukan adalah membuat Oracle Type dan langkah berikutnya adalah kita parsing XML dan kita assignment ke Tipe yang sudah kita buat.

DECLARE
   TYPE T_SALES_DOC IS RECORD (
      salesDate      DATE,
      brachName      VARCHAR2 (20),
      productId      VARCHAR2 (10),
      productName    VARCHAR2 (40),
      productQty     INTEGER,
      productPrice   NUMBER (10)
   );

   TYPE T_SALES_LIST IS TABLE OF T_SALES_DOC;

   v_xmltype       XMLTYPE;          -- variable untuk menyimpan document xml;
   v_salesDoc      T_SALES_LIST            := T_SALES_LIST ();
   v_dom           DBMS_XMLDOM.DOMDocument;
   v_domNodeList   DBMS_XMLDOM.DOMNodeList;
   v_length        INTEGER;
   v_node          DBMS_XMLDOM.DOMNode;
   v_xmlstr        VARCHAR2 (400);
BEGIN
   v_xmlstr :=
      '<?xml version="1.0"?>
            <SalesDoc>
            <salesDate>22/01/2011</salesDate>
            <terminalName>BDG01</terminalName>
            <Product>
            <ProductId>P001</ProductId>
            <ProductName>Product 1</ProductName>
            <ProductQty>10</ProductQty>
            <ProductPrice>200000</ProductPrice>
            </Product>
            </SalesDoc>';
   v_xmltype := XMLTYPE (v_xmlstr);
   v_dom := DBMS_XMLDOM.NEWDOMDOCUMENT (xmldoc => v_xmltype);
   v_domNodeList :=
      DBMS_XSLPROCESSOR.selectNodes (DBMS_XMLDOM.makeNode (v_dom),
                                     '/SalesDoc/Product'
                                    );
   v_length := DBMS_XMLDOM.getLength (v_domNodeList);

   FOR i IN 0 .. (v_length - 1)
   LOOP
      v_node := DBMS_XMLDOM.item (v_domNodeList, i);
      v_salesDoc.EXTEND;
      DBMS_XSLPROCESSOR.valueOf (v_node,
                                 'ProductId/text()',
                                 v_salesDoc (v_salesDoc.LAST).ProductId
                                );
      DBMS_XSLPROCESSOR.valueOf (v_node,
                                 'ProductName/text()',
                                 v_salesDoc (v_salesDoc.LAST).ProductName
                                );
      DBMS_XSLPROCESSOR.valueOf (v_node,
                                 'ProductQty/text()',
                                 v_salesDoc (v_salesDoc.LAST).ProductQty
                                );
      DBMS_XSLPROCESSOR.valueOf (v_node,
                                 'ProductPrice/text()',
                                 v_salesDoc (v_salesDoc.LAST).ProductPrice
                                );
   END LOOP;

   -- menambilkan hasil ke layar
   FOR i IN v_salesDoc.FIRST .. v_salesDoc.LAST
   LOOP
      DBMS_OUTPUT.put_line ('product ID  : ' || v_salesDoc (i).ProductId);
      DBMS_OUTPUT.put_line ('ProductName  : ' || v_salesDoc (i).ProductName);
      DBMS_OUTPUT.put_line ('ProductQty  : ' || v_salesDoc (i).ProductQty);
      DBMS_OUTPUT.put_line ('ProductPrice  : ' || v_salesDoc (i).ProductPrice);
   END LOOP;
END;

berikut hasil contoh running dari program diatas

Create JOB di oracle

0

Scheduller merupakan konsep penting untuk menjalankan sesuatu secara otomatis pada waktu yang sudah ditentukan, misal kita ingin melakukan update ke suata tabel secara otomatis setiap hari maka scheduller adalah yang kita perlukan. sekarang kita akan mencoba membuat scheduler di oracle. Oracle mempunya paket namanya DBMS_JOB, DBMS_JOB mulai dikenalkan sejak Oracle versi 7.3.4.

Untuk membuat JOb dioracle kita bisa menggunakan procedure

DBMS_JOB.SUBMIT(
  JOB            OUT BINARY_INTEGER,
  WHAT         IN  VARCHAR2,
  NEXT_DATE IN  DATE           DEFAULT SYSDATE,
  INTERVAL    IN  VARCHAR2       DEFAULT 'NULL',
  NO_PARSE   IN  BOOLEAN        DEFAULT FALSE,
  INSTANCE   IN  BINARY_INTEGER DEFAULT 0,
  FORCE       IN  BOOLEAN        DEFAULT FALSE);

Sebagai contoh kita akan melakukan update ke table TMP_JOB

Membuat Procedure update

CREATE OR REPLACE PROCEDURE TMPUPD
IS
BEGIN
   UPDATE TMP_JOB SET KOL1=2;
   COMMIT;
END;

Menjalankan procedure TMPUPD setiap malam jam 00

DECLARE
v_jobId NUMBER(9);
BEGIN
   DBMS_JOB.SUBMIT (
    JOB                => v_jobId,
    WHAT             => 'TMPUPD;',
    NEXT_DATE     => TRUNC(SYSDATE) + 1,
    INTERVAL        => 'TRUNC(SYSDATE)+1'
   );

   DBMS_OUTPUT.PUT_LINE ('Job Created with Id : '||v_jobId);
END;

Menjalankan procedure TMPUPD setiap jam dimulai sekarang

DECLARE
v_jobId NUMBER(9);
BEGIN
   DBMS_JOB.SUBMIT (
    JOB                => v_jobId,
    WHAT             => 'TMPUPD;',
    NEXT_DATE     => SYSDATE,
    INTERVAL        => 'SYSDATE+(1/24)'
   );

   DBMS_OUTPUT.PUT_LINE ('Job Created with Id : '||v_jobId);
END;
Go to Top