- 浏览: 72138 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
LeeYee:
zz894571429 写道我把你的oxcow-MsgBox- ...
基于jQuery的简单消息框MsgBox插件 -
zz894571429:
我把你的oxcow-MsgBox-jQuery的js,封装到我 ...
基于jQuery的简单消息框MsgBox插件 -
xiaoxiaozhu:
基于jQuery的简单消息框MsgBox插件 -
liujun58love:
不错,学习了,有机会研究研究。感谢楼主分享
【HTML5活动】HTML5 Canvas实现贪吃蛇
1、SQL部分
1.1、SQL分类
1、数据查询语句(SELECT 语句):用于检索数据库数据
2、数据操纵语言(Data Manipulation Language,DML):用于改变数据库数据,包括INSERT、UPDATE和DELETE三条语句
3、事物控制语句(Transaction Contorl Language,TCL):用户维护数据库的一致性,包括COMMIT、ROLLBACK和SAVEPOINT三条语句。
3.1 COMMIT 确认已经进行的数据库更改
3.2 ROLLBACK 取消已经进行的数据库更改
3.3 SAVEPOINT 设置保存点,以取消部分数据库改变
4、数据定义语句(Data Definition Language,DDL):用于建立、修改和删除数据库对象。比如CREATE TABLE 、ALTER TABLE和DROP TABLE。DDL语句会自动提交事务
5、数据库控制语言(Data Control Language,DCL):用于执行权限授予和收回操作,包括GRANT和REVOKE两条命令。DCL语句会自动提交事务
5.1 GRANT 命令用户给用户或角色授予权限
5.2 REVOKE 命令用于收回用户或角色所具有的权限。
1.2、SQL语句编写规则
1、SQL关键字不区分大小写;
2、对象名和列名不区分大小写;
3、字符值和日期值区分大小写;
4、SQL语句可以分布在多行,增加可读性;
5、在SQL*Plus中,SQL语句要以分号结束;
1.3、命令行中连接SQL*Plus
-- username:数据库用户名 password:用户密码 @server:主机字符串(网络服务名),连接本地数据库时不需要提供 sqlplus [username]/[password][@server] -- 连接到yt$dev数据库。用户密码为yt sqlplus yt$dev/yt -- 连接到远程数据库 sqlplus yt$dev/yt@orcl
2、PL/SQL 基础
2.1、PL/SQL 块结构
/*
* 定义部分——定义常量、变量、复杂数据类型、游标、例外
*/
BEGIN
/*
* 执行部分——PL/SQL 语句和SQL语句
*/
EXCEPTION
/*
* 例外处理部分——处理运行错误
*/
END; /* 程序结束标记 */
定义部分以 DECLARE 开始,该部分可省略;
执行部分以 BEGIN 开始,该部分是必须的;
例外处理部分以 EXCEPTION 开始,该部分可选;END为结束标记,分号不能省略。
Notes: DECLARE、BEGIN、EXCEPTION后均无分号
2.2、PL/SQL 块分类
2.2.1 匿名块
没有名称的PL/SQL块。比如:
declare v_name VARCHAR2(20); begin select name into v_name from customer where id = &id; -- &id为替换变量 dbms_output.put_line('用户姓名:'||v_name); exception when NO_DATA_FOUND THEN dbms_output.put_line('请输入正确的雇员号!'); end;
Notes:
1、在SQL*Plus中输入反斜杠调用该过程;
2、dbms_output.put_line生效,需要设置serveroutput为on < set serveroutput on >;
2.2.2 命名块
类似于匿名块。只不过在PL/SQL块前使用<<>>加以标记.比如 :<<outer>>
declare v_deptname date; v_dname varchar2(10); begin <<inner>> begin select register_time into v_deptname from customer where id = &id; end; select name into v_dname from customer where register_time = v_deptname; dbms_output.put_line('地址:'||v_dname); end;
示例中<<outer>>和<<inner>>分别是主块(外层块)和子块(内存块)的标记。这种PL/SQL块被称为命名块。
2.2.3 子程序
2.2.3.1 过程
用于执行特定操作。SQL*Plus中使用 CREATE PROCEDURE 命令建立过程。比如:
CREATE OR REPLACE PROCEDURE update_customer (new_name varchar2,id number) IS BEGIN update customer set name = new_name where id = id; END;
使用 <call 过程名> 或者 <exec 过程名> 调用过程.
Notes:
1、在 SQL*Plus 中调用可以使用 call 或者 exec ;
2、而在 Oracl SQL Deveploer 中只能使用 call ;
2.2.3.2 函数
函数用于返回特定数据。建立函数时,函数头部必须包含 RETURN 子句,而在函数体内必需要包含 RETURN 语句返回数据。SQL*Plus中使用 CREATE FUNCTION 命令建立函数。比如:
CREATE OR REPLACE FUNCTION id100(ename varchar2) return number is id_100 number(10); begin select id * 100 into id_100 from customer where lower(name) = lower(ename) and rownum < 2; return id_100; end;
2.2.3.3 包
包用于逻辑组合相关的过程和函数,由包规范和包体两部分组成。包规范用于定义公用的常量、变量、过程和函数。SQL*Plus中使用 CREATE PACKAGE 命令建立包规范。包规范只包含了过程和函数的说明,因此是无法调用执行的。比如:
CREATE OR REPLACE PACKAGE test_packe is procedure update_customer (new_name varchar2,id number); function id100(ename varchar2) return number; end;
SQL*Plus中使用 CREATE PACKAGE BODY 命令建立包体。只有创建了包体后才可以使用该包。比如:
CREATE OR REPLACE PACKAGE BODY test_packe is procedure update_customer (new_name varchar2,id number) is begin update customer set name = new_name where id = id; end; function id100(ename varchar2) return number is id_100 number(10); begin select id * 100 into id_100 from customer where lower(name) = lower(ename) and rownum < 2; end; end;
调用方式同单独的过程、函数调用方式,唯一不同的是需要在调用过程、函数时需要在其名称前加上名。
call test_packe.update_customer('leeyee',1);
Notes:
2.2.3.4 触发器
触发器是指隐含执行的存储过程。定义触发器时,必须指定出发事件及触发操作。常用触发时间包括 insert、update和 delete,而触发操作实际上是一个 PL/SQL 块。SQL*Plus中使用 CREATE TRIGGER 命令创建触发器。比如:
create or replace trigger update_custom_register before update of name on customer for each row begin :new.register_time := sysdate; end; -- 调用: -- 实际执行的语句为 update customer set name= 'leeyee',register_time = sysdate where id = 1; update customer set name= 'leeyee' where id = 1;
2.3.1、标量(Scalar)变量
2.3.1.1 常用标量类型
1.1.1 varchar2(n) : 可变长字符串。n 最大为32767字节。PL/SQL中 n 不应超过4000字节
1.1.2 char(n) : 固定长度字符串。 n 默认为 1, n 最大为32767字节。PL/SQL中 n 不应超过2000字节
1.1.3 number(p,s) : 固定长度整数和浮点数。p-精度,指定数字总位数,s-标度,指定小数点后的位数; number(4,2)定义整数最大2位
1.1.4 date : 日期。固定长度7字节
1.1.5 timestamp : 日期和时间数据。同date,但在显示时除过日期还有时间及上下午标识
1.1.6 long(n) : 变长字符产。类似varchar2,不过 n 最大为32760字节
1.1.7 long raw : 变长二进制数据。最大长度32760字节
1.1.8 boolean : 布尔变量。其值为true|false|null。该类型为PL/SQL数据类型
1.1.9 binary_integer : 整数。数值范围 -214783647 到 214783647 之间。该类型为PL/SQL数据类型
1.1.10 binary_float : 单精度浮点数。赋值时应带后缀f,比如 1.5f
1.1.11 binary_double : 双精度浮点数。赋值时应带后缀d,比如 1.0005d
2.3.1.2 定义标量变量
2.3.1.2.1 语法 :indentifier [constant] datatype [not null] [:= | default expr]
indentifier : 变量或常量名称
constant : 指定常量关键词
datatype : 数据类型
not null : 初始化数据不为空
:= : 赋值
default expr : 指定变量默认初始值
2.3.1.2.2 示例
v_name varchar2(10);
v_name constant number(3,2) := 5.5;
v_bool boolean not null default false;
2.3.1.2.3 使用示例
declare
v_name constant varchar2(20) := 'hello 标量使用示例';
begin
dbms_output.put_line(v_name);
end;
2.3.1.2.4 使用%type属性
定义变量时,可以使用 %type 属性声明变量类型为数据表定义类型。
declare /* *如果这里声明为varchar2(2),当查询赋值时, * 实际查询长度大于定义长度则会报错。因此这里使用%type属性, * 定义变量 v_name 的类型为表customer字段name的声明类型。 */ v_name customer.name%type; begin select name into v_name from customer where id = 1 ; dbms_output.put_line(v_name); end;
2.3.2、复合(Composite)变量
复合变量是用于存放多个值的变量。
2.3.2.1 PL/SQL 记录
PL/SQL 记录类似高级语言中的结构,每个PL/SQL记录一般都包含多个成员。
2.1.1 语法
TYPE record_name IS RECORD(
column_name {column_type | variable%TYPE | table.column%TYPE},
column_name1 {column_type | variable%TYPE | table.column%TYPE},
...
)
2.1.2 示例
DECLARE TYPE customer_record_type IS RECORD ( vname customer.name%type, vmoney customer.money%type ); cs_rc_type customer_record_type; BEGIN select name,money into cs_rc_type from customer where id = 1; dbms_output.put_line('姓名:'||cs_rc_type.vname||' 金额:'||cs_rc_type.vmoney); END;
2.3.2.2 PL/SQL 表
1、PL/SQL 表类似高级语言中的数组。
2、PL/SQL 表的元素个数没有限制,并且下标没有有下限(可为负)
3、使用 PL/SQL 表时必须首先在定义部分定义 PL/SQL 表类型和表变量,然后在执行部分中引用该表变量
4、不能作为表字段的数据类型
2.3.2.2.1 语法:
TYPE type_name IS TABLE OF
{column_type | variable%TYPE
| table.column%TYPE} [NOT NULL]
| table.%ROWTYPE
}
[INDEX BY type]; -- 主键类型。9.2前 type 只能为 BINARY_INTEGER。以后可以为字符串
2.3.2.2 .2 示例
DECLARE TYPE customer_table_type IS TABLE of customer.name%type index by binary_integer; name_table customer_table_type; BEGIN name_table(0) := '默认姓名'; select name into name_table(-1) from customer where id = 1; dbms_output.put_line('默认姓名: '||name_table(3)); dbms_output.put_line('姓名: '||name_table(-1)); dbms_output.put_line('第一索引名称: '||name_table.first); -- 亦可使用first().下同 dbms_output.put_line('最后索引名称: '||name_table.last); dbms_output.put_line('最后索引对应值: '||name_table(name_table.last)); dbms_output.put_line('数组长度: '||name_table.count); END; -- PL/SQL 记录、表结合使用的例子 DECLARE TYPE customer_record_type -- 声明record IS RECORD ( vname customer.name%type, vmoney customer.money%type ); TYPE customer_table_type -- 声明 table IS TABLE of customer_record_type --注意这里的 table 类型为 record index by binary_integer; name_table customer_table_type; BEGIN select name,money into name_table(-1) from customer where id = 1; dbms_output.put_line('姓名: '||name_table(-1).vname); dbms_output.put_line('金额: '||name_table(-1).vmoney); END;
2.3.2.3 嵌套表(Nested Table)
1、嵌套表类似高级语言中的数组。
2、下标不能为负
3、元素个数没有限制
4、可作为表字段的数据类型
5、使用嵌套表类型作为表字段类型时,需要为其指定专门的存储表。
2.3.2.3.1 语法:
CREATE OR REPLACE TYPE nest_type_name AS OBJECT(
colunm_name column_type,
colunm_name1 column_type,
...
);
CREATE OR REPLACE type_name IS TABLE OF nest_type_name;
2.3.2.3.2 示例:
-- 创建嵌套表类型对象 CREATE OR REPLACE TYPE nest_table_type AS OBJECT ( name varchar2(20), salary number(4,2) ); -- 创建嵌套表对象类型 CREATE OR REPLACE TYPE emp_array IS TABLE OF nest_table_type; -- 创建表 CREATE TABLE department ( deptno number(2), dname varchar2(10), employee emp_array -- 声明字段类型为嵌套表类型 ) NESTED TABLE employee STORE AS employee; -- 为其嵌套表类型指定特定的存储表 -- 插入内嵌表 insert into department ( deptno, dname, employee ) values ( '1', 'leeyee', emp_array( nest_table_type('lee',20), nest_table_type('yeee',30) ) ); -- 读取内嵌表 select * from table (select employee from department );
2.3.2.4 VARRAY 变长数组
1、VARRAY类似于嵌套表,可做为表字段和对象类型属性的数据类型。
2、相对于嵌套表,VARRAY的元素个数是有限制的
3、使用 VARRAY 类型作为表字段类型时,数据值与其他字段数据一起存放在表中,不需要额外指定存储表
2.3.2.4.1 语法:
CREATE OR REPLACE TYPE varray_type_name AS OBJECT (
colunm_name column_type,
colunm_name1 column_type,
...
)
CREATE TYPE type name IS VARRAY(20) OF varray_type_name;
2.3.2.4.2 示例:
-- 创建 VARRAY 类型对象 CREATE OR REPLACE TYPE var_cus_type AS OBJECT ( name varchar2(20), age number(3) ); -- 创建 VARRAY 对象类型 CREATE OR REPLACE TYPE var_type IS VARRAY(20) Of var_cus_type; -- 创建表 CREATE TABLE orders ( ordno number(4), createdate date, customers var_type -- 声明字段类型为 VARRAY 类型 ); -- 不需要为 VARRAY 类型的字段指定专门的存储表 -- 插入 INSERT INTO orders ( ordno, createdate, customers ) VALUES ( 1, sysdate, var_type( var_cus_type('leeyee',20), var_cus_type('oxcow',30), var_cus_type('abc',40) ) ); -- 查询 SELECT * FROM TABLE (SELECT customers FROM orders WHERE ordno=1 ) WHERE age > 20;
2.3.3、参照(Reference)变量
1.参照变量是指存放数值指针的变量
2.使用参照变量可以使得应用程序共享相同对象,降低占用空间。
3.常用参照变量类型有游标变量和对象类型变量
2.3.3.1 游标变量(REF CURSOR)
2.3.3.1.1 静态游标:
使用显示游标时,需要在定义显示游标是指定相应的select语句。
2.3.3.1.2 动态游标:
使用显示游标时,在定义时不指定相应的select语句,而是在打开游标时指定select语句。
2.3.3.1.3 示例:
DECLARE TYPE c1 IS REF CURSOR; emp_cursor c1; v_name customer.name%TYPE; v_sal customer.money%TYPE; BEGIN OPEN emp_cursor for select name, money from customer ; LOOP FETCH emp_cursor INTO v_name,v_sal; EXIT WHEN emp_cursor%NOTFOUND; dbms_output.put_line(v_name); END LOOP; CLOSE emp_cursor; END;
2.3.3.2 对象对象变量(REF obj_type)
1、当编写对象类型应用是,为了共享相同对象,可以使用REF引用对象类型。
2、REF实际上是指向对象实例的指针。
2.3.3.2.1 示例:
CREATE OR REPLACE TYPE home_type AS OBJECT ( name varchar2(20), salary number(4,2) ) CREATE TABLE homes OF home_type; INSERT INTO homes VALUES ('leeyee',20 );
2.3.4、LOB(Large Object)变量
用于存储大批量数据的变量
2.3.4.1 内部LOB
包括CLOB、BLOB和NCLOB.其数据均存储在数据库中,支持事务。其中BLOB用于存储大批量二进制数据,而CLOB/NCLOB用于存储大批量字符数据。
2.3.4.2 外部LOB
只有BFILE,该类型数据存储在OS文件中,不支持事务操作。BFILE则存储指向OS文件的指针。
2.4、PL/SQL基础其他
2.4.1、分隔符
2.4.1.1.单符号分隔符
+ 加法
% 属性提示符
' 字符串分隔符
. 组件分隔符
/ 除法操作符
( 表达式或列表分隔符
) 表达式或列表分隔符
: 非PL/SQL变量提示符
, 项分隔符(表名、列名等分隔符)
* 乘法
" 双引号变量分隔符
2.4.1.2.组合分隔符
= 等号
< 小于
> 大于
@ 远程数据库访问操作符
; 语句中止符
- 减法或负数
2.4.1.3.组合分隔符
:= 赋值
=> 关联操作符
|| 连接操作符
** 幂操作符
<< 标号开始分隔符
>> 标号开始分隔符
/* 多行注释开始分隔符
*/ 多行注释结束分隔符
.. 范围操作符
<> 不等操作符
!= 不等操作符
^= 不等操作符
<= 小于等于
>= 大于等于
-- 当行注释
2.5、PL/SQL建议编码规则
2.5.1、命名规则
1.定义变量,建议使用v_作前缀:v_job
2.定义常量,建议使用c_作签注:c_rate
3.定义游标,建议使用_cursor作后缀:emp_cursor
4.定义例外,建议使用e_作前缀:e_integrity_error
5.定义PL/SQL表示,建议使用_table_type作后缀:sal_table_type
6.定义PL/SQL表变量时,建议使用_table作后缀:sal_table
7.定义PL/SQL记录类型时,建议使用_record_type作后缀:emp_record_type
8.定义PL/SQL记录变量时,建议使用_record作后缀:emp_record
2.5.2、大小写规则
1.SQL关键字大写:SELECT\UPDATE\SET\WHERE etc.
2.PL/SQL关键字大写:DECLARE\BEGIN\END etc.
3.数据库类型大写:INT\VARCHAR2\DATE etc.
4.数据库类对象和列小写:emp\sal\ename etc.
发表评论
-
PL/SQL学习笔记[5]-流程控制语句
2011-11-22 21:26 11891 条件分支语句 1.1 IF语句 语法 写道 IF ... -
PL/SQL学习笔记[4]-PL/SQL块中使用SQL
2011-11-18 09:41 21041 检索单行数据 在PL/SQL ... -
PL/SQL学习笔记[3]-常用函数
2011-11-16 09:03 15261、常用数字函数 -- abs( ... -
PL/SQL学习笔记[2]-SQL语句
2011-11-14 16:31 1288最新整理版本:http://leeyee.github.io ... -
表索引字段嵌套函数引起的性能问题
2009-06-05 16:12 851先看这句SQL SELECT agentalias, C ... -
order by 语句对null字段的默认排序
2011-06-19 00:10 2308在使用order by语句进行 ...
相关推荐
以下是对PL/SQL的学习笔记的详细解析: 1. **什么是PL/SQL语言** PL/SQL是Oracle数据库为数据库管理员和开发人员设计的一种编程语言。它扩展了SQL的功能,允许编写包含控制结构、变量、过程和函数的程序段,这些...
PL/SQL是Oracle公司开发的一种过程化SQL扩展,它是Oracle数据库的重要组成部分,用于在数据库服务器上编写存储过程、函数、触发器、包等可执行...通过学习和掌握PL/SQL,开发者可以构建高效、复杂的数据库应用程序。
在本教程中,我们将深入探讨PL/SQL的基础知识,包括其与SQL的关系、程序设计的基本结构和组成元素。 ### SQL与PL/SQL SQL(Structured Query Language)是用于管理关系数据库的标准语言,主要负责数据查询、更新和...
PL/SQL数据库学习笔记 PL/SQL是一种高级的程序语言,主要用于Oracle数据库管理系统中。下面是PL/SQL数据库学习笔记的知识点总结。 一、基本原则 *瀑布模型:需求分析→设计(概要设计,详细设计:SQL语句,变量...
### PL/SQL学习笔记4 —— 集合与成员函数 #### 一、PL/SQL 表(索引表) 在PL/SQL中,**索引表**(也称为**PL/SQL表**)是一种非常有用的结构,它类似于数组但具有更多的灵活性。这种表是非持久化的,即它们不会...
在这个“我的PL/SQL学习笔记(一)”中,我们将探讨PL/SQL的基础知识,包括其语法结构、变量声明、流程控制以及如何与Oracle数据库中的数据进行交互。 首先,PL/SQL的基本结构分为声明部分、执行部分和异常处理部分...
在PL/SQL编程中,游标是处理查询结果集的重要工具。它们允许程序逐行处理结果,而不是一次性加载所有数据,这对于大型数据集尤其有用,因为它可以节省内存并提高性能。下面将详细解释游标的基本概念、分类以及如何在...
总的来说,“PL/SQL超级笔记”应该涵盖了从基本语法到高级特性的全面教程,通过学习,新手可以逐步掌握如何使用PL/SQL进行数据库编程,从而更好地管理和操作Oracle数据库。配合"oracle_ppt"中的PPT材料,学习效果会...
PL/SQL变量的声明和使用是编程的基础,涉及到变量的声明、初始化、数据类型、%type属性等。变量的赋值和使用也是需要掌握的内容。 此外,书中还涉及到了ORACLE数据库的安装、存储过程的编写、序列操作、数据类型...
### PL/SQL听课笔记 #### 一、PL/SQL简介 **PL/SQL**(Procedural Language for SQL...通过以上内容的学习,初学者可以从基础语法入手,逐步掌握PL/SQL的核心概念和技术细节,并通过实践应用不断提升自己的技能水平。
在PL/SQL编程中,存储过程和函数是关键的组件,它们允许我们将可重用的代码逻辑存储在数据库中,以便于管理和调用。本文主要探讨了存储过程、函数以及程序包的概念,特点,创建方法,执行方式,权限管理以及参数处理...
在PL/SQL的学习中,分区是数据库管理大型数据集的一种高效方法,特别是在处理大数据量时。本篇笔记主要探讨了何时应该使用分区以及Oracle支持的分区类型。 首先,当面对超过2GB的大数据表时,分区是十分必要的。这...
本文将深入探讨从"SQL,PL/SQL学习笔记"中提取的关键知识点,帮助编程人员更好地理解和运用这两种语言。 首先,我们关注SQL并行查询。通过`ALTER SESSION ENABLE PARALLEL DMl`,我们可以开启会话的并行DML操作,这...
这篇课堂笔记主要涵盖了基础的SQL查询语法和部分PL/SQL概念。 首先,SQL查询的基础是从数据库中选择数据。`SELECT`语句用于指定需要选取的列,如`SELECT ename, sal, job FROM emp;`。字段顺序可以自由调整,例如`...
### PL/SQL 学习笔记知识点详解 #### 1. PL/SQL 基本结构 - **DECLARE**: 在此部分声明变量、常量、数据类型及游标。 - **BEGIN**: 主程序体开始,可以包含任何合法的PL/SQL语句。 - **EXCEPTION**: 异常处理部分,...