ORACLE PLSQL编程详解 全8篇

.

bDone BOOLEAN; BEGIN

bDone := FALSE;

WHILE NOT bDone LOOP Null; END LOOP; END;

2.6.3 数据库赋值 数据库赋值是通过 SELECT语句来完成的,每次执行 SELECT语句就赋值一次,一般要求被赋值的变量与SELECT中的列名要一一对应。如:

例14:

DECLARE

emp_id emp.empno%TYPE :=7788; emp_name emp.ename%TYPE; wages emp.sal%TYPE; BEGIN

SELECT ename, NVL(sal,0) + NVL(comm,0) INTO emp_name, wages FROM emp WHERE empno = emp_id;

DBMS_OUTPUT.PUT_LINE(emp_name||'----'||to_char(wages)); END;

提示:不能将SELECT语句中的列赋值给布尔变量。

2.6.4 可转换的类型赋值

CHAR 转换为 NUMBER:

使用 TO_NUMBER 函数来完成字符到数字的转换,如:

v_total := TO_NUMBER('100.0') + sal;

NUMBER 转换为CHAR:

使用 TO_CHAR函数可以实现数字到字符的转换,如:

v_comm := TO_CHAR('123.45') || '元' ;

字符转换为日期:

使用 TO_DATE函数可以实现 字符到日期的转换,如:

v_date := TO_DATE('2001.07.03','yyyy.mm.dd');

页脚

.

日期转换为字符

使用 TO_CHAR函数可以实现日期到字符的转换,如:

v_to_day := TO_CHAR(SYSDATE, 'yyyy.mm.dd hh24:mi:ss') ;

2.7 变量作用范围及可见性

在PL/SQL编程中,如果在变量的定义上没有做到统一的话,可能会隐藏一些危险的错误,这样的原因主要是变量的作用范围所致。变量的作用域是指变量的有效作用范围,与其它高级语言类似,PL/SQL的变量作用范围特点是:

变量的作用范围是在你所引用的程序单元(块、子程序、包)内。即从声明变量开始到该块的结束。

一个变量(标识)只能在你所引用的块内是可见的。

当一个变量超出了作用范围,PL/SQL引擎就释放用来存放该变量的空间(因为它可能不用了)。

在子块中重新定义该变量后,它的作用仅在该块内。

例15:

DECLARE Emess char(80); BEGIN

DECLARE V1 NUMBER(4); BEGIN

SELECT empno INTO v1 FROM emp WHERE LOWER(job)='president'; DBMS_OUTPUT.PUT_LINE(V1); EXCEPTION

When TOO_MANY_ROWS THEN

DBMS_OUTPUT.PUT_LINE ('More than one president'); END;

DECLARE V1 NUMBER(4); BEGIN

SELECT empno INTO v1 FROM emp WHERE LOWER(job)='manager'; EXCEPTION

When TOO_MANY_ROWS THEN

DBMS_OUTPUT.PUT_LINE ('More than one manager'); END;

EXCEPTION

When others THEN

Emess:=substr(SQLERRM,1,80); 页脚

.

DBMS_OUTPUT.PUT_LINE(emess); END;

2.8 注释

在PL/SQL里,可以使用两种符号来写注释,即: 使用双 ‘-‘ ( 减号) 加注释

PL/SQL允许用 – 来写注释,它的作用范围是只能在一行有效。如:

V_Sal NUMBER(12,2); -- 人员的工资变量。 使用 /* */ 来加一行或多行注释,如: /***********************************************/ /* 文件名: department_salary.sql */ /* 作 者: EricHu */ /* 时 间: 2011-5-9 */

/***********************************************/

提示:被解释后存放在数据库中的 PL/SQL 程序,一般系统自动将程序头部的注释去掉。只有在 PROCEDURE 之后的注释才被保留;另外程序中的空行也自动被去掉。

2.9 简单例子

2.9.1 简单数据插入例子

例16:

/***********************************************/ /* 文件名: test.sql */ /* 说 明:

一个简单的插入测试,无实际应用。*/ /* 作 者: EricHu */ /* 时 间: 2011-5-9 */

/***********************************************/ DECLARE

v_ename VARCHAR2(20) := 'Bill'; v_sal NUMBER(7,2) :=1234.56; v_deptno NUMBER(2) := 10; v_empno NUMBER(4) := 8888; BEGIN

INSERT INTO emp ( empno, ename, JOB, sal, deptno , hiredate ) 页脚

.

VALUES (v_empno, v_ename, 'Manager', v_sal, v_deptno, TO_DATE('1954.06.09','yyyy.mm.dd') ); COMMIT; END;

2.9.2 简单数据删除例子

例17:

/***********************************************/ /* 文件名: test_deletedata.sql */ /* 说 明:

简单的删除例子,不是实际应用。 */ /* 作 者: EricHu */ /* 时 间: 2011-5-9 */

/***********************************************/ DECLARE

v_ename VARCHAR2(20) := 'Bill'; v_sal NUMBER(7,2) :=1234.56; v_deptno NUMBER(2) := 10; v_empno NUMBER(4) := 8888; BEGIN

INSERT INTO emp ( empno, ename, JOB, sal, deptno , hiredate ) VALUES ( v_empno, v_ename, ‘Manager’, v_sal, v_deptno, TO_DATE(’1954.06.09’,’yyyy.mm.dd’) ); COMMIT; END; DECLARE

v_empno number(4) := 8888; BEGIN

DELETE FROM emp WHERE empno=v_empno; COMMIT; END;

第三章:PL/SQL流程控制语句

介绍PL/SQL的流程控制语句, 包括如下三类:

控制语句: IF 语句

循环语句: LOOP语句, EXIT语句 顺序语句: GOTO语句, NULL语句

页脚

.

3.1 条件语句

IF <布尔表达式> THEN PL/SQL 和 SQL语句 END IF;

----------------------- IF <布尔表达式> THEN PL/SQL 和 SQL语句 ELSE 其它语句 END IF;

----------------------- IF <布尔表达式> THEN PL/SQL 和 SQL语句

ELSIF < 其它布尔表达式> THEN 其它语句

ELSIF < 其它布尔表达式> THEN 其它语句 ELSE 其它语句 END IF;

提示: ELSIF 不能写成 ELSEIF 例1:

DECLARE

v_empno employees.employee_id%TYPE :=&empno; V_salary employees.salary%TYPE; V_comment VARCHAR2(35); BEGIN

SELECT salary INTO v_salary FROM employees WHERE employee_id = v_empno; IF v_salary < 1500 THEN

V_comment:= '太少了,加点吧~!'; ELSIF v_salary <3000 THEN V_comment:= '多了点,少点吧~!'; ELSE

V_comment:= '没有薪水~!'; END IF;

DBMS_OUTPUT.PUT_LINE(V_comment); exception

when no_data_found then

DBMS_OUTPUT.PUT_LINE('没有数据~!'); 页脚

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4