oraclePLSQL语法详细手册

更新时间:2023-04-11 17:48:01 阅读量: 实用文档 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

oraclePLSQL语法详细手册

一、CREATE TABLE 语句 (3)

二、CREATE SEQUENCE 语句 (5)

三、CREATE VIEW 语句 (6)

四、INSERT语句: (7)

五、UPDATE语句: (9)

六、DELETE语句: (10)

七、TRUNCATE语句: ............................................................................. II

八、各类FUNCTIONS: (12)

1.转换函数: (12)

2.日期函数. (16)

3.字符函数. (20)

4.数值函数. (28)

5.单行函数: (33)

6.多行?函数. (35)

第二部分PL/SQL语法部分 (41)

一、PL/SQL语言简介 (41)

二、变量讲明 (48)

三、PL/SQL操纵程序流 (52)

四、储备过程 (54)

五、储备函数 (54)

六、PACKAGE (54)

七、触发器 (56)

八、应用实例 (58)

Create table 语句

语句:CREATE TABLE [schema. Jtable_name

({ column datatype 'DEFAULT expr^ [co1umn_constraint J I

table_constraint}

[,{ column datatype [DEFAULT expr^ [co1umn_constra i nt J

I table_constraint} ]...)

[[PCTFREE integer] [PCTUSED integer]

[INITRANS integer] [MAXTRANS integer]

[TABLESPACE tablespace]

[STORAGE storage_clause]

[RECOVERABLE I UNRECOVERABLE ]

[PARALLEL ( [ DEGREE { integer I DEFAULT }]

[INSTANCES { integer I DEFAULT }]

)

I NOPARALLEL ]

[CACHE I NOCACHE ]

I [CLUSTER cluster (column [, columrf...)]]

[ENABLE enable_clause

I DISABLE disable_clause ]...

[AS subquery

表是Oracle中最重要的数据库对象,表储备一些相似的数据集合,这些数据描述成若干列或字段.create table语句的差不多形式用来在数据库中创建容纳数据行的表.create table语句的简单形式接收表名,列名,列数据类型和大小.除了列名和描述外,还能够指定约束条件,储备参数和该表是否是个cluster的一部分.

Schema用来指定所建表的owner,如不指定则为当前登录的用户.

Table_name用来指定所创建的表名,最长为30个字符,但不能够数字开头(可为下划线),但不可同其它对象或Oracle的保留字冲突.

Column用来指定表中的列名,最多254个.

Datatype用来指定列中储备什么类型的数据,并保证只有有效的数据才能够输入. co 1 umn_constraint用来指定列约束,如某一列不可为空,则可指定为not null.

table_constraint用来指定表约束,如表的主键,外键等.

Pct free用来指定表中数据增长而在Oracle块中预留的空间.DEFAULT为10%,也确实是讲该表的每个块只能使用90%, 10%给数据行的增大时使用.

Pctused用来指定一个水平线,当块中使用的空间低于该水平线时才能够向该中加入新数据行.

Parallel用来指定为加速该表的全表扫描能够使用的并行查询进程个数.

Cache用来指定该表为最应该缓存在SGA数据库缓冲池中的候选项.

Cluster用来指定该表所储备的cluster.

Tablespace用来指定用数据库的那个分区来储备该表的数据.

Recoverable|Unrecoverable用来决定是否把对本表数据所作的变动写入Redo文件.以复原对

数据的操作.

As当不指定表的各列时,可利用As子句的查询结果来产生数据库结构和数据.

例:

1) create table mytable(mydec decimal,

myint inteter)

tablespace user_data pctfree 5

pctused 30;

2) create table mytable2

as ( select * from mytablel);

create sequence 语句

语句: CREATE SEQUENCE [schema. ]sequence_naine

[INCREMENT BY integer]

[START WITH integer]

[MAXVALUE integer I NOMAXVALUE]

[MINVALUE integer I NOMINVALUE]

[CYCLE I NOCYCLE]

[CACHE integer I NOCACHE]

[ORDER I NOORDER] 序列用来为表的主键生成唯独的序列值.

Increment by指定序列值每次增长的值Maxvalue指定产生的序列的最大值Minvalue指定产生的序列的最小值Cycle指定当序列值逵到最大或最小值时,该序列是否循环. Cache指定序列生成器一次缓存的值的个数

Order指定序列中的数值是否按访咨询顺序排序.

例:

1)create sequence niyseq

increment by 4 start with 50 maxvalue 60 minvalue 50

cycle cache 3;

2)

sql> create sequence new_s;

sql>insert into new (new_id, last_name, first_name) values(new_s.

nextval, 'daur*', 'peimit');

create view 语句

语句:CREATE [OR REPLACE] [FORCE I NOFORCE] VIEW [schema. ]view_name

[(alias [,alias]...)]

AS subquery

[WITH CHECK OPTION [CONSTRAINT constraint]]

视图实际上是储备在数据库上旳select语句.每次在sql语句中使用视图时, 表示该视图的select语句就用来得到需要的数据.

Or replace创建视图时假如视图已存在,有此选项,新视图会覆盖旧的视图.

Force如有此选项,当视图基于的表不存在或在该模式中没有创建视图的权限时,也能够建立视图.

As subquery产生视图的select査询语句

With check option假如视图是基于单表的且表中所有的非空列都包含在视图中时,该视图可用于insert和update语句中,本选项保证在每次插入或更新数据后,该数据能够在视图中查到

例:

1) create or place view new_v

