有多种方式给一个变量赋值:

  • 使用赋值操作符( := ) 给变量赋值,值可以是常量、变量、表达式或者子程序返回值。
  • 使用 SELECT INTO 或 FETCH 语句给变量赋值,值多来自于表或者 SQL 运算结果。
  • 将变量作为子程序的 OUT 或者 IN OUT 参数传入,然后在子程序内部对该参数赋值。
  • 将变量绑定到一个值上。

使用赋值操作符给变量赋值

使用赋值操作符( := ),可以在子程序的声明部分或者执行部分将一个表达式的值赋给一个变量。

在子程序的声明部分,可以在变量声明的时候初始化一个值,语法格式如下:

  1. variable_name data_type := expression ;

在子程序的执行部分,可以使用赋值语句给变量赋值。语法格式如下:

  1. variable_name := expression ;
  • 示例:声明部分变量初始化
  1. i_cnt number := -1;
  2. b_ret boolean := FALSE;
  • 示例:执行部分变量赋值
  1. b_ret := (i_cnt = 1);

使用 SELECT INTO 语句给变量赋值

如果想在子程序或包中使用表中某些列的值,需要先使用 SELECT INTO 语句把表的值取出来赋值给变量。

  • 示例:使用赋值操作符给变量赋值
  1. delimiter /
  2. CREATE OR REPLACE FUNCTION f_maxid_of_ware RETURN ware.w_id%TYPE
  3. IS
  4. i_id ware.w_id%TYPE := -1;
  5. BEGIN
  6. SELECT max(w_id) INTO i_id FROM ware ;
  7. RETURN i_id;
  8. EXCEPTION
  9. WHEN OTHERS THEN
  10. RETURN NULL;
  11. END;
  12. /
  13. delimiter ;
  14. obclient> select f_maxid_of_ware from dual;
  15. +-----------------+
  16. | F_MAXID_OF_WARE |
  17. +-----------------+
  18. | 2 |
  19. +-----------------+
  20. 1 row in set (0.04 sec)
  • 示例:使用 FETCH INTO 给变量赋值

除了可以用 SELECT INTO 对变量赋值外,还可以使用显式游标的 FETCH INTO 语句给变量赋值。

  1. delimiter /
  2. CREATE OR REPLACE FUNCTION f_maxid_of_ware RETURN ware.w_id%TYPE
  3. IS
  4. i_id ware.w_id%TYPE := -1;
  5. CURSOR c1 IS SELECT max(w_id) FROM ware ;
  6. BEGIN
  7. OPEN c1;
  8. FETCH c1 INTO i_id;
  9. CLOSE c1;
  10. RETURN i_id;
  11. EXCEPTION
  12. WHEN OTHERS THEN
  13. RETURN NULL;
  14. END;
  15. /
  16. delimiter ;
  17. obclient>
  18. obclient> select f_maxid_of_ware from dual;
  19. +-----------------+
  20. | F_MAXID_OF_WARE |
  21. +-----------------+
  22. | 2 |
  23. +-----------------+
  24. 1 row in set (0.03 sec)