#oracle #plsql #sqldeveloper
Вот мой скрипт для создания пакета: CREATE OR REPLACE PACKAGE PP AS TYPE REFCURSOR IS REF CURSOR; FUNCTION getData(id IN VARCHAR2) RETURN REFCURSOR; END PP; При первом запуске создался пакет. Я добавил процедуру и пытаюсь скомпилировать, выдает ошибку: ORA-00955: name is already used by an existing object Как мне пересоздать пакет?
Ответы
Ответ 1
Не хватает завершающего символа после объявления пакета. Надо так: ... END PP; / Отличия и общее для завершающих символов "/" и ";" в SQl Developer следующее: Оба символа не входят в стандарт SQL и никак в SQL запросе не интепритируются. ";" является составной частью языка PL/SQL, он завершает законченое выражение. Оба не посылаются на сервер, а служат только как служебные символы - "здесь конец". В одной вкладке редактора (SQL Worksheet) могут находится многочисленные запросы и анонимные блоки. Поэтому, для выполнения одного запроса или блока (по умолчанию с CTRL-ENTER), необходимо: SQL запросы не содержащих PL/SQL блока, в частности - все DML, некоторые DDL, DCL - необходимо завершить его либо с ";", либо с "/" на новой строке. Анонимные блоки и SQL запросы содержащие PL/SQL блок (create ... package/function/trigger/... ) или потенциально могущие его содержать (create ... type), необходимо завершить его с "/", т.к. ";" завершает последний END в блоке. Если SQl Developer не находит завершающих символов, он ищет их дальше по тексту, и когда их найдёт (если не найдёт, то до конца текста), посылает несколько запросов как один, что приводит к неопределённому результату. Обычно ошибку выполнения, которая не всегда совсем понятна. Например: create type idType as object (id number); show errors / Error(2,1): PLS-00103: Encountered the symbol "SHOW" На заметку: Если запрос или блок выделить визуально, тогда SQl Developer выполнит только выделенное, даже если завершающие символы отсутствуют.
Комментариев нет:
Отправить комментарий