Oracle存储过程,经常会遇见传入的参数是逗号分隔。

处理需要3步:

第一步,创建Type类型

第二部,创建函数

第三部,创建存储过程

代码如下:

第一步:

create or replace type varTableType as table
of nvarchar2(40)

第二步:

create or replace function str2numList123( p_string in varchar2 ) return
varTableType
as
v_str long default p_string || ',';
v_n number;
v_data varTableType := varTableType();
begin
loop
v_n := to_number(instr( v_str, ',' ));
exit when (nvl(v_n,0) = 0);
v_data.extend;
v_data( v_data.count ) := ltrim(rtrim(substr(v_str,1,v_n-1)));
v_str := substr( v_str, v_n+1 );
end loop;
return v_data;
end;

第三步:

CREATE OR REPLACE PROCEDURE PROC_UPDATE_LIUYANG(VIDNUMERIC VARCHAR2,
VMARK VARCHAR2,
VKEEPTYPE VARCHAR2,
VMODIFYBY VARCHAR2, verrorint out int) AS
CURSOR CUR_KEEPTYPE IS
SELECT *
FROM THE (SELECT CAST(STR2NUMLIST123(VKEEPTYPE) AS VARTABLETYPE)
FROM DUAL);
OLD_KEEP_TYPE VARCHAR2(60);
VTEMPLATE_ID VARCHAR2(60);
VSMPSORT VARCHAR2(40);
VSAMPLENAME VARCHAR2(60);
VSPECIFACTION VARCHAR2(60);
VPRODUCTUNIT VARCHAR2(30);
VBATCHNAME VARCHAR2(60);
VCOUNT INT;
BEGIN
verrorint := 0;
SELECT T.CT_KEEP_TYPE
INTO OLD_KEEP_TYPE
FROM SAMPLE T
WHERE T.ID_NUMERIC = LPAD(VIDNUMERIC, 10);
SELECT S.TEMPLATE_ID
INTO VTEMPLATE_ID
FROM SAMPLE S
WHERE S.ID_NUMERIC = LPAD(VIDNUMERIC, 10);
SELECT S.CT_SMP_SORT
INTO VSMPSORT
FROM SAMPLE S
WHERE S.ID_NUMERIC = LPAD(VIDNUMERIC, 10);
SELECT S.SAMPLE_NAME
INTO VSAMPLENAME
FROM SAMPLE S
WHERE S.ID_NUMERIC = LPAD(VIDNUMERIC, 10);
SELECT S.CT_SMP_SPECIFICATION
INTO VSPECIFACTION
FROM SAMPLE S
WHERE S.ID_NUMERIC = LPAD(VIDNUMERIC, 10);
SELECT S.PRODUCT_UNIT
INTO VPRODUCTUNIT
FROM SAMPLE S
WHERE S.ID_NUMERIC = LPAD(VIDNUMERIC, 10);
SELECT S.BATCH_NAME
INTO VBATCHNAME
FROM SAMPLE S
WHERE S.ID_NUMERIC = LPAD(VIDNUMERIC, 10);
SELECT COUNT(0)
INTO VCOUNT
FROM INVENTORY_HEADER H
WHERE H.IDENTITY = VTEMPLATE_ID;
INSERT INTO SAMPLE_AUDIT_TRAILS
(SAMPLE, CREATE_BY, CREATE_ON, REASION, OPERATE_TYPE)
VALUES
(LPAD(VIDNUMERIC, 10),
VMODIFYBY,
SYSDATE,
VMARK,
'取样台账中对样品留样类型有之前的' || OLD_KEEP_TYPE || '调整为现在' || VKEEPTYPE);
IF VCOUNT = 0 THEN
INSERT INTO INVENTORY_HEADER
(IDENTITY, BASE_UNIT, DESCRIPTION)
VALUES
(VTEMPLATE_ID,
VPRODUCTUNIT,
VSAMPLENAME || VSPECIFACTION || VSMPSORT);
END IF;
DELETE FROM CT_KEEP_SAMPLE CKS
WHERE CKS.ID_NUMERIC = LPAD(VIDNUMERIC, 10);
DELETE FROM INVENTORY_ITEM II WHERE II.SAMPLE_ID = TRIM(VIDNUMERIC);
UPDATE SAMPLE S
SET S.CT_KEEP_TYPE = VKEEPTYPE
WHERE S.ID_NUMERIC = LPAD(VIDNUMERIC, 10);
FOR C_K IN CUR_KEEPTYPE LOOP
IF C_K.COLUMN_VALUE = '常规留样' THEN
INSERT INTO CT_KEEP_SAMPLE
(ID_NUMERIC, CT_K_TYPE)
VALUES
(LPAD(VIDNUMERIC, 10), C_K.COLUMN_VALUE);
ELSE
INSERT INTO INVENTORY_ITEM
(INVENTORY_ID, SAMPLE_ID, ITEM_TYPE, ITEM_CODE, description)
VALUES
(VTEMPLATE_ID,
TRIM(VIDNUMERIC),
C_K.COLUMN_VALUE,
VBATCHNAME,
C_K.COLUMN_VALUE);
END IF;
END LOOP;
commit;
EXCEPTION
WHEN OTHERS THEN
verrorint := 1;
ROLLBACK;
END PROC_UPDATE_LIUYANG;

