编者按:
四十不惑是要有自己的判断力。根据自身的状况,知道对自己而言,什么是最重要的!
最好的学习是实践加上看官方文档。官方文档中的代码例更是精华和重点所在。
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