簡體   English   中英

我的存儲過程的邏輯,循環游標

[英]Logic of my Stored Procedure, Loop cursors

讓我們看看我能否說清楚。 基本上我想做什么,我不知道這是怎么回事:在我的循環中,我怎樣才能迭代這兩個游標? 提取這些行后,我想在這2個表中插入該代碼段中所示的內容:

 CREATE OR REPLACE PROCEDURE add_docs

     IS

       dom_doc       DOM_DOCUMENT.DOMAIN_DOC%TYPE;
       type_doc_pk   TYPE_DOCS.TYPE_DOC_PK%TYPE;
       type_doc      TYPE_DOCS.TYPE_DOCUMENT%TYPE;
       user_code     TYPE_DOCS.USERCODE%TYPE;
       result_code   ECM_TIPO_DOCS.CODIGO_RESULTADO%TYPE;
       LS_LOCAL      INTEGER;
       l_id          INTEGER;

    cursor get_local
        is
        SELECT ls_local_pk FROM rt_local_ls

        rc_loc   c_loc%ROWTYPE;


cursor get_docs 
    is
    SELECT DOM_DOCUMENT.DOMAIN_DOC INTO dom_doc,
            TYPE_DOCS.TYPE_DOC_PK INTO type_doc_pk,
            TYPE_DOCS.TYPE_DOCUMENT INTO type_doc,
            TYPE_DOCS.USERCODE INTO user_code,
            TYPE_DOCS.CODE_RESULT INTO result_code
      FROM TYPE_DOCS 
        JOIN DOM_TDOC_SIS 
               ON TYPE_DOCS.TYPE_DOC_PK = DOM_TDOC_SIS.TYPE_DOC_PK
         JOIN DOM_DOCUMENT 
              ON DOM_TDOC_SIS.DOMAIN_DOC_PK = DOM_DOCUMENT.DOMAIN_DOC_PK
         WHERE DOM_DOCUMENT.DOMAIN_DOC_PK IN (2, 10) 
          AND NOT EXISTS
                 (
                  SELECT 1
                    FROM TP_DOC_MAP
                   WHERE  TP_DOC_MAP.LS_LOCAL_PK = LS_LOCAL        ----this is the variable that i have to iterate it's what i am getting from the other cursor
                          AND TP_DOC_MAP.LS_SYSTEM_PK = 3 
                         AND TP_DOC_MAP.ACTIVE = 1 
                         AND TP_DOC_MAP.CODE = TYPE_DOCS.TYPE_DOC_PK 
                );


BEGIN

    OPEN get_local;

    FETCH get_local INTO rc_loc

    IF get_local%FOUND
      THEN
           for md_local in get_local

           LOOP

           OPEN get_docs;

           FETCH get_docs INTO....


           ---now this is where i don't know how to do inside this loop i want to repeat the cursor get_docs  for each row in the cursor get_local
           --and then insert with the values fetched for each iteration


             INSERT INTO TP_DOC VALUES (  
              type_doc_pk,               
              type_doc,                     
              1,                    
              SYSDATE,             
              NULL)
              RETURNING id INTO l_id;


              INSERT INTO TP_DOC_MAP VALUES (
              l_id,
              LS_LOCAL,
              3,
              type_doc_pk,
              1,
              sysdate,
              NULL
              );


          END LOOP


      END IF;

END add_docs;

我怎樣才能做到這一點? 對於存在的每個LS_LOCAL,都必須運行sele

對於存在的每個LS_LOCAL,都必須使用LS_LOCAL變量在游標get_docs中運行select。

嵌入式游標FOR循環是一種選擇。 這是這樣的(我刪除了不相關的代碼部分以使其盡可能簡單):

begin
  for cur_l in (select ls_local_pk from rt_local_ls) 
  loop
    for cur_d in (select domain_doc, 
                         type_doc_pk, ...
                  from type_docs join dom_tdoc_sis ...
                 )
    loop
      insert into tp_doc ...
      insert into tp_doc_map ...
    end loop;
  end loop;
end;

暫無
暫無

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

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