2014-02-28 4 views
0

안녕하세요. 내 코드는 다음과 같습니다. 뷰를 만들고 뷰의 데이터를 사용하여 다른 커서에서 데이터를 가져와야합니다. 칼럼 37, 56 행 : PL/SQL을 : 난 내 코드를 실행할 때, 내가테이블 또는 뷰가 존재하지 않습니다.

"ORA-06550 오류를 얻고있다 ORA-00942 : 테이블 또는 뷰가 ORA-06550 존재하지 않습니다 라인 (52)을, 열 9 : PL/SQL : SQL 문 무시 "

여기서 어떤 문제가 발생합니까? 미리 감사드립니다.

declare 

drop_view_sql varchar2(100) := 'drop view rv_task_number_view'; 

type tasks_rec is record(task_number varchar2(20)); 

type t_tab is table of tasks_rec; 

tasks_tab t_tab; 

notes_rec xx_fs_mob_loc_rec.task_notes_rec; 

notes_tab xx_fs_mob_loc_rec.task_notes_tab; 

    begin 

     execute immediate 'create view apps.rv_task_number_view as 
          SELECT distinct ct.task_number     
          FROM csf_ct_tasks ct , 

          cs_estimate_details ced, 
          csf_debrief_headers cdh, 
          csf_debrief_lines cdl, 
          jtf_task_assignments jta 

        WHERE 1=1 
        and  jta.task_id = ct.task_id 
        and  jta.task_assignment_id = cdh.task_assignment_id(+) 
        and  cdh.debrief_header_id = cdl.debrief_header_id(+) 
        and  cdl.debrief_line_id = ced.source_id(+) 
        AND  ((ct.planned_end_date between (sysdate-30) and (sysdate+30)) or (ct.scheduled_end_date between (sysdate-30) and (sysdate+30))) 
        and  jta.resource_id = 10153'; 

       execute immediate  'grant select on apps.rv_task_number_view to apps'; 

     DBMS_OUTPUT.PUT_LINE(sqlerrm); 

     declare 

     CURSOR c2 is 

     SELECT ct.task_id,jtf_note_id, jnv.notes, 
       jnv.creation_date,jnv.last_update_date 
      FROM 
       jtf_notes_vl jnv, 
       csf_ct_tasks ct,apps.rv_task_number_view rvt 
      WHERE 
       jnv.source_object_code = 'TASK' 
       and ct.task_number = jnv.source_number 
       and ct.task_number = rvt.task_number 
       order by task_id, jtf_note_id; 

     begin 

     open c2; 

     fetch c2 bulk collect into notes_tab; 

     DBMS_OUTPUT.PUT_LINE(sqlerrm); 

     end; 

     execute immediate drop_view_sql; 

     DBMS_OUTPUT.PUT_LINE(sqlerrm); 

    END; 
+0

SQL에서 직접 명령을 입력 할 때 작동합니까? –

답변

6

당신은 사용하여 만든 TABLE/VIEW에 액세스하려고된다 동적 당신 SELECT 그것을 (정적 SQL가)

모든 PL/SQL 블록 고원은 실행 전에를 컴파일 같은 블록에 SQL. 컴파일 중 rv_task_number_view을 사용할 수 없습니다.

따라서 SELECT도 동적이어야합니다.

C2 SYS_REFCURSOR; 

    OPEN C2 FOR 

    'SELECT ct.task_id,jtf_note_id, jnv.notes, 
      jnv.creation_date,jnv.last_update_date 
     FROM 
      jtf_notes_vl jnv, 
      csf_ct_tasks ct,apps.rv_task_number_view rvt 
     WHERE 
      jnv.source_object_code = ''TASK'' 
      and ct.task_number = jnv.source_number 
      and ct.task_number = rvt.task_number 
      order by task_id, jtf_note_id';