ORACLE存储过程in关键字使用
发表于:2025-01-21 作者:千家信息网编辑
千家信息网最后更新 2025年01月21日,一、问题描述:写了一个存储过程(只取了半截,能说明命题即可)CREATE OR REPLACE PROCEDURE "MONTH_RPT_CENTER_STU_DATA_PROC" (centerId
千家信息网最后更新 2025年01月21日ORACLE存储过程in关键字使用
一、问题描述:
写了一个存储过程(只取了半截,能说明命题即可)
CREATE OR REPLACE PROCEDURE "MONTH_RPT_CENTER_STU_DATA_PROC" (centerIds in VARCHAR2)AS mlockdate date;BEGIN/* 创建人:fengcl 创建时间:2018.1.23 更新人: 更新时间: 参数:中心编号(字符串类型) 功能:调用时,先从中间表删除指定中心的数据,再重新查询插入指定中心的数据到中间表*/--获取月报锁定日期select trunc(sysdate,'mm')+to_number( name) into mlockdate from mdm_dic_option where code='monthReportDate' and dic_code='system_set_001';if mlockdate=add_months(trunc(sysdate,'mm'),-1) and RPT_DATE 在调用这个存储过程的时候,如果参数centerIds只有一个数字,例如:1 可以正常执行,但是如果有多个数字的话,例如:1,2,3,4,5 就回报如下错误,
Procedure execution failed
ORA-01722: 无效数字
ORA-06512: 在 "CRM3TEST.MONTH_RPT_CENTER_STU_DATA_PROC", line 17
ORA-06512: 在 line 1
查询时间: 0.029s
二、解决过程
通过百度发现,存储过程把这个参数作为了一个整体来处理了,并不象普通的sql一样,把他作为一个数组来对待
三、解决方案
百度了一下,发现网上方案挺多,但是我选择了以下的方案,就是自定义一个函数,对这个参数进行处理。
步骤一、新建一个oracle变量:(普通的sql查询窗口既可以创建)
CREATE OR REPLACE TYPE strsplit_type IS TABLE OF VARCHAR2 (4000)步骤二、新建一个函数(这个函数是网上现成的,亲测可用)
CREATE OR REPLACE function strsplit(p_value varchar2, p_split varchar2 := ',')return strsplit_typepipelined is v_idx integer; v_str varchar2(500); v_strs_last varchar2(4000) := p_value;begin loop v_idx := instr(v_strs_last, p_split); exit when v_idx = 0; v_str := substr(v_strs_last, 1, v_idx - 1); v_strs_last := substr(v_strs_last, v_idx + 1); pipe row(v_str); end loop; pipe row(v_strs_last); return;end strsplit;步骤三、改造存储过程(将原先的 in (centerIds) 更改为: in (select * from table (strsplit(centerIds))) )
CREATE OR REPLACE PROCEDURE "MONTH_RPT_CENTER_STU_DATA_PROC" (centerIds in VARCHAR2)AS mlockdate date;BEGIN/* 创建人:fengcl 创建时间:2018.1.23 更新人: 更新时间: 参数:中心编号(字符串类型) 功能:调用时,先从中间表删除指定中心的数据,再重新查询插入指定中心的数据到中间表*/--获取月报锁定日期select trunc(sysdate,'mm')+to_number( name) into mlockdate from mdm_dic_option where code='monthReportDate' and dic_code='system_set_001';if mlockdate=add_months(trunc(sysdate,'mm'),-1) and RPT_DATE 到此,问题解决。
过程
参数
时间
存储
数据
更新
查询
函数
数字
方案
步骤
普通
从中
创建人
功能
字符
字符串
日期
月报
类型
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
xlsx可以放多少数据库
北京浪潮服务器虚拟化部署服务器
吉林软件开发计划
网络安全和网信
网络安全法律法规施行时间
唯衣网络技术有限公司
金三数据库
吴江区品牌网络技术优势
成都红牛网络技术有限公司
软件开发项目研究技术路线
公安网络安全是保密单位么
开发板数据库连接
我的世界怎么做其他服务器
河南pdu服务器专用电源批发
软件开发设计讲解
网络安全国企有哪些
互联网软件开发服务商
乐平市软件开发培训公司
数据库课程设计触发器怎么建
学前教育网络安全专业
小软件开发一般多少钱
杭州恒生软件开发实习生待遇
通用数据库发展史
远程服务器指令
金三数据库
网络安全模式联网错误711
关于数据库建设报奖名称
路由器转发信息数据库
云智互联网科技
广东省网络安全警察总队