Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
CREATE PROCEDURE GET_EMPLOYEES(
DEP_ID INTEGER = NULL;
)
RETURNS( --список возвращаемых полей
EMPLOYEE VARCHAR(50);
DEPARTMENT VARCHAR(50);
) AS
BEGIN
FOR SELECT E.empinfo, D.depinfo
FROM T_DEPARTMENTS D
JOIN T_EMPLOYESS E ON E.id_department = D.id
WHERE :DEP_ID IS NULL OR D.ID = :DEP_ID INTO :EMPLOYEE, :DEPARTMENT DO
SUSPEND; -- Это волшебное слово - аналог pipe row
END
SELECT * FROM GET_EMPLOYEES()
insert и select @@SCOPE_IDENTITY проскочит транзакция с insert от другого пользователя?CREATE OR REPLACE
FUNCTION admin.virtual_date_table(p_num_rows in INTEGER, p_start_date IN DATE, p_end_date IN DATE)
RETURN virtual_date_table_type
IS
l_data virtual_date_table_type := virtual_date_table_type();
l_step NUMBER := 1;
BEGIN
l_step := (p_end_date - p_start_date) / p_num_rows;
FOR i IN 1 .. p_num_rows
LOOP
l_data.extend;
l_data(l_data.count) := p_start_date + i * l_step;
END LOOP;
RETURN l_data;
END;
/
select * from table(virtual_date_table(5, sysdate-5, sysdate))
Функции в Oracle, возвращающие таблицу