oracle儲存過程及自定義函式(儲存函式)初學
阿新 • • 發佈:2019-01-30
1.儲存過程和儲存函式的主要區別
儲存函式可以通過return返回函式值;儲存函式可以在SQL語句內部呼叫;儲存函式較儲存過程有諸多限制;儲存過程用select語句返回記錄集,儲存函式使用表變數返回記錄集。
2.儲存過程和儲存函式的建立
儲存過程的建立儲存函式的建立 建立使用FUNCTION 關鍵字,建立方式同上,當只有一個返回值時可使用return返回值,如果返回多個引數時可使用儲存過程返回值得方式,建立儲存過程: CREATE OR REPLACE PROCEDURE MYPROCEDURE(PARAM1 IN NUMBER,PARAM2 OUT VARCHAR2) AS|IS //說明部分,可定義變數 BIGIN //可執行部分 SELECT SALARY INTO PARAM2 FROM SALARYTABLE WHERE USERS.ID=PARAM1; END
CREATE [OR REPLACE] FUNCTION MYPROCEDUREFUN(PARAM1 IN NUMBER) //返回值型別 RETURN NUMBER AS PARAM2 NUMBER(5,2); BEGIN SELECT SALARY INTO PARAM2 WHERE SALARYTABLE WHERE USERS.ID=PARAM1; RETURN NVL(PARAM2,0); END;
3.儲存函式和儲存過程的呼叫方式
儲存過程的呼叫 EXEC | EXECUTE 或PLSQL語句 儲存函式的呼叫 AELECT MYPROCEDUREFUN(引數) FROM TABLE4.JAVA中使用呼叫儲存過程和儲存函式
呼叫儲存過程呼叫儲存函式String SQL="{CALL MYPROCEDURE(?,?)}"; Connection conn=JDBCUtils.getConnection(); CallableStatement call=conn.prepareCall(SQL); //對於in引數(第一個引數) call.setInt(1,12345); //對於out引數(第二個引數) call.registerOutParameter(2,oracleTypes.VARCHAR2); call.execute(); //獲取結果 String PARAM2=call.getString(2);
String SQL="?={CALL MYPROCEDURE(?)}";
Connection conn=JDBCUtils.getConnection();
CallableStatement call=conn.prepareCall(SQL);
//對於輸出引數(第一個引數)
call.registerOutParameter(1,oracleTypes.NUMBER);
//對於in引數(第二個引數)
call.setInt(2,12345);
call.execute();
//獲取結果
Double returnVal=call.getDouble(1);
5.儲存過程或儲存函式返回結果集
返回集合需要使用到PLSQL中的游標和包的相關知識,將在下篇文章中介紹,這裡給出使用方法。 包定義: CREATE [OR REPLACE] PACKAGE MYPACKAGE
AS
//自定義資料型別--引用游標的型別
TYPE SALCURSOR IS REF CURSOR;
PROCEDURE QUERYSALLIST(DNO IN NUMBER, OUTLIST OUT SALCURSOR);
END MYPACKAGE;
包體:
CREATE [OR REPLACE] PACKAGE BODY MYPACKAGE
AS
//實現儲存過程
PROCEDURE QUERYSALLIST(DNO IN NUMBER, OUTLIST OUT SALCURSOR)
AS
BEGIN
//使用之前開啟游標
OPEN OUTLIST FOR SELECT * FROM SALTABLE WHERE DEPNO=DNO;
END [QUERYSALLIST];
END;
如果在應用程式中使用包中的儲存過程或儲存函式,需要加上包名。