Процедура вызова PLSQL из функции

136
22

У меня есть функция, которая вызывается из запроса select, ниже - функция, которая работает идеально. Я хочу вызвать процедуру ниже, если boolean = 1, которая вставляет значения в таблицу входа:

create or replace FUNCTION isLoggedIn(x IN VARCHAR2, y IN VARCHAR2)
RETURN number IS
boolean number(1) := 0;
BEGIN
SELECT count(*) into boolean
FROM VIEWLOGIN
WHERE username = x AND password = y;

IF boolean = 1 THEN
PROCDURELOGIN
RETURN boolean;
ELSE
RETURN 0;
END IF;
END;

Это моя процедура:

create or replace PROCEDURE PROCDURELOGIN
IS
BEGIN
INSERT INTO "SW3"."LOGIN" (LOGINID, MEMBERID)
VALUES (seqLogin.NEXTVAL, '1');
Commit;
END;

Create view VIEWLOGIN
SELECT firstname, surname, username, password
FROM member

Но я получаю ошибку при запуске запроса:

Error starting at line : 1 in command -
SELECT firstname, surname, isLoggedIn(username, password)
FROM VIEWLOGIN
WHERE username = 'fionawalshe' AND password = 'qwertyu8'
Error report -
SQL Error: ORA-14551: cannot perform a DML operation inside a query
ORA-06512: at "SW3.PROCDURELOGIN", line 4
ORA-06512: at "SW3.ISLOGGEDIN", line 10
14551. 00000 - "cannot perform a DML operation inside a query "
*Cause: DML operation like insert, update, delete or select-for-update
cannot be performed inside a query or under a PDML slave.
*Action: Ensure that the offending DML operation is not performed or
use an autonomous transaction to perform the DML operation within
the query or PDML slave.

спросил(а) 2021-01-19T15:57:47+03:00 6 месяцев, 1 неделя назад
1
Решение
78

Oracle четко говорит в сообщении об ошибке, что является проблемой. Попробуй это:

create or replace PROCEDURE PROCDURELOGIN
IS
pragma autonomous_transaction;
BEGIN
INSERT INTO "SW3"."LOGIN" (LOGINID, MEMBERID)
VALUES (seqLogin.NEXTVAL, '1');
Commit;
END;

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

ответил(а) 2021-01-19T15:57:47+03:00 6 месяцев, 1 неделя назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема