存儲過程字元串包含
『壹』 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個引號時,第一個表示字元串前引號,第二個是轉義字元,第三個表示引號(字元內容)