當前位置:首頁 » 編程語言 » oraclesql拼接字元

oraclesql拼接字元

發布時間: 2024-07-30 01:52:06

『壹』 oracle 存儲過程 求助

詳見文本中「--註:」後的注釋
create or replace procere test_cjsql_z( /*in_sqlnr in clob,*/out_code in out varchar2,
out_mess in out varchar2) Authid Current_User IS
--註:創建存儲過程test_cjsql_z,輸入輸出型參數out_code、out_mess
PRAGMA AUTONOMOUS_TRANSACTION; --註:自助事務處理
in_sqlnr clob;--註:聲明clob類型變數
V_LENGTH NUMBER;--註:number是數值類型變數
V_NUMBER1 NUMBER;
V_NUMBER2 NUMBER;
V_BSF NUMBER; --標識附,標識SQL語句中最後CHR(10)的位置。
V_STEP NUMBER;
buffer VARCHAR2(4000);--註:varchar2(xx)是字元串類型變數,xx是長度
V_TEMPSQL VARCHAR2(4000);
V_LINESQL VARCHAR2(4000);
V_SQLERR VARCHAR2(255);
jb_err exception;--註:聲明例外對象
amount INT;
--v_sql VARCHAR2(4000);
BEGIN
select sqlnr into in_sqlnr from t_sql where sql_id = '100475'; --取clob 欄位
V_LENGTH := to_number(ceil(dbms_lob.getlength(in_sqlnr) / 2000)); --取lob長度
for i in 1 .. V_LENGTH loop
--循環次數
amount := 2000;--註:以2000為單位
dbms_lob.read(in_sqlnr, amount, (i - 1) * 2000 + 1, buffer); --提取lob
buffer := replace(buffer, chr(13), ''); --替換 回車
buffer := V_TEMPSQL || buffer;--註:拼接字元串
V_BSF := INSTR(buffer, CHR(10), -1, 1); --最後 換行 的位置
V_TEMPSQL := SUBSTR(buffer, V_BSF, length(buffer) - V_BSF + 1);--註:從buffer中截取字元串
buffer := SUBSTR(buffer, 1, V_BSF);
V_STEP := 1;
loop
V_NUMBER1 := INSTR(buffer, CHR(10), 1, V_STEP);
V_NUMBER2 := INSTR(buffer, CHR(10), 1, V_STEP + 1);
V_LINESQL := RTRIM(REPLACE(SUBSTR(buffer,
V_NUMBER1,
V_NUMBER2 - V_NUMBER1 + 1),
CHR(10),
''),
';');
EXIT WHEN V_LINESQL IS NULL; --V_LINESQL 為 null 跳出循環
BEGIN
-- v_sql := 'insert into hx_sjmx.test_zh values (V_LINESQL)';
-- EXECUTE IMMEDIATE v_sql;
EXECUTE IMMEDIATE V_LINESQL; --執行 V_LINESQL
EXCEPTION --註:FOR循環中的例外處理部分
WHEN OTHERS THEN
V_SQLERR := SUBSTR(SQLERRM, 1, 255); --例外
out_code := '2';--註:輸出返回代碼
out_mess := substrb(V_SQLERR || '-' || V_LINESQL, 1, 2000);--註:輸出返迴文本
raise jb_err;--註:拋出例外
END;
V_STEP := V_STEP + 1;
end loop;
end loop;
out_code := '1';--註:輸出返回代碼
out_mess := '執行成功!';--註:輸出返迴文本
commit;
exception--註:例外處理
when jb_err then--註:當出現自定義例外時
rollback;--註:回滾
when others then--註:其它情況
V_SQLERR := SUBSTR(SQLERRM, 1, 255);
out_code := '3';--註:輸出返回代碼
out_mess := V_SQLERR;--註:輸出返迴文本
rollback;--註:回滾
END test_cjsql_z;

『貳』 SQL怎麼拼接字元串

不同的資料庫,相應的字元串拼接方式不同,通過對比加深一下記憶。

一、MySQL字元串拼接

1、CONCAT函數

語法格式:CONCAT(char c1, char c2, ..., char cn) ,其中char代表字元串,定長與不定長均可以

連接兩個字元串

(2)oraclesql拼接字元擴展閱讀

字元串函數(String processing function)也叫字元串處理函數,指的是編程語言中用來進行字元串處理的函數,如C,pascal,Visual以及LotusScript中進行字元串拷貝,計算長度,字元查找等的函數。

字元串主要用於編程,概念說明、函數解釋、用法詳述見正文,這里補充一點:字元串在存儲上類似字元數組,所以它每一位的單個元素都是可以提取的,如s=「abcdefghij」,則s[1]=「a」,s[10]="j"。

而字元串的零位正是它的長度,如s[0]=10(※上述功能Ansistring沒有。),這可以給我們提供很多方便,如高精度運算時每一位都可以轉化為數字存入數組。

字元串函數的應用

1、連接運算 concat(s1,s2,s3…sn) 相當於s1+s2+s3+…+sn.

