Я запускаю разработчика Oracle SQL, и у меня есть следующая хранимая процедура. Я совершенно новичок в этом, но действительно не уверен, почему это не работает:
CREATE OR REPLACE PROCEDURE CHECKDUPLICATE(
username1 IN USERS.USERNAME%TYPE,
o_username OUT USERS.USERNAME%TYPE
)
IS
BEGIN
SELECT USERNAME
INTO o_username
FROM USERS WHERE username1 = o_username;
END;
Когда я пытаюсь вызвать его:
DECLARE
o_username USERS.USERNAME%TYPE;
BEGIN
CHECKDUPLICATE('Jacklin', o_username);
DBMS_OUTPUT.PUT_LINE('username : ' || o_username);
END;
Я получаю сообщение об ошибке:
Error starting at line 1 in command:
DECLARE
o_username USERS.USERNAME%TYPE;
BEGIN
CHECKDUPLICATE(Jacklin, o_username);
DBMS_OUTPUT.PUT_LINE('username : ' || o_username);
END;
Error report:
ORA-06550: line 5, column 19:
PLS-00201: identifier 'JACKLIN' must be declared
ORA-06550: line 5, column 4:
PL/SQL: Statement ignored
06550. 00000 - "line %s, column %s:\n%s"
*Cause: Usually a PL/SQL compilation error.
*Action:
Что означает «Идентификатор Jacklin» должен быть объявлен? (Таблица называется USERS, а имя столбца называется USERNAME). Любая помощь будет оценена по достоинству.
РЕДАКТИРОВАТЬ ** Я поставил Джеклина в кавычки, и теперь я получаю это сообщение:
Error report:
ORA-01403: no data found
ORA-06512: at "L13JAV04.CHECKDUPLICATE", line 9
ORA-06512: at line 6
01403. 00000 - "no data found"
*Cause:
*Action:
Несмотря на то, что Джеклин существует в базе данных!
FROM USERS WHERE username1 = o_username;
вы сравниваете параметры ввода и вывода? если у вас есть имя столбца с именемusername1
, вы должны использовать псевдоним таблицы - person Jafar Kofahi   schedule 31.07.2013