1.Bind Variables
when you embed an INSERT,UPDATE,DELETE,or SELECT SQL statement directly in your PL/SQL code,PL/SQL truns the variables in the WHERE and VALUES clauses into bind variables automatically.
For example:
'DELETE FROM EMPLOYEES WHERE EMPLOYEE_ID = :id' USING emp_id;
2.声明常量
常量的声明和变量的声明是类似的,除了两点。一,你必须加关键字CONSTANT。二,你必须立即给变量赋值。而且以后就不能再给此常量赋值了。
例如:
DECLARE
credit_limit CONSTANT NUMBER :=5000.00;
3.处理查询
PL/SQL程序解决查询和处理结果集的每行的方法往往是这样的:
BEGIN
FOR someone IN (SELECT * FROM employees WHERE employee_id < 120)
LOOP
DBMS_OUTPUT.PUT_LINE('First name=' || someone.first_name || ',Last name =' || someone.last_name);
END LOOP;
END;
4. PL/SQL Subprograms
PL/SQL有两种类型的Subprograms: procedures and functions.
PROCEDURE 自定义过程名(参数名称 IN/OUT 参数类型,参数名称 IN/OUT 参数类型) AS
BEGIN
END;
5. 认识一下%TYPE和%ROWTYPE这两种特殊的数据类型。它们方便了我们和数据库交互。
The %TYPE 让你新定义的变量 与 已定义的变量或者数据库中某一列 保持一样的数据类型。 例如 v_last_name employees.last_name%TYPE;
The %ROWTYPE provides a record type that represents a row in a table. 它可以用来保存一整行的数据。
提到%ROWTYPE就让我不得不想到了CURSORS游标啊。
什么是游标?游标又是如何和%ROWTYPE有关系的呢?
游标是映射在结果集中一行数据上的位置实体,有了游标,用户就可以使用游标来访问结果集中的任意一行数据。提取当前行的数据后,即可对该行数据进行操作。
游标分为显示游标和隐式游标;
DECLARE
CURSOR c1 IS
SELECT * FROM employees WHERE employee_id = 120;
employee_rec c1%ROWTYPE;
BEGIN
OPEN c1;
FETCH c1 INTO employee_rec;
DBMS_OUTPUT.PUT_LINE('Employee name: ' || employee_rec.last_name);
CLOSE c1;
END;
6. PL/SQL控制语句
IF-THEN-ELSE
CASE
FOR-LOOP
WHILE-LOOP
EXIT-WHEN
GOTO
例如:
DECLARE
jobid employees.job_id%TYPE;
empid employees.employee_id%TYPE := 115;
sal employees.salary%TYPE;
sal_raise NUMBER(3,2);
BEGIN
SELECT job_id, salary INTO jobid, sal from employees WHERE employee_id = empid;
CASE
WHEN jobid = 'PU_CLERK' THEN
IF sal < 3000 THEN sal_raise := .12;
ELSE sal_raise := .09;
END IF;
WHEN jobid = 'SH_CLERK' THEN
IF sal < 4000 THEN sal_raise := .11;
ELSE sal_raise := .08;
END IF;
WHEN jobid = 'ST_CLERK' THEN
IF sal < 3500 THEN sal_raise := .10;
ELSE sal_raise := .07;
END IF;
ELSE
BEGIN
DBMS_OUTPUT.PUT_LINE('No raise for this job: ' || jobid);
END;
END CASE;
UPDATE employees SET salary = salary + salary * sal_raise WHERE employee_id = empid;
COMMIT;
END;
/