Prosedur dengan kesalahan urutan - PLS-00103 yang terjadi memerlukan panduan

Hai stack overflow, saya baru mengenal sql dan saya mencoba membuat prosedur untuk menambahkan konsultan baru. saya akan menggunakan kembali kode dalam aplikasi apex dengan tombol untuk Jalankan tugas. Saya juga telah menerapkan urutan untuk menambah entri konsultan baru. Sayangnya saya mengalami kesalahan

Kompilasi gagal, baris 10 (11:48:18) PLS-00103: Menemukan simbol "BEGIN" ketika mengharapkan salah satu dari yang berikut: ; dengan authid sebagai urutan cluster menggunakan parallel_enable pipelined result_cache deterministik eksternal yang dapat diakses

bisakah saya mendapatkan panduan untuk mengatasi masalah ini karena saya baru mengenal sql, terima kasih kawan dan penelitian tidak membantu.

kode asli

create or replace procedure hirecst
       (CST_NAME VARCHAR2,
        START_DATE DATE,
        LEAVE_DATE DATE,
        LOCATION VARCHAR2,
        SPECIALIST_AREA VARCHAR2)

    RETURN NUMBER IS
       new_cst NUMBER;
    BEGIN
       SELECT CONSULTANT_IDSEQ.NEXTVAL
          INTO new_cst
          FROM DUAL;
       INSERT INTO LDS_CONSULTANT (CONSULTANT_ID, CST_NAME, START_DATE, LEAVE_DATE, LOCATION, SPECIALIST_AREA)
          VALUES (new_cst, p_con_name, p_con_start, p_con_end, p_con_loc, p_con_spec);

       RETURN(new_cst);
    END;

menghapus pengembaliannya

create or replace procedure hirecst
   (CST_NAME VARCHAR2,
    START_DATE DATE,
    LEAVE_DATE DATE,
    LOCATION VARCHAR2,
    SPECIALIST_AREA VARCHAR2)



BEGIN
new_cst NUMBER;
   SELECT CONSULTANT_IDSEQ.NEXTVAL
      INTO new_cst
      FROM DUAL;
   INSERT INTO LDS_CONSULTANT (CONSULTANT_ID, CST_NAME, START_DATE, LEAVE_DATE, LOCATION, SPECIALIST_AREA)
      VALUES (new_cst, p_con_name, p_con_start, p_con_end, p_con_loc, p_con_spec);


END;

person gozzlia    schedule 14.05.2018    source sumber
comment
Prosedur tidak menghasilkan apa pun. Apakah Anda seharusnya membuat sebuah fungsi? (Juga; kursus yang sama? *8-)   -  person Alex Poole    schedule 14.05.2018
comment
Kemungkinan duplikat Apakah mungkin menggunakan return dalam prosedur tersimpan?   -  person sticky bit    schedule 14.05.2018
comment
tidak, saya menghapus pengembaliannya dan mengembalikan kesalahan yang berbeda   -  person gozzlia    schedule 14.05.2018
comment
Itu adalah masalah langsung dengan kesalahan yang Anda posting. Anda telah mengedit pertanyaan agar masalah tersebut tidak terjadi sekarang; tapi Anda juga menghapus IS dari baris itu. (Ada masalah lain; dari mana p_con_name dll. berasal? Apakah itu seharusnya nama argumen prosedur? Dan Anda tidak memerlukan variabel new_cst - Anda dapat menggunakan urutannya langsung dalam pernyataan sisipkan.)   -  person Alex Poole    schedule 14.05.2018
comment
Anda tidak perlu select CONSULTANT_IDSEQ.NEXTVAL into new_cst from dual;. Cukup buat new_cst := CONSULTANT_IDSEQ.NEXTVAL; resp. INSERT INTO LDS_CONSULTANT (...) VALUES (CONSULTANT_IDSEQ.NEXTVAL, ...); jika Anda memerlukan nilainya hanya sekali.   -  person Wernfried Domscheit    schedule 14.05.2018


Jawaban (2)


