【发布时间】:2019-06-28 14:18:38
【问题描述】:
我正在尝试创建一个简单的 oracle 函数,该函数循环遍历一些记录,然后为每个记录插入记录..
CREATE OR REPLACE FUNCTION addNewRolesToAllGDP
return NUMBER
is dummy number;
BEGIN
FOR applicationId IN (SELECT APPID
FROM GRPAPPLICATIONINSTANCES
where GRPAPPID = (select GRPAPPID
from GRPAPPLICATIONS
where GRPNAME = 'DIGITAL_OFFICE')
AND APPID in (select APPID from APPLICATIONS where REGEXP_LIKE(APPNAME, '[[:digit:]]')))
LOOP
INSERT INTO ROLES (ROLID, ROLNAME, APPID)
VALUES (SEQROLES.nextval,
'INVENTORY_REQUESTER',
applicationId);
INSERT INTO ROLES (ROLID, ROLNAME, APPID)
VALUES (SEQROLES.nextval,
'INVENTORY_OWNER',
applicationId);
INSERT INTO ROLES (ROLID, ROLNAME, APPID)
VALUES (SEQROLES.nextval,
'INVENTORY_ADMIN',
applicationId);
END LOOP;
RETURN 1;
END;
alter function addNewRolesToAllGDP compile;
此语句在 USER_ERRORS 中为我提供以下信息:
PLS-00103:在预期以下之一时遇到符号“”:(返回压缩编译包装
【问题讨论】:
-
在
INSERT语句中,您应该使用applicationId.APPID而不是applicationId -
在dbfiddle中编译。
-
您可以尝试将其编译为独立函数,可能会抛出错误,因为它是包的一部分并且前面的行会导致错误。
-
例如,当上一行中的结束分号丢失时,Oracle在下一行显示错误。我不知道这里是否是这种情况,但是您的函数为我编译,正如您在 dbfiddle 中看到的那样,所以我猜该错误在其他地方。
-
我在我的 oracle 数据库中使用了相同的 @PonderStibbons dbfiddle,并且工作起来就像一个魅力