-- 輸出參數不可以修改 解決的方法有兩種
--1 把參數改成 輸入參數
--2 就是參數改成 可輸入輸出的參數;
調用過程的 三個方式
1 就是使用call
在只用call方式調用函數的時候,必須加要括弧,有參數,還要加參數值
這個方式在命令視窗,調用過程,將不會出現輸入的資料.
2 就是使用exec 命令,進行命令調用過程, 使用命令,就必須在命令列裡面輸入
過程名,這個命令視窗中,可加可不加() ,如果有參數的,就一定要加,還有參數值,參數值的類型要與
變數類型相同.
3 在語句塊中進行調用過程,這個方式和命令模式類似,他們都是可要可不要(),
-- 在2 和 3 中的 沒有括弧的情況是,過程沒有參數 ,如果有,就必須要有()
輸出參數的特點
1 一個過程中,如果有輸出參數(OUT 參數),在調用過程的使用,也要傳入一個參數, 這個參數可以不用在調用的地方
進行賦值,就直接傳入一個聲明好的一個變數,用來接受預存程序中的輸出參數的值(OUT 參數)
2 輸入參數 值不可以改變在過程中,
注意: 在預存程序中,他的參數類型不可以設定它的大小 ;
例如;
CREATE OR REPLACE PROCEDURE hello(
p_name IN VARCHAR2(12),
p_age OUT NUMBER(10,2)
)
IS
BEGIN
如果有輸出參數就必須有有一個參數進行接收 ;
CREATE OR REPLACE PROCEDURE hello(
p_name IN VARCHAR2,
p_age OUT emp.sal%TYPE
)
IS
BEGIN
SELECT emp.sal + 3131 INTO p_age FROM emp WHERE empno = 7788 ;
dbms_output.put_line( p_age);
END ;
--------- 塊中調用方法
DECLARE
v_nanme varchar2(12);
v_age NUMBER (12,2);
BEGIN
hello (v_nanme,v_age);
dbms_output.put_line(v_age);
END ;
-- 在這個過程中 傳入的v_age 就是接受 預存程序輸出參數的值 ; 類似於Java的中的傳回值
-- 理解 in out 參數
CREATE OR REPLACE PROCEDURE hello1 (
p_name IN OUT emp.ename%TYPE
)
IS
BEGIN
-- SELECT emp.ename INTO p_name FROM emp ;
p_name:='a;sk , ' || p_name ;
END ;
--------------------------------------------------------------------------
DECLARE
v_nanme varchar2(12);
BEGIN
v_nanme:='12312';
hello1(v_nanme);
dbms_output.put_line(v_nanme);
END ;
SELECT emp.sal FROM emp WHERE emp.empno = 7788 ;