當前位置:首頁 » 存儲配置 » oracle存儲過程換行

oracle存儲過程換行

發布時間: 2022-06-09 16:11:41

『壹』 在oracle把一列的所有結果轉為一行的存儲過程應該怎麼寫

存儲過程裡面的varchar2變數最高可以存到32767個位元組的數據,如果能夠滿足要求的話直接循環游標,拼字元串就行了。
declare
l_sum_v varchar2(32767) ;
begin
for rec in (select xxx from xxx) loop
l_sum_v := l_sum_v || rec.xxx ;
end loop ;
end ;

『貳』 oracle 存儲過程 begin end

Oracle存儲過程基礎知識
商業規則和業務邏輯可以通過程序存儲在Oracle中,這個程序就是存儲過程。
存儲過程是sql, PL/SQL, java 語句的組合,它使你能將執行商業規則的代碼從你的應用程序中移動到資料庫。這樣的結果就是,代碼存儲一次但是能夠被多個程序使用。
要創建一個過程對象(proceral object),必須有 CREATE PROCEDURE 系統許可權。如果這個過程對象需要被其他的用戶schema 使用,那麼你必須有 CREATE ANY PROCEDURE 許可權。執行 procere 的時候,可能需要excute許可權。或者EXCUTE ANY PROCEDURE 許可權。如果單獨賦予許可權,如下例所示:
grant execute on MY_PROCEDURE to Jelly
調用一個存儲過程的例子:
execute MY_PROCEDURE( 'ONE PARAMETER');
存儲過程(PROCEDURE)和函數(FUNCTION)的區別。
function有返回值,並且可以直接在Query中引用function和或者使用function的返回值。
本質上沒有區別,都是 PL/SQL 程序,都可以有返回值。最根本的區別是: 存儲過程是命令, 而函數是表達式的一部分。比如:
select max(NAME) FROM
但是不能 exec max(NAME) 如果此時max是函數。
PACKAGE是function,procere,variables 和sql 語句的組合。package允許多個procere使用同一個變數和游標。

創建 procere的語法:

CREATE [ OR REPLACE ] PROCEDURE [ schema.]procere
[(argument [IN | OUT | IN OUT ] [NO COPY] datatype
[, argument [IN | OUT | IN OUT ] [NO COPY] datatype]...
)]
[ authid { current_user | definer }]
{ is | as } { pl/sql_subprogram_body |
language { java name 'String' | c [ name, name] library lib_name
}]
Sql 代碼:
CREATE PROCEDURE sam.credit (acc_no IN NUMBER, amount IN NUMBER) AS
BEGIN
UPDATE accounts
SET balance = balance + amount
WHERE account_id = acc_no;
END;
可以使用 create or replace procere 語句, 這個語句的用處在於,你之前賦予的excute許可權都將被保留。
IN, OUT, IN OUT用來修飾參數。
IN 表示這個變數必須被調用者賦值然後傳入到PROCEDURE進行處理。
OUT 表示PRCEDURE 通過這個變數將值傳回給調用者。
IN OUT 則是這兩種的組合。
authid代表兩種許可權:
定義者許可權(difiner right 默認),執行者許可權(invoker right)。
定義者許可權說明這個procere中涉及的表,視圖等對象所需要的許可權只要定義者擁有許可權的話就可以訪問
執行者許可權則需要調用這個 procere的用戶擁有相關表和對象的許可權。

Oracle存儲過程的基本語法
1. 基本結構
CREATE OR REPLACE PROCEDURE 存儲過程名字
(
參數1 IN NUMBER,
參數2 IN NUMBER
) AS
變數1 INTEGER :=0;
變數2 DATE;
BEGIN
END 存儲過程名字
2. SELECT INTO STATEMENT
將select查詢的結果存入到變數中,可以同時將多個列存儲多個變數中,必須有一條
記錄,否則拋出異常(如果沒有記錄拋出NO_DATA_FOUND)
例子:
BEGIN
SELECT col1,col2 into 變數1,變數2 FROM typestruct where xxx;
EXCEPTION
WHEN NO_DATA_FOUND THEN
xxxx;
END;
...

