【开发问题问题解决开发小技巧】通用资源管理01

【问题】新增应该输出提示但是出现乱码

查看会话发现是会话已结束,好家伙

重新登录会话依旧新增失败,

原来是提交的项没添加ORZ

【问题】会话保护

将会话保护改为“无限制”

执行修改提交但是一直在加载中,回滚后执行直接跳出来“未找到驱动程序类 'com.intellij.database.run.ReservedCellValue (no security manager: RMI class loader disabled)'”

后来挨个添加又好了,怪了

【问题】role_name is not defined   role_name未被定义

【问题解决】回到全局变量声明,定义了role_name

获取不到对应的项值

后来换了新增sql语句就好了

提示

  • 【问题】会话状态保护违规: 这可能是因为手动变更了受保护的页项 P3_OPERATION_TYPE。如果您不确定导致此错误的原因, 请与应用程序管理员联系, 以获取帮助。

控制台查看元素,发现是正常传参

获取到对应参数但是无法跳转到修改页面

【问题解决】试试看,将'受保护的值'关闭

果然可以了

【问题】权限控制加入后页面菜单展示失效

【问题原因】归根到底是判断函数判断的USER_ID,但是表中存的是USER_GROUP_ID

好消息,通过改写登陆后存储过程,成功获取到应用程序项内容

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

我好像知道是怎么个事儿了

将参数改正确过来以后就可以展示了

【问题】ORA-01789: 查询块具有不正确的结果列数

【问题原因】

在将两条查询语句拼接成一条查询语句时需要使用  UNION  函数

然后使用 UNION  是需要注意两条查询语句SELECTFROM之间的字段名称是否数量一致并且顺序相同 

原来是我缺了字段URL

更新前

页项状态:已插入

实际上什么也没变,是因为所有页面已经存在了吗?

重新改写了修改PL/SQL语句,可以修改了,点击修改后,用户工号和其他信息修改了,name回显还是原来的

2.0 用户组用户新增出错

-- 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的sql中的使用函数返回的值的字段没有对应的类型,只是一段文本。所以在使用该字段关联的时候就会报错。
【解决办法】使用to_char()方法将文本转成字符串类型即可。

修改前:

修改后:

已解决:ORA-00932:数据类型不一致:应为-,但却获得CLOB_oracle_good_good_xiu-华为云开发者联盟 (csdn.net)

【问题】出现修改时回显总是同样的内容且还不是对应的数据内容问题,后来在前辈的帮助下找到原因,该字段源来自SQL查询结果,且不同情况下对应不同选择,如图所示:

小结:

  • 当高速缓存清空时使用“仅当会话状态中的当前值为空时”
  • 当高速缓存不清空时使用“始终替换会话状态中的任何现有值”

【问题解决】解决了在用户组新增用户重复新增的问题,直接在新增前筛选用户做用户去重处理即可

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,','))
;

这样多选下拉列表就不会出现已有用户了。

【问题解决】解决新增时获取主表id 的问题,将新增生成的id存储在变量值中,需要的时候直接添加即可

returning TEMPLATE_ID into V_TEMPLATE_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;
/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/350113.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

js打地鼠

文章目录 1实现效果2代码实现 1实现效果 游戏难度:简单,一般,困难,噩梦(控制setInterval的time参数) 按钮功能:结束(可以通过修改gameScore的值来修改判定结束的分数)&am…

MySQL十部曲之四:MySQL中的数据类型

文章目录 前言概述数字类型数字类型语法数字类型字面量十六进制字面量位字面量布尔字面量 数字类型的属性超出范围和溢出处理 时间和日期类型时间和日期类型语法DATE、DATETIME和TIMESTAMP的异同TIMESTAMP和DATETIME的自动初始化和更新时间和日期字面量 字符串类型字符串类型语…

知识圣殿,智慧熔炉

知识圣殿,智慧熔炉 知识殿堂,巍然屹立 一座灵魂熔炉,号称图书馆 万卷书香盈架,智慧如星河汇聚 每一册书页,流淌着人类文明的血脉 钢笔与墨水交织诗篇 思想发芽,真理绽放光焰 浩瀚知识海洋,波涛…

tensorboard+seaborn 画RL论文图片

概要 tensorboard记录数据,并保存为fie_name.csv 文件加载file_name.csv文件, 处理加载得到数据,然后通过seaborn 显示出来。 1. tensorboard 通常来说,我们一般会用 tensorboard 去记录一些数据。 所以我们先介绍一下 tensorboard 一些注意事项 seti…

mybatis-plus常用使用方法

** mybaits-plus常用使用方法 ** 常用三层分别继承方法 1.1mapper层&#xff08;接口定义层&#xff09;可以用BaseMapper<> 例如&#xff1a; 1.2.里面常用的封装方法有 1.3常用方法介绍 【添加数据&#xff1a;&#xff08;增&#xff09;】int insert(T entity);…

css不规则的文本环绕

<!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>不规则的文本环绕</title><style>.b…

性能测试混合业务场景

已知从生产环境中统计出的接口比例如下所示&#xff1a; 接口接口比例接口140%接口220%接口330%接口410% 场景一&#xff1a;以上接口无上下依赖关系&#xff0c;设计出容量场景 接口1比例如下&#xff1a; 接口2比例如下&#xff1a; 接口3比例如下&#xff1a; 接口4比例如…

