Artikel ini saya translate dari sini. Tujuan saya translate artikel ini sebagai latihan saya dalam mempelajari bahasa inggris, disamping selain memahami isi materi artikel tersebut. Saya akui, saya belum memiliki izin dalam melakukan translate artikel tersebut :).

Mencari tahu yang memiliki table dan apa tablespace nya adalah kebutuhan yang cukup umum dari DBA. Dalam query ini, kita menggunakan dba_tables view untuk menemukan pemilik dan nama tablespace dari tabel EMP.

1
2
3
4
5
6
7
8
 SQL>  select owner, table_name, tablespace_name
  2   from dba_tables
  3  where table_name='EMP';

OWNER                TABLE_NAME           TABLESPACE_NAME
-------------------- -------------------- -------------
SCOTT                EMP                  USERS
POLL                 EMP                  USERS

Seperti yang dapat kita lihat dari query ini, kita memiliki 2 table yang disebut EMP, dimiliki oleh 2 user yang berbeda (SCOTT dan POLL). Kedua table terdapat dalam tablespace USERS.

Sebuah latihan yang bagus untuk anda mungkin mencoba menggabungkan query ini dengan sebuah view seperti dba_extents dan mencari tahu seberapa besar tabel ini dialokasikan.

Artikel ini saya translate dari sini. Tujuan saya translate artikel ini sebagai latihan saya dalam mempelajari bahasa inggris, disamping selain memahami isi materi artikel tersebut. Saya akui, saya belum memiliki izin dalam melakukan translate artikel tersebut :).

Baru-baru ini, saya mulai bekerja dengan IntelliJ. Tapi, jujur, setelah beberapa tahun dengan Eclipse, sulit untuk menjadi efektif karena tombol shortcut yang berbeda antara dua IDE tersebut. Permintaan kecil di Google dan saya mendapatkan ini:

Description Eclipse shortcut IntelliJ shortcut
Navigasi sebuah tipe java CTRL + ALT + T CTRL + N
Navigasi sebuah Resource CTRL + ALT + R CTRL + SHIFT + N
Sumber terakhir perbaikan ALT + LEFT ARROW CTRL + ALT + LEFT ARROW
Debug F11 SHIFT + F9
Membuka Deklarasi F3 CTRL + SHIFT + B
Membuka Hierarchy F4 CTRL + H
Mengatur import CTRL + SHIFT + O CTRL + ALT + O
Find CTRL + F CTRL + F
Find Again/previous F3 atau SHIFT + F3 F3 atau SHIFT + F3
(DEBUG) Step Into F5 F7
(DEBUG) Step Over F6 F8
(DEBUG) Step Out F7 SHIFT + F8
(DEBUG) Resume F8 F9
Untuk menemukan implement dari sebuah abstrak method CTRL + ALT + B
Menemukan penggunaan CTRL + SHIFT + G ALT + F7
Artikel ini saya translate dari sini. Tujuan saya translate artikel ini sebagai latihan saya dalam mempelajari bahasa inggris, disamping selain memahami isi materi artikel tersebut. Saya akui, saya belum memiliki izin dalam melakukan translate artikel tersebut :).

Setelah sekitar tujuh tahun secara eksklusif menggunakan Eclipse untuk pengembangan Java, saya baru mendapatkan kesempatan untuk bekerja pada proyek dimana IntelliJ IDEA adalah editor standar. Tiba-tiba saya dicoba dan diuji keyboard shortcut eclipse tidak bekerja lagi. Aku masih dalam proses belajar Keyboard Shortcut IntelliJ tapi ini adalah favorit saya sampai sekarang (setara dengan keyboard shortcut eclipse). Ini mungkin membantu orang lain yang beralih dari Eclipse ke IntelliJ. Tentu saja, ada plugin IntelliJ yang tersedia yang mana membuat IntelliJ IDEA berperilaku seperti Eclipse (shortcut dan perilaku compiler yang sama) tapi mengapa melakukan itu?

Pada tabel di bawah, dalam beberapa kasus, shortcut tidak memetakan 1:1, tapi mereka mencapai efek yang sama.

Eclipse IntelliJ IDEA Description
F4 CTRL + H Menampilkan type hierarchy
CTRL + ALT + G CTRL + ALT + F7 Menemukan Penggunaan
CTRL + SHIFT + U CTRL + F7 Menemukan Penggunaan di file yang sama
ALT + SHIFT + R SHIFT + F6 Rename
CTRL + SHIFT + R CTRL + SHIFT + N Membuka file / membuka resource
CTRL + SHIFT + X,J CTRL + SHIFT + F10 Menjalankan (program java)
CTRL + SHIFT + O CTRL + ALT + O Mengatur import
CTRL + O CTRL + F12 Menampilkan file structure / outline saat ini
CTRL + SHIFT + M CTRL + ALT + V Membuat refactoringvariable lokal
syso + CTRL + SPACE sout + CTRL + J System.out.println("")
ALT + UP/DOWN CTRL + SHIFT + UP/DOWN Memindahkan baris
CTRL + D CTRL + Y Hapus baris saat ini
ALT + H Menampilkan riwayat subversion
CTRL + H CTRL + SHIFT + F Mencari (Menemukan di dalam path)
“semi” mengaturnya window -> preferences CTRL + SHIFT + ENTER Jika saya ingin menambahkan titk koma ; pada akhir statement
CTRL + 1 atau CTRL + SHIFT + L CTRL + ALT + V Memperkenalkan variable lokal
ALT + SHIFT + S ALT + INSERT generate getters/setters
CTRL + SHIFT + F CTRL + ALT + L format kode
CTRL + Y CTRL + SHIFT + Z redo
CTRL + SHIFT + C CTRL + / comment out lines
CTRL + ALT + H CTRL + ALT + H Menampilkan call hierarchy
CTRL + ALT + F7 Untuk melompat ke salah satu pemanggil dari method
CTRL + SHIFT + I ALT + F8 Mengevaluasi ekspresi (dalam debugger)
F3 CTRL + B Menuju deklarasi (contoh. menuju deklarasi method)

Satu hal yang saya tidak menyadari pada awalnya adalah bahwa tombol Scroll to Source di IntelliJ IDEA pada dasarnya sama dengan tombol Link with Editor di eclipse.

Kemaren saya mendapatkan masalah seperti ini, saya ingin mengubah data berikut:

1
2
3
4
5
--lbl.menu.report.referralbonds
----lbl.menu.report.rb.transactionstatus
----lbl.menu.report.rb.transactionhistory
----lbl.menu.report.rb.dailybalance
----lbl.menu.report.rb.bondsproductlist

Menjadi

1
2
3
4
5
lbl.menu.report.referralbonds
lbl.menu.report.rb.transactionstatus
lbl.menu.report.rb.transactionhistory
lbl.menu.report.rb.dailybalance
lbl.menu.report.rb.bondsproductlist

Setelah tanya ke teman, ternyata di excel ada fungsi SUBSTITUTE

1
=SUBSTITUTE(<source>, <oldvalue>, <newvalue>)

contoh

1
=SUBSTITUTE("----lbl.menu.report.rb.bondsproductlist", "-", "")

Pada tulisan saya sebelumnya, versi scala yang di pakai tidak permanent, karena ketika keluar dari sbt console, versi scala kembali lagi ke versi default dari sbt yang di gunakan.

1
2
3
4
5
6
7
8
9
10
11
12
13
$ sbt
[info] Set current project to marjinal (in build file:/home/marjinal/)
> console
[info] Updating {file:/home/marjinal/}marjinal...
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
[info] Starting scala interpreter...
[info] 
Welcome to Scala version 2.10.2 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_10).
Type in expressions to have them evaluated.
Type :help for more information.

scala> 

Untuk merubah versi scala menjadi permanent, buat file global.sbt, letakkan ke dalam ~/.sbt/{versisbt} (jika versi sbt 0.13.0, ubah versisbt menjadi 0.13)

1
vi ~/.sbt/0.13/global.sbt

Lalu isikan

1
scalaVersion := "2.10.3"

jika anda ingin menggunakan versi scala yang lain, ubah 2.10.3 menjadi yang anda inginkan.

Test

1
2
3
4
5
6
7
8
9
10
11
12
13
$ sbt
[info] Set current project to marjinal (in build file:/home/marjinal/)
> console
[info] Updating {file:/home/marjinal/}marjinal...
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
[info] Starting scala interpreter...
[info] 
Welcome to Scala version 2.10.3 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_10).
Type in expressions to have them evaluated.
Type :help for more information.

