Как вывести оператор Select внутри oracle Begin- End - PullRequest
0 голосов
/ 27 мая 2019

в основном я из MS SQL, но ситуация в том, что мне нужно создать запрос в Oracle, который имеет временную таблицу и внутри Begin - End я обновляю строку этой таблицы, и в конце я хочу, чтобы оператор Select выводил, что стол.

CREATE GLOBAL TEMPORARY TABLE temp_users ( 
   id number(5)  NOT NULL, 
   name varchar2(50)  NOT NULL, 
   surname varchar2(50)  NOT NULL ) ON COMMIT DELETE ROWS;

Declare  
dd varchar(400); 
Begin 




    INSERT INTO temp_users VALUES (1, 'John', 'Smith'); 
    INSERT INTO temp_users VALUES (2, 'Anne', 'Parker'); 
    INSERT INTO temp_users VALUES (3, 'Kate', 'Doe'); 
    INSERT INTO temp_users VALUES (1, 'John', 'Smith'); 
    INSERT INTO temp_users VALUES (2, 'Anne', 'Parker'); 
    INSERT INTO temp_users VALUES (3, 'Kate', 'Doe'); 



    // this code i have used to return the table
     execute immediate'SELECT * FROM temp_users'; 



     execute immediate 'drop table temp_users'; 

End;

1 Ответ

0 голосов
/ 27 мая 2019

Существует несколько опций, вы можете либо просто вернуть все, используя предложение bulk collect into, как в этом примере Oracle , и вернуть его наружу.

Или вы можете использовать предложение PIPELINED, в этом случае вы создаете курсор и выводите его наружу как:

FUNCTION some_fn
(
  in_1 IN NUMBER,
  in_2 IN VARCHAR2 DEFAULT NULL
)
RETURN some_table_type PIPELINED
[…]
FOR l_row IN c_some_cursor
      LOOP
        PIPE ROW(l_row);
 END LOOP;

В обоих случаях вы должны объявить табличную переменную TYPE как здесь . Ваша функция должна (потому что функция, вероятно, подходит вам лучше всего) вернуть тип табличной переменной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...