- create table TMP_MICHAEL
- (
- USER_ID VARCHAR2(20),
- USER_NAME VARCHAR2(10),
- SALARY NUMBER(8,2),
- OTHER_INFO VARCHAR2(100)
- )
- insert into TMP_MICHAEL (USER_ID, USER_NAME, SALARY, OTHER_INFO)
- values ('michael', 'Michael', 5000, 'http://sjsky.iteye.com');
- insert into TMP_MICHAEL (USER_ID, USER_NAME, SALARY, OTHER_INFO)
- values ('zhangsan', '张三', 10000, null);
- insert into TMP_MICHAEL (USER_ID, USER_NAME, SALARY, OTHER_INFO)
- values ('aoi_sola', '苍井空', 99999.99, 'twitter account');
- insert into TMP_MICHAEL (USER_ID, USER_NAME, SALARY, OTHER_INFO)
- values ('李四', '李四', 2500, null);
(1)只有输入IN参数,没有输出OUT参数
- CREATE OR REPLACE PROCEDURE TEST_MICHAEL_NOOUT(P_USERID IN VARCHAR2,
- P_USERNAME IN VARCHAR2,
- P_SALARY IN NUMBER,
- P_OTHERINFO IN VARCHAR2) IS
- BEGIN
- INSERT INTO TMP_MICHAEL
- (USER_ID, USER_NAME, SALARY, OTHER_INFO)
- VALUES
- (P_USERID, P_USERNAME, P_SALARY, P_OTHERINFO);
- END TEST_MICHAEL_NOOUT;
(二)、既有输入IN参数,也有输出OUT参数,输出是简单值(非列表)
- CREATE OR REPLACE PROCEDURE TEST_MICHAEL(P_USERID IN VARCHAR2,
- P_SALARY IN NUMBER,
- P_COUNT OUT NUMBER) IS
- V_SALARY NUMBER := P_SALARY;
- BEGIN
- IF V_SALARY IS NULL THEN
- V_SALARY := 0;
- END IF;
- IF P_USERID IS NULL THEN
- SELECT COUNT(*)
- INTO P_COUNT
- FROM TMP_MICHAEL T
- WHERE T.SALARY >= V_SALARY;
- ELSE
- SELECT COUNT(*)
- INTO P_COUNT
- FROM TMP_MICHAEL T
- WHERE T.SALARY >= V_SALARY
- AND T.USER_ID LIKE '%' || P_USERID || '%';
- END IF;
- DBMS_OUTPUT.PUT_LINE('v_count=:' || P_COUNT);
- END TEST_MICHAEL;
(三)、输入输出参数是同一个(IN OUT)
- CREATE OR REPLACE PROCEDURE TEST_P_INOUT(P_USERID IN VARCHAR2,
- P_NUM IN OUT NUMBER) IS
- V_COUNT NUMBER;
- V_SALARY NUMBER := P_NUM;
- BEGIN
- IF V_SALARY IS NULL THEN
- V_SALARY := 0;
- END IF;
- SELECT COUNT(*)
- INTO V_COUNT
- FROM TMP_MICHAEL
- WHERE USER_ID LIKE '%' || P_USERID || '%'
- AND SALARY >= V_SALARY;
- P_NUM := V_COUNT;
- END TEST_P_INOUT;