簡體   English   中英

收集多行並將值存儲在PL / SQL中

[英]Collect multiple rows and store values in PL/SQL

我有以下查詢:

DECLARE
  type INV_TASK_GLOBAL is varray(10) of NUMBER(20,0);
  type STUDY_CASE_GLOBAL is varray(10) of NUMBER(20,0);

BEGIN
  SELECT T_INVESTIGATIONTASK.ID, T_STUDYCASE.ID 
     into INV_TASK_GLOBAL, STUDY_CASE_GLOBAL 

  FROM T_VALIDATIONCARRIER 
      left join T_ESTIMATIONOBJECT on T_VALIDATIONCARRIER.IA_ESTIMATIONOBJECT_ID = T_ESTIMATIONOBJECT.ID
      left join T_INVESTIGATIONTASK on T_ESTIMATIONOBJECT.INVESTIGATIONTASK_ID = T_INVESTIGATIONTASK.ID
      left join T_STUDYCASE on T_INVESTIGATIONTASK.STUDYCASE_ID = T_STUDYCASE.ID

  WHERE T_VALIDATIONCARRIER.ESTIMATIONOBJECT_ID = 940;

  dbms_output.Put_line('INVESTIGATIONTASK_ID: ' || INV_TASK_GLOBAL);
  dbms_output.Put_line('STUDYCASE_ID: ' || STUDY_CASE_GLOBAL);
END;

編譯器告訴我,精確提取中指定的數字小於返回的行。 事實是我希望返回這些行。 具體來說:我想收集所有T_INVESTIGATIONTASK.IDT_STUDYCASE.ID (每行由WHERE子句捕獲的一個),將它們存儲到INV_TASK_GLOBALSTUDY_CASE_GLOBAL ,然后顯示所有返回的值(可能是分隔的用逗號)。
我將來可能會更改WHERE條件,但是無論如何我希望為兩個變量返回的最大元素數是10。
我知道我以錯誤的方式使用了varray數據類型:我需要某種循環和一個列表/數組數據類型來將所有返回的值存儲在INV_TASK_GLOBALSTUDY_CASE_GLOBAL變量中,然后在屏幕上打印該數組。 您是否知道如何實現?

經過一些測試,以下代碼解決了我的問題:

DECLARE
  type collection_id is table of NUMBER(20,0);

  INV_TASK_GLOBAL collection_id := collection_id(10);
  STUDY_CASE_GLOBAL collection_id := collection_id(10);

BEGIN
  SELECT T_INVESTIGATIONTASK.ID, T_STUDYCASE.ID 
    BULK COLLECT into INV_TASK_GLOBAL, STUDY_CASE_GLOBAL 
  FROM T_VALIDATIONCARRIER 
     left join T_ESTIMATIONOBJECT on T_VALIDATIONCARRIER.IA_ESTIMATIONOBJECT_ID = T_ESTIMATIONOBJECT.ID
     left join T_INVESTIGATIONTASK on T_ESTIMATIONOBJECT.INVESTIGATIONTASK_ID = T_INVESTIGATIONTASK.ID
     left join T_STUDYCASE on T_INVESTIGATIONTASK.STUDYCASE_ID = T_STUDYCASE.ID
  WHERE T_VALIDATIONCARRIER.ESTIMATIONOBJECT_ID = 940;

  FOR indx IN 1 .. INV_TASK_GLOBAL.COUNT
  LOOP
     dbms_output.Put_line('INVESTIGATIONTASK_ID: ' || INV_TASK_GLOBAL(indx));
  END LOOP;

  FOR indx IN 1 .. STUDY_CASE_GLOBAL.COUNT
  LOOP
      dbms_output.Put_line('STUDY_CASE_ID: ' || STUDY_CASE_GLOBAL(indx));
  END LOOP;
END;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM