功能:
PROCEDURE 用来更新/同步数据 。
FUNCTION 用来 对复杂的计算进行封装 ;
语法:
CREATE OR REPLACE PROCEDURE SP_过程名(参数1 [IN|OUT|IN OUT] 数据类型,参数2 [IN|OUT|IN OUT] 数据类型……)
IS
BEGIN
过程的执行体 ;
END ;
CREATE OR REPLACE FUNCTION FUN_函数名(参数1 [IN|OUT|IN OUT] 数据类型,参数2 [IN|OUT|IN OUT] 数据类型……)
RETURN 返回的数据类型
IS
BEGIN
函数的执行体 ;
RETURN 返回的计算结果 ;
END ;
CREATE OR REPLACE PROCEDURE SP_HELLO_X
IS
BEGIN
DBMS_OUTPUT.PUT_LINE('HELLO WORLD');
END ;
BEGIN
SP_HELLO_X ;
END ;
CREATE OR REPLACE PROCEDURE SP_HELLO_X1(P_STR VARCHAR2)
IS
BEGIN
DBMS_OUTPUT.PUT_LINE(P_STR);
END ;
BEGIN
SP_HELLO_X('HELLO WORLD') ;
END ;
CREATE OR REPLACE FUNCTION FUN_BIGGER(P_1 NUMBER ,P_2 NUMBER )
RETURN NUMBER
IS
BEGIN
IF NVL(P_1,0)>= NVL(P_2,0) THEN
RETURN NVL(P_1,0);
ELSE
RETURN NVL(P_2,0);
END IF ;
END ;
SELECT FUN_BIGGER(2,5) , FUN_BIGGER(500,200)
FROM DUAL ;
SELECT E.SAL ,E.COMM , FUN_BIGGER(E.SAL,E.COMM)
FROM EMP E
CREATE OR REPLACE FUNCTION FUN_JN(P_DATE DATE )
RETURN VARCHAR2
IS
BEGIN
RETURN TO_CHAR(ROUND(P_DATE,'MM') ,'YYYY-MM') ;
END ;
SELECT E.* , FUN_JN(E.HIREDATE)
FROM EMP E ;
通过SP封装造数据的脚本
CREATE OR REPLACE PROCEDURE SP_ZS(P_NUM NUMBER)
IS
V_SNO NUMBER(6) ;
V_GENDER VARCHAR2(3);
V_NAME VARCHAR2(12);
V_PHONE_NO NUMBER(11);
BEGIN
FOR X IN 1 .. P_NUM LOOP
V_SNO := SEQ_1.NEXTVAL ;
V_GENDER := CASE
WHEN MOD(V_SNO, 3) = 0 THEN
'男'
ELSE
'女'
END;
V_NAME := CASE
WHEN MOD(V_SNO, 3) = 1 THEN
'张' || V_SNO
WHEN MOD(V_SNO, 3) = 2 THEN
'王' || V_SNO
ELSE
'李' || V_SNO
END;
V_PHONE_NO := TRUNC(DBMS_RANDOM.VALUE('13000000000', '18900000000'));
INSERT INTO STU_0118
(SNO, SNAME, GENDER, PHONE_NO)
VALUES
(V_SNO, V_NAME, V_GENDER, V_PHONE_NO);
END LOOP;
COMMIT;
END;
BEGIN
SP_ZS(5000);
END ;
SELECT S.*,
COUNT(*) OVER() CT,
MIN(S.SNO) OVER() MIN_SNO,
MAX(S.SNO) OVER() MAX_SNO
FROM STU_0118 S ;