Oracle PL/SQL例9:为变量赋值

2022-12-20 12:01:27 浏览数 (1)

编者按:

四十不惑是要有自己的判断力。根据自身的状况,知道对自己而言,什么是最重要的!

最好的学习是实践加上看官方文档。官方文档中的代码例更是精华和重点所在。

IT行业如此,编程如此,Oracle PL/SQL的学习更是如此。

本系列以摘自《Database PL/SQL Language Reference》的PL/SQL代码例为主进行介绍。

【免责声明】本公众号文章仅代表个人观点,与任何公司无关。

编辑|SQL和数据库技术(ID:SQLplusDB)

Oracle PL/SQL例

Oracle PL/SQL编程基础 Oracle PL/SQL例2:处理查询的结果行(基础循环) Oracle PL/SQL例3:使用双引号 Oracle PL/SQL例4:文字(Literals)换行的处理 Oracle PL/SQL例5:注释 Oracle PL/SQL例6:声明变量/常量 Oracle PL/SQL例7:%TYPE 属性 Oracle PL/SQL例8:标识符引用

变量赋值的方法主要包括如下方法:

代码语言:javascript复制
1. 通过赋值语句为变量赋值
2. 使用SELECT INTO或FETCH语句为变量赋值
3. 将变量作为OUT或IN OUT参数传递给子程序,然后在子程序内赋值。

1. 通过赋值语句为变量赋值

代码语言:javascript复制
variable_name := expression;

例:

代码语言:javascript复制
DECLARE  -- You can assign initial values here
  wages          NUMBER;
  hours_worked   NUMBER := 40;
  hourly_salary  NUMBER := 22.50;
  bonus          NUMBER := 150;
  country        VARCHAR2(128);
  counter        NUMBER := 0;
  done           BOOLEAN;
  valid_id       BOOLEAN;
  emp_rec1       employees%ROWTYPE;
  emp_rec2       employees%ROWTYPE;
  TYPE commissions IS TABLE OF NUMBER INDEX BY PLS_INTEGER;
  comm_tab       commissions;
 
BEGIN  -- You can assign values here too
  wages := (hours_worked * hourly_salary)   bonus;
  country := 'France';
  country := UPPER('Canada');
  done := (counter > 100);
  valid_id := TRUE;
  emp_rec1.first_name := 'Antonio';
  emp_rec1.last_name := 'Ortiz';
  emp_rec1 := emp_rec2;
  comm_tab(5) := 20000 * 0.15;
END;
/

2. 使用SELECT INTO或FETCH语句为变量赋值

代码语言:javascript复制
SELECT select_item [, select_item ]... 
INTO variable_name [, variable_name ]...
FROM table_name;

例:

代码语言:javascript复制
DECLARE
  bonus   NUMBER(8,2);
BEGIN
  SELECT salary * 0.10 INTO bonus
  FROM employees
  WHERE employee_id = 100;
END;

DBMS_OUTPUT.PUT_LINE('bonus = ' || TO_CHAR(bonus));
/
结果:
bonus = 2400

3. 将变量作为OUT或IN OUT参数传递给子程序,然后在子程序内赋值。

代码语言:javascript复制
DECLARE
  emp_salary  NUMBER(8,2);
 
  PROCEDURE adjust_salary (
    emp        NUMBER, 
    sal IN OUT NUMBER,
    adjustment NUMBER
  ) IS
  BEGIN
    sal := sal   adjustment;
  END;
 
BEGIN
  SELECT salary INTO emp_salary
  FROM employees
  WHERE employee_id = 100;
 
  DBMS_OUTPUT.PUT_LINE
   ('Before invoking procedure, emp_salary: ' || emp_salary);
 
  adjust_salary (100, emp_salary, 1000);
 
  DBMS_OUTPUT.PUT_LINE
   ('After invoking procedure, emp_salary: ' || emp_salary);
END;
/
结果:
Before invoking procedure, emp_salary: 24000
After invoking procedure, emp_salary: 25000

0 人点赞