Kamis, 23 Januari 2020

PL/SQL - Collections

PL/SQL - Collections


PL/SQL telah menyediakan teknik pengumpulan data sbb:

NoMethod Name & Purpose
1
EXISTS(n)
Returns TRUE if the nth element in a collection exists; otherwise returns FALSE.
SELECT *
FROM data_karyawan
WHERE EXISTS (SELECT * FROM jabatan_karyawan  WHERE jab_id = jab_kar);
2
COUNT
Returns the number of elements that a collection currently contains.
select count(*) from data_karyawan;
3
LIMIT
Checks the maximum size of a collection.
SELECT *  FROM   data_karyawan
ORDER BY nama
OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY; -->ini hanya db 12 ke atas, kalau untuk versi 12 kebawah gunakan sub query.
4
FIRST
Returns the first (smallest) index numbers in a collection that uses the integer subscripts.
5
LAST
Returns the last (largest) index numbers in a collection that uses the integer subscripts.
6
PRIOR(n)
Returns the index number that precedes index n in a collection.
7
NEXT(n)
Returns the index number that succeeds index n.
8
EXTEND
Appends one null element to a collection.
9
EXTEND(n)
Appends n null elements to a collection.
10
EXTEND(n,i)
Appends n copies of the ith element to a collection.
11
TRIM
Removes one element from the end of a collection.
12
TRIM(n)
Removes n elements from the end of a collection.
13
DELETE
Removes all elements from a collection, setting COUNT to 0.
14
DELETE(n)
Removes the nth element from an associative array with a numeric key or a nested table. If the associative array has a string key, the element corresponding to the key value is deleted. If n is null, DELETE(n) does nothing.
15
DELETE(m,n)
Removes all elements in the range m..n from an associative array or nested table. If m is larger than n or if m or n is null, DELETE(m,n) does nothing.
Share:

Senin, 13 Januari 2020

Cara mengetahui komputer name dengan IP address



Apakah pernah terlintas dalam pikiran anda ketika melihat ip address komputer penasaran milik siapa ? kalau pernah merasakan hal tersebut berarti anda sudah sesuai buka web ini ..

Trus bagaimana caranya.. ?

Oke langsung saja, berikut caranya :

1.   KIik Start selanjutnya pilih Run (Atau bisa langsung dengan menekan Windows + R)
2.   Ketik “cmd” (tanpa tanda petik) lalu tekan enter / OK
3. Pada Command Prompt ketik “nbtstat -a xxx.xxx.xxx.xxx” (tanpa tanda petik, dimana xxx.xxx.xxx.xxx adalah alamat IP yang ingin dicari tahu nama  komputernya)
Contoh : nbtstat -a 192.168.0.16, 

maka akan tampil hasilnya :



Sangat gampang bukan untuk mengetahui nama pemilik IP address komputer..


semoga bermamfaat informasinya...Jangan lupa tinggalkan comment ya..




Share:

Rabu, 08 Januari 2020

Materialized View Di Oracle



apa itu materialized view?   Apa bedanya dengan view biasa?

Untuk mengetahui perbedaanya kita akan mengaplikasinya ke dalam table database.. kita akan buat 2 buah table dan dari table tersebut akan kita buat materialized view nya.


CREATE TABLE produk (kode CHAR(3) PRIMARY KEY,nama VARCHAR2(50) NOT NULL );
CREATE TABLE stok (
          tanggal DATE NOT NULL DEFAULT SYSDATE PRIMARY KEY,
          nomorFaktur CHAR(3) NOT NULL,
         kodeProduk CHAR(3) NOT NULL,
          jumlah NUMBER NOT NULL,
          FOREIGN KEY (kodeProduk) REFERENCES produk(kode)
        );
INSERT INTO produk VALUES ('CCC', 'Produk C');
INSERT INTO produk VALUES ('DDD', 'Produk D');
INSERT INTO stok VALUES (SYSDATE, '002', 'AAA', -5);
INSERT INTO stok VALUES (SYSDATE, '003', 'BBB', -10);
INSERT INTO stok VALUES (SYSDATE, '003', 'CCC', -20);
Pada tabel di atas, ada  perubahan produk (misalnya, bertambah akibat pembelian dan berkurang akibat penjualan) pada tabel stok.   Biasanya, saya sering kali menampilkan nama produk beserta jumlah yang tersedia berdasarkan perubahan stok tersebut.   Untuk itu, saya dapat menggunakan query SQL berikut ini:

