oracle 儲存過程學習
幾個注意點:
1、在oracle中,資料表別名不能加as.
2、在儲存過程中,select某一欄位時,後面必須緊跟into,如果select整個記錄,利用遊標的話就另當別論了。
3、在利用select ....into...語法時,必須先確保資料庫中有該條記錄,否則會報出“NO Data found"異常。
4、在儲存過程中,別名不能和欄位名稱相同,否則雖然編譯可以通過,但在執行階段會報錯。
商業規則和業務邏輯可以通過程式儲存在oracle中,這個程式就是程式過程。
儲存過程是SQL,PL/SQL,JAVA 語句的組合,它使你能將執行商業規則的程式碼從你的應用程式中移動到資料庫。這樣的結果就是,程式碼儲存一次但是能夠被多個程式使用。
要建立一個過程物件,必須有create procedure系統許可權。如果這個過程物件需要被其他的使用者使用,那麼你必須有create any procedure許可權。執行procedure的時候,可能需要execute許可權。或者execute any procedure許可權。
如果單獨賦予許可權,例:
grant execute my_procedure to WW;
儲存過程(procedure)和函式(function)的區別。
function 有返回值,並且可以直接在query中引用function或者使用function的返回值。
本質上沒有區別,都是PL/SQL程式,都可以有返回值。最根本的區別是:儲存過程是命令,而函式是表示式的一部分。比如:
package是function,procedure,variables和sql 語句的組合。package允許多個procedure使用同一個變數和遊標。
sql程式碼:
create procedure sam.credit (acc_no in number,amount in number) as
begin
update accounts
set balance = balance + account
where account_id = acc_no;
end;
IN,out,in out 用來修飾引數。
IN 表示這個變數必須被呼叫者賦值然後傳入到procedure進行處理。
out 表示procedure 通過這個變數將值傳回給呼叫者。
IN OUT 則是這兩種的組合。
authid 代表兩種許可權:
定義者許可權(difiner right 預設),執行者許可權 (invoker right)。
定義者許可權說明這個procedure中涉及的表,檢視等物件所需要的許可權只要定義者擁有許可權的話就可以訪問。
執行者許可權需要呼叫這個procedure的使用者擁有相關表和物件的許可權。
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
*****;
end;
...........
3、 IF 判斷
if v_test=1 then
begin
do something
end;
endif;
4、while迴圈
while v_test=1 loop
begin
****
end;
end loop;
5、變數賦值
v_test := 123;
6、用for in 使用 cursor
is
cursor cur is select * from ***;
begin
for cur_result cur loop
begin
v_sum :=cur_result.列名1+cur_result.列名 2
end;
end loop;
end;
1、在oracle中,資料表別名不能加as.
2、在儲存過程中,select某一欄位時,後面必須緊跟into,如果select整個記錄,利用遊標的話就另當別論了。
3、在利用select ....into...語法時,必須先確保資料庫中有該條記錄,否則會報出“NO Data found"異常。
4、在儲存過程中,別名不能和欄位名稱相同,否則雖然編譯可以通過,但在執行階段會報錯。
商業規則和業務邏輯可以通過程式儲存在oracle中,這個程式就是程式過程。
儲存過程是SQL,PL/SQL,JAVA 語句的組合,它使你能將執行商業規則的程式碼從你的應用程式中移動到資料庫。這樣的結果就是,程式碼儲存一次但是能夠被多個程式使用。
要建立一個過程物件,必須有create procedure系統許可權。如果這個過程物件需要被其他的使用者使用,那麼你必須有create any procedure許可權。執行procedure的時候,可能需要execute許可權。或者execute any procedure許可權。
如果單獨賦予許可權,例:
grant execute my_procedure to WW;
儲存過程(procedure)和函式(function)的區別。
function 有返回值,並且可以直接在query中引用function或者使用function的返回值。
本質上沒有區別,都是PL/SQL程式,都可以有返回值。最根本的區別是:儲存過程是命令,而函式是表示式的一部分。比如:
package是function,procedure,variables和sql 語句的組合。package允許多個procedure使用同一個變數和遊標。
sql程式碼:
create procedure sam.credit (acc_no in number,amount in number) as
begin
update accounts
set balance = balance + account
where account_id = acc_no;
end;
IN,out,in out 用來修飾引數。
IN 表示這個變數必須被呼叫者賦值然後傳入到procedure進行處理。
out 表示procedure 通過這個變數將值傳回給呼叫者。
IN OUT 則是這兩種的組合。
authid 代表兩種許可權:
定義者許可權(difiner right 預設),執行者許可權 (invoker right)。
定義者許可權說明這個procedure中涉及的表,檢視等物件所需要的許可權只要定義者擁有許可權的話就可以訪問。
執行者許可權需要呼叫這個procedure的使用者擁有相關表和物件的許可權。
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
*****;
end;
...........
3、 IF 判斷
if v_test=1 then
begin
do something
end;
endif;
4、while迴圈
while v_test=1 loop
begin
****
end;
end loop;
5、變數賦值
v_test := 123;
6、用for in 使用 cursor
is
cursor cur is select * from ***;
begin
for cur_result cur loop
begin
v_sum :=cur_result.列名1+cur_result.列名 2
end;
end loop;
end;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22969361/viewspace-1204792/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle儲存過程Oracle儲存過程
- oracle的儲存過程Oracle儲存過程
- Oracle儲存過程-1Oracle儲存過程
- Oracle儲存過程乾貨(一):儲存過程基礎Oracle儲存過程
- 原創:oracle 儲存過程Oracle儲存過程
- Mysql 5.7儲存過程的學習MySql儲存過程
- oracle儲存過程書寫格式Oracle儲存過程
- Sqlsugar呼叫Oracle的儲存過程SqlSugarOracle儲存過程
- LightDB/PostgreSQL 相容Oracle儲存過程SQLOracle儲存過程
- oracle儲存過程和觸發器Oracle儲存過程觸發器
- Oracle 儲存過程分頁 + Sqlsugar呼叫Oracle儲存過程SqlSugar
- ibatis呼叫oracle儲存過程(極簡版)BATOracle儲存過程
- Springboot呼叫Oracle儲存過程的幾種方式Spring BootOracle儲存過程
- Oracle 編譯儲存過程卡死解決方法Oracle編譯儲存過程
- MYSQL學習與實驗(八)——儲存過程實驗MySql儲存過程
- SQL 儲存過程裡呼叫另一個儲存過程SQL儲存過程
- 儲存過程與儲存函式儲存過程儲存函式
- SQLSERVER儲存過程SQLServer儲存過程
- 呼叫儲存過程儲存過程
- mysql 儲存過程MySql儲存過程
- unidac儲存過程儲存過程
- firedac儲存過程儲存過程
- Oracle儲存過程中定義多個遊標Oracle儲存過程
- Oracle儲存過程中跳出迴圈的寫法Oracle儲存過程
- Oracle儲存過程乾貨(二):PLSQL控制語句Oracle儲存過程SQL
- Oracle儲存過程編譯卡死的解決方法Oracle儲存過程編譯
- oracle儲存過程許可權繼承小結Oracle儲存過程繼承
- JdbcTemplate調儲存過程JDBC儲存過程
- 造數儲存過程儲存過程
- 儲存過程——遊標儲存過程
- 儲存過程 傳 datatable儲存過程
- JAVA儲存過程(轉)Java儲存過程
- MySQL之儲存過程MySql儲存過程
- MySQL---------儲存過程MySql儲存過程
- linux呼叫儲存過程Linux儲存過程
- Winform呼叫儲存過程ORM儲存過程
- mysql儲存過程整理MySql儲存過程
- Oracle儲存過程乾貨(三):PLSQL迴圈語句Oracle儲存過程SQL
- MYSQL儲存過程-練習3 repeat迴圈MySql儲存過程