#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: Обнаружен символ «конец файла» при ожидании одного из следующих:
; Символ «;» был заменен на «конец файла» для продолжения.
- 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. Да, это сработало после того, как я установил /….есть кое-что, чего не хватает системе образования при обучении студентов