3. IF 判斷
IF V_TEST=1 THEN
BEGIN
do something
END;
END IF;
4. while 循環
WHILE V_TEST=1 LOOP
BEGIN
XXXX
END;
END LOOP;
5. 變數賦值
V_TEST := 123;
6. 用for in 使用cursor
...
IS
CURSOR cur IS SELECT * FROM xxx;
BEGIN
FOR cur_result in cur LOOP
BEGIN
V_SUM :=cur_result.列名1+cur_result.列名2
END;
END LOOP;
END;
7. 帶參數的cursor
CURSOR C_USER(C_ID NUMBER) IS SELECT NAME FROM USER WHERE TYPEID=C_ID;
OPEN C_USER(變數值);
LOOP
FETCH C_USER INTO V_NAME;
EXIT FETCH C_USER%NOTFOUND;
do something
END LOOP;
CLOSE C_USER;
8. 用pl/sql developer debug
連接資料庫後建立一個Test WINDOW
在窗口輸入調用SP的代碼,F9開始debug,CTRL+N單步調試

9. Pl/Sql中執行存儲過程
在sql*plus中:
declare
--必要的變數聲明,視你的過程而定
begin
execute yourprocure(parameter1,parameter2,...);
end
/
在SQL/PLUS中調用存儲過程,顯示結果:
SQL>set serveoutput on --打開輸出
SQL>var info1 number; --輸出1
SQL>var info2 number; --輸出2
SQL>declare
var1 varchar2(20); --輸入1
var2 varchar2(20); --輸入2
var3 varchar2(20); --輸入2
BEGIN
pro(var1,var2,var3,:info1,:info2);
END;
/
SQL>print info1;
SQL>print info2;
註:在EXECUTE IMMEDIATE STR語句是SQLPLUS中動態執行語句,它在執行中會自動提交,類似於DP中FORMS_DDL語句,在此語句中str是不能換行的,只能通過連接字元"||",或著在在換行時加上"-"連接字元。

『叄』 oracle如何實現動態列轉行,用存儲過程,最好有例子,謝謝。

oracle如何實現動態列轉行,用存儲過程,
ORACLRE是不可以實現非共享存儲雙機熱備的雙機熱備的,因為ORACLE數據在兩台伺服器上,兩邊無法保證數據、日誌、UNDO文件的同步。

『肆』 oracle BLOG變數中的內容在存儲過程中讀取後出現換行符異常,請問如何解決

v_see := '萬一'||chr(10)||'1231411';
n_test := lengthb(substrb(strv_see,1,6)); --等於多少? 我這邊輸出是6
dbms_output.put_line(lengthb(v_see));
---------------------------------------------------
v_see := '萬一'||chr(10)||'1231411'; --這是做測試的,帶一個換行符的字元串變數
n_test := lengthb(v_see); --跟蹤到此時n_test = 16,串長包括了換行符。
v_see := substrb(v_line ,1,100); --從v_line里取出100個位元組的串看看
n_test := lengthb(v_see);
dbms_output.put_line(v_see); --列印這個看看是什麼內容?

『伍』 ORACLE存儲過程的寫法。

oracle 存儲過程的基本語法 1.基本結構 CREATE OR REPLACE PROCEDURE 存儲過程名字 ( 參數1 IN NUMBER, 參數2 IN NUMBER ) IS 變數1 INTEGER :=0; 變數2 DATE; BEGIN END 存儲過程名字 2.SELECT INTO STATEMENT 將select查詢的結果存入到變數中,可以同時將多個列存儲多個變數中,必須有一條 記錄,否則拋出異常(如果沒有記錄拋出NO_DATA_FOUND) 例子: BEGIN SELECT col1,col2 into 變數1,變數2 FROM typestruct where xxx; EXCEPTION WHEN NO_DATA_FOUND THEN xxxx; END; ... 3.IF 判斷 IF V_TEST=1 THEN BEGIN do something END; END IF; 4.while 循環 WHILE V_TEST=1 LOOP BEGIN XXXX END; END LOOP; 5.變數賦值 V_TEST := 123; 6.用for in 使用cursor ... IS CURSOR cur IS SELECT * FROM xxx; BEGIN FOR cur_result in cur LOOP BEGIN V_SUM :=cur_result.列名1+cur_result.列名2 END; END LOOP; END; 7.帶參數的cursor CURSOR C_USER(C_ID NUMBER) IS SELECT NAME FROM USER WHERE TYPEID=C_ID; OPEN C_USER(變數值); LOOP FETCH C_USER INTO V_NAME; EXIT FETCH C_USER%NOTFOUND; do something END LOOP; CLOSE C_USER; 8.用pl/sql developer debug 連接資料庫後建立一個Test WINDOW 在窗口輸入調用SP的代碼,F9開始debug,CTRL+N單步調試 藍屏

『陸』 oracle clob老是自動換行