Oracle存储过程,以逗号分隔字符串传参的处理的更多相关文章

  1. js中使用进行字符串传参

    在js中拼接html标签传参时,如果方法参数是字符串需要加上引号,这里需要进行字符转义 <a href='javascript:addMenuUI("+"\"&qu ...

  2. oracle存储过程中拼接字符串及转义逗号

     在ORACLE中,单引号有两个作用,一是字符串是由单引号引用,二是转义.单引号的使用是就近配对,即就近原则.而在单引号充当转义角色时相对不好理解     1.从第二个单引号开始被视为转义符,如果第二 ...

  3. BIEE应用存储过程并从前台传参

    1.     RPD操作 1.1修改连接池属性 在连接脚本添加SQL,这里选择在查询前执行 新建SQL脚本

  4. C++两种字符串传参构造函数

    第一种: #include"iostream" #include"string" using namespace std; class Motor{ prote ...

  5. 关于js中onclick字符串传参问题

    规则: 外变是“”,里面就是‘’外边是‘’,里边就是“”   示例: var a="111"; var html="<a onclick='selecthoods( ...

  6. 关于js中onclick字符串传参问题(html="")

    规则: 外变是“”,里面就是‘’外边是‘’,里边就是“”   示例: var a="111"; var html="<a onclick='selecthoods( ...

  7. oracle存储过程中使用字符串拼接

    1.使用拼接符号“||” v_sql := 'SELECT * FROM UserInfo WHERE ISDELETED = 0 AND ACCOUNT =''' || vAccount || '' ...

  8. SQL字符串传参

    technicianCode in('${techList.collect { it.technicianCode }.join("','")}')

  9. ORACLE存储过程笔记1

    ORACLE存储过程笔记1 一.基本语法(以及与informix的比较)   create [or replace] procedure procedure_name (varible {IN|OUT ...

随机推荐

  1. IPv6协议

    IPv4协议仅能提供约2.5亿个IP地址, 即使使用CIDR和NAT等技术进行扩展也无法满足日益增长的需要. IETF于1996年开始研究下一代IP协议IPv6, 并于1998年12月正式公布(RFC ...

  2. vim安装YouCompleteMe 插件

    要安装YouCompleteMe ,vim须支持python.看是否支持,可以在vim中:version 查看, 如果python前有+号,就是支持,减号就是不支持. 如果不支持,需要以编译安装方式重 ...

  3. JavaScript自定义事件

    很多DOM对象都有原生的事件支持,向div就有click.mouseover等事件,事件机制可以为类的设计带来很大的灵活性,相信.net程序员深有体会.随着web技术发展,使用JavaScript自定 ...

  4. 如何设置iframe高度自适应,在跨域的情况下能做到吗?

    在页面上使用iframe来动态加载页面内容是网页开发中比较常见的方法.在父页面中给定一个不带滚动条的iframe,然后对属性src指定一个可加载的页面,这样当父页面被访问的时候,子页面可以被自动加载. ...

  5. CentOS 7 service systemnctl

    在之前的版本中关闭防火墙等服务的命令是 service iptables stop /etc/init.d/iptables stop 在RHEL7中,其实没有这个服务 [root@rhel7 ~]# ...

  6. python数据采集与多线程效率分析

    以前一直使用PHP写爬虫,用Snoopy配合simple_html_dom用起来也挺好的,至少能够解决问题. PHP一直没有一个好用的多线程机制,虽然可以使用一些trick的手段来实现并行的效果(例如 ...

  7. T4模板TextTemplatingFileGenerator和TextTemplatingFilePreprocessor区别

    最近做一个项目,需要根据数据库表生成对应的实体类,于是想到了代码生成器.查阅了Nvelocity.T4.RazorEngine,对于一个微软技术派,觉得还是T4最亲切,使用简单,功能强大. 在尝试使用 ...

  8. atitit.atitit.hb many2one relate hibernate 多对一关联配置..

    atitit.atitit.hb many2one relate hibernate 多对一关联配置.. 1. 多对一单向 @ManyToOne 1 1. 其中@JoinColumn 注解 2 2.  ...

  9. paip.注册java程序为LINUX系统服务的总结。

    paip.注册java程序为LINUX系统服务的总结. ////////////////实现开机启动. 标准方法是按照/etc/init.d/下面的文件,修改一下:然后chkconfig xxx on ...

  10. SQL语句的基础

    注释语法:#注释语 一.T-SQL语句注意:1.语句写完后用"分号:"代表这一句结束2.列结束用逗号,最后一列写完不用写逗号3.符号一定是英文的 关键字:主键:primary ke ...