Wednesday, December 6, 2017

Pernyataan PL / SQL GOTO


PL / SQL GOTO

Pernyataan  PL / SQL GOTO memungkinkan kamu untuk beralih ke pernyataan eksekusi yang spesifik di bagian eksekusi yang sama dari blok PL / SQL.

Sintaks dari pernyataan PL / SQL GOTO adalah sebagai berikut:

GOTO label_name

Dimana label_name adalah label yang mendefinisikan pernyataan target. Dalam sebuah program, kamu bisa menentukan label sebagai berikut:

<<label_name>>
Nama label dilampirkan dalam tanda kurung siku sudut (<< >>).

PL/SQL GOTO restrictions


Ada beberapa batasan dalam menggunakan pernyataan PL / SQL GOTO yang harus kamu sadari sebelum menggunakannya.

Pertama, pernyataan PL / SQL GOTO tidak dapat beralih ke pernyataan IF, pernyataan CASE, pernyataan LOOP, atau child-block.

Satu-satunya cara untuk membuat pernyataan IF adalah melalui pemeriksaan kondisinya. Hal ini juga diterapkan pada pernyataan CASE. Dalam contoh berikut, pernyataan GOTO mencoba melompat ke dalam sebuah pernyataan IF, yang tidak diperbolehkan. Akibatnya, PL / SQL mengeluarkan pesan kesalahan.

BEGIN
    GOTO goto_inside_if;
    IF v_status = 'COMPLETED' THEN
      <<goto_inside_if>>
      ...
    END IF;
END;


Pernyataan GOTO tidak bisa bercabang sampai tengah loop:

BEGIN
  GOTO goto_inside_loop;
  FOR n_day IN 1 .. 7
  LOOP
     <<goto_inside_loop>>
     ...
  END LOOP;
END;
Satu-satunya cara untuk memasuki child block adalah melalui pernyataan BEGIN-nya. Contoh berikut tidak sesuai dengan peraturan ini, sehingga menyebabkan kesalahan.

BEGIN
  GOTO inside_child_block;
  ...
  BEGIN
    ...
    <<inside_child_block>>
    ...
  END;
END;


Kedua, kamu tidak dapat menggunakan pernyataan GOTO untuk cabang dari bagian penanganan pengecualian kembali ke blok saat ini. Contoh berikut tidak sesuai dengan peraturan ini, karena itu menyebabkan kesalahan.

BEGIN
  --...
  <<back_to_exec>>
  --...
  EXCEPTION.
    --...
    WHEN SOMETHING_WRONG_HAPPENED.
        GOTO back_to_exec;
    --...
END;
Ketiga, kamu tidak bisa menggunakan pernyataan GOTO untuk keluar dari subprogram. Untuk mengakhiri subprogram, kamu akan melompat ke akhir subprogram menggunakan pernyataan GOTO atau menggunakan pernyataan RETURN.

Keempat, Anda tidak dapat menggunakan pernyataan GOTO untuk membuat cabang dari satu klausa IF ke yang lain, atau dari satu klausa WHEN dari pernyataan CASE ke yang lain.

Kelima, setidaknya harus ada satu pernyataan yang bisa dieksekusi muncul setelah label target. Jika kamu hanya ingin bercabang ke label target tanpa melakukan apapun, kamu menggunakan pernyataan NULL

Contoh PL / SQL GOTO


Contoh berikut menunjukkan bagaimana menggunakan pernyataan PL / SQL GOTO:

SET SERVEROUTPUT ON SIZE 1000000;
BEGIN
  GOTO label_1;
  DBMS_OUTPUT.PUT_LINE('Right after the GOTO statement');
  <<label_1>>
  DBMS_OUTPUT.PUT_LINE('It is here!');
END;
/
Keluaran dar script-nya adalah:

It is here!
Ketika PL / SQL mencapai pernyataan GOTO, ia melewatkan semuanya dan langsung melompat ke label sasaran yaitu label_1 dan ini menampilkan pesannya It is here.

Pernyataan PL / SQL GOTO memiliki reputasi buruk karena membuat kode sulit dipahami dan sulit untuk di-debug. Secara umum, pernyataan PL / SQL GOTO harus dihindari dan diganti dengan pernyataan lain seperti pernyataan IF atau CASE.

Namun, ada beberapa kasus yang menggunakan pernyataan GOTO bisa membuat program lebih efisien. Lihat contoh berikut ini:

BEGIN
   IF ... THEN
         FOR rec_emp IN cur_emp LOOP
            -- By pass all using GOTO
            GOTO <<exit_now>>
         END LOOP;
         -- a lot of code here
   END IF;
   -- target label
   <<exit_now>>
   NULL;
END;

Pada contoh di atas, alih-alih melewati banyak kode setelah pernyataan loop FOR pertama, kita bisa menggunakan pernyataan GOTO untuk melompat ke ujung blok yang membuat kode sangat efisien.

Dalam tutorial ini, kamu telah belajar bagaimana menggunakan pernyataan PL / SQL GOTO untuk cabang tanpa syarat ke label target di blok yang sama.




Sumber asli :http://www.plsqltutorial.com

0 comments:

Post a Comment

Popular Posts