Membuat QRCode Scanner di Android Menggunakan Google Vision Api

Assalamualaikum Wr.Wb. Selamat malam, pada kesempatan kali ini Saya akan berbagi tutorial mengenai QR Code Scanner. kita akan membuat QR Code Scanner menggunakan Google Vision Api di Android. QR Code Scanner ini bisa diaplikasikan untuk login misalnya seperti login di whatsapp web dan lain-lain.



untuk membuatnya pertama-tama masukan despendency ini di module.gradle 
compile 'com.google.android.gms:play-services:10.0.1'

kemudian buat sebuah button untuk membuka camera dan sebuah textview untuk menampilkan hasil scan qrcode nya:
<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:app="http://schemas.android.com/apk/res-auto"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    tools:context="com.giviews.qrcodescanner.MainActivity">



    <Button

        android:id="@+id/scanbtn"

        android:layout_marginTop="40dp"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:text="scan"

        android:layout_centerHorizontal="true" />



    <TextView

        android:id="@+id/result"

        android:layout_width="match_parent"

        android:layout_height="wrap_content"

        android:layout_below="@+id/scanbtn"

        android:text="RESULT"

        android:textSize="25dp"

        android:layout_marginTop="20dp"

        android:gravity="center"/>



</RelativeLayout>

kemudian masukan kode ini di javanya:
package com.giviews.qrcodescanner;



import android.Manifest;

import android.content.Intent;

import android.content.pm.PackageManager;

import android.support.v4.app.ActivityCompat;

import android.support.v4.content.ContextCompat;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.view.View;

import android.widget.Button;

import android.widget.TextView;



import com.google.android.gms.vision.barcode.Barcode;



public class MainActivity extends AppCompatActivity {

    private Button scanbtn;

    private TextView result;

    public static final int REQUEST_CODE = 100;

    public static final int PERMISSION_REQUEST = 200;



    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {

            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, PERMISSION_REQUEST);

        }

        scanbtn = (Button) findViewById(R.id.scanbtn);

        result = (TextView) findViewById(R.id.result);

        scanbtn.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View view) {

                Intent intent = new Intent(getApplicationContext(), ScanActivity.class);

                startActivityForResult(intent, REQUEST_CODE);

            }

        });

    }



    @Override

    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {

            if (data != null) {

                final Barcode barcode = data.getParcelableExtra("barcode");

                result.post(new Runnable() {

                    @Override

                    public void run() {

                        result.setText(barcode.displayValue);

                    }

                });

            }

        }

    }

}

lalu buat activity baru dengan nama Scan Activity. dan masukan kode ini untuk xml nya:
<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:app="http://schemas.android.com/apk/res-auto"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    tools:context="com.giviews.qrcodescanner.ScanActivity">



    <SurfaceView

        android:id="@+id/cameraView"

        android:layout_width="match_parent"

        android:layout_height="match_parent" />



</RelativeLayout>

selanjutnya untuk java di ScanActivity masukan kode dibawah ini:
package com.giviews.qrcodescanner;



import android.*;

import android.Manifest;

import android.content.Intent;

import android.content.pm.PackageManager;

import android.support.v4.content.ContextCompat;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.util.SparseArray;

import android.view.SurfaceHolder;

import android.view.SurfaceView;

import android.widget.Toast;



import com.google.android.gms.vision.CameraSource;

import com.google.android.gms.vision.Detector;

import com.google.android.gms.vision.barcode.Barcode;

import com.google.android.gms.vision.barcode.BarcodeDetector;



import java.io.IOException;



import static com.giviews.qrcodescanner.MainActivity.REQUEST_CODE;



public class ScanActivity extends AppCompatActivity {

    SurfaceView cameraView;

    BarcodeDetector barcode;

    CameraSource cameraSource;

