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;