dbms_lob.substr()
試試用這個函數轉成字元看看,然後trim一下

『柒』 oracle的存儲過程

1.存儲過程可以使得程序執行效率更高、安全性更好,因為過程建立之後 已經編譯並且儲存到資料庫,直接寫sql就需要先分析再執行因此過程效率更高,直接寫sql語句會帶來安全性問題,如:sql注入
2.建立過程不會很耗系統資源,因為過程只是在調用才執行。
3.存儲過程可以用於降低網路流量,存儲過程代碼直接存儲於資料庫中,所以不會產生大量T-sql語句的代碼流量。

4.使用存儲過程使您能夠增強對執行計劃的重復使用,由此可以通過使用遠程過程調用 (RPC) 處理伺服器上的存儲過程而提高性能。RPC 封裝參數和調用伺服器端過程的方式使引擎能夠輕松地找到匹配的執行計劃,並只需插入更新的參數值。

5.可維護性高,更新存儲過程通常比更改、測試以及重新部署程序集需要較少的時間和精力。

6.代碼精簡一致,一個存儲過程可以用於應用程序代碼的不同位置。

7.增強安全性:
a、通過向用戶授予對存儲過程(而不是基於表)的訪問許可權,它們可以提供對特定數據的訪問;
b、提高代碼安全,防止 SQL注入(但未徹底解決,例如,將數據操作語言--DML,附加到輸入參數);
c、SqlParameter 類指定存儲過程參數的數據類型,作為深層次防禦性策略的一部分,可以驗證用戶提供的值類型(但也不是萬無一失,還是應該傳遞至資料庫前得到附加驗證)。

缺點就是:
1、大量的利用過程,會對伺服器壓力比較大。

『捌』 oracle中如何解決換行

你好
沒太看懂你這句話是啥意思??
請您重新描述

『玖』 oracle數據換行操作

update Frs
set Frs.x_aqcs = '1、#2濾網進、出口門;'||chr(10)||chr(13)||'2、"禁止操作,有人工作"牌。'
where Frs.x_Bh='機1004007'
應該是可以的,可能是顯示的問題

『拾』 oracle中出現了換行怎麼辦

