-----------------
----------------
IF INSTR(P_PAYER2,',')<>0 THEN
BEGIN
WHILE INSTR(P_PAYER2,',')<>0 LOOP
v_Spot:=INSTR(P_PAYER2,',',1,1);
IF in_p =1 THEN
V_PAYERS:=SUBSTR(P_PAYER2,1,v_Spot-1);
ELSE
V_PAYERS:=CONCAT(CONCAT(V_PAYERS,','),SUBSTR(P_PAYER2,1,v_Spot-1));
END IF;
in_p:=in_p+1;
P_PAYER2:=SUBSTR(P_PAYER2,INSTR(P_PAYER2,',')+1,length(P_PAYER2));
END LOOP;
V_PAYERS:=CONCAT(CONCAT(V_PAYERS,','),P_PAYER2);
END;
ELSE
V_PAYERS:=P_PAYER2;
END IF;
引用
存储过程里不能直接使用DDL语句,所以只能使用动态SQL语句来执行
--ON COMMIT DELETE ROWS 说明临时表是事务指定,每次提交后ORACLE将截断表(删除全部行)
--ON COMMIT PRESERVE ROWS 说明临时表是会话指定,当中断会话时ORACLE将截断表。
CREATE OR REPLACE PROCEDURE temptest
(p_searchDate IN DATE)
IS
v_count INT;
str varchar2(300);
BEGIN
v_count := 0;
str:='drop table SETT_DAILYTEST';
execute immediate str;
str:='CREATE GLOBAL TEMPORARY TABLE SETT_DAILYTEST (
NACCOUNTID NUMBER not null,
NSUBACCOUNTID NUMBER not null)
ON COMMIT PRESERVE ROWS';
execute immediate str; ----使用动态SQL语句来执行
str:='insert into SETT_DAILYTEST (select naccountid,nsubaccountid from sett_dailyaccountbalance)';
execute immediate str;
END temptest;
上面建立一个临时表的存储过程
下面是执行一些操作,向临时表写数据。
CREATE OR REPLACE PROCEDURE PR_DAILYCHECK
(
p_Date IN DATE,
p_Office IN INTEGER,
p_Currency IN INTEGER,
P_Check IN INTEGER,
p_countNum OUT INTEGER)
IS
v_count INT;
BEGIN
v_count := 0;
IF p_Date IS NULL THEN
dbms_output.put_line('日期不能为空');
ELSE
IF P_Check = 1 THEN
insert into SETT_DAILYTEST (select naccountid,nsubaccountid from sett_dailyaccountbalance
where dtdate = p_Date);
select
count(sd.naccountid) into v_count
from sett_subaccount ss,sett_account sa,sett_dailytest sd
where sd.naccountid = sa.id and sd.nsubaccountid = ss.id and sa.id = ss.naccountid
AND sa.nofficeid = p_Office AND sa.ncurrencyid = p_Currency
and rownum < 2;
COMMIT;
p_countNum := v_count;
dbms_output.put_line(p_countNum);
END IF;
IF P_Check = 2 THEN
insert into SETT_DAILYTEST (select naccountid,nsubaccountid from sett_dailyaccountbalance
where dtdate = p_Date);
select
count(sd.naccountid) into v_count
from sett_cfsubaccount ss,sett_account sa,sett_dailytest sd
where sd.naccountid = sa.id and sd.nsubaccountid = ss.id and sa.id = ss.naccountid
AND sa.nofficeid = p_Office AND sa.ncurrencyid = p_Currency
and rownum < 2;
COMMIT;
p_countNum := v_count;
dbms_output.put_line(p_countNum);
END IF;
END IF;
END PR_DAILYCHECK;
分享到:
相关推荐
本文将详细介绍如何在PL/SQL中实现一个字符串分割的功能,并通过一个具体的示例来展示其实现过程。 ### 标题解释:“plsql中的字符串分割” 这个标题明确指出文章将讨论的主题是“PL/SQL”中的字符串分割技术。PL/...
### SQL2000 字符串分割方法解析 在处理大量数据时,经常需要对包含逗号分隔值(CSV)格式的字符串进行拆分,以便于进一步的数据处理与分析。本文将详细介绍如何使用SQL Server 2000中的T-SQL语言实现字符串的拆分...
本文将详细介绍一个自定义的SQL函数`StringToTable`,该函数能够实现字符串分割的功能,并将结果存储在一个临时表中以便后续查询或处理。 #### 函数定义 ```sql CREATE FUNCTION StringToTable( @StringX varchar...
SQL 字符串分割函数实现多行数据转换 在数据库中,经常会遇到将一个字段中的特殊字符分割的字符串转换成多行数据的情况。这是一个常见的需求,但是网上提供的解决方案往往非常复杂,难以理解和实现。为了解决这个...
在上述代码中,首先创建了一个临时表 #tmp_table,然后将逗号分隔的字符串拆分成一个个 ID,并将其插入到临时表中。接着,使用临时表进行更新操作,最后删除临时表。 此外,还可以使用 SQL Server 的函数来实现将...
在MySQL中,处理字符串时,有时需要将一个字符串分割成多个部分,这通常在处理以特定字符分隔的数据时出现。本话题主要介绍如何利用存储过程来实现这一功能,涉及的关键知识点包括MySQL的内置函数以及存储过程的创建...
### SQL Server 字符串分割函数实现 在处理SQL Server中的数据时,经常需要对字符串进行分割操作以提取有用的信息。本文将详细介绍一个SQL Server自定义函数`f_split`,该函数能够有效地帮助用户完成字符串分割任务...
每次循环都会从当前字符串中提取出第一个逗号前的部分,并将其插入到临时表中,然后更新字符串为剩余部分。 ```sql WHILE CHARINDEX(',', @str) > 0 BEGIN INSERT INTO @T VALUES (@i, SUBSTRING(@str, 1, ...
例如,`string.IsNullOrEmpty()`用于检查字符串是否为空或null,`string.Concat()`用于连接多个字符串,`string.Split()`可以将字符串分割成子字符串数组。此外,正则表达式(Regex类)也是字符串处理中的利器,它...
函数内部的工作原理是使用`WHILE`循环,通过`CHARINDEX()`函数不断查找分隔符的位置,然后使用`LEFT()`函数提取分隔符前的部分作为结果插入到临时表`@temp`中。当找不到更多的分隔符时,循环结束。最后,如果源字符...
通过创建一个用户自定义函数(UDF),我们可以将一个包含逗号分隔值的字符串分解为一系列单独的项,存储在临时表中。以下是一个示例函数`f_split`,它接受两个参数:要分割的字符串`@c`和分隔符`@split`。函数使用`...
在Oracle数据库环境中,有时我们需要对字符串进行处理,例如将一个包含多个值的字符串分割成多个单独的元素。在描述中提到的传统方法可能涉及到创建临时表,这种方法在处理大量数据时效率较低。为了解决这个问题,...
- 循环体内包含了字符串截取、插入记录到临时表的操作。 5. **SQL Server 字符串函数**: - `CHARINDEX`:返回指定表达式在另一个表达式中首次出现的位置。 - `SUBSTRING`:返回指定字符串的一部分。 - `LEN`:...
接着,我们将截取的元素插入到临时表`@temptable`中,并更新原始字符串,直到找不到分隔符为止。 为了展示如何使用这个函数,我们可以运行以下示例查询: ```sql SELECT * FROM dbo.Split_StrByDelimiter('sun,...
下边的函数,实现了象数组一样去处理字符串。 一,用临时表作为数组 代码如下: create function f_split(@c varchar(2000),@split varchar(2)) returns @t table(col varchar(20)) as begin while(charindex(@split,@...
下面将具体介绍如何在Oracle中实现字符串分割。 #### 二、实现原理 为了实现Oracle中的字符串分割功能,我们可以利用以下几个关键点: 1. **`INSTR`函数**:该函数可以返回一个字符串在另一个字符串中首次出现的...
### 一、PL/SQL 文件与字符串分割技术 #### 1. PL/SQL 概述 - **定义**:PL/SQL(Procedural Language for SQL)是一种过程化语言,用于增强 Oracle 数据库的功能。它将 SQL 命令与传统的过程化编程语言特性相结合...