2

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;

/

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值