存储过程的各类参数

本文详细介绍了如何创建和使用数据库表以及存储过程,通过示例展示了如何插入数据并进行复杂查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

  1. create table TMP_MICHAEL     
  2. (     
  3.   USER_ID    VARCHAR2(20),     
  4.   USER_NAME  VARCHAR2(10),     
  5.   SALARY     NUMBER(8,2),     
  6.   OTHER_INFO VARCHAR2(100)     
  7. )     
  8.      
  9. insert into TMP_MICHAEL (USER_ID, USER_NAME, SALARY, OTHER_INFO)     
  10. values ('michael''Michael', 5000, 'http://sjsky.iteye.com');     
  11. insert into TMP_MICHAEL (USER_ID, USER_NAME, SALARY, OTHER_INFO)     
  12. values ('zhangsan''张三', 10000, null);     
  13. insert into TMP_MICHAEL (USER_ID, USER_NAME, SALARY, OTHER_INFO)     
  14. values ('aoi_sola''苍井空', 99999.99, 'twitter account');     
  15. insert into TMP_MICHAEL (USER_ID, USER_NAME, SALARY, OTHER_INFO)     
  16. values ('李四''李四', 2500, null);       

 

 

(1)只有输入IN参数,没有输出OUT参数

  1. CREATE OR REPLACE PROCEDURE TEST_MICHAEL_NOOUT(P_USERID    IN VARCHAR2,     
  2.                                                P_USERNAME  IN VARCHAR2,     
  3.                                                P_SALARY    IN NUMBER,     
  4.                                                P_OTHERINFO IN VARCHAR2) IS     
  5. BEGIN     
  6.      
  7.   INSERT INTO TMP_MICHAEL     
  8.     (USER_ID, USER_NAME, SALARY, OTHER_INFO)     
  9.   VALUES     
  10.     (P_USERID, P_USERNAME, P_SALARY, P_OTHERINFO);     
  11.      
  12. END TEST_MICHAEL_NOOUT;   
  1. (二)、既有输入IN参数,也有输出OUT参数,输出是简单值(非列表)

    1. CREATE OR REPLACE PROCEDURE TEST_MICHAEL(P_USERID IN VARCHAR2,     
    2.                                          P_SALARY IN NUMBER,     
    3.                                          P_COUNT  OUT NUMBER) IS     
    4.   V_SALARY NUMBER := P_SALARY;     
    5. BEGIN     
    6.   IF V_SALARY IS NULL THEN     
    7.     V_SALARY := 0;     
    8.   END IF;     
    9.   IF P_USERID IS NULL THEN     
    10.     SELECT COUNT(*)     
    11.       INTO P_COUNT     
    12.       FROM TMP_MICHAEL T     
    13.      WHERE T.SALARY >= V_SALARY;     
    14.   ELSE     
    15.     SELECT COUNT(*)     
    16.       INTO P_COUNT     
    17.       FROM TMP_MICHAEL T     
    18.      WHERE T.SALARY >= V_SALARY     
    19.        AND T.USER_ID LIKE '%' || P_USERID || '%';     
    20.   END IF;     
    21.   DBMS_OUTPUT.PUT_LINE('v_count=:' || P_COUNT);     
    22. END TEST_MICHAEL;  

     

    (三)、输入输出参数是同一个(IN OUT)

     

    1. CREATE OR REPLACE PROCEDURE TEST_P_INOUT(P_USERID IN VARCHAR2,     
    2.                                          P_NUM    IN OUT NUMBER) IS     
    3.   V_COUNT  NUMBER;     
    4.   V_SALARY NUMBER := P_NUM;     
    5. BEGIN     
    6.   IF V_SALARY IS NULL THEN     
    7.     V_SALARY := 0;     
    8.   END IF;     
    9.      
    10.   SELECT COUNT(*)     
    11.     INTO V_COUNT     
    12.     FROM TMP_MICHAEL     
    13.    WHERE USER_ID LIKE '%' || P_USERID || '%'     
    14.      AND SALARY >= V_SALARY;     
    15.   P_NUM := V_COUNT;     
    16. END TEST_P_INOUT; 

     

 

             

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值