Процедура в oracle не будет выполняться

#sql #oracle

Вопрос:

   -- procedure--
 CREATE OR REPLACE PROCEDURE getDBUSERByUserId(
   p_userid IN DBUSER.USER_ID%TYPE,
   o_username OUT DBUSER.USERNAME%TYPE,
   o_createdby OUT  DBUSER.CREATED_BY%TYPE,
   o_createddate OUT DBUSER.CREATED_DATE%TYPE)
 IS
BEGIN
 SELECT USERNAME , CREATED_BY
 INTO o_username, o_createdby
**FROM  DBUSER WHERE USER_ID = p_userid;
END;

 DECLARE
 o_username DBUSER.USERNAME%TYPE;
 o_createdby DBUSER.CREATED_BY%TYPE;
 o_date DBUSER.CREATED_DATE%TYPE;

 BEGIN
 GETDBUSERBYUSERID(1001,o_username,o_createdby,o_date);
 DBMS_OUTPUT.PUT_LINE('username :  ' || o_username);
 DBMS_OUTPUT.PUT_LINE('createdby :  ' || o_createdby);
END;
 
  • СТОЛБЦЫ ТАБЛИЦЫ DBUSER:
  • ИДЕНТИФИКАТОР ПОЛЬЗОВАТЕЛЯ,
  • Имя пользователя,
  • CREATED_BY,
  • ДАТА СОЗДАНИЯ,

    Отчет об ошибке — ORA-06550: строка 11, столбец 3: PLS-00103: Обнаружен символ «конец файла» при ожидании одного из следующих:

    ; Символ «;» был заменен на «конец файла» для продолжения.

    1. 00000 — «строка %s, столбец %s:n%s» *Причина: Обычно ошибка компиляции PL/SQL. *Действие:’

Я пытаюсь протестировать процедуру, потому что я сам учусь, как их выполнять, из-за отсутствия в моей школе преподавания чего-либо, кроме основ. Я запускаю этот код внутри программы Oracle sqldeveloper и не могу понять, что это значит, когда я дохожу до конца файла, потому что я установил 1 элемент данных, соответствующий коду внутри. Я не хочу показывать дату, когда он был добавлен, поэтому его нет в инструкции declare.

Комментарии:

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

2. Вы разобрались с первой проблемой, так что можете ли вы показать фактический код, который вместо этого получает вторую? Включая финал / , если он у вас есть, и скажите, как вы его проводите.

3. @Alexpool только что отредактировал, и что вы подразумеваете под окончательным «/» ??

4. Здесь у вас есть две вещи: определение процедуры и анонимный блок. Вы запускаете их оба вместе как один сценарий? (Похоже на разработчика SQL?) Если это так, вам нужна косая черта на отдельной строке между ними — и после анонимного блока — для выполнения каждого блока независимо. Похоже, что ошибка исходит из END процедуры, но она не ясна на 100%. Вы показали его с точкой с запятой в конце, но не с косой чертой отправки.

5. хорошо, это, похоже, сработало, это второстепенные вещи, которым нас не учили в нашем классе при работе с базами данных. Я ценю помощь @Alexpool. Это действительно решило проблему, и это, наконец, завершило заявление.

Ответ №1:

Если вы запускаете все, что вы показали в виде сценария, вам нужно / после каждого независимого раздела кода PL/SQL:

 CREATE OR REPLACE PROCEDURE getDBUSERByUserId(
   p_userid IN DBUSER.USER_ID%TYPE,
   o_username OUT DBUSER.USERNAME%TYPE,
   o_createdby OUT  DBUSER.CREATED_BY%TYPE,
   o_createddate OUT DBUSER.CREATED_DATE%TYPE)
 IS
BEGIN
 SELECT USERNAME , CREATED_BY
 INTO o_username, o_createdby
 FROM  DBUSER WHERE USER_ID = p_userid;
END;
/

DECLARE
 o_username DBUSER.USERNAME%TYPE;
 o_createdby DBUSER.CREATED_BY%TYPE;
 o_date DBUSER.CREATED_DATE%TYPE;
BEGIN
 GETDBUSERBYUSERID(1001,o_username,o_createdby,o_date);
 DBMS_OUTPUT.PUT_LINE('username :  ' || o_username);
 DBMS_OUTPUT.PUT_LINE('createdby :  ' || o_createdby);
END;
/
 

Эта документация предназначена для SQL*Plus, но в основном относится и к разработчику SQL.

Комментарии:

1. Да, это сработало после того, как я установил /….есть кое-что, чего не хватает системе образования при обучении студентов