我正在尝试为个人用户获取user_id
和group_id
。
我已经在循环中使用了用户的电子邮件,因为有很多用户在那里,但我需要循环逐个采取,目前它采取所有邮件ID:abinnaya.moorthy@abc.com,abinnaya.moorthy@def.com
。
因此,select查询不会返回任何值。
select查询应该通过从循环中获取电子邮件ID逐个返回值。
代码:
DECLARE
L_USERS varchar2(1000);
l_org_group_id varchar2(1000);
l_user_id varchar2(1000);
l_api_body varchar2(1000);
l_retry_after number;
l_status number;
L_NOT_PROVISIONED_USERS varchar2(1000);
l_success boolean;
l_user varchar2(1000);
BEGIN
FOR I IN
(Select REQUESTORS_NAME into L_USER
from Request
where Request_Status = 'Approved'
and Provisioning_Status is NULL )
LOOP
L_USER:= L_USER ||','||I.REQUESTORS_NAME;
select GROUP_ID INTO l_org_group_id
from WORKSPACE_GROUP
where LOWER(email)=(L_USER);
select USER_ID into l_user_id
from slackdatawarehouse.users
where lower(email) = lower(L_USER);
DBMS_OUTPUT.PUT_LINE(l_user_id);
if l_user_id is null then
l_not_provisioned_users := l_not_provisioned_users||','|| L_USER;
else
l_api_body := l_api_body || '{"value" :"'||l_user_id ||'"},';
l_users := l_users||','||l_user_id;
end if;
end loop;
end;
帮助我逐个获取用户的电子邮件,并在select查询中传递以获取groupid和用户ID。
答案 0 :(得分:0)
哦,伙计。我认为高级会员/主持人对这个“答案”不会太满意,但不可能将所有内容都放在600-characters long
评论中。没错,我可以将评论家缩短为“这就是sh * t”,但这对任何人都无济于事。虽然,“规则”将被遵守。所以,如果结果是这条消息被删除了,抱歉,大家。
你走了。
很难猜出你想得到什么结果。你谈到Apex
,但是 - 这段代码与它有什么关系? DBMS_OUTPUT
肯定不会在那里工作。
然后,在DECLARE
部分中,使用从未使用过的3 variables
- 删除它们。
光标FOR loop
是这样做的方法;不过,请从INTO clause
移除SELECT
,它不属于此处。
L_USER
是光标返回的所有REQUESTOR_NAME
的串联。这意味着你不应该在SELECT GROUP_ID
或SELECT USER_ID
语句中使用它,因为它肯定不会返回任何内容(可能某些用于第一次循环迭代,但没有任何内容其余的)。看起来好像你宁愿使用I.REQUESTORS_NAME
。此外,一旦你对它应用LOWER
函数,然后你没有 - 考虑使它统一。
为什么选择GROUP_ID
?你以后再也不用了。
L_NOT_PROVISIONED_USERS
是重复的巨大连接,因为您将先前的值与L_USER
的(另一个连接)连接起来。试着DBMS_OUTPUT
,你会看到。
你不关心那些可能由NO-DATA-FOUND
提出的SELECT
,正如我已经说过的那样 - 他们不会在后续循环迭代中返回任何内容。
最后,即使PL/SQL
成功完成,它也不会做任何事情。包括你在内的任何人都不会从中受益。
所以,这非常混乱......试着按照我写的内容,清楚地了解你想要得到的结果,一步一步,经常测试, - 希望 - 你我会得到一些有用的东西。
答案 1 :(得分:-1)
执行以下操作:
DECLARE
L_USERS VARCHAR2 (1000);
L_ORG_GROUP_ID VARCHAR2 (1000);
L_USER_ID VARCHAR2 (1000);
L_API_BODY VARCHAR2 (1000);
L_RETRY_AFTER NUMBER;
L_STATUS NUMBER;
L_NOT_PROVISIONED_USERS VARCHAR2 (1000);
L_SUCCESS BOOLEAN;
L_USER VARCHAR2 (1000);
CURSOR EMAIL_IDS
IS
SELECT REQUESTORS_NAME L_USER
FROM REQUEST
WHERE REQUEST_STATUS = 'Approved'
AND PROVISIONING_STATUS IS NULL;
BEGIN
FOR I IN EMAIL_IDS
LOOP
SELECT GROUP_ID
INTO L_ORG_GROUP_ID
FROM WORKSPACE_GROUP
WHERE LOWER (EMAIL) = LOWER (I.L_USER);
SELECT USER_ID
INTO L_USER_ID
FROM SLACKDATAWAREHOUSE.USERS
WHERE LOWER (EMAIL) = LOWER (I.L_USER);
DBMS_OUTPUT.PUT_LINE (L_USER_ID);
IF L_USER_ID IS NULL THEN
L_NOT_PROVISIONED_USERS :=
L_NOT_PROVISIONED_USERS || ',' || I.L_USER;
ELSE
L_API_BODY :=
L_API_BODY || '{"value" :"' || L_USER_ID || '"},';
L_USERS := L_USERS || ',' || L_USER_ID;
END IF;
END LOOP;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE (SQLERRM);
END;