oracle中去掉文本中的換行符、回車符、製表符小結
一、特殊符號ascii定義
製表符 chr(9)
換行符 chr(10)
回車符 chr(13)
二、嵌套使用repalce,注意每次只能提交一個符號,如先回車再換行
select REPLACE(gg, chr(10), '') from al
要注意chr(13) | | chr(10) 此類結合使用的情況比較多,回車換行在notepad中是比較好看點的,所以要考慮此種情況
select translate(string,chr(13)||chr(10),',') from al;
1、例子一
create table TEST_1
(
VA VARCHAR2(10),
VB NUMBER(2),
VC VARCHAR2(10),
VD NUMBER(11,2),
VE NUMBER(11,4),
VCL CLOB
);
SQL> select vb,vc,replace(vc,chr(10),'') as TT, translate(vc,chr(10),',') from test_1;
VB VC TT TRANSLATE(VC,CHR(10),',')
--- ---------- ---------- -------------------------
0 Aaaaaaaaa Aaaaaaaaa Aaaaaaaaa
1 Aaaaaaaaa Aaaaaaaaa Aaaaaaaaa
2 大Ba 大Babc帶 大Ba,b,c帶
b
c帶
3 C C C
1 D D D
5 A A A
5 A A A
0 A A A
0 A A A
2、例子二
要注意chr(13) | | chr(10) 此類結合使用的情況比較多,回車換行在notepad中是比較好看點的,所以要考慮此種情況
select vb,vc,replace(vc,chr(10),'') as TT, translate(vc,chr(13)||chr(10),',') from test_1;
SQL> select vb,vc,replace(vc,chr(10),'') as TT, translate(vc,chr(13)||chr(10),',') from test_1;
VB VC TT TRANSLATE(VC,CHR(13)||CHR(10),
--- ---------- ---------- ------------------------------
0 Aaaaaaaaa Aaaaaaaaa Aaaaaaaaa
1 Aaaaaaaaa Aaaaaaaaa Aaaaaaaaa
2 大Ba 大Babc帶 大Babc帶
b
c帶
3 C C C
1 D D D
5 A A A
5 A A A
0 A A A
0 A A A
11 rows selected
三、對於字元大對象的符號處理
對於clob欄位中的符號處理,先to_char然後一樣的處理
SQL> select to_char(vcl),replace(to_char(vcl),chr(10),'[]') from test_1;
TO_CHAR(VCL) REPLACE(TO_CHAR(VCL),CHR(10),'
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
嵌套使用repalce,注意每次只能提交一個符號,如先回車再換行 嵌套使用repalce,注意每次只能提交一個符號,如先回車再換行[]select REPLACE(gg, chr(10), '') from al[]sel
select REPLACE(gg, chr(10), '') from al
select translate(string,chr(13)||chr(10),',') from al;
func:
2.2.1 單記錄字元函數
函 數 說 明
ASCII 返回對應字元的十進制值
CHR 給出十進制返回字元
CONCAT 拼接兩個字元串,與 || 相同
INITCAT 將字元串的第一個字母變為大寫
INSTR 找出某個字元串的位置
INSTRB 找出某個字元串的位置和位元組數
LENGTH 以字元給出字元串的長度
LENGTHB 以位元組給出字元串的長度
LOWER 將字元串轉換成小寫
LPAD 使用指定的字元在字元的左邊填充
LTRIM 在左邊裁剪掉指定的字元
RPAD 使用指定的字元在字元的右邊填充
RTRIM 在右邊裁剪掉指定的字元
REPLACE 執行字元串搜索和替換
SUBSTR 取字元串的子串
SUBSTRB 取字元串的子串(以位元組)
SOUNDEX 返回一個同音字元串
TRANSLATE 執行字元串搜索和替換
TRIM 裁剪掉前面或後面的字元串
UPPER 將字元串變為大寫
NVL 以一個值來替換空值
ASCII(<c1>)
<c1>是字元串。返回與指定的字元對應的十進制數。
SQL> select ascii('A') A,ascii('a') a,ascii('0') zero,ascii(' ') space from al;
A a ZERO SPACE
---------- ---------- ---------- ----------
65 97 48 32
SQL> select ascii('趙') zhao,length('趙') leng from al;
ZHAO LENG
---------- ----------
54740 1
CHR(<I>[NCHAR])
給出整數,返回對應字元。如:
SQL> select chr(54740) zhao,chr(65) chr65 from al;
ZH C
-- -
趙 A
CONCAT(<c1>,<c2>)
SQL> select concat('010-','8801 8159')||'轉23' 趙元傑電話 from al;
趙元傑電話
-----------------
010-8801 8159 轉23
INITCAP(<c1>)
返回字元串c1 並第一個字母變為大寫。例如:
SQL> select initcap('simth') upp from al;
UPP
-----
Simth
INSTR(<c1>,<c2>[,<I>[,<j>] ] )
在一個字元串中搜索指定的字元,返回發現指定的字元的位置。
C1: 被搜索的字元串
C2: 希望搜索的字元串
I: 搜索的開始位置,預設是1
J: 出現的位置,預設是1。
SQL> SELECT INSTR ('Oracle Training', 'ra', 1, 2) "Instring" FROM DUAL;
Instring
----------
9
INSTRB(<c1>,<c2>[,<I>[,<j>] ] )
除了返回的位元組外 ,與INSTR 相同,
LENGTH( <c> )
返回字元串 c 的長度。
SQL> l
1 select name,length(name),addr,length(addr),sal,length(to_char(sal))
2* from nchar_tst
SQL> /
NAME LENGTH(NAME) ADDR LENGTH(ADDR) SAL LENGTH(TO_CHAR(SAL))
------ ------------ ---------------- ------------ ---------- ----------------
趙元傑 3 北京市海淀區 6 99999.99 8
LENGTHB( <c> )
以位元組返回字元串的位元組數。
SQL> select name,lengthb(name),length(name) from nchar_tst;
NAME LENGTHB(NAME) LENGTH(NAME)
------ ------------- ------------
趙元傑 6 3
LOWER ( <c> )
返回字元串並將所有字元變為小寫。
SQL> select lower('AaBbCcDd') AaBbCcDd from al;
AABBCCDD
--------
aabbccdd
UPPER( <c>)
與 LOWER 相反,將給出字元串變為大寫。如:
SQL> select upper('AaBbCcDd') AaBbCcDd from al;
AABBCCDD
--------
AABBCCDD
RPAD 和LPAD(粘貼字元)
RPAD(string,Length[,'set'])
LPAD(string,Length[,'set'])
RPAD在列的右邊粘貼字元;
LPAD在列的左邊粘貼字元。
例 1:
SQL>select RPAD(City,35,'.'),temperature from weather;
RPAD(City,35,'.') temperature
-------------------------- ----------------
CLEVELAND...... 85
LOS ANGELES.. 81
.........................
(即不夠 35 個字元用'.'填滿)
LTRIM(左截斷)RTRIM(右截斷) 函數
LTRIM (string [,』set』])
Left TRIM (左截斷)刪去左邊出現的任何set 字元。
RTRIM (string [,』set』])
Right TRIM (右截斷)刪去右邊出現的任何set 字元。
例1:
SELECT RTRIM (『Mother Theresa, The』, 『The』) 「Example of Right
Trimming」 FROM DUAL;
Example of Right
----------------
Mother Theresa,
SUBSTR Substr(string,start[,Count])
取子字元串中函數
對字串 (或欄位),從 start字元 開始,連續取 count 個字元並返回結果,如果沒有指 count
則一直取到尾。
select phone,substr(phone,1,3) || 『0』 || substr(phone,4)
from telecommunication where master 』中國電信』;
SUBSTRB(string,start[,Count])
對字串 (或欄位),從 start位元組 開始,連續取 count 個位元組並返回結果,如果沒有指 count
則一直取到尾。
REPLACE (『string』 [,』string_in』,』string_out』])
String: 希望被替換的字元串或變數。
String_in: 被替換字元串。
String_out: 要替換字元串。
SQL> select replace('Informaix 中國公司','Informaix','IBM Informix')
2 IBM 資料庫 from al;
IBM 資料庫
--------------------
IBM Informix 中國公司
SOUNDEX( <c> )
返回一個與給定的字元串讀音相同的字元串(不管拼寫是否一樣)。
SELECT DPL_NAME FROM DENIED_PARTIES_LIST WHERE
SOUNDEX(DPL_NAME) = SOUNDEX(『Saddam Hussain』) ;
DPL_NAME
----------------------------------------------
Al Husseni
Sadda Al Sada.
REPLACE (『string』 [,』string_in』,』string_out』])
String:希望被替換的字元串或變數。
String_in: 被替換字元串。
String_out: 要替換字元串。
SELECT REPLACE (『Oracle』, 『Or』, 『Mir』) 「Example 「 FROM DUAL;
Example
-------
Miracle
TRIM ( [<leading>] <trailing> FROM <trim_char> )
RIM可以使你對給定的字元串進行裁剪(前面,後面或前後)。
z 如果指定 LEADING, Oracle 從trim_char 中裁剪掉前面的字元;
z 如果指定TRAILING, Oracle 從trim_char 中裁剪掉尾面的字元;
z 如果指定兩個都指定或一個都沒有給出,Oracle從trim_char 中裁剪掉前面及尾面的字
符;
z 如果不指定 trim_character, 預設為空格符;
z 如果只指定trim_source, Oracle Oracle從trim_char 中裁剪掉前面及尾面的字元。
例子:將下面字元串中的前面和後面的『0 『字元都去掉:
SELECT TRIM (0 FROM 0009872348900) "TRIM Example" FROM DUAL;
TRIM example
--------------------------------
98723489
語法:TRANSLATE(expr,from,to)
om,to) expr: 代表一串字元,
expr: 代表一串字元,from 與 to 是從左到右一一對應的關系,如果不能對應,則視為空值。
舉例:
select translate('abcbbaadef','ba','#@') from al(b將被#替代,a將被@替代)
select translate(ab
select translate('abcbbaadef','bad','#@') from al(b將被#替代,a將被@替代,d對應的值是空值,將被移走)
因此:結果依次為:@#c##@@def 和@#c##@@ef

熱點內容
安卓語音系統哪個更智能 發布:2024-05-17 07:39:44 瀏覽:476
安卓訪客模式app哪個好 發布:2024-05-17 07:38:25 瀏覽:166
html資料庫table 發布:2024-05-17 07:27:56 瀏覽:994
linux加密程序包 發布:2024-05-17 07:16:18 瀏覽:473
郵件伺服器軟體快速搭建 發布:2024-05-17 07:03:53 瀏覽:282
ipad開機密碼怎麼找回 發布:2024-05-17 07:03:08 瀏覽:652
查詢賬單初始密碼是多少 發布:2024-05-17 06:58:45 瀏覽:651
反編譯封掛 發布:2024-05-17 06:17:42 瀏覽:820
台電怎麼從電腦轉至安卓 發布:2024-05-17 06:07:23 瀏覽:436
我的世界國際版伺服器里如何開掛 發布:2024-05-17 06:06:05 瀏覽:873