Showing posts with label oracle. Show all posts
Showing posts with label oracle. Show all posts

Wednesday, June 3, 2015

menghapus duplikat entri di database oracle

Beberapa query yang saya gunakan di oracle karena mengalami beberapa masalah didatabase
yang saya buat. Query ini saya tulis disini agar suatu saat memerlukan dapat dilihat lagi
karena menghafalnya sangat sulit.
Berikut query untuk menampilkan beberapa value yang difilter berdasarkan tanggal antara
tanggal 1 mei 2015 sampai 31 mei 2015

select to_char(tgl,'dd/mm/yyyy hh24:mi:ss') from d_absen where nip='009' and
tgl >= to_date('01/05/2015','dd/mm/yyyy') and
tgl <= to_date('31/05/2015','dd/mm/yyyy') order by tgl;

Perintah untuk insert dan delete column yang memiliki tipe data date, memerlukan
konversi dari char ke date.

insert into d_absensi(nip,tgl) values('002',to_date('29/06/2015','dd/mm/yyyy'));
delete from d_absensi where tgl = to_date('29/06/2015','dd/mm/yyyy');

Menambahkan dan menghapus constraint primary key atau foreign key pada table

alter table d_absensi add CONSTRAINT PK_D_ABSENSI_NIP_TGL PRIMARY KEY (NIP, TGL);
alter table d_absensi drop CONSTRAINT PK_D_ABSENSI_NIP_TGL;

Jika penambahan constraint error maka beberpa kesalahan yang mungkin terjadi
adalah penulisan querynya salah, ada multiple value atau isi dalam table itu terduplikat,
kalau penambahan foreign key yang error kemungkinan juga pada table references belum
memiliki primary key.
Berikut cara menghapus jika terdapat multiple atau duplicat value dalam satu table,

DELETE FROM
   d_apel A
WHERE
  a.rowid >
   ANY (
     SELECT
        B.rowid
     FROM
        d_apel B
     WHERE
        A.tanggal = B.tanggal
and
A.nip = B.nip
        );

Yang sering lupa saat merenovasi database adalah jika terjadi kesalahan dan ingin merestore
tidak memiliki backupan databasenya, maka dari itu diperlukan untuk membackup database
sebelum mengoprek databasenya, untuk membackupnya masuk ke comandpromt
dan ketikan script dibawah ini

exp 'system/password' file=c:/xxx.dmp owner=xxx grants=y rows=y;

sedangkan untuk merestorenya menggunakan

imp 'system/password as sysdba' file=c:/xxx.dmp fromuser=xxx touser=xxx

Tuesday, May 26, 2015

masalah tiba-tiba koneksi oracle ke php error

Hari ini saya mau bercerita saja masalah koneksi PHP dan oracle tiba-tiba terputus. Ceritanya Koneksi sebelumnya sudah terconfig dengan baik, tetapi tiba-tiba saat menjalankan aplikasi php koneksi ke oracle terputus. Mungkin karena pikiran sedang tidak tenang solusi yang muncul adalah instal ulang database oracle dan config dari awal, tetapi saat mau instal ulang muncul alert anda yakin? nah disitu saya merasa ragu dan memikirkan solusi lain dengan meng angan-angan masalahnya. Ternyata ingat kalau pernah merubah listener dan TNSnya, saya memastikan dulu service TNS dapat direstart dan berjalan dengan baik, setela itu restart apache dan cek koneksi lagi dengan script dibawah ini :

<?php
#### INFO KONEKSI KE DATABASE ORACLE ###
$nama= "username"; //username
$pass= "password"; //passwordna
$database=""; //db schema yang mo dipake kalo tidak ada dikosongkan saja
$host = "localhost"; //letak db oracle
$port = "1521"; //port default oracle
##################################

$db = "(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=$host)(PORT=$port)))
(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=$database)))" ;
$c1 = OCIlogon($nama,$pass,$db) ;

if (!$c1) {

echo "koneksi gagal";

} else {

echo "sukses konek ke oracle";

}

?>


Huh akhirnya terkonek lagi, dan perasaan ini merasa lega.......

Wednesday, May 20, 2015

create user oracle

