Требуется помощь для полного удаления временных таблиц оракула - Oracle - PL / SQL - PullRequest
0 голосов
/ 14 ноября 2018
    CREATE OR REPLACE PROCEDURE myDemoStoreProc
    (  
      inputVariable1 IN NUMBER DEFAULT 0 ,
      v_cursor OUT SYS_REFCURSOR
    )

    AS

    BEGIN

       INSERT INTO temptable1( 
        SELECT DISTINCT FROM TABLE1 
         WHERE  Col1 = 'logic1' );

       INSERT INTO temptable2( 
        SELECT col2 ,
               NVL(( SELECT col1
                     FROM temptable1 tt1
                      WHERE  sm.col1 = tt1.col1), 0) col3,
               col4
          FROM table2 sm);

       DELETE temptable2
        WHERE  col4 IN ( 'logic2','logic3' )
                 OR col4 IS NULL;

       IF NVL(inputVariable1 , 0) = 1 THEN
        DELETE temptable2
        WHERE  col1!= 'logic4';
       END IF;

       OPEN  v_cursor FOR
          SELECT col1,
                 col2,
                 col3,
                 col4
            FROM temptable2;
       DBMS_SQL.RETURN_RESULT(v_cursor) ;

    END;

Как вы можете видеть, что в этой хранимой процедуре используются две временные таблицы, как я могу удалить зависимость временных таблиц, можно переписать всю хранимую процедуру без временных таблиц

Мне не нужен полный код, возможно, псевдокод для настройки логики последнего удаления и If.

Я пытался сделать большой запрос, но это не очень удобно.

1 Ответ

0 голосов
/ 14 ноября 2018

Попробуйте запрос ниже и посмотрите, сможете ли вы достичь той же функциональности:

 IF NVL(inputVariable1 , 0) = 1 THEN 
  OPEN  v_cursor FOR
 select col1,col2,NVL(col1,0) col3,col4
 from TABLE1
 JOIN TABLE 2 
 ON TABLE2.col1=TABLE1.COL1
 AND (TABLE2.COL4 NOT IN ('logic2','logic3') OR TABLE2.COL4 IS NOT NULL)
 AND col1!= 'logic4';
 DBMS_SQL.RETURN_RESULT(v_cursor) ;
 END IF;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...