Catatan: Saya mengabaikan ketidakcocokan antara nama parameter yang dideklarasikan dan yang digunakan dalam pernyataan INSERT.


Seperti yang didokumentasikan dalam manual Anda memerlukan AS (atau IS ) kata kunci yang memulai bagian prosedur sebenarnya - setelah itu deklarasi variabel perlu ditulis:

create or replace procedure hirecst
   (CST_NAME VARCHAR2,
    START_DATE DATE,
    LEAVE_DATE DATE,
    LOCATION VARCHAR2,
    SPECIALIST_AREA VARCHAR2)
AS --<< HERE
  new_cst NUMBER;
BEGIN
   SELECT CONSULTANT_IDSEQ.NEXTVAL
      INTO new_cst
      FROM DUAL;

   INSERT INTO LDS_CONSULTANT 
      (CONSULTANT_ID, CST_NAME, START_DATE, LEAVE_DATE, LOCATION, SPECIALIST_AREA)
    VALUES 
      (new_cst, p_con_name, p_con_start, p_con_end, p_con_loc, p_con_spec);
END;

Namun, SELECT INTO tidak diperlukan sama sekali, Anda dapat menggunakan nextval langsung di pernyataan INSERT. Jadi Anda dapat menyederhanakan prosedurnya menjadi:

create or replace procedure hirecst
   (CST_NAME VARCHAR2,
    START_DATE DATE,
    LEAVE_DATE DATE,
    LOCATION VARCHAR2,
    SPECIALIST_AREA VARCHAR2)
AS --<< Still needed!
BEGIN
   INSERT INTO LDS_CONSULTANT 
     (CONSULTANT_ID, CST_NAME, START_DATE, LEAVE_DATE, LOCATION, SPECIALIST_AREA)
   VALUES 
     (CONSULTANT_IDSEQ.NEXTVAL, p_con_name, p_con_start, p_con_end, p_con_loc, p_con_spec);
END;

Jika Anda ingin mengembalikan ID yang dihasilkan dari prosedur, Anda memerlukan parameter OUT:

create or replace procedure hirecst
   (CST_NAME VARCHAR2,
    START_DATE DATE,
    LEAVE_DATE DATE,
    LOCATION VARCHAR2,
    SPECIALIST_AREA VARCHAR2, 
    p_consultant_id out integer) --<< HERE
AS 
BEGIN
   -- Assign the value to the OUT parameter
   p_consultant_id := CONSULTANT_IDSEQ.NEXTVAL;

   INSERT INTO LDS_CONSULTANT 
      (CONSULTANT_ID, CST_NAME, START_DATE, LEAVE_DATE, LOCATION, SPECIALIST_AREA)
    VALUES 
      (p_consultant_id, p_con_name, p_con_start, p_con_end, p_con_loc, p_con_spec);
END;
/
person a_horse_with_no_name    schedule 14.05.2018

Berikut ini adalah sintaks prosedur-

CREATE [OR REPLACE] PROCEDURE procedure_name
    [ (parameter [,parameter]) ]

IS
    [declaration_section]

BEGIN
    executable_section

[EXCEPTION
    exception_section]

END [procedure_name];

Dan Anda lupa kata kunci 'IS'

following is the code-

    create or replace procedure hirecst
           (CST_NAME VARCHAR2,
            START_DATE DATE,
            LEAVE_DATE DATE,
            LOCATION VARCHAR2,
            SPECIALIST_AREA VARCHAR2)

         IS
           new_cst NUMBER;
        begin
           SELECT CONSULTANT_IDSEQ.NEXTVAL
              INTO new_cst
              FROM DUAL;
           INSERT INTO LDS_CONSULTANT (CONSULTANT_ID, CST_NAME, START_DATE, LEAVE_DATE, LOCATION, SPECIALIST_AREA)
              VALUES (new_cst, p_con_name, p_con_start, p_con_end, p_con_loc, p_con_spec);

           end;
        ;
person Kedar Limaye    schedule 14.05.2018