使用out引數模式的過程
過程或者函式引數的傳遞模式有3中:in、out與in out三種。
out模式的引數就是作為結果輸出的引數。
---建立一個使用out引數模式過程:
--切換到Scott使用者:
scott@PROD>show user
USER is "SCOTT"
--檢視emp表的表結構與資料:
--表結構:
scott@PROD>desc emp;
Name Null? Type
----------------------------------------- -------- ----------------------------
EMPNO NOT NULL NUMBER(4)
ENAME VARCHAR2(10)
JOB VARCHAR2(9)
MGR NUMBER(4)
HIREDATE DATE
SAL NUMBER(7,2)
COMM NUMBER(7,2)
DEPTNO NUMBER(2)
--表記錄:
scott@PROD>select empno,ename,job,sal,deptno
2 from emp;
EMPNO ENAME JOB SAL DEPTNO
---------- ---------- --------- ---------- ----------
7369 SMITH CLERK 800 20
7499 ALLEN SALESMAN 1600 30
7521 WARD SALESMAN 1250 30
7566 JONES MANAGER 2975 20
7654 MARTIN SALESMAN 1250 30
7698 BLAKE MANAGER 2850 30
7782 CLARK MANAGER 2450 10
7788 SCOTT ANALYST 3000 20
7839 KING PRESIDENT 5000 10
7844 TURNER SALESMAN 1500 30
7876 ADAMS CLERK 1100 20
EMPNO ENAME JOB SAL DEPTNO
---------- ---------- --------- ---------- ----------
7900 JAMES CLERK 950 30
7902 FORD ANALYST 3000 20
7934 MILLER CLERK 1300 10
14 rows selected.
--透過員工號,根據不同工作來確定該員工加薪,president加1000,manager加500,
salesman加300,其他加100,最後並顯示員工的姓名與工資,使用in與out引數:
scott@PROD>create or replace procedure display_wage(
2 v_id in emp.empno%type,
3 v_name out emp.ename%type,
4 v_wage out emp.sal%type)
5 as
6 v_work emp.job%type;
7 begin
8 select job into v_work
9 from emp where empno=v_id;
10 case
11 when v_work='PRESIDENT' then
12 update emp set sal = sal+1000
13 where empno = v_id;
14 when v_work ='MANAGER' then
15 update emp set sal = sal+500
16 where empno = v_id;
17 when v_work ='SALESMAN' then
18 update emp set sal = sal+300
19 where empno = v_id;
20 else
21 update emp set sal = sal+100
22 where empno = v_id;
23 end case;
24 select ename,sal into v_name,v_wage
25 from emp where empno = v_id;
26 end display_wage;
27 /
Procedure created.
#過程已經成功建立。
---呼叫過程:
scott@PROD>call display_wage(7839,:v_name,:v_wage);
Call completed.
scott@PROD>variable v_name varchar2(10)
scott@PROD>variable v_wage number
scott@PROD>call display_wage(7839,:v_name,:v_wage);
Call completed.
scott@PROD>print v_name v_wage
V_NAME
--------------------------------
KING
V_WAGE
----------
6000
---執行過程後與直接SQL查詢對比:
scott@PROD>select ename,job,sal
2 from emp where empno=7839;
ENAME JOB SAL
---------- --------- ----------
KING PRESIDENT 6000
#這個顯然是執行過程後作了更新的資料。
--更新之前的資料:
7839 KING PRESIDENT 5000 10
---再次檢視另外員工號為7698員工的姓名與工資:
--執行過程更新後的資料:
scott@PROD>execute display_wage(7698,:v_name,:v_wage);
PL/SQL procedure successfully completed.
scott@PROD>print v_name v_wage
V_NAME
--------------------------------
BLAKE
V_WAGE
----------
3350
---回滾與執行過程前的對比:
Rollback complete.
scott@PROD>select ename,job,sal
2 from emp where empno=7698;
ENAME JOB SAL
---------- --------- ----------
BLAKE MANAGER 2850
#可以看出增加了過程中執行的新增500元。
#因為之前已經明確過v_name與v_wage兩個引數變數。
scott@PROD>variable v_name varchar2(10)
scott@PROD>variable v_wage number
--本例子中,同時使用了in與out兩種模式,這裡作了一個很好的對比。
in模式就是透過輸入引數值給過程呼叫,而out就是過程透過呼叫過程把
結果傳遞給形參:v_name,:v_wage,然後形參再傳遞給實參 v_name v_wage,
而這兩個就是作為輸出結果。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31392094/viewspace-2128471/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用in out引數模式的過程模式
- MySQL 儲存過程引數IN OUT INOUT對比MySql儲存過程
- MySQL儲存過程in、out、inout引數示例與總結MySql儲存過程
- 詳解MySQL儲存過程引數有三種型別(in、out、inout)MySql儲存過程型別
- tcbs_批量儲存過程_輸出引數out與異常的關係儲存過程
- 在sqlplus中呼叫in out輸入輸出引數的儲存過程SQL儲存過程
- oracle儲存過程plsql_sp_多個out引數測試語法Oracle儲存過程SQL
- 使用帶有輸出引數的儲存過程儲存過程
- mysql儲存過程的引數MySql儲存過程
- 儲存過程的引數可以使用sql的函式儲存過程SQL函式
- 中介軟體的引數解析過程
- out,ref,params引數傳遞
- 帶輸出引數的儲存過程儲存過程
- 修改pfile引數檔案過程的異常
- 動態呼叫帶引數的儲存過程儲存過程
- Lua中呼叫ref和out修飾引數的函式/過載函式函式
- .NET用使用儲存過程獲取輸出引數的程式碼示例!儲存過程
- c# 方法引數(傳值,傳引用,ref,out,params,可選引數,命名引數)C#
- SQL Server-儲存過程(Procedure),帶入引數和出引數SQLServer儲存過程
- 使用DBMS_RANDOM過程引發的問題random
- ng-template 使用過程中引數傳遞錯誤的單步除錯除錯
- c#之帶有out輸出引數的方法定義及使用示例C#
- 過程需要型別為 'ntext/nchar/nvarchar' 的引數 '@statement'型別
- Oracle帶輸入輸出引數的儲存過程Oracle儲存過程
- SQLSERVER儲存過程如何寫帶引數的遊標SQLServer儲存過程
- dos下呼叫帶輸出引數的儲存過程儲存過程
- Java呼叫儲存過程(帶輸出引數)Java儲存過程
- asp.net中URL引數加密解密過程ASP.NET加密解密
- oracle儲存過程將引數字串分割sqlOracle儲存過程字串SQL
- oracle父儲存過程呼叫子儲存過程procedure與輸出引數Oracle儲存過程
- go 如何呼叫 sqlserver 帶傳出引數的儲存過程GoSQLServer儲存過程
- MySQL Innodb_fast_shutdown引數的內部過程介紹MySqlAST
- C#中ref、out及特殊說明引數的用法C#
- MySQL過程報 Parameter number N is not an OUT parameter錯誤MySql
- SQL Server系統儲存過程和引數示例SQLServer儲存過程
- jdbctemplate呼叫儲存過程傳遞陣列引數JDBC儲存過程陣列
- Windows啟動過程(MBR引導過程分析)Windows
- LINUX的引導過程 (轉)Linux