Plsql 过程中游标和SUBSTR的用法

Plsql 过程中游标和SUBSTR的用法,plsql,cursor,substr,Plsql,Cursor,Substr,我需要从完整的dblink名称中删除实例名称。例如,select查询返回的结果类似于HHVISDEV.TRINITI.COM。我需要找维斯戴夫。当然,有这样多的结果。所以我需要使用游标并打印最终结果。我在编译时收到警告:创建的过程有编译错误。。当我调用该过程时,第1行出现错误: ORA-06575:程序包或函数deletedDBLinks1处于无效状态。请任何人指导我 create or replace procedure DeleteDBLinks1 is cursor mycursor

我需要从完整的dblink名称中删除实例名称。例如,select查询返回的结果类似于HHVISDEV.TRINITI.COM。我需要找维斯戴夫。当然,有这样多的结果。所以我需要使用游标并打印最终结果。我在编译时收到
警告:创建的过程有编译错误。
。当我调用该过程时,第1行出现错误:
ORA-06575:程序包或函数deletedDBLinks1处于无效状态。
请任何人指导我

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

如果您看到
警告:使用编译错误创建的过程
,那么我猜您可以使用SQL*Plus编译您的过程。在SQL*Plus中,您可以运行命令

show errors

您将看到错误列表。您的过程看起来还可以,所以我认为问题是-您无法访问
dba\u db\u链接
视图。尝试使用
所有数据库链接
用户数据库链接

除了Dmitry所说的您可能无法访问dba\u db\u链接表之外,myvar变量定义中也有输入错误。应该是:

    myvar dba_db_links.db_link%TYPE;

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

您遇到的编译错误是什么?