    SurfaceHolder holder;



    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_scan);

        cameraView = (SurfaceView) findViewById(R.id.cameraView);

        cameraView.setZOrderMediaOverlay(true);

        holder = cameraView.getHolder();

        barcode = new BarcodeDetector.Builder(this)

                .setBarcodeFormats(Barcode.QR_CODE)

                .build();

        if (!barcode.isOperational()) {

            Toast.makeText(getApplicationContext(), "Sorry couldnt setup the detector", Toast.LENGTH_LONG).show();

            this.finish();

        }



        cameraSource = new CameraSource.Builder(this, barcode)

                .setFacing(CameraSource.CAMERA_FACING_BACK)

                .setRequestedFps(24)

                .setAutoFocusEnabled(true)

                .setRequestedPreviewSize(1920,1024)

                .build();

        cameraView.getHolder().addCallback(new SurfaceHolder.Callback() {

            @Override

            public void surfaceCreated(SurfaceHolder surfaceHolder) {

                try {

                    if (ContextCompat.checkSelfPermission(ScanActivity.this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {

                        cameraSource.start(cameraView.getHolder());

                    }

                } catch (IOException e) {

                    e.printStackTrace();

                }

            }



            @Override

            public void surfaceChanged(SurfaceHolder surfaceHolder, int i, int i1, int i2) {



            }



            @Override

            public void surfaceDestroyed(SurfaceHolder surfaceHolder) {



            }

        });

        barcode.setProcessor(new Detector.Processor<Barcode>() {

            @Override

            public void release() {



            }



            @Override

            public void receiveDetections(Detector.Detections<Barcode> detections) {

                final SparseArray<Barcode> barcode = detections.getDetectedItems();

                if (barcode.size() > 0) {

                    Intent intent = new Intent();

                    intent.putExtra("barcode", barcode.valueAt(0));

                    setResult(RESULT_OK, intent);

                    finish();

                }

            }

        });

    }

}

terakhir tambahkan permission untuk mengakses kamera di manifest
<uses-permission android:name="android.permission.CAMERA" />

dan tambahkan metadata di dalam application
<meta-data

    android:name="com.google.android.gms.vision.DEPENDENCIES"

    android:value="barcode" />


jika scan berhasil



Selanjutnya test qr-code scannernya, untuk qr codenya anda bisa mencoba qrcode generator di web. Ok sekianlah tutorial kali ini kurang lebihnya mohon maaf jika ada yang kurang jelas silakan ditanyakan di komentar, jika artikel ini bermanfaat silakan di share

Pengalaman Bypass FRP (Factory Reset Protection) Android Nougat 7.1.1



Keamanan di Android kini udah hampir setara dengan IOS mulai dari android Lolipop 5.1 ke atas android sudah dibekali dengan fitur keamanan FRP mirip dengan iCloudnya IOS jadi jika hp kita hilang orang akan susah membukanya karena harus memasukan email lama hp kita.

Waktu itu saya disuruh mereset hp android j2 pro kemudian tanpa fikir panjang saya langsung menekan tiga tombol yang biasa digunakan untuk masuk ke recovery mode hp Samsung yaitu tombol Power + Home + Volume Atas secara bersamaan kemudian saya pilih Wipe All Data kemudian saya reboot

Setelah di reboot kita akan disuguhkan tampilan Selamat Datang seperti biasa jika hp baru direset, kemudian masalahnya muncul disini saya disuruh memasukan email hp yang lama yang pernah digunakan di hp ini sebelumnya, kemudian saya Tanya teman saya dan ternyata teman saya lupa password emailnya

