Очевидно, мне нужна вторая пара глаз, потому что я всю жизнь не могу понять, в чем проблема. Я создал «тестовый» пакет для проверки кода моего пакета, и я продолжаю получать сообщение об ошибке «Неверный SQL» или «подпрограмма или курсор», содержащиеся в пакете, не существует. Это сводит меня с ума ... вот мой код, на самом деле все просто ... объявление пакета соответствует требованиям, тело пакета выдает мне ошибку. Любая функция, которую я поместил вверху тела пакета, будет скомпилирована, а две другие нет и выдадут мне одну из двух ошибок, описанных выше. Изначально у меня это было в другом пакете, содержащем более 10 000 строк кода, но я создал этот тестовый пакет, потому что при его компиляции я получал всевозможные странные сообщения об ошибках, поэтому я вынул его, и этот пакет компилируется и работает нормально. Я использую Toad v10.0.0.41 для доступа к базе данных, а не Sql * Plus, использую Toad уже много лет.
Упаковка:
CREATE OR REPLACE PACKAGE SomeSchema.TestPackage AS
FUNCTION PrimaryContactFullName (pPrimaryContact IN Varchar2, pFatherName IN Varchar2, pMothername IN Varchar2) RETURN VARCHAR2;
FUNCTION PrimaryContactFirstName(pPrimaryContact IN Varchar2, pFatherFirstName IN Varchar2, pMotherFirstname IN Varchar2) RETURN VARCHAR2;
FUNCTION PrimaryContactLastName(pPrimaryContact IN Varchar2, pFatherLastName IN Varchar2, pMotherLastname IN Varchar2) RETURN VARCHAR2;
END TestPackage;
/
Тело пакета:
CREATE OR REPLACE PACKAGE BODY SomeSchema.TestPackage IS
FUNCTION PrimaryContactFirstName(pPrimaryContact IN Varchar2, pFatherFirstName IN Varchar2, pMotherFirstName IN Varchar2) RETURN VARCHAR2 IS
W_FullName Varchar2(100);
BEGIN
IF Upper(pPrimaryContact) = 'MOTHER' Then
W_FullName := pMotherFirstName;
ELSIF Upper(pPrimaryContact) = 'FATHER' Then
W_FullName := pFatherFirstName;
ELSE
W_FullName := pMotherFirstName;
END IF;
RETURN W_FullName;
END;
END;
FUNCTION PrimaryContactLastName(pPrimaryContact IN Varchar2, pFatherLastName IN Varchar2, pMotherLastname IN Varchar2) RETURN VARCHAR2 IS
W_FullName Varchar2(100);
BEGIN
IF Upper(pPrimaryContact) = 'MOTHER' Then
W_FullName := pMotherLastName;
ELSIF Upper(pPrimaryContact) = 'FATHER' Then
W_FullName := pFatherLastName;
ELSE
W_FullName := pMotherLastName;
END IF;
RETURN W_FullName;
END;
FUNCTION PrimaryContactFullName(pPrimaryContact IN Varchar2, pFatherName IN Varchar2, pMothername IN Varchar2) RETURN VARCHAR2 IS
W_FullName Varchar2(100);
BEGIN
IF Upper(pPrimaryContact) = 'MOTHER' Then
W_FullName := pMotherName;
ELSIF Upper(pPrimaryContact) = 'FATHER' Then
W_FullName := pFatherName;
ELSE
W_FullName := pMotherName;
END IF;
RETURN W_FullName;
END;
END;
/