CREATE OR REPLACE PROCEDURE P_Utl_Split
(
iCity VARCHAR2, -- 选择的地市,格式:1|深圳~2|广东~3|广州
oCityIds OUT VARCHAR2 -- 地市id, 格式:(1,2)
)
AS
eInPut EXCEPTION; --输入查询参数异常
ERRCODE NUMBER; --错误码
ERRMSG VARCHAR2(200); --错误信息
-- 定义游标,查询所有城市信息
CURSOR C_City IS
SELECT ID,NAME FROM city;
v_CityId NUMBER(4); -- 临时保存地市ID
v_CityName VARCHAR2(100); -- 临时保存地市名称
v_tmp_CityID VARCHAR2(100); -- 中间变量,保存拼接的地市ID
v_City VARCHAR2(2000);
v_pos1 INT;
v_pos2 INT;
v_time INT;
v_char VARCHAR2(100);
v_loc1 INT;
v_loc2 INT;
BEGIN
-- 空处理
IF (iCity IS NULL) THEN
RAISE eInPut;
END IF;
-- 选择了所有
IF iCity = '0|所有' THEN
OPEN C_City;
LOOP
FETCH C_City INTO
v_CityId,v_CityName;
EXIT WHEN C_City%NOTFOUND;
v_tmp_CityID:=v_tmp_CityID||v_CityId||','; -- 拼接地市ID:1,2,
END LOOP;
v_tmp_CityID:=substr(v_tmp_CityID,1,length(v_tmp_CityID)-1); -- 截掉最后一个逗号
oCityIds:='('||v_tmp_CityID||')'; -- 拼装最后结果
-- 需要拆分
ELSE
-- 初始化变量
v_City := iCity;
v_City := '~' || v_City || '~';
v_time := 1;
v_pos1 := 1;
v_pos2 := 1;
WHILE v_pos2 <> 0 LOOP--拆分组
v_pos1 := v_pos2;
v_pos2 := INSTR(v_City, '~', v_time + 1, 1);
IF v_pos2 - v_pos1 - 1 > 0 THEN
v_char := SUBSTR(v_City, v_pos1+1, v_pos2-v_pos1-1);
v_loc1 := INSTR(v_char,'|',1);
v_loc2 := INSTR(v_char || '|','|',v_loc1+1);
v_CityId:=SUBSTR(v_char,1,v_loc1 - 1);
v_CityName:=SUBSTR(v_char,v_loc1+1,v_loc2-v_loc1 -1);
v_tmp_CityID:=v_tmp_CityID||v_CityId||','; -- 拼接地市ID:1,2,
END IF;
v_time := v_pos2 + 1;
END LOOP;
v_tmp_CityID:=substr(v_tmp_CityID,1,length(v_tmp_CityID)-1); -- 截掉最后一个逗号
oCityIds:='('||v_tmp_CityID||')'; -- 拼装最后结果
END IF;
EXCEPTION
WHEN eInPut THEN
INSERT INTO t_ErrLog(LogDate,LogID,ExceptionObjName,ErrorCode,ErrorMsg)
VALUES(SYSDATE,5,'P_Utl_Split',006,'参数输入错误');
commit;
WHEN OTHERS THEN
ROLLBACK;
ERRCODE := SQLCODE;
ERRMSG := SUBSTR(SQLERRM,1,200);
INSERT INTO t_ErrLog(LogDate,LogID,ExceptionObjName,ErrorCode,ErrorMsg)
VALUES(SYSDATE,2,'P_Utl_Split',ERRCODE,ERRMSG);
COMMIT;
END P_Utl_Split;
相关推荐
在MySQL中,使用存储过程可以提高应用程序性能、减少网络流量、增强代码的重用性以及实现更复杂的业务逻辑。 #### 二、创建存储过程 在MySQL中,创建存储过程的基本语法如下: ```sql DELIMITER $$ CREATE ...
例如,一个简单的存储过程可能用于根据产品ID获取产品信息。 ```sql CREATE PROCEDURE GetProduct @ID INT AS BEGIN SELECT ProductID, ProductName, CategoryID, Quantity FROM Products WHERE ProductID = @ID ...
可能包含与表操作相关的存储过程代码。 9. `9-for.sql`: FOR循环在PL/SQL中常用于遍历集合或索引,如游标。这个文件可能涉及了如何在存储过程中使用FOR循环处理游标或其他迭代场景。 10. `10-cursor.sql`: 游标是...
描述部分简述了此存储过程的特点:“Oracle通用数据库存储过程代码——高效分页存储过程,只需简单的修改即可使用,方便易懂!”这说明该存储过程设计简单、易于理解,并且用户可以根据实际需求进行少量的定制化修改...
存储过程是数据库中预编译的SQL语句集合,它是一种可重复使用的代码段,用于执行特定数据库操作。在SQL Server中,存储过程分为不同种类,包括用户定义的存储过程、系统存储过程、临时存储过程以及扩展存储过程。 1...
《用友R9知识存储过程详解》 ...这只是一个简单的示例,实际的用友R9系统中可能包含更复杂的存储过程,处理更多样化的财务业务需求。理解并掌握这些存储过程的运作机制,对于系统维护和优化有着至关重要的意义。
【C# WinApp存储过程代码生成器】是一个基于.NET框架的桌面应用程序,专门设计用于帮助开发者快速便捷地生成与数据库中的存储过程对应的C#代码。这个小工具极大地提高了开发效率,减少了手动编写代码的工作量,使得...
下面是一个简单的分页存储过程示例: ```sql CREATE PROCEDURE [dbo].[usp_GetPagedData] @TableName NVARCHAR(128), @PageSize INT, @CurrentPage INT AS BEGIN DECLARE @StartIndex INT = (@CurrentPage - 1)...
本篇文章将深入探讨MySQL中的分页存储过程及其代码调用方法。 首先,理解分页的基本概念。在网页或应用程序中,我们通常会看到“上一页”、“下一页”这样的导航,这就是分页的表现形式。分页查询通过设置每页显示...
- 复用性:存储过程可以多次调用,避免了重复编写相同的SQL代码。 - 安全性:可以设置权限,限制非授权用户对存储过程的访问。 - 事务管理:适合结合事务处理,确保数据的一致性和完整性。 3. 存储过程的分类: ...
Oracle存储过程是数据库管理系统中的一种重要特性,它允许开发者编写包含一系列SQL语句和PL/SQL块的可重用代码段。在这个“Oracle的一个简单存储过程实例”中,我们可以看到如何在Oracle环境中创建、调用和管理存储...
通过以上两个示例,我们可以看到使用Java调用SQL Server数据库中的存储过程是比较简单的。关键在于正确地建立数据库连接、准备`CallableStatement`以及处理可能的异常情况。在实际应用中,还需要注意资源的管理和...
本资源包含与"ORACLE中触发器和存储过程介绍"相关的代码示例,帮助用户深入理解和实践这两种技术。 首先,我们来详细探讨触发器。触发器是一种数据库对象,它会在特定的数据库事件(如INSERT、UPDATE、DELETE)发生...
其次,关于**存储过程的创建**,在提供的描述中,我们看到了一个简单的存储过程示例。在SQL Server中,创建存储过程的语法如下: ```sql CREATE PROCEDURE proc_name AS BEGIN -- 存储过程的具体语句 INSERT INTO...
在这个例子中,我们展示了如何调用一个简单的存储过程并打印返回的员工信息。如果你的存储过程更复杂,可能需要处理更多的输入/输出参数和结果集。在实际开发中,注意处理异常和关闭数据库连接,以保持良好的编程...
例如,以下是一个简单的存储过程,用于计算两个数字的和: ```sql CREATE PROCEDURE addNumbers(IN num1 INT, IN num2 INT, OUT result INT) BEGIN SET result = num1 + num2; END; ``` 这里的`IN`参数用于传递...
例如,我们可以创建一个简单的存储过程,接受一个整数参数并返回它的平方: ```sql CREATE PROCEDURE square(IN num INT, OUT result INT) BEGIN SET result = num * num; END; ``` 3. **调用存储过程** ...
例如,创建一个简单的存储过程来查询指定ID的用户信息: ```sql CREATE PROCEDURE GetUserInfo @UserID INT AS BEGIN SELECT * FROM Users WHERE UserID = @UserID END ``` 此存储过程接受一个名为`UserID`的参数...
内容概要:简单的C# winform调用存储过程实例,创建存储过程入参,通过SqlConnection对象和SqlCommand对象调用存储过程,获取存储过程的出参并显示出来,详细代码注释,希望对用到C#调用存储过程的小伙伴有帮助 ...
3. **易于维护**:存储过程封装了复杂的逻辑处理,使得维护变得更加简单,只需修改存储过程而无需修改应用程序代码。 4. **安全性强**:可以通过权限设置限制用户对特定存储过程的访问,增强了系统的安全性。 5. **...