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. D3 学习资源

    发现这个网站还是挺不错的:http://www.ourd3js.com/wordpress/

  2. Android--UI

    1.layout_width 属性和 layout_height 属性:Android中所有的控件都包含这两个属性,有三种可选值 match_parent, fill_parent, wrap_con ...

  3. 《理解 ES6》阅读整理:函数(Functions)(一)Default Parameter Values

    对于任何语言来说,函数都是一个重要的组成部分.在ES6以前,从JavaScript被创建以来,函数一直没有大的改动,留下了一堆的问题和很微妙的行为,导致在JavaScript中使用函数时很容易出现错误 ...

  4. Q114寒假作业之割绳子

    割绳子 TimeLimit:1000MS  MemoryLimit:10000K 64-bit integer IO format:%lld Problem Description 已知有n条绳子,每 ...

  5. SQLite主键自增需要设置为integer PRIMARY KEY

    按照正常的SQL语句,创建一个数据表,并设置主键是这样的语句: ), EventType )) 但使用这种办法,在SQLite中创建的的数据表,如果使用Insert语句插入记录,如下语句: INSER ...

  6. 让ASP.NET Web API支持text/plain内容协商

    ASP.NET Web API的内容协商(Content Negotiation)机制的理想情况是这样的:客户端在请求头的Accept字段中指定什么样的MIME类型,Web API服务端就返回对应的M ...

  7. Android中px和dip的区别

    在Android手机的诞生之初,由于Android系统是开源的,一开始便有众多的OEM厂商对Android手机进行深度定制,于是乎Android手机的皮肤和屏幕大小都变得百花齐放,这可苦逼了我们这群开 ...

  8. [ucgui] 对话框7——按钮触发与模式窗口

    >_<" 模式窗口,只有结束该窗口时才能聚焦到其他的窗口上~

  9. ajaxSubmit与ajaxFileUpload的空值

    ajaxSubmit发现正文无内容, ajaxFileUpload发现无上传内容, 嗯,你只是忘记了 html 中控件的 name 没有指定,这哥们不认 id 的.

  10. 用dom操作替代正则表达式

    在B/S结构客户端越来越“胖”的今天,作为一名全端程序员,您很可能会在前端操作html字符串,注意,是操作html字符串,不是操作当前页面的html. 举个例子,百度推出的在线HTML富文本编辑器Ue ...