当前位置:首页 » 存储配置 » 存储过程字符串包含

存储过程字符串包含

发布时间: 2024-08-09 07:02:11

‘壹’ oracle数据库存储过程问题: 传入一个字符串(字符串格式如:“辣椒_食品,西红柿_食品,板鞋_

数组在Oracle里面使用不怎么方便,一般情况下很少使用,给你提个新方法实现你的功能。

设定数据库结构:

sql">CREATETABLEGOODS
(
PMVARCHAR2(20BYTE),--品名
FLVARCHAR2(20BYTE),--分类
RQDATE,--日期
BZVARCHAR2(50BYTE)--备注
);

存储过程如下:

CREATEORREPLACEprocerePROC_split(In_StringINVARCHAR2)is
v_split1VARCHAR2(10)DEFAULT',';
v_split2VARCHAR2(10)DEFAULT'_';
lenNUMBERDEFAULT0;
nStrVARCHAR2(200);
nStr1VARCHAR2(40);
nStr2VARCHAR2(20);
nStr3VARCHAR2(20);

placeNUMBER(10)default1;
begin
--输入串格式
--'辣椒_食品,西红柿_食品,板鞋_服饰,植物油_食品,领带_食品,'
len:=length(In_String);
IFlen<1THEN
RETURN;
ENDIF;
nStr:=In_String;
place:=INSTR(nStr,v_split1,1,1);
WHILE(place>0)
LOOP
nStr1:=SUBSTR(nStr,1,place-1);
nStr:=SUBSTR(nStr,place+1);

place:=INSTR(nStr1,v_split2,1,1);
IF(place>0)THEN
nStr2:=SUBSTR(nStr1,1,place-1);
nStr3:=SUBSTR(nStr1,place+1);
UPDATEgoodsSETrq=SYSDATEWHEREpm=nStr2ANDfl=nStr3;
//dbms_output.put_line('nStr2=['||nStr2||'],nStr3=['||nStr3||']');
ENDIF;
place:=INSTR(nStr,v_split1,1,1);
ENDLOOP;
COMMIT;
endPROC_split;
/

测试语句:

DECLARE
IN_STRINGVARCHAR2(32767);

BEGIN
IN_STRING:='辣椒_食品,西红柿_食品,板鞋_服饰,植物油_食品,领带_食品,';
PROC_SPLIT(IN_STRING);
COMMIT;
END;

我的调试输出是:

nStr2=[辣椒],nStr3=[食品]
nStr2=[西红柿],nStr3=[食品]
nStr2=[板鞋],nStr3=[服饰]
nStr2=[植物油],nStr3=[食品]
nStr2=[领带],nStr3=[食品]

这里面只用了两个函数:INSTR,SUBSTR.

‘贰’ Oracle中怎样用存储过程将一段字符串以逗号为界截取,并将得到的子串存到另一张表中

‘叁’ ORACLE 存储过程中的....是什么意思如下 ' || '''' || 'yyyy-mm-dd' || '''' || '

|| 是字符串连接符号
'''' 四个单引号,第1,4个单引号是正常的单引号,第2个单引号是转义字符,第3个单引号,编译后想保留的单引号。
最终目的 就是to_char(a.txntimestamp, 'yyyy-mm-dd') 这样的格式
这里头不是直接写sql文,而是用字符串拼接成新的sql字符串。

‘肆’ sql server 的存储过程字符串怎么拼接的

你的问题,问的不是很清楚,你是想问,如果将查询结果拼接为字符串吗?

有两种办法,如果是拼接为一个字符串,可以用变量,如:

DECLARE@NamesVARCHAR(MAX)
SELECT@Names=ISNULL(@Names+',','')+t.nameFROMsys.tablesASt
SELECT@Names
--返回:spt_fallback_db,spt_fallback_dev,spt_fallback_usg,spt_monitor,MSreplication_options

如果是用SQL中,可以用xml path如:

SELECTSTUFF(
(SELECT','+t.nameFROMsys.tablesAStFORXMLPATH(''))
,1,1,'')
--返回spt_fallback_db,spt_fallback_dev,spt_fallback_usg,spt_monitor,MSreplication_options

‘伍’ 存储过程 单引号

1) 可以用''''表示字符串中的一个单引号,
如:set @a = '''' + 'xxxx' + ''''
或者 set @account = '''xxxx'''

查询分析器中执行 Print ''''
结果为 '

2)用Char(39),上例变为:set @a = char(39) + 'xxxx' + char(39)

查询分析器中执行 Select char(39) + 'xxxx' + char(39)
结果为 'xxxx'

‘陆’ sqlserver数据库存储过程返回值只能是integer类型吗 不能返回字符串吗

楼主所说的这种是返回语句执行后影响的行数,是只有int型的,如楼上定义的,可以返回多种类型,还可以返回记录集

create procere usp_select
@where nvarchar(100)
as
begin
select * from mytable where condition=@where
end
return
go
--------------------------------------
存储过程

当 SET NOCOUNT 为 ON 时,不返回计数(表示受 Transact-SQL 语句影响的行数)。
当 SET NOCOUNT 为 OFF 时,返回计数。

如果存储过程中包含的一些语句并不返回许多实际的数据,则该设置由于大量减少了网络流量,因此可显着提高性能。

‘柒’ 关于存储过程的引号,头晕了

这个引号 主要是看你的参数具体的值
你上面所举的例子,在我看来可能是你理解错了,注意你的引号到底是加上什么位置

你这里的语句补全后,大致应该是这样的:
'xxxxx' + @N + 'zzzzz'
假设@N = 'yyyyy' 时,拼接后就是 xxxxxyyyyyzzzzz
3引号的情况:
'''xxxxx''' + @N + '''zzzzz'''
仍然让@N = 'yyyyy',拼接后就是 'xxxxx'yyyyy'zzzzz'

1个引号时,就是表示所辖内容为字符串
3个引号时,第一个表示字符串前引号,第二个是转义字符,第三个表示引号(字符内容)

热点内容
识地图算法 发布:2024-11-25 11:31:10 浏览:19
杨辉三角c语言程序一维数组 发布:2024-11-25 11:30:30 浏览:213
脚本一般用在什么地方 发布:2024-11-25 11:13:28 浏览:823
php上传xls 发布:2024-11-25 11:01:46 浏览:678
formphp 发布:2024-11-25 11:01:45 浏览:553
数据库主表 发布:2024-11-25 10:54:13 浏览:228
什么是cf脚本 发布:2024-11-25 10:51:48 浏览:920
存储台设计 发布:2024-11-25 10:40:04 浏览:668
如何查看自己电脑的所有配置 发布:2024-11-25 10:14:02 浏览:771
java编译器伪编译指什么 发布:2024-11-25 10:08:53 浏览:961