例:concat(『11』,'aa』)='11aa』;

2、求子串。 Copy(s,I,I) 從字元串s中截取第I個字元開始後的長度為l的子串。

例:(『abdag』,2,3)=』bda』

3、刪除子串。過程 Delete(s,I,l) 從字元串s中刪除第I個字元開始後的長度為l的子串。

例:s:=』abcde』;delete(s,2,3);結果s:=』ae』

4、插入子串。 過程Insert(s1,s2,I) 把s1插入到s2的第I個位置

例:s:=abc;insert(『12』,s,2);結果s:=』a12bc』

5、求字元串長度 length(s) 例:length(『12abc』)=5

在ASP中 求字元串長度用 len(s)例: len("abc12")=5

6、搜索子串的位置 pos(s1,s2) 如果s1是s2的子串 ,則返回s1的第一個字元在s2中的位置,若不是子串,則返回0.

例:pos(『ab』,』12abcd』)=3

7、字元的大寫轉換。Upcase(ch) 求字元ch的大寫體。

例:upcase(『a』)=』A』

8、數值轉換為數串。 過程 Str(x,s) 把數值x化為數串s.

例:str(12345,s); 結果s=』12345』

9、數串轉換為數值。 過程val(s,x,I) 把數串s轉化為數值x,如果成功則I=0,不成功則I為無效字元的序數,第三個參數也可不傳

例:val(『1234』,x,I);結果 x:=1234

『叄』 ORACLE 存儲過程中的....是什麼意思如下 ' || '''' || 'yyyy-mm-dd' || '''' || '

|| 是字元串連接符號
'''' 四個單引號,第1,4個單引號是正常的單引號,第2個單引號是轉義字元,第3個單引號,編譯後想保留的單引號。
最終目的 就是to_char(a.txntimestamp, 'yyyy-mm-dd') 這樣的格式
這里頭不是直接寫sql文,而是用字元串拼接成新的sql字元串。

『肆』 sqlserver 在sql語句里字元串用什麼拼接。我知道oracle是用 || 。

SQL中用+
如:
declare @s varchar(100)
declare @d varchar(16)
set @d = '2012/2/10'
set @s = 'select * from tablename where datafield = '" + @d + "'"

『伍』 oracle 在PLSQL腳本中如何表名稱與數字字元串拼接

使用plsql存儲過程製造一個腳本如:

create or replace procere test_val

(etl_date varchar2, --時間或者數字變數

data out sys_refcursor ---存放數據

) as

s_sql varchar2(1000); --執行sql

begin

s_sql := 'SELECT A,B FROM tsalpludetail' || etl_date ;

--dbms_output.put_line(s_sql);----列印sql可以不需要

open data for s_sql; ---把結果集放入data

end test_val;

執行後,打開存儲過程

至此完成

『陸』 Oracle資料庫的pl/sql編程問題:

看你的account_a + account_b,顯然這兩個欄位是字元型,ORACLE如果是字元串拼接,是不能用+的,如果這兩個欄位是字元型,那麼+應該修改為||。
所以,既然從這個語句可以看出account_a + account_b這兩個欄位是數字型,那麼||進行字元串拼接的時候,要求左右都是字元型,才會正確。
所以,你的||右邊,不是字元型。而是數字型。ORACLE應該用TO_CHAR來把數字型轉化成字元型。
dbms_output.put_line('轉賬前總余額:'||to_char(account_a+account_b));
這兩個分開寫,上面的那個寫法,輸出的結果是在兩行,而下面,會使輸入結果在一行中。
而且如果直接使用put_line,括弧內可以是數字型,而第二個,則是字元數字混合,而其拼接的符號兩遍也是兩種類型,必然出錯。

『柒』 oracle listagg 拼接的字元串給多少長度

listagg 是字元串連接的結果過長。
沒有辦法,這個函數的返回值是varchar2類型,你改不了。除非寫存儲過程,在pl、sql中,字元串長度可以達到32768,然後用一個clob來存。
超出的部分不截除掉倒是個辦法,不過語句會復雜得多,性能也會下降。

熱點內容
怎麼製作ftp軟體 發布:2024-11-26 01:45:41 瀏覽:567
演算法m是誰 發布:2024-11-26 01:40:35 瀏覽:44
h1z1文件夾安裝 發布:2024-11-26 01:40:28 瀏覽:23
電話加密 發布:2024-11-26 01:39:09 瀏覽:28
hotspot源碼 發布:2024-11-26 01:33:05 瀏覽:282
日本電報密碼是多少 發布:2024-11-26 01:33:00 瀏覽:441
雷電緩存目錄 發布:2024-11-26 01:30:05 瀏覽:951
androidcanvas縮放 發布:2024-11-26 01:21:36 瀏覽:239
微信商家掃我為什麼輸入密碼 發布:2024-11-26 01:20:40 瀏覽:661
移動光貓無線路由器密碼多少 發布:2024-11-26 01:18:35 瀏覽:854