Kemudian saya googling sampai dua hari saya mencoba berbagai cara dan akhirnya saya menemukan caranya yaitu dengan menggunakan metode Talkback. Tekan tombol Home 3x kemudian akan muncul tampilan talkback Swipe menyerupai huruf L kemudian pilih Talkback  Setting kemudian Scroll ke bawah  (Tekan lagi tombol home 3x agar talkbacknya mati dan mudah scrollnya) pilih Help & Feedback pilih topic pertama akan ada video youtube kemudian pilih share video tersebut menggunakan ikon titik tiga, kemudian akan kebuka Samsung browser pilih pengaturan -> info aplikasi -> perbarui, kemudian akan kebuka galaxy store di galaxy store, install aplikasi launcher (launcher apa aja) kemudian buka launchernya nah disini kita udah masuk ke handphone kita, kita bisa masuk ke pengaturan menambahkan pola tapi kita belum bisa buka produk google seperti gmail, google play, karena kalau kita buka aplikasi itu kita akan diminta untuk memasukan email yang lama tadi. kemudian kita buka kalkulator ketikan (+30012012732+ akan kebuka DRParser Mode ketikan *#0808# pilih DM + ACM + ADB -> reboot (ini akan membuka Fitur ADB USB) kemudian colokan hp ke computer, di computer kita buka program Minimal ADB and Fastboot dan ketikan perintah berikut

adb shell content insert --uri content://settings/secure --bind name:s:user_setup_complete --bind value:s:1

adb shell am start -n com.google.android.gsf.login/

adb shell am start -n com.google.android.gsf.login.LoginActivity

kemudian tekan tombol kunci untuk mengunci layar kemudian tekan lagi untuk membuka layar jika masih ada tulisan WELCOME tekan tombol Home, nah kemudian HP Android kita akan masuk ke halaman utama dan email yang diminta tadi akan hilang dan kita sekarang bisa memasukan email baru kita. sampai disini proses Bypass berhasil, Jika ada yang kurang jelas bisa ditanyakan di kolom komentar dibawah.

Membuat Register User dengan Firebase di Android Studio



Selamat siang Register User berguna untuk mengauthentikasi pengguna aplikasi kita, Register User biasanya terdapat pada aplikasi jejaring social ataupun ecommerce.  Register User bisa dibuat dengan menggunakan database MySQL, SQLite, MongoDB dll, tapi kali ini kita akan menggunakan Firebase, sudah disinggung sebelumnya kalau firebase ini menyediakan fungsi authentikasi yang lengkap, pada postingan sebelumnya kita telah membuat login user dengan Firebase, nah sekarang kita akan membuat form registernya. untuk membuatnya hampir sama dengan membuat form login bedanya pada register kita memasukan data user ke database kalau login hanya mencocokan data. langsung saja untuk memulainya buat dulu form registernya
 
xml version="1.0" encoding="utf-8"?>
xmlns:android="http://schemas.android.com/apk/res/android"
   
xmlns:app="http://schemas.android.com/apk/res-auto"
   
xmlns:tools="http://schemas.android.com/tools"
   
android:layout_width="match_parent"
   
android:layout_height="match_parent"
   
tools:context="com.giviews.giviewsmessenger.RegisterActivity">

           
android:id="@+id/main_page_toolbar"
       
layout="@layout/app_bar_layout"
       
android:layout_width="match_parent"
       
android:layout_height="wrap_content"
       
android:layout_marginLeft="0dp"
       
android:layout_marginTop="0dp"
       
app:layout_constraintHorizontal_bias="0.0"
       
app:layout_constraintLeft_toLeftOf="parent"
       
app:layout_constraintRight_toRightOf="parent"
       
app:layout_constraintTop_toTopOf="parent"
       
tools:ignore="NotSibling" />

           
android:id="@+id/reg_name"
       
android:layout_width="0dp"
       
android:layout_height="wrap_content"
       
android:layout_marginLeft="8dp"
       
android:layout_marginRight="8dp"
       
android:ems="10"
       
android:hint="Name ..."
       
android:inputType="textPersonName"
       
app:layout_constraintHorizontal_bias="0.0"
       
app:layout_constraintLeft_toLeftOf="parent"
       
app:layout_constraintRight_toRightOf="parent"
       
android:layout_marginStart="8dp"
       
android:layout_marginEnd="8dp"
       
android:layout_marginTop="26dp"
       
app:layout_constraintTop_toBottomOf="@+id/textView" />

           
android:id="@+id/reg_email"
       
android:layout_width="0dp"
       
android:layout_height="wrap_content"
       
android:layout_marginLeft="8dp"
       
android:layout_marginRight="8dp"
       
android:ems="10"
       
android:hint="Email ..."
       
android:inputType="textEmailAddress"
       
app:layout_constraintHorizontal_bias="0.0"
       
app:layout_constraintLeft_toLeftOf="parent"
       
app:layout_constraintRight_toRightOf="parent"
       
android:layout_marginStart="8dp"
       
android:layout_marginEnd="8dp"
       
android:layout_marginTop="8dp"
       
app:layout_constraintTop_toBottomOf="@+id/reg_name" />

           
android:id="@+id/reg_password"
       
android:layout_width="0dp"
       
android:layout_height="wrap_content"
       
android:ems="10"
       
android:hint="Password ..."
       
android:inputType="textPassword"
       
android:layout_marginTop="8dp"
       
app:layout_constraintTop_toBottomOf="@+id/reg_email"
       
android:layout_marginLeft="8dp"
       
app:layout_constraintLeft_toLeftOf="parent"
       
android:layout_marginRight="8dp"
       
app:layout_constraintRight_toRightOf="parent"
       
app:layout_constraintHorizontal_bias="0.0"
       
android:layout_marginStart="8dp"
       
android:layout_marginEnd="8dp" />

   
android:id="@+id/reg_create_btn"
       
android:layout_width="wrap_content"
       
android:layout_height="wrap_content"
       
android:text="Create Acooount"
       
android:background="@color/colorAccent"
       
android:padding="10dp"
       
android:textColor="@color/colorWhite"
       
android:layout_marginRight="8dp"
       
app:layout_constraintRight_toRightOf="parent"
       
android:layout_marginTop="16dp"
       
app:layout_constraintTop_toBottomOf="@+id/reg_password"
       
android:layout_marginEnd="8dp" />

           
android:id="@+id/textView"
       
android:layout_width="wrap_content"
        
android:layout_height="wrap_content"
       
android:layout_marginLeft="8dp"
       
android:layout_marginStart="8dp"
       
android:text="Create a New Account"
       
android:textSize="20sp"
       
android:textStyle="bold"
       
app:layout_constraintLeft_toLeftOf="parent"
       
android:layout_marginRight="8dp"
       
app:layout_constraintRight_toRightOf="parent"
       
app:layout_constraintHorizontal_bias="0.0"
       
android:layout_marginTop="26dp"
       
app:layout_constraintTop_toBottomOf="@+id/main_page_toolbar"
       
android:layout_marginEnd="8dp" />

Sambungkan projek android anda dengan firebase, kemudian buka firebase console aktifkan sigin method mengguanakan email

dan untuk script proses registernya seperti berikut, pada script berikut jika User berhasil didaftarkan maka akan diintent ke MainActivity untuk itu buat lagi Activity Main nya.
package com.giviews.giviewsmessenger;



import android.app.ProgressDialog;

import android.content.Intent;

import android.support.annotation.NonNull;

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.support.v7.widget.Toolbar;

import android.text.TextUtils;

import android.util.Log;

import android.view.View;

import android.widget.Button;

import android.widget.EditText;

import android.widget.Toast;



import com.google.android.gms.tasks.OnCompleteListener;

import com.google.android.gms.tasks.Task;

import com.google.firebase.auth.AuthResult;

import com.google.firebase.auth.FirebaseAuth;

import com.google.firebase.auth.FirebaseAuthInvalidCredentialsException;

import com.google.firebase.auth.FirebaseAuthUserCollisionException;

import com.google.firebase.auth.FirebaseAuthWeakPasswordException;

import com.google.firebase.auth.FirebaseUser;

import com.google.firebase.database.DatabaseReference;

import com.google.firebase.database.FirebaseDatabase;

import com.google.firebase.iid.FirebaseInstanceId;



import java.util.HashMap;



public class RegisterActivity extends AppCompatActivity {



    private EditText mDisplayName;

    private EditText mEmail;

    private EditText mPassword;

    private Button mCreateBtn;

    private Toolbar mToolbar;

    private ProgressDialog mProgress;



    private FirebaseAuth mAuth;

    private DatabaseReference mDatabase;



    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_register);



        mAuth = FirebaseAuth.getInstance();

        mDatabase = FirebaseDatabase.getInstance().getReference().child("Users");

        mToolbar = (Toolbar) findViewById(R.id.main_page_toolbar);

        setSupportActionBar(mToolbar);

        getSupportActionBar().setTitle("Register");

        getSupportActionBar().setDisplayHomeAsUpEnabled(true);



        mDisplayName = (EditText) findViewById(R.id.reg_name);

        mEmail = (EditText) findViewById(R.id.reg_email);

        mPassword = (EditText) findViewById(R.id.reg_password);

        mCreateBtn = (Button) findViewById(R.id.reg_create_btn);

        mProgress = new ProgressDialog(this);



        mCreateBtn.setOnClickListener(new View.OnClickListener() {

            @Override

            public void onClick(View view) {

                String displayname = mDisplayName.getText().toString().trim();

                String email = mEmail.getText().toString().trim();

                String password = mPassword.getText().toString().trim();



                if (!TextUtils.isEmpty(displayname) && !TextUtils.isEmpty(email) && !TextUtils.isEmpty(password)) {

                    mProgress.setTitle("Registering User");

                    mProgress.setMessage("Please wait while we create your account...");

                    mProgress.setCanceledOnTouchOutside(false);

                    mProgress.show();



                    register_user(displayname, email, password);

                }

            }

        });

    }



    private void register_user(final String displayname, String email, String password) {

        mAuth.createUserWithEmailAndPassword(email, password)

                .addOnCompleteListener(this, new OnCompleteListener() {

                    @Override

                    public void onComplete(@NonNull Task task) {



                        // If sign in fails, display a message to the user. If sign in succeeds

                        // the auth state listener will be notified and logic to handle the

                        // signed in user can be handled in the listener.

                        if (!task.isSuccessful()) {

                            mProgress.hide();



                            String error = "";

                            try {

                                throw task.getException();

                            } catch (FirebaseAuthWeakPasswordException e) {

                                error = "Weak Password";

                            } catch (FirebaseAuthInvalidCredentialsException e) {

                                error = "Invalid Email";

                            } catch (FirebaseAuthUserCollisionException e) {

                                error = "Existing account";

                            } catch (Exception e) {

                                error = "Unknown Error!";

                                e.printStackTrace();

                            }

                            Toast.makeText(getApplicationContext(), error, Toast.LENGTH_SHORT).show();

                        }else {

                            FirebaseUser currentUser = mAuth.getCurrentUser();

                            String uid = currentUser.getUid();



                            mDatabase = FirebaseDatabase.getInstance().getReference().child("Users").child(uid);

                            String device_token = FirebaseInstanceId.getInstance().getToken();



                            HashMap, String> userMap = new HashMap, String>();

                            userMap.put("name", displayname);

                            userMap.put("status", "Hi there, I'm using giviews");

                            userMap.put("image", "default");

                            userMap.put("thumb_image", "default");

                            userMap.put("device_token", device_token);



                            mDatabase.setValue(userMap).addOnCompleteListener(new OnCompleteListener() {

                                @Override

                                public void onComplete(@NonNull Task task) {

                                    mProgress.dismiss();

                                    Intent mainIntent = new Intent(RegisterActivity.this, MainActivity.class);

                                    mainIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);

                                    startActivity(mainIntent);

                                }

                            });



                        }

                    }

                });

    }

}

