2014-10-31 3 views
0

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

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. 
+1

Итак, позвоните. В чем вопрос? – OldProgrammer

+0

Измените свой вопрос и добавьте источник для просмотра VIEWLOGIN. Благодарю. –

ответ

2

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

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

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

+0

Отлично, что отсортировал его. –

Смежные вопросы