Pertama kali create tablespace selanjutnya baru create user

CREATE BIGFILE TABLESPACE simpeg
  DATAFILE 'simpeg.dat'
  SIZE 20M AUTOEXTEND ON;
CREATE USER SIMPEG 
    IDENTIFIED BY SIMPEG 
    DEFAULT TABLESPACE simpeg  
    QUOTA 5M ON simpeg 
    TEMPORARY TABLESPACE temp
    QUOTA 5M ON system;
GRANT DBA TO SIMPEG;

Memperbaiki error navicat cannot create oci environment

C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFI\machine.config.comments

userName ="machine" --> userName ="system"

-----------------------------------------------------

errror oracle 11g

ORA-28500: connection from ORACLE to a non-Oracle system returned this messa
[Microsoft][ODBC Driver Manager] The specified DSN contains an architecture
mismatch between the Driver and Application {IM014}

masalah terdapat pada odbc yang disebabkan windows 64 bit dan oracle database 64 bit,
jika menggunakan odbc 32 bit tidak bisa connect. Solusi untuk megatasinya dengan mengganti
odbc 32 menjadi 64 bit, tetapi kemungkinan kalau menggunakan odbc yang 64 bit saat select
* pada database link hanya menampilkan satu record. Jika masih ingin meneruskan sekenario 
dapat melanjutkan dengan menginstal oracle xe yang 32 terlebih dahulu.

Sunday, June 8, 2014

SQL di ORACLE

Untuk membuat grant di oracle

SQL>grant select on nama_table to nama_database_yang_dituju;

Untuk membuat synonym di oracle

SQL> create synonym nama_table for nama_database_yang _digrant.nama_table;

Membuat fungsi untuk mencari selisih waktu

SQL> create or replace function datediff( p_what in varchar2,
  2                                       p_d1   in date,
  3                                       p_d2   in date ) return number
  4  as
  5      l_result    number;
  6  begin
  7      select (p_d2-p_d1) *
  8             decode( upper(p_what),
  9                     'SS', 24*60*60, 'MI', 24*60, 'HH', 24, NULL )
 10       into l_result from dual;
 11
 11      return l_result;
 12  end;
 13  /

Function created

SQL> create or replace view temp_view 
  2  as 
  3  select to_date('01-JAN-1999 12:02:04', 'dd-mon-yyyy hh24:mi:ss' ) d1, 
  4         to_date('15-MAR-1999 01:34:23', 'dd-mon-yyyy hh24:mi:ss' ) d2 
  5  from dual 
  6  / 
View created. 


sekarang tinggal memanggil fungsinya saja

SQL> select datediff( 'ss', d1, d2 ) seconds from temp_view;
   SECONDS
----------
   6269539
SQL> select datediff( 'mi', d1, d2 ) minutes from temp_view;
   MINUTES
----------
104492.317
SQL> select datediff( 'hh', d1, d2 ) hours from temp_view;

     HOURS
----------
1741.53861