Kemudian pada MainActivity buat sebuah textview dengan tulisan Selamat Anda berhasil mendaftar untuk memastikan user berhasil didaftarkan
untuk melihat user sudah berhasil mendaftar silakan lihat pada firebase console pada bagian authentication
Ok Sekianlah tutorial kali ini jika ada yang kurang jelas silakan ditanyakan pada komentar dibawah

Contoh Soal Oracle beserta jawabanya

Assalamualaikum Wr.Wb. Sudah lama admin tidak membuat artikel baru dikarenakan sibuk dengan urusan pekerjaan perpanjangan kontrak. Pada kesempatan kali ini admin akan membagikan contoh soal latihan Oracle Database beserta cara penyelesainaya. Soal ini berdasarkan pengalaman Saya di perkuliahan, jawaban ini hanya sharing jadi bila ada kesalahan mohon di koreksi.


Jawab :

  1. Schema
CREATE USER tugas_bd3_1501110039 IDENTIFIED BY stikomcki;

  2. Normalisasi Tabel
tabel berobat_1501110039
*no_berobat
tgl_berobat
-kd_pasien
-kd_sakit
-kd_dokter
keterangan

tabel berobat_detail_1501110039
-no_berobat
-kd_obat

tabel obat_1501110039
*kd_obat
nm_obat
-kd_dosis

