chapter 1, 2, 3
pl/sql入门
pl/sql语言基础
有效的编码风格
[@more@]PL/SQL 入门
Pl/sql :procedural language extensions to SQL (SQL 的过程化扩展)
不作为独立存在的语言,一半使用在oracle 数据库, oracle Forms (reports)里面的触发 。
Pl/sql 记录
记录是一种复杂的数据接口,大致等于数据库里面的行。
建立了保存四季销售记录的record
Type sales_quarters_rec is record
(
Q1_sales number ,
Q2_sales number,
Q3_sales number,
Q4_sales number
);
Pl/ sql 表
驻留内存的对象,类似数组的结构需要。类似于表但不等同于表。目前pl/sql 表只能包含一列和一个主键(类型必须为binary_integer)
Type company_name_tab is table of varchar2(100) index by binary_integer;
Company_names company_names_tab; --声明在代码中要使用的表。
内置函数
字符函数 日期函数 数字函数 转换函数
内置包
Dbms_output
Dbms_pipe
Dbms_lock
控制结构
If 条件控制
循环控制 for, while, 简单的循环
Goto null 顺序控制
基于游标的数据库访问
异常处理
模块化结构
存储过程,函数和包
几个优秀的pl/sql 功能
锚定的声明
Segment1 mtl_system_items_b.segment1%type;
内置函数
Length 字符串长度
Substr /instr
msi.segment1 = SUBSTR (v_segment1, 1, LENGTH (v_segment1) - 2) || '00'
--取得料号前n-2位
IF INSTRB(i.line_type,'Cash_Discount',1)>0 THEN
--如果其中包含cash_discount 字符串,则。。。
内置包
游标for循环
免去声明并锚定的
不用写open , fetch, close
不用检查%found 属性
嵌套的块
Begin end …. 表明层次
模块的重载
package body check
is
function value_ok(date_in in date ) return boolean
is
begin
return date_in<= sysdate;
end;
function value_ok(number_in in number) return boolean
is
begin
return number_in>0;
end;
局部模块
局部定义不能被外部的pl/sql 调用
包
模块,变量, 表 , 记录, 游标和异常的集合。
充分使用
PL/SQL 语言基础
字符集 :字母 数字 符号 空白
不区分大小写
符号
标识符:
最多30个字符
必须字母为开头
可以包括美元符号,_下划线, # 散列符
不包含空格
保留字
直接量
IF ‘Steven’= ‘steven’ -- false
字符串中嵌入单引号
输入插入单引号就插入两个相同的’’ , 插入两个相同的单引号来代替。
数字直接量
布尔直接量 不加引号
分号界定符:每个语句以分号作为结束的标记
单行注释
多行注释
/*
---------------------------------------------------------------------------------------------
-- File Name : XXUTS_CONTRACT_EXEC_REPORT.pkb
-- Program Name : XXUTS_CONTRACT_EXEC_REPORT
-- Purpose : uses to summary order and shipping information
-- parameters :
-- 1.p_cust_po Optional
-- 2.p_sales_region Optional
-- 3.p_sales_name Optional
-- 4.p_curr_code Required
-- 5.p_item_prod_line Optional
-- 6.p_item_prod_family Optional
-- 7.p_order_date_from Optional
-- 8.p_order_date_to Optional
-- 9.p_act_ship_date_from Optional
-- 10.p_act_ship_date_to Optional
-- 11.p_shipping_status Optional
-- Dependencies :
--
-- Modification History
---------------------------------------------------------------------------------------------
-- | WHEN | Ver | WHO | WHAT
--------------------------------------------------------------------------------------
-- 27-Jul-06 |v8.0 | Aaron Su | CMP2440 Modify the cost
---------------------------------------------------------------------------------------------
*/
PRAGMA
通知编译程序,编译的时候处理,不在运行的时候执行
EXCEPTION_INIT 特定的错误号与程序中的声明异常标识符关联起来。
RESTRICT_REFERENCES 通知编译程序打包程序的纯度
SERIALLY_REUSABLE 在数据引用之间不要保持包级别数据
块结构
块头
IS
声明段
BEGIN
执行段
Exception
异常段
END;
块的作用域
有效的编码风格
有效布局的基本原则:展现并强化程序的逻辑结构
缩排
大小写
每排至多写一条语句
忽略声明的排列
格式化多行语句
格式化SQL 语句,控制语句,pl/sql 块, 包
注释:
解释为什么,不是怎么样
注释声明语句:给每个声明提供各自的注释
注释包
/*
---------------------------------------------------------------------------------------------
-- File Name : XXUTS_CONTRACT_EXEC_REPORT.pkb
-- Program Name : XXUTS_CONTRACT_EXEC_REPORT
-- Purpose : uses to summary order and shipping information
-- parameters :
-- 1.p_cust_po Optional
-- 2.p_sales_region Optional
-- 3.p_sales_name Optional
-- 4.p_curr_code Required
-- 5.p_item_prod_line Optional
-- 6.p_item_prod_family Optional
-- 7.p_order_date_from Optional
-- 8.p_order_date_to Optional
-- 9.p_act_ship_date_from Optional
-- 10.p_act_ship_date_to Optional
-- 11.p_shipping_status Optional
-- Dependencies :
--
-- Modification History
---------------------------------------------------------------------------------------------
-- | WHEN | Ver | WHO | WHAT
--------------------------------------------------------------------------------------
-- 27-Jul-06 |v8.0 | Aaron Su | CMP2440 Modify the cost
---------------------------------------------------------------------------------------------
*/