2013-07-17 2 views
-2

Я хочу создать пакет, и внутри пакета у нас есть функция, имеющая параметр. У меня есть таблица для TIME_DIM, а гранулярность этой таблицы - одна запись/секунда. Я получаю сообщение об ошибке, когда я упаковываю этот пакет, чтобы кто-нибудь мне помог.Ошибка пакета Oracle

create or replace 
PACKAGE PKG_TIME_DIM 
IS 
Function FUN_TIME_DESC 
    (TIME_IN IN varchar2) 
    RETURN varchar2 
IS 
    TIMEDESC varchar2; 
    CURSOR c1 
    IS 
    SELECT TIME_DESC 
    from TIME_DIM 
    where TIME_DESC = TIME_IN; 
BEGIN 
    open c1; 
    fetch c1 into TIME_DESC; 
    if c1%notfound then 
     TIMEDESC := 9999; 
    end if; 
    close c1; 
RETURN TIMEDESC; 
END; 
END; 
+1

Какая ошибка? – Wolf

+2

Другая [новая учетная запись] (http://stackoverflow.com/q/17678660/266304)? У вас, похоже, нет необходимости предоставлять информацию людям, которые вам помогут. –

+0

TIMEDESC varchar2; здесь возникает ошибка. Ошибка (7,4): PLS-00103: встречается символ «TIMEDESC» при ожидании одного из следующих: язык –

ответ

2

я не знаю, что ошибки вы получаете, но я вижу sevral проблемы: декларацией переменной TIMEDESC размер varchar2 отсутствует: для примера: TIMEDESC varchar2(2000); или лучше

TIMEDESC TIME_DIM.TIME_DESC%TYPE; 

есть типо в следующем даного

fetch c1 into TIME_DESC; 

вы declarated TIMEDESC и не TIME_DESC в качестве имени переменной

и может быть следующая проблема

TIMEDESC := 9999; 

TIMEDESC имеет тип VARCHAR, но вы назначая номер к нему

2

Есть много ошибок здесь. Кажется, вы объявляете спецификацию пакета с кодом в нем. Вам нужны как спецификация, так и тело. Я добавил комментарии по каждой строке, в которой была проблема:

-- Note: "CREATE OR REPLACE PACKAGE" = The specification 
CREATE OR REPLACE PACKAGE PKG_TIME_DIM 
IS 

    FUNCTION FUN_TIME_DESC (TIME_IN IN VARCHAR2) RETURN VARCHAR2; 

END PKG_TIME_DIM; 
/

-- Note: "CREATE OR REPLACE PACKAGE BODY" = Keyword BODY = the body 
CREATE OR REPLACE PACKAGE BODY PKG_TIME_DIM 
IS 
    FUNCTION FUN_TIME_DESC (TIME_IN IN VARCHAR2) RETURN VARCHAR2 
    IS 
     TIMEDESC VARCHAR2(100 CHAR); -- Need to define length of this variable in characters or bytes 

     CURSOR c1 IS 
      SELECT TIME_DESC 
      FROM TIME_DIM 
      WHERE TIME_DESC = TIME_IN; 
    BEGIN 
     OPEN c1; 
     FETCH c1 INTO TIMEDESC; -- Changed variable name to match the name you defined 

     IF c1%NotFound THEN 
      TIMEDESC := '9999'; -- Put quotes around this since this is a VARCHAR 
     END IF; 

     CLOSE c1; 

     RETURN TIMEDESC; 

    END FUN_TIME_DESC; 

END PKG_TIME_DIM; 
/
+0

Спасибо wweicker Тем не менее, я получаю сообщение об ошибке «Ошибка (9,1): PLS-00103: встречается символ «CREATE», ожидая одно из следующего: end function pragma procedure тип подтипа <идентификатор> текущий курсор delete существует раньше " –

+0

@wweicker - Я думаю, что ошибка «Стив» была связана с отсутствием '/' после строк 'END PKG_TIME_DIM;'. SQL Developer увидит, что все как одна команда. (И SQL * Plus тоже не понравится). –

Смежные вопросы