tabel dosis_1501110039
*kd_dosis
nm_dosis

tabel dokter_1501110039
*kd_dokter
nm_dokter

tabel sakit_1501110039
*kd_sakit
deskripsi_sakit

tabel pasien_1501110039
*kd_pasien
nm_pasien
no_ktp
tempat_lahir
tgl_lahir
alamat
kelurahan
kecamatan
wilayah
kode_pos
telp

keterangan:
* = primary key

-  = foreign key

  3. Relasi


4. View
create view v_pasien as select * from pasien_1501110039;
create view v_dosis as select * from dosis_1501110039;
create view v_obat as select * from obat_1501110039;
create view v_detail as select * from berobat_detail_1501110039;
create view v_dokter as select * from dokter_1501110039;
create view v_berobat as select * from berobat_1501110039;
create view v_sakit as select * from sakit_1501110039;


5.Procedure
create or replace procedure insertPasien(
kd_pasien in pasien_1501110039.kd_pasien%TYPE,
nm_pasien in pasien_1501110039.nm_pasien%TYPE,
no_ktp in pasien_1501110039.nm_pasien%TYPE,
tempat_lahir in pasien_1501110039.nm_pasien%TYPE,
tgl_lahir in pasien_1501110039.nm_pasien%TYPE,
alamat in pasien_1501110039.nm_pasien%TYPE,
kelurahan in pasien_1501110039.nm_pasien%TYPE,
kecamatan in pasien_1501110039.nm_pasien%TYPE,
wilayah in pasien_1501110039.nm_pasien%TYPE,
kode_pos in pasien_1501110039.nm_pasien%TYPE,
telp in pasien_1501110039.nm_pasien%TYPE
)
is
begin
insert into pasien_1501110039 (kd_pasien,nm_pasien,no_ktp,tempat_lahir,tgl_lahir,alamat,kelurahan,kecamatan,wilayah,kode_pos,telp)
values (kd_pasien,nm_pasien,no_ktp,tempat_lahir,tgl_lahir,alamat,kelurahan,kecamatan,wilayah,kode_pos,telp);
commit;
end;
/

