存储过程字符串包含
‘壹’ 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个引号时,第一个表示字符串前引号,第二个是转义字符,第三个表示引号(字符内容)