重新登录会话依旧新增失败,
执行修改提交但是一直在加载中,回滚后执行直接跳出来“未找到驱动程序类 'com.intellij.database.run.ReservedCellValue (no security manager: RMI class loader disabled)'”
后来挨个添加又好了,怪了
后来换了新增sql语句就好了
获取到对应参数但是无法跳转到修改页面
好消息,通过改写登陆后存储过程,成功获取到应用程序项内容
create procedure LOGIN_SUCCESS_SAVE_USER_PRO
as
--登录验证后,保存用户基本信息与系统默认信息
v_userid number(20); --用户id(自增得到)
v_ext_userid number(20); --用户id(与中台一致)
v_name varchar2(20);--用户名
v_job_number varchar2(20);
v_mobile varchar2(15);
v_tenant_id varchar2(10);
v_err_msg VARCHAR2(2000);
v_roleid number(20);--角色id
v_rolename VARCHAR2(100);--角色名
v_usergroupid number(20);--用户组id
v_usergroupname VARCHAR2(100);--用户组名
begin
-- 用户基本信息
select USER_ID, --用户id(自增得到)
DING_USER_ID,--用户id(与中台一致)
NAME,
JOB_NUMBER,
MOBILE,
TENANT_ID
into
v_userid,v_ext_userid,v_name,v_job_number,v_mobile,v_tenant_id
from JA_USER
where DEL_FLAG = 0
and JOB_NUMBER = upper(V('USER_NAME'))
and TENANT_ID = 1;
-- 获取当前角色id名称以及用户组id名称
select ROLE_ID, ROLE_NAME, USER_GROUP_ID, NAME
into v_roleid,v_rolename,v_usergroupid,v_usergroupname
from (select r.ROLE_ID, r.ROLE_NAME, ug.USER_GROUP_ID, ug.NAME
from JA_USER_GROUP_ROLE ugr
left join JA_ROLE r on r.ROLE_ID = ugr.ROLE_ID and r.TENANT_ID = ugr.TENANT_ID
and r.DEL_FLAG = 0 and r.IS_ENABLE = 1
left join JA_USER_GROUP ug on ug.USER_GROUP_ID = ugr.USER_GROUP_ID and ug.TENANT_ID = ugr.TENANT_ID
and ug.DEL_FLAG = 0
left join JA_USER_GROUP_DETAILS ugd
on ugd.USER_GROUP_ID = ugr.USER_GROUP_ID and ugd.TENANT_ID = ugr.TENANT_ID
and ugd.DEL_FLAG = 0
where ugr.DEL_FLAG = 0
and ugr.TENANT_ID = v_tenant_id
and ugd.USER_ID = v_userid
and ugr.IS_ENABLE = 1
);
apex_custom_auth.set_user(v_name);
-- USER_PAGE_ID 设置用户登录成功后的主页
apex_util.set_session_state('USER_ID', v_userid);
apex_util.set_session_state('USER_TENANT', v_tenant_id);
apex_util.set_session_state('USER_NAME', v_name);
apex_util.set_session_state('USER_JOB_NUMBER', v_job_number);
apex_util.set_session_state('USER_MOBILE', v_mobile);
apex_util.set_session_state('APP_ENV', 'DEV');
apex_util.set_session_state('ROLE_ID', v_roleid);
apex_util.set_session_state('ROLE_NAME', v_rolename);
apex_util.set_session_state('USER_GROUP_ID', v_usergroupid);
apex_util.set_session_state('USER_GROUP_NAME', v_usergroupname);
apex_util.set_session_state('EXT_USER_ID', v_ext_userid);
exception
when others then
v_err_msg := sqlerrm || chr(13) || dbms_utility.format_error_backtrace;
JA_WRITE_LOG(JA_UTILS_PKG.GET_FN_NAME(), 'error', v_err_msg, -1, -1, V('APP_NAME') || ':' || V('APP_ID'));
end ;
/
坏消息是页面没有按角色权限划分
应该是权限判断函数的问题
将SQL单独拿出来运行
返回值大于0,上面写错了,是等于1.大于0,返回true
将参数改正确过来以后就可以展示了
在将两条查询语句拼接成一条查询语句时需要使用 UNION 函数
然后使用 UNION 是需要注意两条查询语句SELECT与FROM之间的字段名称是否数量一致并且顺序相同
原来是我缺了字段URL
页项状态:已插入
实际上什么也没变,是因为所有页面已经存在了吗?
重新改写了修改PL/SQL语句,可以修改了,点击修改后,用户工号和其他信息修改了,name回显还是原来的
-- p7 用户组新增用户(备份)
DECLARE
V_ERR_MSG NVARCHAR2(2000);
V_NAME_COUNT NUMBER(10) := 0;
V_ROW_COUNT NUMBER(10) := 0;
/**
* CREATE BY: DUL
* CREATE DATE: 2023/12/22 14:58
* MODIFY BY:
* MODIFY DATE:
* DESCRIBE: 新增用户组
*/
BEGIN
-- 验证是否存在重复名称
SELECT COUNT(USER_GROUP_ID)
INTO V_NAME_COUNT
FROM JA_USER_GROUP
WHERE NAME = :P7_NAME
AND DEL_FLAG = 0
AND TENANT_ID = :USER_TENANT;
IF V_NAME_COUNT > 0 THEN
V_ROW_COUNT := -2;
ELSE
-- 新增操作
INSERT INTO JA_USER_GROUP(NAME, REMARK, CREATED_BY,TENANT_ID) VALUES (:P7_NAME, :P7_REMARK, :USER_ID,:USER_TENANT);
V_ROW_COUNT := SQL%ROWCOUNT;
END IF;
APEX_UTIL.SET_SESSION_STATE('P7_ROW_COUNT', V_ROW_COUNT);
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
V_ERR_MSG := SQLERRM || CHR(13) || DBMS_UTILITY.FORMAT_ERROR_BACKTRACE;
--写入异常日志
JA_WRITE_LOG('P' || :APP_PAGE_ID || '-系统设置-用户组-新增', 'ERROR', V_ERR_MSG, :USER_ID, :USER_TENANT,:APP_NAME || ':' || :APP_ID);
APEX_UTIL.SET_SESSION_STATE('P7_ROW_COUNT', -1);
END ;
DECLARE
V_ERR_MSG NVARCHAR2(2000);
V_NAME_COUNT NUMBER(10) := 0;
V_ROW_COUNT NUMBER(10) := 0;
V_USER_COUNT NUMBER(10) := 0;
/**
* CREATE BY: DUL
* CREATE DATE: 2023/12/22 14:58
* MODIFY BY: wxx
* MODIFY DATE:2024/1/12 15:10
* DESCRIBE:p7 新增用户组管理
*/
BEGIN
-- 验证是否存在重复用户组名称
SELECT COUNT(USER_GROUP_ID)
INTO V_NAME_COUNT
FROM JA_USER_GROUP
WHERE NAME = :P7_NAME
AND DEL_FLAG = 0
AND TENANT_ID = :USER_TENANT;
IF V_NAME_COUNT > 0 THEN --名称已被使用
V_ROW_COUNT := -2;
ELSE --名称未被使用
-- 新增用户组操作
INSERT INTO JA_USER_GROUP(NAME, REMARK, CREATED_BY,TENANT_ID)
VALUES (:P7_NAME, :P7_REMARK, :USER_ID,:USER_TENANT);
V_ROW_COUNT := SQL%ROWCOUNT;
--校验用户是否重复
select count(JOB_NUMBER)
into v_user_count
from JA_USER
where TENANT_ID = :USER_TENANT
and DEL_FLAG = 0
and IS_LEAVE = 0
and EXT_USER_ID = JA_UTILS_PKG.SPLIT_STR(:P7_USER_ID,':');
if v_user_count = 0 then --不重复,执行新增
INSERT INTO JA_USER(NAME,MOBILE,JOB_NUMBER,PASSWORD,EMAIL,EXT_USER_ID,
UNION_ID,IS_LEAVE,REMARK,DEL_FLAG,TENANT_ID,CREATED_BY,CREATED_DATE)
SELECT NAME,MOBILE,JOB_NUMBER,JA_UTILS_PKG.ENCRYPT_ENC_AES256('Ja@123456'),
EMAIL,USER_ID,UNION_ID,IS_LEAVE,'',0, :USER_TENANT,:EXT_USER_ID, sysdate
FROM MPF.SHARE_BASIC_USER_V
where USER_ID = JA_UTILS_PKG.SPLIT_STR(:P7_USER_ID,':');
v_row_count := V_ROW_COUNT + SQL%ROWCOUNT;
else --用户重复
v_row_count := -3;
end if;
END IF;
APEX_UTIL.SET_SESSION_STATE('P7_ROW_COUNT', V_ROW_COUNT);
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
V_ERR_MSG := SQLERRM || CHR(13) || DBMS_UTILITY.FORMAT_ERROR_BACKTRACE;
--写入异常日志
JA_WRITE_LOG('P' || :APP_PAGE_ID || '-系统设置-用户组-新增', 'ERROR', V_ERR_MSG, :USER_ID, :USER_TENANT,:APP_NAME || ':' || :APP_ID);
APEX_UTIL.SET_SESSION_STATE('P7_ROW_COUNT', -1);
END ;
想展示数据记录内容,写了对应视图想展示,但是报错
修改后:
已解决:ORA-00932:数据类型不一致:应为-,但却获得CLOB_oracle_good_good_xiu-华为云开发者联盟 (csdn.net)
select distinct NAME || '-' || JOB_NUMBER, USER_ID
from MPF.SHARE_BASIC_USER_V A
where A.TENANT_ID = :USER_TENANT
and A.IS_LEAVE = 0
and not exists(
-- 去重处理
select 1
from JA_USER U
where U.DEL_FLAG = 0
and U.EXT_USER_ID = A.USER_ID
and U.TENANT_ID = A.TENANT_ID)
UNION ALL
SELECT A.NAME || '-' || A.JOB_NUMBER USER_NAME, A.USER_ID
FROM MPF.SHARE_BASIC_USER_V A
where USER_ID =(select DATA_VAL from JA_UTILS_PKG.SPLIT_STR(:P12_USER_GROUP_ID,','))
;
这样多选下拉列表就不会出现已有用户了。
select USER_ID
from MPF.SHARE_BASIC_USER_V
where USER_ID in (
select DATA_VAL
from JA_UTILS_PKG.SPLIT_STR(:P19_EXT_USER_ID, ',')
--选中的是冒号分隔(?APEX与浏览器的不同?)
)
好像知道是怎么回事了
系统设置
权限管理
create function is_have_permission(p_user_id in number, p_page_id in number, p_role_id in number,
p_tenant_id in number, p_type in varchar2)
return boolean
is
v_is_have number(10);
/**
* create by: wxx
* create date:2023/12/29 13:49
* modify by:
* modify date:
* describe:验证是否有页面展示权限
*/
begin
select count(p.PAGE_ID)
into v_is_have
from JA_USER_GROUP_ROLE UR
left join JA_ROLE_PERMISSION RP
on RP.ROLE_ID = UR.ROLE_ID and RP.TENANT_ID = UR.TENANT_ID and
RP.ROLE_ID = p_role_id
left join JA_PERMISSION p
on RP.PERMISSION_ID = P.PERMISSION_ID and p.TENANT_ID = RP.TENANT_ID
and p.DEL_FLAG = 0 and p.PERMISSION_TYPE = p_type
-- and p.TYPE = to_nchar(p_type)
left join JA_USER_GROUP_DETAILS GD
on GD.USER_GROUP_ID = UR.USER_GROUP_ID and GD.TENANT_ID = UR.TENANT_ID
and GD.DEL_FLAG = 0
left join JA_USER U on GD.USER_ID = U.USER_ID and U.TENANT_ID = UR.TENANT_ID
and U.DEL_FLAG = 0
where UR.TENANT_ID = p_tenant_id
and U.EXT_USER_ID = p_user_id
and p.PAGE_ID = p_page_id;
if v_is_have > 0 then
return true;
else
return false;
end if;
exception
when others then
return false;
end;
/