HFSS实战(三)——过孔via TDR仿真

文章目录 一、模型的处理二、TDR仿真2.1 修改求解模式2.2增加求解设置 三、查看仿真结果3.1 查看TDR结果3.2 查看S参数结果 四、结果分析4.1上升时间tr对仿真的影响 附&#xff1a;工程链接 在上一讲中&#xff0c;主要是通过观察S参数确定via的优化是否达到目标。但S参数只能看…

AI嵌入式K210项目(21)-AI模型文件导入至TF卡

文章目录 前言一、模型文件二、方法1三、方法2总结 前言 上一章节介绍了使用MicroPython进行开发&#xff0c;IDE中有很多的示例教程&#xff0c;相信大家已经迫不及待的想试试了&#xff0c;里面人目标检测的例程需要调用训练好的模型文件&#xff0c;这一章介绍如何将AI模型…

关于MySQL的基本查询(多表查询等)

1.创建student和score表 CREATE TABLE student ( id INT(10) NOT NULL UNIQUE PRIMARY KEY , name VARCHAR(20) NOT NULL , sex VARCHAR(4) , birth YEAR, department VARCHAR(20) , address VARCHAR(50) ); 创建score表。SQL代码如下&#xff1a; CREATE…

25考研政治备考计划

各位小伙伴大家好&#xff0c;今天给大家分享的是25考研政治复习备考计划。 政治没有基础阶段&#xff0c;直接就是强化&#xff0c;强化的内容也就是听课&#xff0c;刷题。 【时间安排】 *7-9月中 徐涛老师或腿姐强化课&#xff0c;推荐刷肖1000 *9月中-10月中 背腿姐的背…

BLIP-2: 基于冻结图像编码器和大型语言模型的语言-图像预训练引导

BLIP-2: 基于冻结图像编码器和大型语言模型的语言-图像预训练引导 项目地址BLIP-2的背景与意义BLIP-2的安装与演示BLIP-2模型库图像到文本生成示例特征提取示例图像-文本匹配示例性能评估与训练引用BLIP-2Hugging Face集成 在语言-图像预训练领域&#xff0c;BLIP-2的出现标志着…

Mac M1 Parallels CentOS7.9 Deploy 禅道

禅道官网下载地址: https://www.zentao.net/download/max4.10-83276.html 一、官网下载 二、解压安装 将下载好的包传至CentOS7.9虚拟机 zhinian192 ~ % scp Downloads/ZenTaoPMS-max4.10-zbox_arm64.tar.gz root10.211.55.36:~ ZenTaoPMS-max4.10-zbox_arm64.tar.gz …

LabVIEW振动信号分析

LabVIEW振动信号分析 介绍如何使用LabVIEW软件实现希尔伯特-黄变换&#xff08;Hilbert-Huang Transform, HHT&#xff09;&#xff0c;并将其应用于振动信号分析。HHT是一种用于分析非线性、非平稳信号的强大工具&#xff0c;特别适用于旋转机械等复杂系统的振动分析。开发了…

VR漫游:赋予用户720度身临其境的沉浸式体验

如今&#xff0c;VR全景技术已经成为了千行百业中不可或缺的一部分&#xff0c;随着用户对交互式、沉浸式体验的需求不断加强&#xff0c;VR漫游逐渐取代了传统图片&#xff0c;为人们带来了流畅且完整的VR宣传观看体验。 VR实景漫游真实的展示了现场环境&#xff0c;不仅增加了…

【yaml 文件使用】pytest+request 框架中 yaml 配置文件使用

又来进步一点点~~ 背景&#xff1a;最近在学习pytestrequest框架写接口测试自动化&#xff0c;使用yaml文件配置更方便管理用例中的数据&#xff0c;这样更方便 yaml 介绍&#xff1a; 什么是 yaml 文件&#xff1a;YAML 是 “YAML Ain’t a Markup Language”&#xff08;Y…

Sublime的安装及汉化

sublime安装 官网sublime 点击Windows 下载参考&#xff1a;傻瓜式下载 sublime汉化 1&#xff09;安装 Sublime Text 4 成功后&#xff0c;点击菜单 【Tools】 -> 【Install Package Control】&#xff1b; 注意&#xff1a;安装包控件需要等待一会&#xff0c;点击可…

【mongoDB】文档 CRUD

目录 1.插入文档 批量插入&#xff1a; 2.查询文档 3.更新文档 4.删除文档 deleteOne() deleteMany() findOneAndDelete() 1.插入文档 可以使用 insert () 方法或者 save() 方法向集合中插入文档 语法如下&#xff1a; db.collection_name.insert(document) collectio…

springboot+vue的大学生就业招聘系统(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目背景…

【GitHub项目推荐--不错的Flutter项目】【转载】

01 可定制的图表库 FL Chart是一个高度可定制的 Flutter 图表库&#xff0c;支持折线图、条形图、饼图、散点图和雷达图 。 项目地址&#xff1a;https://github.com/imaNNeoFighT/fl_chart LineChart BarChart PieChart Sample1 Sample2 Sample3 …