过程中的游标和SUBSTR用法

时间:2016-01-27 10:51:08

标签: plsql cursor substr

我需要从完整的dblink名称修剪实例名称。例如,select查询返回结果,如HHVISDEV.TRINITI.COM。我需要得到HHVISDEV。而且当然有这么多结果。所以我需要使用游标并打印最终结果。当我编译时,我得到Warning: Procedure created with compilation errors.。当我调用该过程时,我在第1行收到错误:     ORA-06575: Package or function DELETEDBLINKS1 is in an invalid state.任何人都可以指导我。

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;
/

2 个答案:

答案 0 :(得分:0)

如果您看到Warning: Procedure created with compilation errors,那么,我猜,您可以在SQL * Plus中编译您的过程。在SQL * Plus中,您可以运行命令

show errors

你会看到错误列表。您的程序看起来没问题,所以我认为问题是 - 您无法访问dba_db_links视图。请尝试使用all_db_linksuser_db_links

答案 1 :(得分:0)

除了Dmitry所说的你可能无法访问dba_db_links表之外,你在myvar变量定义中也有一个拼写错误。应该是:

    myvar dba_db_links.db_link%TYPE;

的SQL * Plus> SHOW ERRORS将帮助您进行PL / SQL工作,直到您开始使用像SQL Developer或(我最喜欢的)PL / SQL Developer这样的PL / SQL IDE,它会自动显示错误。