# Tugas Prosedur Oracle

Tugas ini melibatkan pemanggilan prosedur yang disimpan dalam pangkalan data Oracle. Bergantung pada jenis data individual, tugas ini akan mengembalikan daftar data atau nilai jenis data tertentu.

## Parameter

### Kod Prosedur

- Kod prosedur dihasilkan secara automatik berdasarkan _nama prosedur_ dan _parameter_, dan pengguna tidak perlu memasukkannya secara manual.
- Sebagai contoh, jika nama prosedurnya adalah _mcs.myproc_ dengan parameter _id_ dan _out_name_, maka ia akan dinyatakan seperti berikut:

```text
mcs.myproc(:id, :out_name);
```

### Nama Prosedur

- Menentukan nama prosedur.
- Jika prosedur perlu dibezakan mengikut nama pakej atau pengguna, gunakan titik (.) untuk memisahkan mereka.
- Contoh:

```text
mcs.myproc
```

### Parameter

- Parameter terdiri daripada elemen-elemen berikut:
  - Nama Parameter
  - Arah: IN, INOUT, OUT
  - Jenis Data Parameter: String, Number, Date, Cursor
  - Nilai: Untuk pembolehubah input, nilai yang bersesuaian
  - Saiz Maksimum: Untuk jenis data String atau Buffer, saiz maksimum pembolehubah tersebut.

#### Nama Parameter

Nama parameter menentukan nama parameter yang digunakan dalam prosedur. Dalam contoh di atas, 'id' dan 'out_name' adalah nama parameter.

### Arah

Menentukan sama ada pembolehubah tersebut adalah pembolehubah input (IN) atau output (OUT).

### Jenis Data Parameter

Menentukan jenis data parameter. Jenis data ini harus ditentukan dengan tepat seperti yang dinamakan semasa membuat prosedur.

Sebagai contoh

, jika sebuah prosedur diimplementasikan seperti berikut:

```sql
CREATE OR REPLACE NONEDITIONABLE PROCEDURE myproc (in_id IN VARCHAR2, out_name OUT VARCHAR2) AS
BEGIN
    SELECT name INTO out_name FROM MCS.FMB_USERS WHERE id = in_id ;
END;
```

Kedua-dua parameter pertama dan kedua adalah jenis VARCHAR2.

Apabila memanggil prosedur seperti ini, anda perlu menentukan jenis parameter sebagai String dan, untuk output, juga menentukan saiz maksimum.

Inilah contoh bagaimana untuk menentukannya:

![contoh prosedur 1](./assets/../../../../assets/images/oracle-procedure-example1.png 'contoh prosedur 1')

### Pembolehubah Akses

Konfigurasi mengikuti [dokumentasi JSONATA](http://docs.jsonata.org/overview.html).

Apabila 'pembolehubah akses' ditentukan, nilai yang disusun oleh pembolehubah tersebut digunakan sebagai nilai parameter. Jika tiada hasil yang dihasilkan oleh operasi 'pembolehubah', nilai yang ditetapkan dalam 'Nilai (val)' juga digunakan.

### Nilai (val)

Jika pembolehubah tersebut adalah input (IN), medan ini menentukan nilai tersebut. Masukkan nilai "tetap" secara langsung untuk medan ini.

Dalam contoh yang disebutkan sebelum ini, jika 'ID' ditetapkan sebagai nilai input untuk parameter 'id', anda harus menggunakan nilai yang dihasilkan oleh tugas ID sebagai nilai input.

Nilai ini digunakan jika hasil dari tetapan 'pembolehubah' tidak ada.

### Saiz Maksimum

Untuk pembolehubah dengan jenis data String atau Buffer, tentukan saiz maksimum. Abaikan ini untuk jenis data lain.

## Hasil Tugas

Hasil daripada pemanggilan prosedur dikembalikan dalam format Objek, dengan nama parameter yang ditentukan untuk output menjadi kunci dan nilai yang sesuai menjadi hasilnya.

Sebagai contoh, dalam tugas yang disebutkan di atas, hasilnya akan seperti berikut:

```javascript
{
  out_name: 'Admin'
}
```

## Contoh Lain (Cursor)

### Contoh Implementasi Prosedur

```sql
CREATE OR REPLACE NONEDITIONABLE PROCEDURE PROCEDURE1(out_cursor OUT SYS_REFCURSOR) AS
BEGIN
    BEGIN
        OPEN out_cursor FOR
            SELECT * FROM FARMWEATHER WHERE rownum <= 1000;
    END;
END PROCEDURE1;
```

### Contoh Panggilan Prosedur

![contoh prosedur 2](./assets/../../../../assets/images/oracle-procedure-example2.png 'contoh prosedur 2')

### Hasil Tugas untuk Panggilan Prosedur

```javascript
{
  "out_cursor": [
    {
      "FARMDATE": "2006-01-07T15:00:00.000Z",
      "MAXT": 29.5,
      "MINT": 21.8,
      "WINDSPEED": 1.6,
      "FARMHUM": 70.2,
      "PRECIPITATION": 0
    },
    {
      "FARMDATE": "2006-01-08T15:00:00.000Z",
      "MAXT": 30.1,
      "MINT": 21,
      "WINDSPEED": 1.6,
      "FARMHUM": 67.4,
      "PRECIPITATION": 0
    },
    ..
  ]
}
```
