发表于:2008.05.06 15:14
分类: sql/plus
出处:oracle
本课重点:
1、了解PLSQL执行区间的重要性
2、写执行语句
3、描述嵌套块的规则
4、执行且测试PLSQL块
5、使用代码惯例
课程一 写执行语句
一、PLSQL 块的语法规则:
1、语句可以跨跃几行。
2、词汇单元可以包括:分隔符、标识符、文字、和注释内容。
3、分隔符:
+-*/=<>||....
4、标识符:
最多30个字符,不能有保留字除非用双引号引起。
字母开头,不与列同名。
5、文字串:如 V_ENAME:='FANCY';要用单引号括起来。
数值型可以用简单记数和科学记数法。
6、注释内容:单行时用-- 多行用/* */
与C很相似
二、SQL函数在PL/SQL的使用:
1、可用的:
单行数值型、字符型和转换型,日期型。
2、不可用的:
最大、最小、DECODE、分组函数。
实例:
BEGIN
SELECT TO_CHAR(HIREDATE,'MON,DD,YYYY') FROM EMP;
END;
V_comment:=user||':'||sysdate; -- 会编译出错
V_comment:=user||':'||to_char(sysdate); --正确
如果有可能,PLSQL都会进行数据一致性的转换,但ORACLE推荐你应该进行显示的转换,因为这样会提高性能。
三、嵌套块和变量作用区域
1、执行语句允许嵌套时嵌套。
2、嵌套块可以看作正常的语句块。
3、错误处理模块可以包括一个嵌套块
4、exponential指数 逻辑、算数、连接、小括号
5、看正面实例:
declare
vjob varchar(9);
v_count number:=0;
vtotal date:=sysdate +7;
c_tax constant number(3,2):=8.25;
v_valid boolean not null:=true;
ttt vtotal%type;
begin
--select sysdate into vtotal from dual;--体会有无此句与结果的影响
dbms_output.put_line (vtotal);
end;
/
注意:在执行块之前,要在SQL PLUS中执行:SET SERVEROUTPUT ON
三、以实例来说明函数的参数声明作用域
declare
v_weight number(3):=600;
v_message varchar2(255):='product10000';
begin
declare
--sub-block
v_weight number(3):=1;
v_message varchar2(255):='pro300';
begin
v_weight:=v_weight +1;
end;
v_weight:=v_weight +1;
v_message:=v_message || 'my name';
end;
/
子块中的V_WEIGHT值为 2
我们可以在子块中加入:dbms_output.put_line('subblock value is '||v_weight);
在主体中加入:dbms_output.put_line('main value is '||v_weight);
我们发现MAINBLOCK中V_WEIGHT为 601
改动:
1、在主块的声明中加 v_date date default sysdate;
在子块中加入:dbms_output.put_line('subblock date value is '||v_date);
执行结果:subblock date value is 22-11月-01
****说明:主块中的变量,如果子块中没有同名变量声明,则继承主块中的声明和初始化值;
2、在子块中加入:v_sub char(9);
dbms_output.put_line('subblock char value is '||v_sub);
此时正常输出。
在主块中加入:dbms_output.put_line('main char value is '||v_sub);
输出:ORA-06550: 第 21 行, 第 45 列:
PLS-00201: 必须说明标识符 'V_SUB'
说明:
子块中声明的变量主块中并不知晓,因此出错。
了解了此实例,一切情况的变量的值的走向就都明了了。