2013-08-15 2 views
0

나는 조금 붙어있다. 데이터베이스 이름 목록이있는 테이블이 있습니다. 데이터베이스 이름을 쿼리 한 다음이 데이터베이스를 쿼리하여 "systemtable"에서 세부 정보를 반환하려고합니다. 2 커서를 사용하려고했지만 그 나를 위해 밖으로 작동하지 않습니다 (그냥 구문을 찾을 수 없습니다), 모든 포인터/도움을 주시면 감사하겠습니다.여러 데이터베이스에서 테이블을 쿼리하는 PL/SQL

declare 

    cursor c_dbNames is select dbname 
        from DB_INFO order by name ASC; 
    v_curr_dbname VARCHAR2(60); 

begin 

    open c_dbNames; 
    LOOP 
     FETCH c_dbNames into v_curr_dbname; 
     EXIT WHEN c_dbnames%NOTFOUND; 
     begin 
      cursor c_dbDetails is select value 
        from [email protected]'||v_curr_dbname||' order by name ASC; 
      v_curr_detail VARCHAR2(60); 

      open c_dbDetails; 
      LOOP 
       FETCH c_dbDetails into v_curr_detail; 
       EXIT WHEN c_dbDetails%NOTFOUND; 
       htp.p('<tr><th>'||v_curr_detail||'</th></tr>'); 
      END LOOP; 
      close c_dbDetails; 
     end; 
    END LOOP; 
    close c_dbnames; 

end; 

답변

0

당신은 그것을 조금 조정해야 :

declare 
    cursor c_dbNames is 
     select 'dual' dbname from dual union all 
     select 'dual' dbname from dual union all 
     select 'dual' dbname from dual 
     order by dbname ASC; 

    v_curr_dbname VARCHAR2(60); 
begin 
    open c_dbNames; 
    LOOP 
     FETCH c_dbNames into v_curr_dbname; 
     EXIT WHEN c_dbnames%NOTFOUND; 

     DECLARE 
      v_cursor  integer; 
      v_rows   integer; 
      v_curr_detail char(20); 
     begin 
      v_cursor := DBMS_SQL.OPEN_CURSOR; 
      DBMS_SQL.PARSE(v_cursor, 'select ''c_dbDetails'' c_dbDetails FROM ' || v_curr_dbname, DBMS_SQL.NATIVE); 
      DBMS_SQL.DEFINE_COLUMN_CHAR(v_cursor, 1, v_curr_detail, 20); 
      v_rows := DBMS_SQL.EXECUTE(v_cursor); 

      loop 
       if DBMS_SQL.FETCH_ROWS(v_cursor) = 0 then 
        exit; 
       end if; 

       DBMS_SQL.COLUMN_VALUE_CHAR(v_cursor, 1, v_curr_detail); 
       DBMS_OUTPUT.PUT_LINE('<tr><th>' || v_curr_detail ||'</th></tr>'); 
      end loop; 

      DBMS_SQL.CLOSE_CURSOR(v_cursor); 
     end; 
    END LOOP; 
    close c_dbnames; 
end; 
+0

큰 물건의 답변들 주셔서 감사합니다, 이것이 내가이었다 정확히 무엇인가 후. – user2686602

0
declare 
    cursor databases_c is 
    -- put your database links here 
    select 'XXX' as dbname from dual union 
    select 'YYY' from dual; 
    v_global_name varchar2(4000); 
begin 
    for v_dbname in databases_c loop 
    -- query the database details 
    execute immediate 
     'select global_name from [email protected]' || v_dbname.dbname 
     into v_global_name; 
    dbms_output.put_line(v_global_name); 
    end loop; 
end; 
/

출력 :

SQL> @so27.sql 
XXX 
YYY 

PL/SQL procedure successfully completed. 

SQL> 
관련 문제