as

select substr(d. d_last_nanie, 1, 3),

d. d_lastname, d. d_firstname, b. b_start_date, b. b_location from

newl d,

new2 b

where d. d_lastname=b. b_lastname;

四、INSERT语句:

1.语法

INSERT INTO [schema. ]{table I view | subquery }[gdblinkj

[(column [, column] ...)]

{VALUES (expr [, exprj ...) I subquery}

[WHERE condition]

2.插入单行

使用VALUES关键词为新行的每一列指定一个值.假如不明口某列的值,能够使用NULL关键词将其值设为空值(两个连续的逗号也能够表示空值,也可使用NULL关键词)

插入一行时试图为那些NOT NULL的列提供一个NULL值,会返回错误信息.

举例:

插入一条记录到DEPARTMENT表中

INSERT INTO DEPARTMENT

(DEPARTMENT.ID, NAME, LOCATION_ID)

VALUES (01,'COMPUTER', 167)

3.插入多行

将SELECT语句检索出来的所有数据行都插入到表中.这条语句通常在从一个表向另一个表快速复制数据行.

举例:

INSERT INTO OR1)ER_TEMP

SELECT A. OR1)ER_I1), B. ITEM,ID, C. NAME, E. FIRST_NAME| I* / 11E. LAST_NAME,

A.ORDER_DATE, A. SHIP_DATE, I). DESCRIPTION,

B. ACTUAL_PRICE,

B.QUANTITY, B. TOTAL

FROM SALES_ORI)ER A, ITEM B, CUSTOMER C,

PRODUCT 1), EMPLOYEE E

WHERE MONTHS_BETWEEN(TO_DATE(A. ORI)ER_DATE), TO_DATE(J 01-7 月-91’ ))>0

AND A. CUSTOMER.11)=C. CUSTOMER」】)

AND C. SALESPERSON. I D=E. EMPLOYEE_I1)

AND A. OR1)ER_ I I)=B. OR1)ER_ 11)

AND B. PRODUCT 11)=D. PRODUCT ID

4.从其它表复制数据:

要快速地从一个表向另一个尚不存在的表复制数据,能够使用CREATE TABLE语句定义该表并同时将SELECT语句检索的结果复制到新表中.

CREATE TABLE EMPLOYEE_COPY

AS

SELECT *

FROM EMPLOYEE

五、UPDATE语句:

1.语法

UPDATE [schema. ](table I view | subquery}[@dblink: [alias]

SET { (column [, column] ... ) = (subquery)

I column = { expr I (subquery) } }

[, { (column [, column] ... ) = (subquery)

I column = { expr I (subquery) } }]...

[WHERE condition]

UPDATE语句更新所有满足WHERE子句条件的数据行.同样,该语句能够用SELECT 语句检索得到.但SELECT必须只检索到一行数据值.否则报错.而且每更新一行数据,均要执行一次SELECT语句.

举例:

UPDATE EMPLOYEE_COP

SET SALARY=

SALARY-400

WHERE TO_NUMBER(TO_CHAR(HIRE_DATE,J YYMMDI)' )X850101

UPDATE ITEM_COP A

SET A.ACTUAL_PRICE=

(

SELECT B.LIST_PRICE

FROM PRICE B, SALES_ORDER C

WHERE A. PRODUCT. II)=B. PRODUCT. 11) AND

A. ORDER_ID=C. ORDER.ID AND

TO_NUMBER(TO_CHAR(C. OR1)ER_DATE,' YYYYMMDD' )) BETWEEN

TO_NUMBER(TO_CHAR(B. START_DATE,' YYYYMMDD' )) AND

NVL(TO_NUMBER(TO_CHAR(END_DATE,' YYYYMMDD' )), 29991231)

六、DELETE语句:

1.语法

DELETE [FROM] [schema. ]{tab1e I view}[gdblink] [alias] [WHERE condition] DELETE语句删除所有满足WHERE子句条件的数据行.

举例:

DELETE FROM item

WHERE ORDER ID=510

七、TRUNCATE 语句:

1.语法

TRUNCATE [schema. J table

八、各类Functions:

1-转换函数:

1.1.

函數:TO_CHAR

语法:

TO_CHAR(number[, format])

用途:

将一个数值转换成与之等价的字符串.假如不指定格式,将转换成最简单的字符串形式. 假如为负数就在前面加一个减号.

Oracle为数值提供了专门多格式,下表列出了部分可同意的格式:

1.2.函數:TO_CHAR

语法:

TO_CHAR(date[, format])

用途:

将按format参数指定的格式将日期值转换成相应的字符串形式.同样,Oracle提供许多的格式模型,用户能够用它们的组合来表示最终的输出格式.唯独限制确实是最终的掩码不能超过22个字符?下表列出了部分日期格式化元素.

Oracle

1.3.函數:TO_DATE

语法:

TO_DATE(string, format)

用途:

依照给定的格式将一个字符审转换成Oracle的日期值.

该函数的要紧用途是用来验证输入的日期值.在应用程序中,用户必须验证输入日期是否有效,如月份是否在卜12之间和日期中的天数是否在指定月份的天数内.

1.4.函數:TO_NUMBER

语法:

TO_NUMBER(string[, format])

用途:

该函数将一个字符串转换成相应的数值.关于简单的字符串转换数值(例如儿位数字加上小数点)?格式是可选的.

2.日期函数

2.1.函數:ADD_MONTHS

语法:

ADI)_MONTHS(date, number)

