2016-12-05 4 views
-2

Эй, ребята, у меня проблема, когда я получаю сообщение об ошибке, когда пытаюсь добавить второй закрытый заголовок под моим первым закрытым заголовком.Как добавить вторую частную функцию в Body Body oracle pl/sql?

CREATE OR REPLACE PACKAGE TEST IS 
PROCEDURE TEST2(VARIABLE1 IN NUMBER, VARIABLE2 OUT NUMBER); 
END; 

CREATE OR REPLACE PACK BODY TEST IS 
FUNCTION PRIVATE1 (VARIABLE1 IN NUMBER) 
RETURN NUMBER; 
FUNCTION PRIVATE2 (VARIABLE2 IN NUMBER) 
RETURN NUMBER; 
PROCEDURE TEST2(VARIABLE IN NUMBER, VARIABLE OUT NUMBER) 
BEGIN 
...... 
END; 
FUNCTION PRIVATE1 (VARIABLE1 IN NUMBER) 
RETURN NUMBER 
IS 
BEGIN 
........ 
END; 
FUNCTION PRIVATE2 (VARIABLE2 IN NUMBER) 
RETURN NUMBER 
IS 
BEGIN 
....... 
END; 
END; 

Любые предложения о том, как я могу это исправить?

+1

И ошибка ...? – Aleksej

+1

Пожалуйста, разместите пример конкретной конструкции, которая не работает, вместе с полным сообщением об ошибке и номером строки. Проводя несколько строк псевдокода и говоря, что вы «получаете ошибку», просто приведет вас к downvotes. –

ответ

1
FUNCTION PRIVATE2 (VARIABLE2 IN NUMBER) 
RETURN NUMBER; // REMOVE semi colon from here 
IS 
BEGIN 
....... 
END; 
+0

Какая ошибка вы получаете? – Girish

+0

функция не может использоваться в sql. –

+0

В вашем коде вы еще не вызываете какую-либо функцию, эта ошибка возникает только тогда, когда функция используется в sql или, вероятно, в коде, обе вещи не отображаются в вашем коде. Его вряд ли удастся получить эту ошибку во время компиляции. Чтобы получить помощь, вам необходимо разделить соответствующий код и подробную ошибку, поскольку она возвращается во время компиляции. – Girish

0

Возможно, вы используете частную функцию в SQL - это не поддерживается. Чтобы использовать функцию в SQL, вы должны определить ее в спецификации пакета.

Нам нужен исходный код private1 и private2 функций, чтобы иметь возможность помочь больше.

[Edit] Вот пример пакета, который будет не в состоянии собрать за счет использования собственной функции в SQL:

create or replace package test_pkg is 
end; 
/
create or replace package body test_pkg is 

    function F1 return number is 
    begin 
    return 2; 
    end; 

    function F2 return number is 
    lnNumber number; 
    begin 
    select F1 -- function declared only in the package body 
     into lnNumber 
     from dual; 
    return lnNumber + 1; 
    end; 

end; 
/
PLS-00231: function 'F1' may not be used in SQL 
PL/SQL: ORA-00904: "F1": invalid identifier 
PL/SQL: SQL Statement ignored 
+0

Если я удалю вторую частную функцию из пакета, пакет будет создан успешно. –

+0

Но вам, очевидно, нужна эта функция, иначе у вас ее не будет в пакете? Решение состоит в том, чтобы удалить вызов функции из SQL, объявить функцию в спецификации пакета или изменить свой код так, как вы это делаете не нужно вызывать функцию из SQL –

+0

Думаю, мне придется пойти со вторым вариантом. –