Database

Convert XMLTYPE to CLOB or Varchar

0

Pada dokumentasi kali ini saya tulis konversi XMLTYPE ke cloB atau varchar2 di oracle.
Misal saya punya table T1 dengan kolom tipe data XMLTYPE

CREATE TABLE T1(COL1 XMLTYPE);

sekarang kebutuhan saya adalah menyimpan informasi COL1 dalam tipe data CLOB atau VARCHAR2.

DECLARE
v_col CLOB;
v_str VARCHAR2(200);
v_xml XMLTYPE;

BEGIN
  SELECT COL1 INTO v_xml
  FROM T1;

  v_col := v_xml.GETCLOBVAL ();
  v_str := v_xml.GETSTRINGVAL();

END;

cukup dulu dokumentasi kali ini kita lanjutkan lain kali.

Fungsi Terbilang

0

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

Go to Top