2016-01-27 1 views
0

Мне нужно обрезать имя экземпляра из полного имени dblink. Например, запрос select возвращает результат, такой как HHVISDEV.TRINITI.COM. Мне нужно получить HHVISDEV. И, конечно, такие множественные результаты. Поэтому мне нужно использовать курсор и напечатать окончательный результат. Я получаю Warning: Procedure created with compilation errors., когда компилирую. И когда я вызываю процедуру, я получаю ERROR по строке 1: ORA-06575: Package or function DELETEDBLINKS1 is in an invalid state. Может ли кто-нибудь мне направить.Использование курсора и SUBSTR в процедуре

create or replace procedure DeleteDBLinks1 is 
    cursor mycursor is 
    SELECT SUBSTR(DB_LINK, 1, INSTR(DB_LINK, '.', 1, 1) - 1) 
     FROM dba_db_links; 
    myvar dba_db_links.dblinks%TYPE; 
BEGIN 
    OPEN mycursor; 

    LOOP 
    FETCH mycursor 
     INTO myvar; 

    EXIT WHEN mycursor%NOTFOUND; 
    DBMS_OUTPUT.put_line(myvar); 
    END LOOP; 

    CLOSE mycursor; 
end; 
/
+0

Какая ошибка компиляции, которую вы получаете? – Nitish

ответ

0

Если вы видите Warning: Procedure created with compilation errors, то я могу предположить, компиляции процедуры в SQL * Plus. В SQL * Plus вы можете запустить команду

show errors 

и вы увидите список ошибок. Ваша процедура выглядит нормально, поэтому я думаю, что проблема в том, что у вас нет доступа к dba_db_links. Попробуйте вместо этого использовать all_db_links или user_db_links.

0

Наряду с тем, что Дмитрий сказал о том, что у вас, вероятно, нет доступа к таблице dba_db_links, у вас также была опечатка в определении переменной myvar. Это должно было быть:

myvar dba_db_links.db_link%TYPE; 

SQL * Plus> SHOW ОШИБКИ поможет вам в ваших начинаниях PL/SQL, пока вы не начнете использовать PL/SQL IDE, как SQL Developer или (мой любимый) PL/SQL Developer, который автоматически покажет вам ошибки.

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

  • Нет связанных вопросов^_^