SELECT p.kode, p.nama, COALESCE(SUM(s.jumlah),0) 
FROM produk p LEFT JOIN stok s ON p.kode = s.kodeProduk 

GROUP BY p.kode, p.nama;

Banyak database sudah mendukung apa yang disebut sebagai view (atau disebut juga non-materialized view).   Biasanya view dipakai untuk menyederhanakan SQL yang menggabungkan beberapa tabel sehingga dapat diakses melalui view tersebut.   Sebagai contoh, untuk membuat sebuah view berdasarkan query di atas, maka saya dapat memberikan perintah seperti berikut ini:

CREATE VIEW persediaan AS
SELECT p.kode, p.nama, COALESCE(SUM(s.jumlah),0) jumlah FROM
produk p LEFT JOIN stok s ON p.kode = s.kodeProduk

GROUP BY p.kode, p.nama;

Pada contoh di atas, saya sudah membuat sebuah view baru yang diberi nama persediaan.   Sifat view adalah non-materialized sehingga tidak ada data yang ‘disimpan’ pada view tersebut.   Setiap kali query dilakukan pada view persediaan, maka SQL asalnya yang melakukan agregasi SUM akan selalu dikerjakan kembali!   Sebagai buktinya, lihat hasil explain yang men-select dari view persediaan:


EXPLAIN SELECT * FROM persediaan;
Query Optimizer Plan:

  STEP:                1
  LEVEL:               3
  OPERATION:           TblLkRangeScan
  TBLNAME:             SOLID.PRODUK
  IXNAME:              PRODUK
  INDEXED CONDITION:   <NULL>
  NOT INDEXED:         <NULL>

  STEP:                2
  LEVEL:               3
  OPERATION:           TblLkRangeScan
  TBLNAME:             SOLID.STOK
  IXNAME:              TTFOREIGN_2
  INDEXED CONDITION:   S.KODEPRODUK >= P.KODE
  NOT INDEXED:         <NULL>

  STEP:                3
  LEVEL:               2
  OPERATION:           MergeJoin(Left OuterJoin)
  TBLNAME:             <NULL>
  IXNAME:              <NULL>
  INDEXED CONDITION:   P.KODE = S.KODEPRODUK
  NOT INDEXED:         <NULL>

  STEP:                4
  LEVEL:               1
  OPERATION:           GroupBy
  TBLNAME:             <NULL>
  IXNAME:              <NULL>
  INDEXED CONDITION:   <NULL>
  NOT INDEXED:         <NULL>

Berbeda dengan view, sebuah materialized view akan ‘menyimpan’ nilai dari tabel sumber (disebut jadi detail table).   Sebagai contoh, kode SQL berikut ini akan membuat sebuah synchronous materialized view:


CREATE MATERIALIZED VIEW sync_persediaan AS
SELECT kodeProduk, SUM(jumlah) jumlah, COUNT(*) entri
FROM stok
GROUP BY kodeProduk;

Karena beberapa keterbatasan, saya tidak menghasilkan materialized view yang sama seperti non-materialized view di atas.   Setiap kali saya men-select dari sync_persediaan, saya akan memperoleh hasil yang sama tanpa adanya query ulang dari tabel sumber.   Dengan demikian, proses membaca dari materialized view bukanlah sesuatu yang berat, seperti yang ditunjukkan oleh hasil explain berikut ini:

EXPLAIN SELECT * FROM sync_persediaan;

Query Optimizer Plan:

  STEP:                1
  LEVEL:               1
  OPERATION:           RowLkSerialScan
  TBLNAME:             SYNC_PERSEDIAAN
  IXNAME:              <NULL>
  INDEXED CONDITION:   <NULL>
  NOT INDEXED:         <NULL>

Lalu, kapan sebuah materialized view diperbaharui?   Setiap kali saya melakukan perubahan pada tabel sumber (disebut juga detail table). Sebagai contoh, bila saya menambahkan sebuah item baru untuk stok, maka sync_persediaan akan diperbaharui, seperti yang ditunjukkan pada hasil explain berikut ini:

