пытаюсь добавить агента (не позволяя дублировать фамилии).Начальные общие продажи должны быть нулевыми - PullRequest
1 голос
/ 14 мая 2019

Я получаю следующую ошибку при попытке компиляции и выполнения.У меня есть проблемы, как это выяснить.14/7 PL / SQL: оператор игнорируется. 14/10 PLS-00204: функция или псевдостолбец «EXISTS» могут использоваться только внутри оператора SQL. Ошибки: проверьте журнал компилятора

    CREATE OR REPLACE PROCEDURE AddAgent(
    p_Agent_Fname IN Agent.Agent_Fname%TYPE,
    p_Agent_Lname IN Agent.Agent_Lname%TYPE,
    p_Agent_Address IN Agent.Agent_Address%TYPE,
    p_Agent_Tsales IN Agent.Agent_Tsales%TYPE,
    p_Agent_Salary IN Agent.Agent_Salary%TYPE)

IS
        p_ErrorCode number;     --USED FOR ERROR CHECKING
        p_ErrorMsg  Varchar2(200);
        p_CurrentUser Varchar2(100);
BEGIN

  IF EXISTS 
  (SELECT * FROM Agent WHERE Agent_Lname = p_Agent_Lname) THEN

      dbms_output.put_line('Failure');    
  ELSE
     INSERT INTO Agent (Agent_Fname, Agent_Lname, Agent_Address, Agent_Tsales, Agent_Salary) 
     SELECT p_Agent_Fname, p_Agent_Lname, p_Agent_Address, 0, p_Agent_Salary
     from Dual;
     COMMIT;

     dbms_output.put_line('Success');
    END IF;
END;

1 Ответ

0 голосов
/ 14 мая 2019

Как вам сказали, вы не можете использовать EXISTS из оператора SELECT. Поэтому вам придется проверить существование в таблице AGENT в другом месте.

Вот один вариант, который вы могли бы рассмотреть. Обратите внимание, что я также переписал оператор INSERT INTO - нет необходимости SELECT FROM DUAL, у вас уже есть все эти значения.

CREATE OR REPLACE PROCEDURE AddAgent(
    p_Agent_Fname   IN Agent.Agent_Fname%TYPE,
    p_Agent_Lname   IN Agent.Agent_Lname%TYPE,
    p_Agent_Address IN Agent.Agent_Address%TYPE,
    p_Agent_Tsales  IN Agent.Agent_Tsales%TYPE,
    p_Agent_Salary  IN Agent.Agent_Salary%TYPE)
IS
    p_ErrorCode   number;     --USED FOR ERROR CHECKING
    p_ErrorMsg    Varchar2(200);
    p_CurrentUser Varchar2(100);

    l_cnt         number;    --> newly added
BEGIN
  -- check whether something exists in a table
  select count(*)
    into l_cnt
    from dual
    where exists (select null 
                  from agent
                  where agent_lname = p_agent_lname
                 );

  IF l_cnt > 0 then
     dbms_output.put_line('Failure');    
  ELSE
     INSERT INTO Agent 
       (Agent_Fname, Agent_Lname, Agent_Address, Agent_Tsales, Agent_Salary) 
     VALUES
       (p_Agent_Fname, p_Agent_Lname, p_Agent_Address, 0, p_Agent_Salary);

     COMMIT;
     dbms_output.put_line('Success');  
  END IF;
END;
/
...