创建表:
CREATE TABLE TB_USER
(
ID INTEGER PRIMARY KEY,
USER_NAME VARCHAR2(20) NOT NULL,
USER_AGE INTEGER NOT NULL
);
CREATE SEQUENCE SEQ_USER
INCREMENT BY 1
START WITH 1
NOMAXVALUE
NOCYCLE
CACHE 10;
CREATE OR REPLACE TRIGGER TR_USER BEFORE INSERT ON TB_USER FOR EACH ROW
BEGIN
SELECT SEQ_USER.NEXTVAL INTO :NEW.ID FROM DUAL;
END;
插入一些数据。
然后创建存储过程:
CREATE OR REPLACE PROCEDURE PR_USER(USER_ID IN NUMBER, AGE IN NUMBER) AS
V_AGE TB_USER.USER_AGE%TYPE;
V_NAME TB_USER.USER_NAME%TYPE;
BEGIN
SELECT USER_NAME, USER_AGE INTO V_NAME, V_AGE FROM TB_USER WHERE ID = USER_ID;
DBMS_OUTPUT.PUT_LINE(V_NAME);
UPDATE TB_USER SET USER_AGE = AGE + V_AGE - 1 WHERE ID = USER_ID;
COMMIT;
END;
执行:
CALL PR_USER(1, 10);
使用%type,就不需要确定varchar2的长度了,否则,如果存储过程里面这样定义:
V_NAME VARCHAR2(20),而TB_USER从20增加到30,那么存储过程里的V_NAME的长度也要跟着改。