用途:

在日期date上加指定的月数,返回一个新日期.假如给定为负数,返回值为日期date之前儿个月的日期.number应当是个整数,假如是小数,正数被截为小于该数的最大整数,负数被截为大于该数的最小整数.

例如:

SELECT TO_CHAR(ADD_MONTHS(sysdate, 1),

'DD-MON-YYYY' ) " Next month"

FROM dual

Next month

19-FEB-2000

2.2.函數:LAST_DAY

语法:

LAST_DAY(date)

用途:

返回日期date所在月份的最后一天的日期.

例如:

SELECT SYSDATE, LASTJ)AY(SYSDATE) ”Last”, LAST_DAY(SYSI)ATE) - SYSDATE M Days Left"

FROM DUAL

SYSDATE Last Days Left

19-JAN-00 31-JAN-00 12

2.3.函M:MONTHS_BETWEEN

语法:

MONTHS_BETWEEN(datel, date2)

用途:

例如:

SELECT MONTHS_BETWEEN(TO_DATE(J 02-02-1992', * MM-DI)-YYYY,),

TO_DATE(' 01-01-1992',,MM-DD-YYYY'))

” Months"

FROM DUAL

Months

1.03225806

SELECT MONTHS_BETWEEN(TO_DATE(, 02-29-1992', J MM-D1)-YYYY,), TO_DATE(' 01 -31 -1992',

‘ MM-I)1)-YYYY'))

H Months"

FROM DUAL

Months

2.4.函數:NEXT_DAY 语法:

NEXT_DAY(date, day) 用途:

该函数返回日期date指定若天后的日期.注意:参数day必须为星期,能够星期儿的英文完整拼

写,或前三个字母缩写,或数字1,2, 3,4, 5, 6, 7分不表示星期日到星期六.例如,查询返回本月最后一个星期五的日期.

例如:

SELECT NEXT_DAY((last_day(sysdate)-7),'FRIDAY')

FROM dual

NEXT_DAY(

28-JAN-00

2.5.函數:ROUND

语法:

NEXT_DAY(date[, format])

用途:

该函数把一个日期四舍五入到最接近格式元素指定的形式.假如省略format,只返回date的日期部分.例如,假如想把时刻(24/01/00 14:58:41)四舍五入到最近的小时.下表显示了所有可用格式元素对日期的阻碍.

例如:

SELECT to_char(ROUND(sysdate,'HH' ),'DD-MON-YY HH24:MI:SS,)

FROM dual

TO_CHAR(ROUND(SYSDATE,' HH' ),' DD-M0N-YYHH24:MI:SS')

24-JAN-00 15:00:00

2.6.函數:TRUNC

语法:

TRUNC(date[, format])

用途:

TRUNC函数与ROUND专门相似,它依照指定的格式掩码元素,只返回输入日期用户所关怀的那部分,与ROUND有所不同,它删除更精确的时刻部分,而不是将其四舍五入.

例如:

SELECT TRUNC(sysdate)

FROM dual

TRUNCCSYS

24-JAN-00

FLOOR函数:求两个日期之间的天数用;

select f loor(sysdate - to_date(* 20180805*, * yyyymindd' )) from dual;

3.字符函数

3.1.函數:ASCII

语法:

ASCI I(character)

用途:

例如:

SELECT ASCIICZ,)

FROM dual

ASCI I ('Z')

90

3.2.函數:CHR

语法:

CHR(number)

用途:

该函数执行ASCII函数的反操作,返回其ASCII码值等于数值number的字符.该函数通常用于向字符串中添加不可打印字符.

例如:

SELECT CHR(65)||'BCDEF'

FROM dual

CHR(65

ABCDEF

3.3.函數:CONCAT

语法:

CONCAT(stringl, string2)

用途:

该函数用于连接两个字符串,将string2跟在stringl后面返回,它等价于连接操作符(II).

例如:

SELECT CONCATCThis is a',' computer*')

FROM dual

CONCAT('THISISA','

This is a computer 它也能够写成如此:

SELECT 'This is a'11' computer' FROM dual

'THISISA'丨I'COMPUT

This is a computer

这两个语句的结果是完全相同的,但应尽可能地使用丨I操作符.

3.4.函數:INITCAP

语法:

INITCAP(string)

用途:

该函数将字符串string中每个单词的第1个字母变成大写字母,其它字符为小写字母.

本文来源:https://www.bwwdw.com/article/99gl.html

Top