1、SQL PL/SQL 语法手册P2/7219-05-21目 录第一部分 SQL 语法部分 .3一、 CREATE TABLE 语句 .3二、 CREATE SEQUENCE 语句 .5三、 CREATE VIEW 语句 .6四、 INSERT 语句:.7五、 UPDATE 语句:.9六、 DELETE 语句:.10七、 TRUNCATE 语句:.11八、 各类 FUNCTIONS:.121.转换函数 :.122.日期函数 .163.字符函数 .204.数值函数 .285.单行函数 :.336.多行函数 .35第二部分 PL/SQL 语法部分 .41一、 PL/SQL 语言简介.41二、 变量说
2、明.48三、 PL/SQL 控制程序流.52四、 存储过程.54五、 存储函数.54六、 PACKAGE.54七、 触发器.56八、 应用实例.58P3/7219-05-21第一部分 SQL 语法部分一、 Create table 语句语句: CREATE TABLE schema.table_name( column datatype DEFAULT expr column_constraint .| table_constraint, column datatype DEFAULT expr column_constraint .| table_constraint .) PCTFREE
3、integer PCTUSED integerINITRANS integer MAXTRANS integerTABLESPACE tablespaceSTORAGE storage_clause RECOVERABLE | UNRECOVERABLE PARALLEL ( DEGREE integer | DEFAULT INSTANCES integer | DEFAULT )| NOPARALLEL CACHE | NOCACHE | CLUSTER cluster (column , column.) ENABLE enable_clause| DISABLE disable_cla
4、use .AS subquery表是 Oracle 中最重要的数据库对象,表存储一些相似的数据集合,这些数据描述成若干列或字段.create table 语句的基本形式用来在数据库中创建容纳数据行的表.create table 语句的简单形式接收表名,列名,列数据类型和大小.除了列名和描述外,还可以指定约束条件,存储参数和该表是否是个 cluster 的一部分.Schema 用来指定所建表的 owner,如不指定则为当前登录的用户.Table_name 用来指定所创建的表名,最长为 30 个字符,但不可以数字开头(可为下划线),但不可同其它对象或 Oracle 的保留字冲突.Column 用来
5、指定表中的列名,最多 254 个.Datatype 用来指定列中存储什么类型的数据,并保证只有有效的数据才可以输入.column_constraint 用来指定列约束,如某一列不可为空,则可指定为 not null.table_constraint 用来指定表约束,如表的主键,外键等.Pctfree 用来指定表中数据增长而在 Oracle 块中预留的空间. DEFAULT 为 10%,也就是说该表的每个块只能使用 90%,10%给数据行的增大时使用.Pctused 用来指定一个水平线,当块中使用的空间低于该水平线时才可以向该中加入新数据行.Parallel 用来指定为加速该表的全表扫描可以使用
6、的并行查询进程个数.Cache 用来指定该表为最应该缓存在 SGA 数据库缓冲池中的候选项.P4/7219-05-21Cluster 用来指定该表所存储的 cluster.Tablespace 用来指定用数据库的那个分区来存储该表的数据.Recoverable|Unrecoverable 用来决定是否把对本表数据所作的变动写入 Redo 文件.以恢复对数据的操作.As 当不指定表的各列时,可利用 As 子句的查询结果来产生数据库结构和数据.例:1) create table mytab1e(mydec decimal,myint inteter)tablespace user_datapctf
7、ree 5pctused 30;2) create table mytable2as ( select * from mytable1);P5/7219-05-21二、 create sequence 语句语句: CREATE SEQUENCE schema.sequence_nameINCREMENT BY integer START WITH integerMAXVALUE integer | NOMAXVALUEMINVALUE integer | NOMINVALUECYCLE | NOCYCLECACHE integer | NOCACHEORDER | NOORDER序列用来为表的
8、主键生成唯一的序列值.Increment by 指定序列值每次增长的值Start with 指定序列的第一个值Maxvalue 指定产生的序列的最大值Minvalue 指定产生的序列的最小值Cycle 指定当序列值逵到最大或最小值时,该序列是否循环.Cache 指定序列生成器一次缓存的值的个数Order 指定序列中的数值是否按访问顺序排序.例:1) create sequence myseqincrement by 4start with 50maxvalue 60minvalue 50cycle cache 3;2)sql create sequence new_s;sqlinsert in
9、to new (new_id,last_name,first_name)values(new_s.nextval,daur,permit);P6/7219-05-21三、 create view 语句 语句: CREATE OR REPLACE FORCE | NOFORCE VIEW schema.view_name(alias ,alias.)AS subqueryWITH CHECK OPTION CONSTRAINT constraint视图实际上是存储在数据库上旳 select 语句.每次在 sql 语句中使用视图时,表示该视图的 select 语句就用来得到需要的数据.Or rep
10、lace 创建视图时如果视图已存在,有此选项,新视图会覆盖旧的视图.Force 如有此选项,当视图基于的表不存在或在该模式中没有创建视图的权限时,也可以建立视图.As subquery 产生视图的 select 查询语句With check option 如果视图是基于单表的且表中所有的非空列都包含在视图中时,该视图可用于 insert 和 update 语句中,本 选项保证在每次插入或更新数据后,该数据可以在视 图中查到例:1) create or place view new_v asselect substr(d.d_last_name,1,3),d.d_lastname,d.d_fir
11、stname,b.b_start_date,b.b_locationfrom new1 d,new2 bwhere d.d_lastname=b.b_lastname;P7/7219-05-21四、 INSERT 语句:1. 语法INSERT INTO schema.table | view | subquery dblink (column , column .) VALUES (expr , expr .) | subqueryWHERE condition2. 插入单行使用 VALUES 关键词为新行的每一列指定一个值.如果不知道某列的值,可以使用NULL 关键词将其值设为空值(两个连续
12、的逗号也可以表示空值,也可使用 NULL 关键词)插入一行时试图为那些 NOT NULL 的列提供一个 NULL 值,会返回错误信息.举例:插入一条记录到 DEPARTMENT 表中INSERT INTO DEPARTMENT(DEPARTMENT_ID,NAME,LOCATION_ID)VALUES (01,COMPUTER,167)3. 插入多行将 SELECT 语句检索出来的所有数据行都插入到表中.这条语句通常在从一个表向另一个表快速复制数据行.举例:INSERT INTO ORDER_TEMPSELECT A.ORDER_ID,B.ITEM_ID,C.NAME,E.FIRST_NAME
13、|.|E.LAST_NAME,A.ORDER_DATE,A.SHIP_DATE,D.DESCRIPTION,B.ACTUAL_PRICE,B.QUANTITY,B.TOTALFROM SALES_ORDER A, ITEM B, CUSTOMER C,PRODUCT D, EMPLOYEE EWHERE MONTHS_BETWEEN(TO_DATE(A.ORDER_DATE),TO_DATE(01-7 月-91)0AND A.CUSTOMER_ID=C.CUSTOMER_IDAND C.SALESPERSON_ID=E.EMPLOYEE_IDAND A.ORDER_ID=B.ORDER_IDA
14、ND B.PRODUCT_ID=D.PRODUCT_IDP8/7219-05-214. 从其它表复制数据:要快速地从一个表向另一个尚不存在的表复制数据,可以使用 CREATE TABLE 语句定义该表并同时将 SELECT 语句检索的结果复制到新表中.CREATE TABLE EMPLOYEE_COPYASSELECT * FROM EMPLOYEEP9/7219-05-21五、 UPDATE 语句:1. 语法UPDATE schema.table | view | subquerydblink aliasSET (column , column .) = (subquery)| column
15、 = expr | (subquery) , (column , column .) = (subquery)| column = expr | (subquery) .WHERE conditionUPDATE 语句更新所有满足 WHERE 子句条件的数据行.同样,该语句可以用 SELECT语句检索得到.但 SELECT 必须只检索到一行数据值.否则报错.而且每更新一行数据,均要执行一次 SELECT 语句.举例:UPDATE EMPLOYEE_COPSET SALARY=SALARY-400WHERE TO_NUMBER(TO_CHAR(HIRE_DATE,YYMMDD)850101UPD
16、ATE ITEM_COP ASET A.ACTUAL_PRICE=(SELECT B.LIST_PRICEFROM PRICE B,SALES_ORDER CWHERE A.PRODUCT_ID=B.PRODUCT_ID ANDA.ORDER_ID=C.ORDER_ID ANDTO_NUMBER(TO_CHAR(C.ORDER_DATE,YYYYMMDD) BETWEENTO_NUMBER(TO_CHAR(B.START_DATE,YYYYMMDD) ANDNVL(TO_NUMBER(TO_CHAR(END_DATE,YYYYMMDD),29991231)P10/7219-05-21六、 DELETE 语句:1. 语法DELETE FROM schema.table | viewdblink aliasWHERE conditionDELETE 语句删除所有满足 WHERE 子句条件的数据行.举例:DELETE FROM itemWHERE ORDER_ID=510