ИСПОЛЬЗУЯ SQL Developer и получая следующую ошибку: попытка назначить действительное свойство агенту - PullRequest
0 голосов
/ 16 мая 2019

Продолжайте получать ошибку компиляции при попытке назначить действительное свойство агенту.13/5 PL / SQL: оператор SQL игнорируется 14/93 PL / SQL: ORA-00907: отсутствует правая скобка 15/13 PLS-00103: Обнаружен символ «THEN» при ожидании одного из следующих действий: (начало регистра объявляет конец исключениявыход для goto if loop mod null прагма повышение возвращение выбрать обновление, в то время как при << продолжить закрыть текущий удалить выборку заблокировать вставить открыть откат сохранить заданную точку набора sql выполнить commit для очистки канала слияния Ошибка: проверить журнал компилятора </p>

CREATE OR REPLACE PROCEDURE validAgent(
     p_Agent_Id IN Agent.Agent_Id%TYPE)

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


        avail_prop number;

    BEGIN
    Select Case
when exists(SELECT Property.Prop_Id FROM Property WHERE (Property.Agent_Id = Agent.Agent_Id);
            then 1 
            else 0
            end into avail_prop
            from dual;
            if avail_prop =1 then 
            avail_prop := (SELECT Property.Prop_Id FROM Property WHERE (Property.Agent_Id != '1') or Property.Agent_Id is null and ROWNUM = 1)

            UPDATE Property SET Property.Agent_Id = p_Agent_Id WHERE Property.Prop_Id = avail_prop

            dbms_output.put_line('Success');
            else
            dbms_output.put_line('Failure');
            end if;
            end;

1 Ответ

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

Вы пропустили несколько точек с запятой, у вас слишком много круглых скобок, неправильно установлено значение AVAIL_PROP ...

Вот фиксированный код, который должен скомпилировать.

CREATE OR REPLACE PROCEDURE validagent (p_agent_id IN agent.agent_id%TYPE)
AS
   p_errorcode    NUMBER;                            --USED FOR ERROR CHECKING
   p_errormsg     VARCHAR2 (200);
   p_currentuser  VARCHAR2 (100);
   avail_prop     NUMBER;
BEGIN
   SELECT CASE
             WHEN EXISTS
                     (SELECT property.prop_id
                        FROM property
                       WHERE property.agent_id = agent.agent_id)
             THEN
                1
             ELSE
                0
          END
     INTO avail_prop
     FROM DUAL;

   IF avail_prop = 1
   THEN
      SELECT property.prop_id
        INTO avail_prop
        FROM property
       WHERE    (property.agent_id != '1')
             OR     property.agent_id IS NULL
                AND ROWNUM = 1;

      UPDATE property
         SET property.agent_id = p_agent_id
       WHERE property.prop_id = avail_prop;

      DBMS_OUTPUT.put_line ('Success');
   ELSE
      DBMS_OUTPUT.put_line ('Failure');
   END IF;
END;
...