If statement 如何比较IF语句中的两个变量?
我正在尝试执行下面的查询 我试图使用IF语句进行比较。我希望我的结果喜欢v_anwen_id中没有的值,应该从v_anwen2_id中选择。因此,当v_anwen2_id不等于v_anwen_id时,执行insert语句。但是我没有得到v_anwen2_id不等于v_anwen_id的值。我希望它就像当a不等于b时,执行insert语句。但它仍然在插入b中的值。 我不确定是if语句还是游标有问题If statement 如何比较IF语句中的两个变量?,if-statement,plsql,compare,cursor,oracle12c,If Statement,Plsql,Compare,Cursor,Oracle12c,我正在尝试执行下面的查询 我试图使用IF语句进行比较。我希望我的结果喜欢v_anwen_id中没有的值,应该从v_anwen2_id中选择。因此,当v_anwen2_id不等于v_anwen_id时,执行insert语句。但是我没有得到v_anwen2_id不等于v_anwen_id的值。我希望它就像当a不等于b时,执行insert语句。但它仍然在插入b中的值。 我不确定是if语句还是游标有问题 IF v_anwen2_id <> v_anwen_id 下面是我的问题 SET s
IF v_anwen2_id <> v_anwen_id
下面是我的问题
SET serveroutput ON;
DECLARE
v_client_id NUMBER(38);
v_roles_id NUMBER(38);
v_old_roles NUMBER(38);
v_rights_id NUMBER(38);
v_user1_id NUMBER(38);
v_anwen_id NUMBER(38);
v_anwen2_id NUMBER(38);
v_client1_id NUMBER(38);
v_abtei NUMBER(38);
CURSOR c_abtei (var01 NUMBER) IS
SELECT abteil,client_id FROM ty_join_anwen_abteil WHERE anwen = var01;
CURSOR c_anwen (var02 NUMBER) IS
SELECT anwen FROM ty_join_anwen_abteil WHERE abteil = var02;
CURSOR c_roles (var03 NUMBER) IS
SELECT roles FROM ty_join_rolesn_righte WHERE right = var03;
CURSOR c_users (var04 NUMBER) IS
SELECT anwen FROM ty_join_anwen_rolesn WHERE roles = var04;
BEGIN
-- SELECT id INTO v_roles_id FROM ty_sd_roles WHERE description ='cod_Test';
SELECT id INTO v_rights_id FROM ty_sd_berightigung WHERE description ='failure_note';
-- INSERT INTO ty_join_rolesn_righte (role,right)
-- VALUES (v_roles_id,v_rights_id);
SELECT ID INTO v_user1_id FROM ty_sd_person WHERE email = 'jens@gmail.com';
OPEN c_abteil(v_user1_id);
LOOP
FETCH c_abteil INTO v_abteil,v_client1_id;
EXIT WHEN c_abteil%NOTFOUND;
OPEN c_anwen(v_abteil);
LOOP
FETCH c_anwen INTO v_anwen_id;
EXIT WHEN c_anwen%NOTFOUND;
-- INSERT INTO ty_join_anwen_rolesn (anwen,roles,client_id) VALUES (v_anwen_id,v_roles_id,v_client1_id);
END LOOP;
CLOSE c_anwen;
END LOOP;
CLOSE c_abteil;
OPEN c_roles(v_rights_id);
LOOP
FETCH c_roles INTO v_old_roles;
EXIT WHEN c_roles%NOTFOUND;
OPEN c_users(v_old_roles);
LOOP
FETCH c_users INTO v_anwen2_id;
EXIT WHEN c_users%NOTFOUND;
IF v_anwen2_id <> v_anwen_id
THEN
dbms_output.put_line(v_anwen2_id);
-- INSERT INTO ty_join_anwen_rolesn (anwen,roles,client_id) VALUES (v_anwen2_id,v_roles_id,v_client1_id);
END IF;
-- delete from ty_join_roles_right where roles = v_old_roles;
END LOOP;
CLOSE c_users;
END LOOP;
CLOSE c_roles;
END;
/
出于对您努力的尊重,我敢说,打开这么多游标并不是一个好的编码实践 可以通过在一个SQL中连接所有表来实现这一点。尝试在一个或两个SQL中整合尽可能多的逻辑 示例SQL供您参考-
Select a.abteil, a.client_id, c.anwen
From ty_join_anwen_abteil a, ty_sd_person b, ty_join_anwen_abteil c
Where a.anwen = b.id
And b.email = 'jens@gmail.com'
And c.abteil. = a.abteil;
Select c.anwen
From ty_join_rolesn_righte a, ty_sd_berightigung b, ty_join_anwen_rolesn c
Where b.description ='failure_note'
And a.right = b.id
And c.roles = a.id
你在前面的循环中绕了多少圈?在计算时,如果v_anwen_id变量的值恰好是嵌套的c_abtei/c_anwen循环中看到的最后一个值。您是否希望第二组嵌套循环忽略第一组中看到的所有ID,而不仅仅是最后一组?为什么要为此使用游标,或者实际上是PL/SQL;您可以使用两个简单得多的纯SQL插入来实现这一点。。。选择语句,不是吗?