create or replace procedure insertSakit(
kd_sakit in sakit_1501110039.kd_sakit%TYPE,
deskripsi_sakit in sakit_1501110039.deskripsi_sakit%TYPE)
is
begin
insert into sakit_1501110039
(kd_sakit,deskripsi_sakit)
values
(kd_sakit,deskripsi_sakit);
commit;
end;
/
 
create or replace procedure insertDokter(
kd_dokter in dokter_1501110039.kd_dokter%TYPE,
nm_dokter in dokter_1501110039.nm_dokter%TYPE)
is
begin
insert into dokter_1501110039
(kd_dokter,nm_dokter)
values
(kd_dokter,nm_dokter);
commit;
end;
/

create or replace procedure berobat(
no_berobat in berobat_1501110039.no_berobat%TYPE,
tgl_berobat in berobat_1501110039.tgl_berobat%TYPE,
kd_pasien in berobat_1501110039.kd_pasien%TYPE,
kd_sakit in berobat_1501110039.kd_sakit%TYPE,
kd_dokter in berobat_1501110039.kd_dokter%TYPE,
keterangan in berobat_1501110039.keterangan%TYPE)
is
begin
insert into berobat_1501110039
(no_berobat,tgl_berobat,kd_pasien,kd_sakit,kd_dokter,keterangan)
values
(no_berobat,tgl_berobat,kd_pasien,kd_sakit,kd_dokter,keterangan);
commit;
end;
/

