使用循环的 Oracle Apex 过程
Oracle Apex procedure using loop
我正在尝试为个人用户获取 user_id
和 group_id
。
我在循环中使用了用户的电子邮件,因为那里有很多用户,但我需要循环应该一个接一个,目前它采用所有邮件 ID,如:abinnaya.moorthy@abc.com,abinnaya.moorthy@def.com
.
因此,select 查询没有 returning 任何值。
select 查询应该 return 通过从循环中获取电子邮件 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。
哦,孩子。我想高级会员/版主不会对此 "answer" 太满意,但不可能将所有内容都放入 600-characters long
评论中。没错,我可以将评论缩短为 "this is sh*t",但这对任何人都没有帮助。不过,"rules" 会被遵守。所以,如果最后发现这条消息被删除了,对不起大家。
给你。
很难猜出您想得到什么结果。您谈论的是 Apex
,但是-这段代码与它有什么关系? DBMS_OUTPUT
肯定不会在那里工作。
然后,在 DECLARE
部分,您使用从未使用过的 3 variables
- 删除它们。
光标 FOR loop
是实现此目的的方法;但是,从 SELECT
中删除 INTO clause
,它不属于这里。
L_USER
是所有 REQUESTOR_NAME
s return 由游标编辑的串联。这意味着你不应该在 SELECT GROUP_ID
或 SELECT USER_ID
语句中使用它,因为它肯定不会 return 任何东西(也许 something 第一个循环迭代,但其余部分没有)。看起来您更愿意使用 I.REQUESTORS_NAME
。另外,一旦你对它应用 LOWER
函数,然后你就不用了 - 考虑让它统一。
你为什么selectGROUP_ID
?你以后再也不用它了。
L_NOT_PROVISIONED_USERS
是重复项的巨大串联,因为您将以前的值与 L_USER
(又一个串联)串联起来。试试DBMS_OUTPUT
吧,你就知道了。
您不关心那些 SELECT
可能会引发的可能 NO-DATA-FOUND
,因为 - 正如我已经说过的 - 他们不会 return后续循环迭代中的任何内容。
最后,即使 PL/SQL
成功完成,它也不会做任何事情。包括您在内的任何人都不会从中受益。
所以,这真是一团糟...尝试按照我写的内容,清楚地了解您想要得到的结果,去 step-by-step,经常测试并且 - 希望如此- 你会得到一些有用的东西。
按如下操作:
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;
我正在尝试为个人用户获取 user_id
和 group_id
。
我在循环中使用了用户的电子邮件,因为那里有很多用户,但我需要循环应该一个接一个,目前它采用所有邮件 ID,如:abinnaya.moorthy@abc.com,abinnaya.moorthy@def.com
.
因此,select 查询没有 returning 任何值。
select 查询应该 return 通过从循环中获取电子邮件 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。
哦,孩子。我想高级会员/版主不会对此 "answer" 太满意,但不可能将所有内容都放入 600-characters long
评论中。没错,我可以将评论缩短为 "this is sh*t",但这对任何人都没有帮助。不过,"rules" 会被遵守。所以,如果最后发现这条消息被删除了,对不起大家。
给你。
很难猜出您想得到什么结果。您谈论的是 Apex
,但是-这段代码与它有什么关系? DBMS_OUTPUT
肯定不会在那里工作。
然后,在 DECLARE
部分,您使用从未使用过的 3 variables
- 删除它们。
光标 FOR loop
是实现此目的的方法;但是,从 SELECT
中删除 INTO clause
,它不属于这里。
L_USER
是所有 REQUESTOR_NAME
s return 由游标编辑的串联。这意味着你不应该在 SELECT GROUP_ID
或 SELECT USER_ID
语句中使用它,因为它肯定不会 return 任何东西(也许 something 第一个循环迭代,但其余部分没有)。看起来您更愿意使用 I.REQUESTORS_NAME
。另外,一旦你对它应用 LOWER
函数,然后你就不用了 - 考虑让它统一。
你为什么selectGROUP_ID
?你以后再也不用它了。
L_NOT_PROVISIONED_USERS
是重复项的巨大串联,因为您将以前的值与 L_USER
(又一个串联)串联起来。试试DBMS_OUTPUT
吧,你就知道了。
您不关心那些 SELECT
可能会引发的可能 NO-DATA-FOUND
,因为 - 正如我已经说过的 - 他们不会 return后续循环迭代中的任何内容。
最后,即使 PL/SQL
成功完成,它也不会做任何事情。包括您在内的任何人都不会从中受益。
所以,这真是一团糟...尝试按照我写的内容,清楚地了解您想要得到的结果,去 step-by-step,经常测试并且 - 希望如此- 你会得到一些有用的东西。
按如下操作:
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;