scala> 

Saat saya menulis tulisan ini, versi terakhir scala adalah 2.10.3.

Tapi ketika saya menjalankan sbt console, sbt masih menggunakan versi 2.10.2. Agar sbt console menggunakan versi 2.10.3 (atau versi yang kita inginkan), sebelum menjalankan command console ketikkan ++ scalaversion, contoh ++ 2.10.3

Test

1
2
3
4
5
6
7
8
9
10
11
12
[info] Set current project to marjinal (in build file:/home/marjinal/)
> ++ 2.10.3
[info] Setting version to 2.10.3
[info] Set current project to marjinal (in build file:/home/marjinal/)
> console
[info] Starting scala interpreter...
[info] 
Welcome to Scala version 2.10.3 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_10).
Type in expressions to have them evaluated.
Type :help for more information.

scala> 

Untuk mengecek versi sbt, jalankan command berikut:

1
$ sbt sbt-version

Output:

1
2
[info] Set current project to marjinal (in build file:/home/marjinal/)
[info] 0.13.0

Di tulisan ini saya ingin menginstall sbt versi 0.13.0 di crunchbang.

Download sbt-launch

Download sbt-launch & letakkan ke dalam folder ~/bin.

1
2
$ cd ~/bin
$ wget -c http://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/sbt-launch/0.13.0/sbt-launch.jar

Output:

1
2
3
4
5
6
7
8
9
10
--2013-10-19 09:22:26--  http://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/sbt-launch/0.13.0/sbt-launch.jar
Resolving repo.typesafe.com... 54.236.91.228, 107.21.30.253, 54.236.87.147
Connecting to repo.typesafe.com|54.236.91.228|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 1132093 (1.1M) [application/java-archive]
Saving to: “sbt-launch.jar”

100%[========================================================================================================================================================>] 1,132,093   21.9K/s   in 31s     

2013-10-19 09:23:02 (35.7 KB/s) - “sbt-launch.jar” saved [1132093/1132093]

Install sbt

Buat script dengan nama sbt, lalu letakkan ke dalam folder ~/bin:

1
2
$ cd ~/bin
$ vi sbt

Lalu isikan seperti di bawah ini:

1
2
SBT_OPTS="-Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256M"
java $SBT_OPTS -jar `dirname $0`/sbt-launch.jar "$@"

Lalu save dengan ketikkan :wq dan buat script menjadi executable:

1
$ chmod +x sbt

Test

Untuk menge-test apakah sbt sudah berjalan atau belom, ketikkan sembarang command dengan sbt. Di sini saya ingin mengecek versi dari sbt:

1
$ sbt sbt-version

Output:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
Getting org.scala-sbt sbt 0.13.0 ...
downloading http://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/sbt/0.13.0/jars/sbt.jar ...
  [SUCCESSFUL ] org.scala-sbt#sbt;0.13.0!sbt.jar (3102ms)
downloading http://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/main/0.13.0/jars/main.jar ...
  [SUCCESSFUL ] org.scala-sbt#main;0.13.0!main.jar (113062ms)
downloading http://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/compiler-interface/0.13.0/jars/compiler-interface-src.jar ...
  [SUCCESSFUL ] org.scala-sbt#compiler-interface;0.13.0!compiler-interface-src.jar (2295ms)
downloading http://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/compiler-interface/0.13.0/jars/compiler-interface-bin.jar ...
  [SUCCESSFUL ] org.scala-sbt#compiler-interface;0.13.0!compiler-interface-bin.jar (7793ms)
downloading http://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/precompiled-2_8_2/0.13.0/jars/compiler-interface-bin.jar ...
  [SUCCESSFUL ] org.scala-sbt#precompiled-2_8_2;0.13.0!compiler-interface-bin.jar (8379ms)
downloading http://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/precompiled-2_9_2/0.13.0/jars/compiler-interface-bin.jar ...
  [SUCCESSFUL ] org.scala-sbt#precompiled-2_9_2;0.13.0!compiler-interface-bin.jar (7139ms)
downloading http://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/precompiled-2_9_3/0.13.0/jars/compiler-interface-bin.jar ...
  [SUCCESSFUL ] org.scala-sbt#precompiled-2_9_3;0.13.0!compiler-interface-bin.jar (8814ms)