create or replace procedure insertDosis(
kd_dosis in dosis_1501110039.kd_dosis%TYPE,
nm_dosis in dosis_1501110039.nm_dosis%TYPE)
is
begin
insert into dosis_1501110039
(kd_dosis,nm_dosis)
values
(kd_dosis,nm_dosis);
commit;
end;
/

create or replace procedure insertObat(
kd_obat in obat_1501110039.kd_dosis%TYPE,
nm_obat in obat_1501110039.kd_dosis%TYPE,
kd_dosis in obat_1501110039.kd_dosis%TYPE)
is
begin
insert into obat_1501110039
(kd_obat,nm_obat,kd_dosis)
values
(kd_obat,nm_obat,kd_dosis);
commit;
end;
/

create or replace procedure insertDetail(
no_berobat in berobat_detail_1501110039.no_berobat%TYPE,
kd_obat in berobat_detail_1501110039.kd_obat%TYPE)
is
begin
insert into berobat_detail_1501110039
(no_berobat,kd_obat)
values
(no_berobat,kd_obat);
commit;
end;
/

6. Menjalankan Procedure
execute berobat('BR001','20012018','P001','S003','D004','rawat jalan');

execute berobat('BR002','20012018','P002','S005','D008','rawat inap');

execute insertDokter('D001','dr. Juniar, SpKj');

execute insertSakit('S001','sakit Kepala');

execute insertDosis('DS001','3x1 hari');

execute insertDosis('DS002','1/2 sendok teh');

execute insertObat('OB001','Parasetamol','DS001');

execute insertDetail('BR001','OB004');

execute insertPasien('P001','Nina N','3101099988','Tasikmalaya','090295','Kedoya','kebayoran lama','jakarta utara','DKI Jakarta','13420','98000012');

execute insertPasien('P002','Ani Doe','32051099988','Tasikmalaya','090295','Cikini','Gondangdia','jakarta Pusat','DKI Jakarta','13420','6285700291');

execute insertPasien('P003','Sena','32051099999','Tasikmalaya','090290','Dukuh Atas','Gondangdia','jakarta Pusat','DKI Jakarta','13420','628570022');

execute insertPasien('P004','Andri','32051092399','Jakarta','200678','Dukuh Atas','Gambir','jakarta Pusat','DKI Jakarta','13420','628570022');

7. Table Log
create table history_pasien(kd_pasien char(6), nm_pasien varchar2(30), no_ktp number, tempat_lahir varchar2(30), tgl_lahir char(6), alamat varchar2(30), kelurahan varchar2(30), kecamatan varchar2(30), wilayah varchar(30), kode_pos char(6), telp number, jenis_aksi varchar(6), aksi_tgl date);

8. Trigger
create or replace trigger tr_pasien
after insert
on pasien_1501110039
for each row
begin
insert into history_pasien values (
:NEW.kd_pasien,
:NEW.nm_pasien,
:NEW.no_ktp,
:NEW.tempat_lahir,
:NEW.tgl_lahir,
:NEW.alamat,
:NEW.kelurahan,
:NEW.kecamatan,
:NEW.wilayah,
:NEW.kode_pos,
:NEW.telp,
'AFTER',
SYSDATE
);
END;
/

create or replace trigger tr_pasien_before
before insert
on pasien_1501110039
for each row
begin
insert into history_pasien values (
:NEW.kd_pasien,
:NEW.nm_pasien,
:NEW.no_ktp,
:NEW.tempat_lahir,
:NEW.tgl_lahir,
:NEW.alamat,
:NEW.kelurahan,
:NEW.kecamatan,
:NEW.wilayah,
:NEW.kode_pos,
:NEW.telp,
'BEFORE',
SYSDATE
);
END;
/



Ok sekianlah dari contoh soal oracle dan jawaban kali ini, semoga bermanfaat untuk sorce code lengkapnya bisa anda download pada tautan berikutini