Oracle存储过程,以逗号分隔字符串传参的处理
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存储过程,以逗号分隔字符串传参的处理的更多相关文章
- js中使用进行字符串传参
在js中拼接html标签传参时,如果方法参数是字符串需要加上引号,这里需要进行字符转义 <a href='javascript:addMenuUI("+"\"&qu ...
- oracle存储过程中拼接字符串及转义逗号
在ORACLE中,单引号有两个作用,一是字符串是由单引号引用,二是转义.单引号的使用是就近配对,即就近原则.而在单引号充当转义角色时相对不好理解 1.从第二个单引号开始被视为转义符,如果第二 ...
- BIEE应用存储过程并从前台传参
1. RPD操作 1.1修改连接池属性 在连接脚本添加SQL,这里选择在查询前执行 新建SQL脚本
- C++两种字符串传参构造函数
第一种: #include"iostream" #include"string" using namespace std; class Motor{ prote ...
- 关于js中onclick字符串传参问题
规则: 外变是“”,里面就是‘’外边是‘’,里边就是“” 示例: var a="111"; var html="<a onclick='selecthoods( ...
- 关于js中onclick字符串传参问题(html="")
规则: 外变是“”,里面就是‘’外边是‘’,里边就是“” 示例: var a="111"; var html="<a onclick='selecthoods( ...
- oracle存储过程中使用字符串拼接
1.使用拼接符号“||” v_sql := 'SELECT * FROM UserInfo WHERE ISDELETED = 0 AND ACCOUNT =''' || vAccount || '' ...
- SQL字符串传参
technicianCode in('${techList.collect { it.technicianCode }.join("','")}')
- ORACLE存储过程笔记1
ORACLE存储过程笔记1 一.基本语法(以及与informix的比较) create [or replace] procedure procedure_name (varible {IN|OUT ...
随机推荐
- D3 学习资源
发现这个网站还是挺不错的:http://www.ourd3js.com/wordpress/
- Android--UI
1.layout_width 属性和 layout_height 属性:Android中所有的控件都包含这两个属性,有三种可选值 match_parent, fill_parent, wrap_con ...
- 《理解 ES6》阅读整理:函数(Functions)(一)Default Parameter Values
对于任何语言来说,函数都是一个重要的组成部分.在ES6以前,从JavaScript被创建以来,函数一直没有大的改动,留下了一堆的问题和很微妙的行为,导致在JavaScript中使用函数时很容易出现错误 ...
- Q114寒假作业之割绳子
割绳子 TimeLimit:1000MS MemoryLimit:10000K 64-bit integer IO format:%lld Problem Description 已知有n条绳子,每 ...
- SQLite主键自增需要设置为integer PRIMARY KEY
按照正常的SQL语句,创建一个数据表,并设置主键是这样的语句: ), EventType )) 但使用这种办法,在SQLite中创建的的数据表,如果使用Insert语句插入记录,如下语句: INSER ...
- 让ASP.NET Web API支持text/plain内容协商
ASP.NET Web API的内容协商(Content Negotiation)机制的理想情况是这样的:客户端在请求头的Accept字段中指定什么样的MIME类型,Web API服务端就返回对应的M ...
- Android中px和dip的区别
在Android手机的诞生之初,由于Android系统是开源的,一开始便有众多的OEM厂商对Android手机进行深度定制,于是乎Android手机的皮肤和屏幕大小都变得百花齐放,这可苦逼了我们这群开 ...
- [ucgui] 对话框7——按钮触发与模式窗口
>_<" 模式窗口,只有结束该窗口时才能聚焦到其他的窗口上~
- ajaxSubmit与ajaxFileUpload的空值
ajaxSubmit发现正文无内容, ajaxFileUpload发现无上传内容, 嗯,你只是忘记了 html 中控件的 name 没有指定,这哥们不认 id 的.
- 用dom操作替代正则表达式
在B/S结构客户端越来越“胖”的今天,作为一名全端程序员,您很可能会在前端操作html字符串,注意,是操作html字符串,不是操作当前页面的html. 举个例子,百度推出的在线HTML富文本编辑器Ue ...