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. 精确运算--BigDecimal

    工具类 ,直接就可以使用,对于float和double的进行加减乘除长生的误差的解决办法. import java.math.BigDecimal; public class Arith { // 默 ...

  2. C#函数式编程之标准高阶函数

    何为高阶函数 大家可能对这个名词并不熟悉,但是这个名词所表达的事物却是我们经常使用到的.只要我们的函数的参数能够接收函数,或者函数能够返回函数,当然动态生成的也包括在内.那么我们就将这类函数叫做高阶函 ...

  3. solr与.net系列课程(六)solr定时增量索引与安全

     solr与.net系列课程(六)solr定时增量索引与安全 solr增量索引的方式,就是一个Http请求,但是这样的请求显然不能满足要求,我们需要的是一个自动的增量索引,solr官方提供了一个定时器 ...

  4. Oracle 创建主键自增表

    200 ? "200px" : this.width)!important;} --> 介绍 本篇文章主要介绍在oracle中如果创建自增长表,这里要用到序列. create ...

  5. [stm32][ucos] 1、基于ucos操作系统的LED闪烁、串口通信简单例程

    * 内容简述: 本例程操作系统采用ucos2.86a版本, 建立了5个任务            任务名                                             优先级 ...

  6. JS结构

    当前页面的JS结构如下: <script>    /* 这是立即执行的方法 */    (function () { /* 这是初始化表格 */        var init = fun ...

  7. We are doomed, and RPC does not help

    第一种死法:Big ball of Mud 架构里最常用的反面案例是 big ball of mud.很大程度上可以说打格子,把复杂的系统拆解成小格子是架构师最重要的工作.这个小格子有很多种名字,比如 ...

  8. 深入理解c++构造函数, 复制构造函数和赋值函数重载(operator=)

    注 以下代码编译及运行环境均为 Xcode 6.4, LLVM 6.1 with GNU++11 support, Mac OS X 10.10.2 调用时机 看例子 // // main.cpp / ...

  9. 无线客户端框架设计(3):基类的设计(iOS篇)

    本文代码:YoungHeart-Chapter-03.zip 没有基类的App都不是好App. 因为iOS使用的是mvc模式的开发模式,所以,业务逻辑基本都在每个页面相应的ViewController ...

  10. paip. uapi 过滤器的java php python 实现aop filter

    paip. uapi 过滤器的java php python 实现aop filter filter 是面向切面编程AOP.. 作者Attilax  艾龙,  EMAIL:1466519819@qq. ...