Stored procedures 来自函数的PLSQL调用过程
我有一个从select查询调用的函数,下面是一个完美的函数。如果boolean=1将值插入登录表,我想调用下面的过程:Stored procedures 来自函数的PLSQL调用过程,stored-procedures,plsql,stored-functions,Stored Procedures,Plsql,Stored Functions,我有一个从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
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.
Oracle在错误消息中明确指出,问题出在哪里。试试这个:
create or replace PROCEDURE PROCDURELOGIN
IS
pragma autonomous_transaction;
BEGIN
INSERT INTO "SW3"."LOGIN" (LOGINID, MEMBERID)
VALUES (seqLogin.NEXTVAL, '1');
Commit;
END;
顺便说一句,我不喜欢这样的程序,如果可能的话,我建议不要使用它们。所以就这么说吧。问题是什么?请编辑您的问题并添加VIEWLOGIN视图的来源。谢谢,太好了。