menambah waktu pada date di oracle


    Tambahkan sehari. pilih to_date (’02-22-2008 10:30:30 ‘,’ mm-dd-yyyy HH24: mi: ‘ss) hari ini, to_date (’02-22-2008 10:30:30 ‘,’ mm-dd-yyyy HH24: mi: ‘ss) +1 next_day dari dual; HARI INI NEXT_DAY ————————- ————————- 02-22-08 10:30:30 02-23-08 10:30:30
    Tambahkan satu jam. pilih to_date (’02-22-08 10:30:30 ‘,’ mm-dd-yy HH24: mi: ‘ss) hari ini, to_date (’02-22-08 10:30:30 ‘,’ mm-dd-yy HH24: mi: ss ‘) + 1 / 24 next_hour dari dual; HARI INI NEXT_HOUR ———————— ———————— 02-22-08 10:30:30 02-22-08 11:30:30
    Tambahkan satu menit. pilih to_date (’02-22-08 10:30:30 ‘,’ mm-dd-yy HH24: mi: ‘ss) hari ini, to_date (’02-22-08 10:30:30 ‘,’ mm-dd-yy HH24: mi: ss ‘) + 1 / (24 * 60) next_min dari dual; HARI INI NEXT_MIN ———————— ———————— 02-22-08 10:30:30 02-22-08 10:31:30
    Tambahkan kedua. pilih to_date (’02-22-08 10:30:30 ‘,’ mm-dd-yy HH24: mi: ‘ss) hari ini, to_date (’02-22-08 10:30:30 ‘,’ mm-dd-yy HH24: mi: ss ‘) + 1 / (24 * 60 * 60) next_sec dari dual; HARI INI NEXT_SEC ———————— ———————— 02-22-08 10:30:30 02-22-08 10:30:31
    Kurangi sehari. pilih to_date (’02-22-2008 10:30:30 ‘,’ mm-dd-yyyy HH24: mi: ‘ss) hari ini, to_date (’02-22-2008 10:30:30 ‘,’ mm-dd-yyyy HH24: mi: ss ‘) – 1 prev_day dari dual; HARI INI PREV_DAY ————————- ————————- 02-22-08 10:30:30 02-21-08 10:30:30
    Kurangi jam. pilih to_date (’02-22-08 10:30:30 ‘,’ mm-dd-yy HH24: mi: ‘ss) hari ini, to_date (’02-22-08 10:30:30 ‘,’ mm-dd-yy HH24: mi: ss ‘) – 1 / 24 prev_hour dari dual; HARI INI PREV_HOUR ———————— ———————— 02-22-08 10:30:30 02-22-08 09:30:30
    Kurangi menit. pilih to_date (’02-22-08 10:30:30 ‘,’ mm-dd-yy HH24: mi: ‘ss) hari ini, to_date (’02-22-08 10:30:30 ‘,’ mm-dd-yy HH24: mi: ss ‘) – 1 / (24 * 60) prev_min dari dual; HARI INI PREV_MIN ———————— ———————— 02-22-08 10:30:30 02-22-08 10:29:30
    Kurangi detik. pilih to_date (’02-22-08 10:30:30 ‘,’ mm-dd-yy HH24: mi: ‘ss) hari ini, to_date (’02-22-08 10:30:30 ‘,’ mm-dd-yy HH24: mi: ss ‘) – 1 / (24 * 60 * 60) prev_sec dari dual; HARI INI PREV_SEC ———————— ———————— 02-22-08 10:30:30 02-22-08 10:30:29
    //===================================================================
    SELECT MENGGUNAKAN IF ELSE PADA ORACLE
    SELECT ename, CASE WHEN sal = 1000 THEN 'Minimum wage'
                       WHEN sal > 1000 THEN 'Over paid'
                       ELSE 'Under paid'
                  END AS "Salary Status"
    FROM   emp;

Monday, May 12, 2014

Setting database oracle link to database access

1.       create ODBC
Membuat ODBC untuk menentukan database access yang ingin dilink dengan oracle.
Cara membuat odbc :
1.       Klik start->Control Panel
2.       BDE Administrator (32-bit)
3.       Tab Object->ODBC Administrator
4.       Tab System DSN->Klik Add
5.       Pilih Driver do Microsoft Access (*.mdb) -> Finish
6.       Isikan Data Source Name : test
7.       Pilih Database dengan klik select ->arahkan database access yang ingin digunakan->OK->OK->OK
2.       setting heterogen service
-          Menyetting hs yaitu menambahkan file init(nama odbc yang tadidibuat).ora
-          Lokasi file tersebut berada di folder oracle yaitu : C:\oraclexe\app\oracle\product\11.2.0\server\hs\admin.
-          Isi file tersebut dengan :
HS_FDS_CONNECT_INFO = test
HS_FDS_TRACE_LEVEL = off
3.       setting listener
- setting listener untuk mendeklarasikan atau mendaftarkan nama database agar dapat dieksekusi melalui oracle
-  File listener tersebut berada di path :
C:\oraclexe\app\oracle\product\11.2.0\server\network\ADMIN
-  Tambahkan script berikut :
(SID_DESC =
      (SID_NAME = test)
      (ORACLE_HOME = C:\oraclexe\app\oracle\product\11.2.0\server)
      (PROGRAM = dg4odbc)
    )

4.       setting tnsname
-          setting tnsname untuk menunjukan bahwa database test ada yang sudah didaftarkan pada listener
-          alamat path pada tnsname C:\oraclexe\app\oracle\product\11.2.0\server\network\ADMIN
-          tambah kan script berikut pada tnsname
-           
-          TESTMESIN =
-            (DESCRIPTION =
-              (ADDRESS = (PROTOCOL = TCP)(HOST = clien02-PC)(PORT = 1521))
-              (CONNECT_DATA =
-                (SERVER = DEDICATED)
-                (SID = test)
-              )
-              (HS=OK)
-            )

5.       Jalankan lsnrctl
- jalankan comendpromp atau lokasi filenya berada di C:\oraclexe\app\oracle\product\11.2.0\server\bin\LSNRCTL
>LSNRCTL
LSNRCTL>stop
LSNRCTL>start
LSNRCTL>service
6.       Jalankan sqlplus
SQL>conn system
SQL>Password :
Connected
SQL>create database link testmesin using ‘testmesin’;
Database created
Untuk menampilkan data pada tabel di database ms access sekarang dapat menggunakan query select di oracle dengan menambahkan @testmesin;

SQL>  select * from userinfo@testmesin;

Friday, April 11, 2014

belajar oracle

Salam jumpa master-master, disini saya mencoba menuliskan kegalauan saya saat saya mempelajari oracle. Masih banyak yang perlu saya pelajari dari oracle mengingat database yang satu ini sangat powerfull. Jadi jika saya menulisnya ada salahnya mohon dimaafkan dan dibenarkan. Jika ada yang ingin ditambahkan silahkan ditambahkan saya sangat senang jika ada yang mau memberikan link tutorial yang bagus bahasa indonesia untuk belajar oracle. Langsung saja saya tuliskan corat-coret saya :


1. Cara menampilkan semua user
select * from all_users;
2. Menampilkan semua table
select * from tab;
3. Menampilkan list procedure dari user PRESENSI
select * from all_procedures where owner='PRESENSI'
4. Menampilkan list function dari user PRESENSI
select * from all_objects where owner='PRESENSI' and object_type='FUNCTION'


It is possible to connect to the database without specifying a password. Once you've done that you can then reset the passwords.
I'm assuming that you've installed the database on your machine; if not you'll first need to connect to the machine the database is running on.
1. Ensure your user account is a member of the dba group. How you do this depends on what OS you are running.
2. Enter sqlplus  / as sysdba in a Command Prompt/shell/Terminal window as appropriate. This should log you in to the database as SYS.
3. Once you're logged in, you can then enter
alter user SYS identified by "newpassword";
to reset the SYS password, and similarly for SYSTEM.

5. mengubah port untuk akses database oracle local
SQL> begin
2 dbms_xdb.sethttpport('8181');
3 end;
4 /

6. Untuk mengakses halaman admin database oracle di browser
localhost:8181/apex/apex_admin

7. jika lupa password pada user system
conn system / as sysdba
alter user system identified by "password_baru";

8. Jika user system sudah di lock
conn system / as sysdba
alter user system account unlock;

9. connect C:\oraclexe\app\oracle\product\11.2.0\server\bin>sqlplus / as sysdba
10. connect to oracle jika tidak bisa menggunakan sqlplus /logon
dapat menggunakan sqlplus.exe

11. Jika eksekusi procedure to date dengan format 'dd/mm/yyyy' maka perlu dilakukan
ALTER SESSION SET NLS_DATE_FORMAT = 'DD/MM/YYYY';
Tetapi solusi diatas hanya berlaku sementara setelah disc maka akan kembali seperti semula
Untuk solusi yang laina menggunakan
type varchar2 pada store procedurenya...

Tuesday, January 14, 2014

Koneksi PHP dengan Oracle

Beberapa waktu yang lalu sempat dibuat bingung dengan masalah menggunakan database oracle. Tetapi setelah mencari tahu dari beberapa halaman web yang membahas tentang mengkoneksikan php dengan database oracle sekarang sudah bisa terkoneksi. Berikut perjalanan selama mengkoneksikan php dengan oracle :