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. pgsql 常用的命令

    pgsql 常用的命令:1. 创建数据库create database name with owner username; 2. 创建用户create role with createdb ;crea ...

  2. Android--Activity

    1.Activity:它是一种包含用户界面的组件,主要用于和用户进行交互: Activity的用法与步骤: 1)新建类MyActivity.java,继承Activity类: 2)创建布局文件myac ...

  3. Zabbix3.0 自动邮件报障

    Zabbix3.0以后,自带的邮件报警支持SSL验证了, 但是仍然没有发送复数个邮箱以及CC,BCC的功能, 因此,我们还是得用别的方法来实现邮件报障. 实现方法有很多种,我用的是PHPmailer. ...

  4. 基于OWIN WebAPI 使用OAuth授权服务【客户端模式(Client Credentials Grant)】

    适应范围 采用Client Credentials方式,即应用公钥.密钥方式获取Access Token,适用于任何类型应用,但通过它所获取的Access Token只能用于访问与用户无关的Open ...

  5. 无线客户端框架设计(5.1):将JSON映射为实体对象(iOS篇)

    iOS开发人员已经习惯于将JSON转换为字典或者数组来进行操作了,接下来我要做的事情,可能匪夷所思,但是,对WP和Android开发人员而言,他们更倾向于将JSON转换为实体对象进行操作. 我所设计的 ...

  6. [ThingWorx] Install PostgreSQL Issue

    ThingWorx application need PostgreSQL, I try configurate it in macbook. The first step is install Po ...

  7. duilib进阶教程 -- Container控件的bug (14)

    在<duilib进阶教程 -- TreeView控件的bug (9)>里,Alberl发现了两个bug,并解决了其中一个,现在教程已经接近尾声啦,所以Alberl就解决了另外一个bug. ...

  8. 套路!从Ruby 到 Cocoapods的发布

    前言: 现在的社会讲究的是套路,作为一名iOS工程师, 一言不合我要发套路了! 一.Ruby(ruby环境已经安装了的朋友可以跳过这一点) 准备: Mac OSX 安装xcode,它会帮你安装好 Un ...

  9. mac系统安装php redis扩展

    安装步骤如下: 1.下载redis扩展 下载地址:https://nodeload.github.com/nicolasff/phpredis/zip/master 2.下载下来是zip包 手动解压 ...

  10. Azure Stack如何解决混合云的种种挑战

    微软希望能够通过Azure Stack来帮助企业连接他们的私有云和公共云.但这仍然是一项进行中的工作. 大多数企业都不愿意将所有IT运营都放到公有云中.相反,他们希望可以灵活的在这两个共享的基础架构即 ...