EXPLAIN INSERT INTO stok VALUES (SYSDATE, '005', 'DDD', 10);

Query Optimizer Plan:

  STEP:                1
  LEVEL:               1
  OPERATION:           RowLkInsert
  TBLNAME:             STOK
  IXNAME:              <NULL>
  INDEXED CONDITION:   <NULL>
  NOT INDEXED:         <NULL>

  STEP:                2
  LEVEL:               2
  OPERATION:           RowLkSerialScan
  TBLNAME:             SOLID.SYNC_PERSEDIAAN
  IXNAME:              <NULL>
  INDEXED CONDITION:   <NULL>
  NOT INDEXED:         SOLID.SYNC_PERSEDIAAN.KODEPRODUK = 'DDD'

  STEP:                3
  LEVEL:               1
  OPERATION:           OneGroupGroupBy
  TBLNAME:             <NULL>
  IXNAME:              <NULL>
  INDEXED CONDITION:   <NULL>
  NOT INDEXED:         <NULL>

  STEP:                4
  LEVEL:               1
  OPERATION:           RowLkUpdView
  TBLNAME:             SOLID.SYNC_PERSEDIAAN
  IXNAME:              <NULL>
  INDEXED CONDITION:   <NULL>
  NOT INDEXED:         <NULL>

Kesimpulannya: Gunakan materialized view bila query untuk pada materialized view tersebut sering dilakukan.   Bila perubahan pada tabel sumber (detail table) terlalu sering, lebih baik menggunakan view (disebut juga non-materialized view).

Baca juga  : Tuning SQL Oracle


Share:

Senin, 11 November 2019

Encrypt PL/SQL ( Wrap PL/SQL)




Kode PL/SQL pada oracle bisa di enksripsi menjadi tidak bisa dibaca oleh orang lain kode aslinya seperti apa....

Ingin tahu bagaimana cara membuatnya ? silahkan simak tips dibawah ini :

1. Pertama-tama buat sebuah kode PL/SQL mis: function, procedure atau package..dalam hala ini saya akan coba buat sebuah function :

create or replace FUNCTION CURRENCY(v_numeric number) RETURN varchar2 IS
  template varchar2(100);
  v_dec varchar2(100);
  a number:=1;
begin
  template := to_char(v_numeric );
  while a <= length(template) loop

    if mod(a,3) = 0 and length(template) <> a then
   v_dec := '.'||substr(template,length(template)+1-a,1)||v_dec;
else
   v_dec := substr(template,length(template)+1-a,1)||v_dec;
end if;
    a := a + 1;
  end loop;

  return v_dec;
END currency;

2. selanjutnya buat sebuah file .sql dari function diatas dan simpan ke dalma local terserah dimana tempat simpanya, caranya adalah sbb:


3. Setelah file disimpan, selanjutnya silahkan buka CMD dan arahakan foldernya ke tempat file .sql yang barusan kita simpan..

4. ketikkan perintah ini (wrap iname=namafile.sql) , bertujuan untuk melakukan encript pl/sql pada function currency diatas.



5. Maka file .plb akan terbentuk di folder dimana kita menyimpan file .sql nya sebelumnya.

6. selanjutnya untuk mengganti script kode asli di function currency, caranya adalah login terlebih dahulu ke sqlplus,  dan ketik perintah dibawah ini : @D:\TEST\currency.plb


7. Terakhir silahkan dicek function currency nya aapak sudah berubah menjadi ter enkripsi atau belum, jika berhasil maka tampilanya akan seperti dibawah ini :


8. Selesai....maka kode asli dari pl/sql function tersebut sudah tidak bisa dibaca atau dipelajari oleh orang lain...

Kalau ada Encrypt akan ada juga Decrypt nya :

Baca juga : Decrypt PL/SQL ( Wrap PL/SQL)


Terima kasih sudah berkunjung ke website ini,
silahkan tinggalkan komentar atau kritik dan saran pada halaman paling bawah.
dan jangan lupa juga untuk follow kami, untuk informasi yang terupdate.


Share:

Kamis, 31 Oktober 2019

Tuning SQL Oracle




Salam semuanya ....:

Mari kita bahas tuning sql oracle, tujuanya adalah optimasi query-query yang kita tulis di sql oracle.
supaya query-query yang kita tulis tersebut bisa mempercepat proses di server database.



 Berikut hal-hal yang harus kita lakukan : 

 1. IN vs EXISTS dan NOT IN vs NOT EXISTS 


  • Jika kita punya 2 buah tabel ( tabel a dan table b), 
  • Tabel A berisi data kode {‘1001’, ‘1002’, ‘1003’, ‘1004’, ‘1005’}
  • Tabel B berisi data kode {‘1002’,’1005’,’1006’,’1007’}
  • Kalau kita ingin menampilkan kode : {'1002','1005'}, maka query nya adalah : SELECT* FROM tabel_A a WHERE EXISTS(SELECT* FROM table_B b WHERE b.kode = a.kode)
  • Kalau kita ingin menampilkan kode : {'1001','1003', '1004'}, maka query nya adalah : SELECT* FROM tabel_A a WHERE NOT EXISTS(SELECT* FROM table_B b WHERE b.kode = a.kode)
  • In dan Not In digunakan untuk where clause tertentu seperti : in ('jakarta','bandung','surbaya')
  • Kalau mau menampilkan data dari subquery gunakan Exists dan Not Exists
2. 



Terima kasih sudah berkunjung ke website ini,
silahkan tinggalkan komentar atau kritik dan saran halaman paling bawah.
dan jangan lupa juga untuk follow kami, untuk informasi yang terupdate.


Share:

Rabu, 23 Oktober 2019

Tips Python Part 2

Di postingan sebelumnya sudah pernah kita bahas tips python di part 1, kalau belum pernah membaca silahkan klik link Tips Python Part 1.

Berikut Tips Python Part 2 :
=====================

1. Mengubah 2 list menjadi dictionary

  • list1 = ['nama','alamat','usia','tgl lahir']
  • list2 = ['ani','jakarta',25,'12-sep-2010']
  • zipObj = zip(list1, list2) => zip dulu list1 dan list2 menjadi object
  • dictData = dict(zipObj ) => object diubah menjadi dictionary
  • print (dictData), maka hasilnya
  • {'nama': 'ani', 'alamat': 'jakarta', 'usia': 25, 'tgl lahir': '12-sep-2010'}
2. Menambahkan data list ke dictioary
  • dic1 = {'nama': 'ani', 'alamat': 'jakarta', 'usia': 25, 'tgl lahir': '12-sep-2010'}
  • dic2 = {'nama': 'joko', 'alamat': 'medan', 'usia': 30, 'tgl lahir': '01-jan-1999'}
  • lis_data = []
  • lis_data.append(dic1)
  • lis_data.append(dic2)
  • print (lis_data) dan hasilnya.
  • [{'nama': 'ani', 'alamat': 'jakarta', 'usia': 25, 'tgl lahir': '12-sep-2010'},
  •  {'nama': 'joko', 'alamat': 'medan', 'usia': 30, 'tgl lahir': '01-jan-1999'}
  • ]
3. 




Terima kasih sudah berkunjung ke website ini,
silahkan tinggalkan komentar atau kritik dan saran halaman paling bawah.
dan jangan lupa juga untuk follow kami, untuk informasi yang terupdate.


Share:

Tips Python Part 1


Hai semuanya bertemu kembali dengan blog ini, kita akan bahas tentang python programming.
tapi disini saya hanya akan berikan tips di pemrograman python, tidak secara mendetail yahh.....


Tips Python Pemrograman :
======================

1. List
  • var_list1 = [1,2,3,4,5]
  • var_list2 = ['satu','dua','tiga','empat','lima']

     Note: kalau string ditulis dengan diapit tanpa petik1 atau 2

2. Tuple 
  • var_tuple1 = (1,2,3,4,5)
  • var_tuple2 = ('satu','dua','tiga','empat','lima')

     Note: kalau string ditulis dengan diapit tanpa petik1 atau 2

3. Dictionary
  • var_dic1 = {1:'satu', 2:'dua', 3:'tiga'}
  • var_dic2 = {'nama':'alex', 'umur':21, 'jns_kel':'Pria'}

    Note : dictionary terdiri dari " key : value "





Terima kasih sudah berkunjung ke website ini,
silahkan tinggalkan komentar atau kritik dan saran halaman paling bawah.
dan jangan lupa juga untuk follow kami, untuk informasi yang terupdate.


Share:

BTemplates.com