Процедура plsql не объявлена ​​в этой области ошибки - PullRequest
0 голосов
/ 06 октября 2018

Привет всем, я пытаюсь сделать базовую функцию PLSQL для назначения.код ниже

DECLARE
e_child_record_found  exception;
    PRAGMA EXCEPTION_INIT(e_child_record_found, -02292);
v_afd number;

function afdeling_van(p_mnr in MEDEWERKERS.AFD%type)
    RETURN MEDEWERKERS.AFD%type
    IS
    DEPNR MEDEWERKERS.AFD%type;
    BEGIN
    SELECT AFD into DEPNR FROM MEDEWERKERS WHERE AFD = p_mnr;
end afdeling_van;

procedure ontsla_med(p_mnr in MEDEWERKERS.AFD%type)
    IS 
    BEGIN
    DELETE FROM UITVOERINGEN WHERE DOCENT = p_mnr;
    DELETE FROM INSCHRIJVINGEN WHERE CURSIST = p_mnr;
    DELETE FROM MEDEWERKERS WHERE MNR = p_mnr;
end ontsla_med;

procedure neem_med_aan(p_naam in MEDEWERKERS.NAAM%type,
                       p_voorl in MEDEWERKERS.VOORL%type,
                       p_gbdatum in MEDEWERKERS.GBDATUM%type,
                       p_maandsal in MEDEWERKERS.MAANDSAL%type,
                       p_afd in MEDEWERKERS.AFD%type,
                       p_functie in MEDEWEKERS.FUNCTIE%type DEFAULT('NULL'),
                       p_chef in MEDEWERKERS.CHEF%type DEFAULT('NULL'))
IS    
    v_mnr number;
BEGIN
    SELECT max(MNR)into v_mnr FROM MEDEWERKERS;
    v_mnr := v_mnr + 1;
    INSERT INTO MEDEWERKERS(MNR, naam, voorl, functie, chef, gbdatum, maandsal, afd) VALUES(v_mnr,p_naam, p_voorl, p_gbdatum, p_maandsal, p_afd, p_functie, p_chef);
end neem_med_aan;

BEGIN
    ontsla_med(p_mnr => 7900);
    v_afd := afdeling_van(p_mnr => 7369);
    dbms_output.put_line(v_afd);
    neem_med_aan(p_naam => 'Vermeulen',
                 p_voorl => 't',
                 p_gbdatum => '15-02-1961',
                 p_maandsal => 2000,
                 p_afd => 10);
    neem_med_aan(p_naam => 'derks',
                 p_voorl => 'm',
                 p_gbdatum => '05-aug-61',
                 p_maandsal => 2500,
                 p_afd => 30,
                 p_functie => 'Verkoper',
                 p_chef => 7698);
    neem_med_aan(p_naam => 'Martens',
                 p_voorl => 'i',
                 p_gbdatum => '11-05-1956',
                 p_maandsal => 2100,
                 p_afd => 20,
                 p_functie => 'Trainer');
    neem_med_aan(p_naam => 'Verbeek',
                 p_voorl => 'j',
                 p_gbdatum => '12-09-1950',
                 p_maandsal => 2600,
                 p_afd => 30,
                 p_functie => 'verkoper',
                 p_chef => 7782);
exception
when e_child_record_found then --ORA-melding, zelf gedefinieerd
    raise_application_error(-20000,'De medewerker is nog verbonden aan andere gegevens');
when no_data_found then --voorgedefinieerd door Oracle
    raise_application_error(-20000,'Deze medewerker bestaat niet');
end;

Теперь я получаю следующие ошибки

Error report -
ORA-06550: line 27, column 41:
PLS-00201: identifier 'MEDEWEKERS.FUNCTIE' must be declared
ORA-06550: line 22, column 5:
PL/SQL: Item ignored
ORA-06550: line 41, column 9:
PLS-00313: 'NEEM_MED_AAN' not declared in this scope
ORA-06550: line 41, column 9:
PL/SQL: Statement ignored
ORA-06550: line 46, column 9:
PLS-00313: 'NEEM_MED_AAN' not declared in this scope
ORA-06550: line 46, column 9:
PL/SQL: Statement ignored
ORA-06550: line 53, column 9:
PLS-00313: 'NEEM_MED_AAN' not declared in this scope
ORA-06550: line 53, column 9:
PL/SQL: Statement ignored
ORA-06550: line 59, column 9:
PLS-00313: 'NEEM_MED_AAN' not declared in this scope
ORA-06550: line 59, column 9:
PL/SQL: Statement ignored
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:

Процедуры и функции в объявлении уже были там, поэтому я просто добавил код внутри.Это как-то связано с кодом внутри?или что-то не так с размещением процедур или что-то в этом роде.Хотелось бы помочь, спасибо заранее.

Ответы [ 2 ]

0 голосов
/ 07 октября 2018

Определение neem_med_aan в настоящее время гласит:

procedure neem_med_aan(p_naam in MEDEWERKERS.NAAM%type,
                       p_voorl in MEDEWERKERS.VOORL%type,
                       p_gbdatum in MEDEWERKERS.GBDATUM%type,
                       p_maandsal in MEDEWERKERS.MAANDSAL%type,
                       p_afd in MEDEWERKERS.AFD%type,
                       p_functie in MEDEWEKERS.FUNCTIE%type DEFAULT('NULL'),
                       p_chef in MEDEWERKERS.CHEF%type DEFAULT('NULL'))

. Похоже, что в шестой строке MEDEWEKERS следует изменить на MEDEWERKERS.

Удачи.

0 голосов
/ 06 октября 2018

Это: p_functie in MEDEWEKERS.FUNCTIE%type DEFAULT('NULL'),, как сообщается, неправильно;похоже, что таблица MEDEWEKERS не содержит столбец с именем FUNCTIE.

Остальные ошибки зависят от этого - как только вы исправите это, другие ошибки автоматически исчезнут.

Еще несколько возражений, если можно:

Функция afdeling_van завершится ошибкой, как только вы ее вызовите, поскольку у нее нет предложения RETURN.

Процедура neem_med_aan выиграноне работает должным образом в многопользовательской среде;Многие пользователи могут вызывать его одновременно, и все они получат одинаковое значение MAX(mnr) + 1, и это, вероятно, не то, что вы хотите.Переключиться на последовательность.Или, если вы настаиваете на своем выборе, вы должны создать функцию автономной транзакции, которая сохраняет значения MAX в таблице и фиксирует каждый раз, когда она выбирается.Еще раз - переключитесь на последовательность.

Кроме этого, ваш код выглядит хорошо.SQL Developer правильно форматирует его, что означает отсутствие явных ошибок.

Кроме того, ОЧЕНЬ упрощенная версия компилируется и выполняется ОК:

SQL> declare
  2    v_afd number;
  3
  4    function afdeling_Van return number is
  5    begin
  6      return 1;
  7    end;
  8
  9    procedure neem_med_aan is
 10    begin
 11      null;
 12    end;
 13
 14  begin
 15    v_afd := afdeling_Van;
 16
 17    neem_med_aan;
 18  exception
 19    when others then null;
 20  end;
 21  /

PL/SQL procedure successfully completed.

SQL>

Итак - исправьте эту проблему MEDEWEKERS.FUNCTIE столбца иу тебя должно быть все в порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...