首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PLSQL从函数调用过程

PLSQL从函数调用过程
EN

Stack Overflow用户
提问于 2014-11-01 06:05:43
回答 1查看 150关注 0票数 0

我有一个从select查询调用的函数,下面是完美工作的函数。如果boolean =1,我想调用下面的过程将值插入login表:

代码语言:javascript
复制
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;

下面是我的步骤:

代码语言:javascript
复制
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

但是当我运行查询时,我得到了错误:

代码语言:javascript
复制
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.
EN

回答 1

Stack Overflow用户

发布于 2014-11-01 07:26:11

Oracle在错误消息中清楚地说明了什么是问题。试试这个:

代码语言:javascript
复制
create or replace PROCEDURE PROCDURELOGIN
IS
pragma autonomous_transaction; 
BEGIN
   INSERT INTO "SW3"."LOGIN" (LOGINID, MEMBERID) 
   VALUES (seqLogin.NEXTVAL, '1');
   Commit;
END;

顺便说一句,我不喜欢这样的过程,如果可能的话,建议不要使用它们。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26684088

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档