downloading http://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/actions/0.13.0/jars/actions.jar ...
  [SUCCESSFUL ] org.scala-sbt#actions;0.13.0!actions.jar (19182ms)
downloading http://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/main-settings/0.13.0/jars/main-settings.jar ...
  [SUCCESSFUL ] org.scala-sbt#main-settings;0.13.0!main-settings.jar (21100ms)
downloading http://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/interface/0.13.0/jars/interface.jar ...
  [SUCCESSFUL ] org.scala-sbt#interface;0.13.0!interface.jar (3331ms)
downloading http://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/io/0.13.0/jars/io.jar ...
  [SUCCESSFUL ] org.scala-sbt#io;0.13.0!io.jar (14387ms)
downloading http://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/ivy/0.13.0/jars/ivy.jar ...
  [SUCCESSFUL ] org.scala-sbt#ivy;0.13.0!ivy.jar (50749ms)
downloading http://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/launcher-interface/0.13.0/jars/launcher-interface.jar ...
  [SUCCESSFUL ] org.scala-sbt#launcher-interface;0.13.0!launcher-interface.jar (3289ms)
downloading http://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/logging/0.13.0/jars/logging.jar ...
  [SUCCESSFUL ] org.scala-sbt#logging;0.13.0!logging.jar (7008ms)
downloading http://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/process/0.13.0/jars/process.jar ...
  [SUCCESSFUL ] org.scala-sbt#process;0.13.0!process.jar (5271ms)
downloading http://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/run/0.13.0/jars/run.jar ...
  [SUCCESSFUL ] org.scala-sbt#run;0.13.0!run.jar (8107ms)
downloading http://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/command/0.13.0/jars/command.jar ...
  [SUCCESSFUL ] org.scala-sbt#command;0.13.0!command.jar (10176ms)
downloading http://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/classpath/0.13.0/jars/classpath.jar ...
  [SUCCESSFUL ] org.scala-sbt#classpath;0.13.0!classpath.jar (6644ms)
downloading http://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/completion/0.13.0/jars/completion.jar ...
  [SUCCESSFUL ] org.scala-sbt#completion;0.13.0!completion.jar (13117ms)
downloading http://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/api/0.13.0/jars/api.jar ...
  [SUCCESSFUL ] org.scala-sbt#api;0.13.0!api.jar (27268ms)
downloading http://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/compiler-integration/0.13.0/jars/compiler-integration.jar ...
  [SUCCESSFUL ] org.scala-sbt#compiler-integration;0.13.0!compiler-integration.jar (16963ms)
downloading http://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/compiler-ivy-integration/0.13.0/jars/compiler-ivy-integration.jar ...
  [SUCCESSFUL ] org.scala-sbt#compiler-ivy-integration;0.13.0!compiler-ivy-integration.jar (2360ms)
downloading http://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/relation/0.13.0/jars/relation.jar ...
  [SUCCESSFUL ] org.scala-sbt#relation;0.13.0!relation.jar (5727ms)
downloading http://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/task-system/0.13.0/jars/task-system.jar ...
  [SUCCESSFUL ] org.scala-sbt#task-system;0.13.0!task-system.jar (13756ms)
downloading http://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/tasks/0.13.0/jars/tasks.jar ...
  [SUCCESSFUL ] org.scala-sbt#tasks;0.13.0!tasks.jar (25036ms)
downloading http://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/tracking/0.13.0/jars/tracking.jar ...
  [SUCCESSFUL ] org.scala-sbt#tracking;0.13.0!tracking.jar (4494ms)
downloading http://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/testing/0.13.0/jars/testing.jar ...
  [SUCCESSFUL ] org.scala-sbt#testing;0.13.0!testing.jar (4865ms)
downloading http://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/control/0.13.0/jars/control.jar ...
  [SUCCESSFUL ] org.scala-sbt#control;0.13.0!control.jar (2624ms)
downloading http://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/collections/0.13.0/jars/collections.jar ...
  [SUCCESSFUL ] org.scala-sbt#collections;0.13.0!collections.jar (14381ms)
downloading http://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/incremental-compiler/0.13.0/jars/incremental-compiler.jar ...
  [SUCCESSFUL ] org.scala-sbt#incremental-compiler;0.13.0!incremental-compiler.jar (11719ms)
downloading http://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/compile/0.13.0/jars/compile.jar ...
  [SUCCESSFUL ] org.scala-sbt#compile;0.13.0!compile.jar (5027ms)
downloading http://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/persist/0.13.0/jars/persist.jar ...
  [SUCCESSFUL ] org.scala-sbt#persist;0.13.0!persist.jar (6237ms)
downloading http://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/classfile/0.13.0/jars/classfile.jar ...
  [SUCCESSFUL ] org.scala-sbt#classfile;0.13.0!classfile.jar (4795ms)
downloading http://repo.typesafe.com/typesafe/ivy-releases/org.scala-tools.sbinary/sbinary_2.10/0.4.2/jars/sbinary_2.10.jar ...
  [SUCCESSFUL ] org.scala-tools.sbinary#sbinary_2.10;0.4.2!sbinary_2.10.jar (40445ms)
downloading http://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/cross/0.13.0/jars/cross.jar ...
  [SUCCESSFUL ] org.scala-sbt#cross;0.13.0!cross.jar (2800ms)
downloading http://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/cache/0.13.0/jars/cache.jar ...
  [SUCCESSFUL ] org.scala-sbt#cache;0.13.0!cache.jar (5507ms)
downloading http://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/test-agent/0.13.0/jars/test-agent.jar ...
  [SUCCESSFUL ] org.scala-sbt#test-agent;0.13.0!test-agent.jar (3557ms)
downloading http://repo1.maven.org/maven2/org/scala-sbt/test-interface/1.0/test-interface-1.0.jar ...
  [SUCCESSFUL ] org.scala-sbt#test-interface;1.0!test-interface.jar (2579ms)
downloading http://repo.typesafe.com/typesafe/ivy-releases/org.scala-sbt/apply-macro/0.13.0/jars/apply-macro.jar ...
  [SUCCESSFUL ] org.scala-sbt#apply-macro;0.13.0!apply-macro.jar (4793ms)
:: retrieving :: org.scala-sbt#boot-app
  confs: [default]
  43 artifacts copied, 0 already retrieved (12440kB/310ms)
[info] Set current project to marjinal (in build file:/home/homedirectory/)
[info] 0.13.0

Oracle tidak memiliki fungsi Left, Mid dan Right seperti di SQLServer, tapi kita menggunakan fungsi substr agar dapat bekerja sesuai dengan 3 fungsi tersebut.

Sebenarnya fungsi substr di oracle sama dengan fungsi mid di sqlserver

Left

SQLServer
1
LEFT('Indonesia', 4) = 'Indo'
Oracle
1
SUBSTR('Indonesia', 1, 4) = 'Indo'

Mid

SQLServer
1
MID('Indonesia', 5, 5) = 'nesia'
Oracle
1
SUBSTR('Indonesia', 5, 5) = 'nesia'

Right

SQLServer
1
RIGHT('Indonesia', 5) = 'nesia'
Oracle
1
SUBSTR('Indonesia', -5, 5) = 'nesia'

-5 = Di hitung dari kanan ke kiri, dalam contoh di atas merupakan posisi n.

Sintaks untuk while loop di oracle seperti ini:

1
2
3
4
WHILE condition
LOOP
   {.statements.}
END LOOP;

Kita menggunakan while loop ketika kita tidak yakin berapa kali kita akan meng-eksekusi loop body. Karena while condition di evaluasi sebelum masuk ke dalam loop, ini memungkinkan loop body tidak akan di eksekusi sama sekali.

Contoh: kita akan membuat function yang berfungsi untuk mencari posisi terakhir dari karakter x dari suatu String.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
CREATE OR REPLACE FUNCTION LAST_INDEX(P_STRING IN VARCHAR2, P_CHAR IN VARCHAR2)
    RETURN NUMBER DETERMINISTIC
  AS
    V_INDEX         NUMBER;
    V_START         NUMBER;
  BEGIN

    V_START :=1;
    SELECT INSTR(P_STRING, P_CHAR, V_START)
      INTO V_INDEX
    FROM DUAL;

    WHILE V_INDEX <> 0
    LOOP
      V_START := V_INDEX;
      SELECT INSTR(P_STRING, P_CHAR, V_START+1)
        INTO V_INDEX
      FROM DUAL;
    END LOOP;

    RETURN V_START;
  END;

test:

1
SELECT LAST_INDEX('123X567X89X123','X') FROM DUAL;

result:

1
11