CREATE OR REPLACE PROCEDURE INSERTB(ZJHM IN VARCHAR2,MESSAGE OUT VARCHAR2)
IS
BEGIN
IF LENGTH(ZJHM)<>18 THEN
MESSAGE:='不是18位身份证号';
DBMS_OUTPUT.PUT_LINE(MESSAGE);
ELSE
SELECT SUBSTR(ZJHM,7,4)INTO MESSAGE FROM DUAL;
DBMS_OUTPUT.PUT_LINE('你的出生年份是:'||MESSAGE);
END IF;
END INSERTB;
/*
当创建带有输出参数的存储过程时 用如下的方式调用,不能单独用 CALL 或者 EXEC,
在pl/sql 中用call 必须在过程后加括号,exec 是用在命令中的
*/
DECLARE
SALARY VARCHAR2(20);
BEGIN
INSERTB('420881198706854052',SALARY);
END;
--查看存储过程代码
SELECT * FROM USER_SOURCE WHERE TYPE='PROCEDURE';
--重新编译过程
ALTER PROCEDURE INSERTB COMPILE;
--查看过程状态
SELECT object_name,status FROM USER_OBJECTS WHERE object_type='PROCEDURE';
--创建带有默认值的过程
CREATE OR REPLACE PROCEDURE addEmp
(
empNo NUMBER,
eName VARCHAR2,
job VARCHAR2 :='CLERK',
mgr NUMBER,
hiredate DATE DEFAULT SYSDATE,
sal NUMBER DEFAULT 1000,
comm NUMBER DEFAULT 0,
deptNo NUMBER DEFAULT 30
)
AS
BEGIN
INSERT INTO emp VALUES(empNo,eName,job,mgr,hiredate,sal,comm,deptNo);
END;