收藏 分销(赏)

PLSQL_语法详细手册.doc

上传人:xrp****65 文档编号:7694380 上传时间:2025-01-12 格式:DOC 页数:72 大小:313.50KB 下载积分:10 金币
下载 相关 举报
PLSQL_语法详细手册.doc_第1页
第1页 / 共72页
PLSQL_语法详细手册.doc_第2页
第2页 / 共72页


点击查看更多>>
资源描述
SQL PL/SQL语法手册 P72/72 目 录 第一部分 SQL语法部分 3 一、 CREATE TABLE 语句 3 二、 CREATE SEQUENCE语句 5 三、 CREATE VIEW语句 6 四、 INSERT语句: 7 五、 UPDATE语句: 9 六、 DELETE语句: 10 七、 TRUNCATE语句: 11 八、 各类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 第一部分 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 integer] [PCTUSED integer] [INITRANS integer] [MAXTRANS integer] [TABLESPACE tablespace] [STORAGE storage_clause] [ RECOVERABLE | UNRECOVERABLE ] [ PARALLEL ( [ DEGREE { integer | DEFAULT } ] [ INSTANCES { integer | DEFAULT } ] ) | NOPARALLEL ] [ CACHE | NOCACHE ] | [CLUSTER cluster (column [, column]...)] ] [ ENABLE enable_clause | DISABLE disable_clause ] ... [AS subquery] 表是Oracle中最重要的数据库对象,表存储一些相似的数据集合,这些数据描述成若干列或字段.create table 语句的基本形式用来在数据库中创建容纳数据行的表.create table 语句的简单形式接收表名,列名,列数据类型和大小.除了列名和描述外,还可以指定约束条件,存储参数和该表是否是个cluster的一部分. Schema 用来指定所建表的owner,如不指定则为当前登录的用户. Table_name 用来指定所创建的表名,最长为30个字符,但不可以数字开头(可为下划线),但不可同其它对象或Oracle的保留字冲突. Column 用来指定表中的列名,最多254个. Datatype 用来指定列中存储什么类型的数据,并保证只有有效的数据才可以输入. column_constraint 用来指定列约束,如某一列不可为空,则可指定为not null. table_constraint 用来指定表约束,如表的主键,外键等. Pctfree 用来指定表中数据增长而在Oracle块中预留的空间. DEFAULT为10%,也就是说该表的每个块只能使用90%,10%给数据行的增大时使用. Pctused 用来指定一个水平线,当块中使用的空间低于该水平线时才可以向该中加入新数据行. Parallel 用来指定为加速该表的全表扫描可以使用的并行查询进程个数. Cache 用来指定该表为最应该缓存在SGA数据库缓冲池中的候选项. Cluster 用来指定该表所存储的 cluster. Tablespace 用来指定用数据库的那个分区来存储该表的数据. Recoverable|Unrecoverable 用来决定是否把对本表数据所作的变动写入Redo 文件.以恢复对数据的操作. As 当不指定表的各列时,可利用As子句的查询结果来产生数据库结构和数据. 例: 1) create table mytab1e(mydec decimal, myint inteter) tablespace user_data pctfree 5 pctused 30; 2) create table mytable2 as ( select * from mytable1); 二、 create sequence语句 语句: CREATE SEQUENCE [schema.]sequence_name [INCREMENT BY integer] [START WITH integer] [MAXVALUE integer | NOMAXVALUE] [MINVALUE integer | NOMINVALUE] [CYCLE | NOCYCLE] [CACHE integer | NOCACHE] [ORDER | NOORDER] 序列用来为表的主键生成唯一的序列值. Increment by 指定序列值每次增长的值 Start with 指定序列的第一个值 Maxvalue 指定产生的序列的最大值 Minvalue 指定产生的序列的最小值 Cycle 指定当序列值逵到最大或最小值时,该序列是否循环. Cache 指定序列生成器一次缓存的值的个数 Order 指定序列中的数值是否按访问顺序排序. 例: 1) create sequence myseq 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’,’permit’); 三、 create view语句 语句: CREATE [OR REPLACE] [FORCE | 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_name,1,3), d.d_lastname,d.d_firstname,b.b_start_date,b.b_location from new1 d, new2 b where d.d_lastname=b.b_lastname; 四、 INSERT语句: 1. 语法 INSERT INTO [schema.]{table | view | subquery }[@dblink] [ (column [, column] ...) ] {VALUES (expr [, expr] ...) | 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 ORDER_TEMP SELECT A.ORDER_ID,B.ITEM_ID,C.NAME,E.FIRST_NAME||'.'||E.LAST_NAME, A.ORDER_DATE,A.SHIP_DATE,D.DESCRIPTION,B.ACTUAL_PRICE, B.QUANTITY,B.TOTAL FROM SALES_ORDER A, ITEM B, CUSTOMER C, PRODUCT D, EMPLOYEE E WHERE MONTHS_BETWEEN(TO_DATE(A.ORDER_DATE),TO_DATE('01-7月-91'))>0 AND A.CUSTOMER_ID=C.CUSTOMER_ID AND C.SALESPERSON_ID=E.EMPLOYEE_ID AND A.ORDER_ID=B.ORDER_ID AND B.PRODUCT_ID=D.PRODUCT_ID 4. 从其它表复制数据: 要快速地从一个表向另一个尚不存在的表复制数据,可以使用CREATE TABLE语句定义该表并同时将SELECT语句检索的结果复制到新表中. CREATE TABLE EMPLOYEE_COPY AS SELECT * FROM EMPLOYEE 五、 UPDATE语句: 1. 语法 UPDATE [schema.]{table | view | subquery}[@dblink] [alias] SET { (column [, column] ...) = (subquery) | column = { expr | (subquery) } } [, { (column [, column] ...) = (subquery) | column = { expr | (subquery) } } ] ... [WHERE condition] UPDATE语句更新所有满足WHERE子句条件的数据行.同样,该语句可以用SELECT语句检索得到.但SELECT必须只检索到一行数据值.否则报错.而且每更新一行数据,均要执行一次SELECT语句. 举例: UPDATE EMPLOYEE_COP SET SALARY= SALARY-400 WHERE TO_NUMBER(TO_CHAR(HIRE_DATE,'YYMMDD'))<850101 UPDATE ITEM_COP A SET A.ACTUAL_PRICE= ( SELECT B.LIST_PRICE FROM PRICE B,SALES_ORDER C WHERE A.PRODUCT_ID=B.PRODUCT_ID AND A.ORDER_ID=C.ORDER_ID AND TO_NUMBER(TO_CHAR(C.ORDER_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.]{table | view}[@dblink] [alias] [WHERE condition] DELETE语句删除所有满足WHERE子句条件的数据行. 举例: DELETE FROM item WHERE ORDER_ID=510 七、 TRUNCATE语句: 1. 语法 TRUNCATE [schema.]table 八、 各类Functions: 1. 转换函数: 1.1. 函數:TO_CHAR 语法: TO_CHAR(number[,format]) 用途: 将一个数值转换成与之等价的字符串.如果不指定格式,将转换成最简单的字符串形式.如果为负数就在前面加一个减号. Oracle为数值提供了很多格式,下表列出了部分可接受的格式: 元素 描述 示例 值 结果 9 返回指定位数的数值,前面为0,显示为空格 99999 784 -578 1234567 45.895 ‘ 784’ ‘ -578’ ‘######’ ‘ 46’ 插入小数点 9999.99 784 45.3482 ‘784.00’ ’45.35’ 在结果串的指定位置插入逗号 9,999,999 784 1234567 0.44 ‘ 784’ ‘ 1,234,567’ ‘ 0’ $ 返回值前面加一个元符号 $99,999 784 -578 ‘ $784’ ‘ -$578’ B 结果的整数部分如果是0,就显示成空格 B9999.9 784 0.44 ‘ 784.0’ ‘ .4’ S 返回 有正负号的数值 S9999 784 ‘+784’ EEEE 以科 计数法表示数值 9.9EEEE 45 0.0666 ‘ 4.5E+01’ ‘ 6.7E-02’ 1.2. 函數:TO_CHAR 语法: TO_CHAR(date[,format]) 用途: 将按format参数指定的格式将日期值转换成相应的字符串形式.同样,Oracle提供许多的格式模型,用户可以用它们的组合来表示最终的输出格式.唯一限制就是最终的掩码不能超过22个字符.下表列出了部分日期格式化元素. Oracle为数值提供了很多格式,下表列出了部分可接受的格式: 格式 意义 D 用数字表示星期几(1,2,3,4,5,6,7) DY 用三个字符表示星期几的缩写形式(MON) DAY 星期几的完整表示(MONDAY) DD 用数字表示一月中的几号 DDD 用数字表示年份中的天数 W 一月中的星期数 WW 一年中的星期数 MM 用数字表示月数 MON 用三个字母表示月的缩写(APR) MONTH 月的完整英文表示(FEBRUARY) Y 年份中的最后一个数字(9) YY 年份中的最后二个数字(99) YYY 年份中的最后三个数字(999) YYYY 年份用四个数字表示(1999) YEAR 年份的字母全部拼写(NINETEEN-NINETY-NINE) AM或PM 午前或午后表示符 HH 用小时表示日期 MI 分钟表示小时 SS 秒钟表示分钟 SSSS 自午夜以来的秒数(这个数字经常在0-86399之间) 1.3. 函數:TO_DATE 语法: TO_DATE(string,format) 用途: 根据给定的格式将一个字符串转换成Oracle的日期值. 该函数的主要用途是用来验证输入的日期值.在应用程序中,用户必须验证输入日期是否有效,如月份是否在1~12之间和日期中的天数是否在指定月份的天数内. 1.4. 函數:TO_NUMBER 语法: TO_NUMBER(string[,format]) 用途: 该函数将一个字符串转换成相应的数值.对于简单的字符串转换数值(例如几位数字加上小数点).格式是可选的. 2. 日期函数 2.1. 函數:ADD_MONTHS 语法: ADD_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, LAST_DAY(SYSDATE) "Last", LAST_DAY(SYSDATE) - SYSDATE "Days Left" FROM DUAL SYSDATE Last Days Left --------- --------- ---------- 19-JAN-00 31-JAN-00 12 2.3. 函數:MONTHS_BETWEEN 语法: MONTHS_BETWEEN(date1,date2) 用途: 返回两个日期之间的月份.如果两个日期月份内的天数相同(或者都是某个月的最后一天),返回值是整数.否则,返回值是小数,每于1/31月来计算月中剩余天数.如果第二个日期比第一个日期还早,则返回值是负数. 例如: SELECT MONTHS_BETWEEN(TO_DATE('02-02-1992', 'MM-DD-YYYY'), TO_DATE('01-01-1992', 'MM-DD-YYYY')) "Months" FROM DUAL Months ---------- 1.03225806 SELECT MONTHS_BETWEEN(TO_DATE('02-29-1992', 'MM-DD-YYYY'), TO_DATE('01-31-1992', 'MM-DD-YYYY')) "Months" FROM DUAL Months ---------- 1 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)四舍五入到最近的小时.下表显示了所有可用格式元素对日期的影响. Format Element Result SS 24/01/00 14:58:41 MI 24/01/00 14:59:00 HH 24/01/00 15:00:00 DD 25/01/00 00:00:00 MM 01/02/01 00:00:00 YY 01/01/00 00:00:00 CC 01/01/00 00:00:00 例如: SELECT to_char(ROUND(sysdate,'HH'),'DD-MON-YY HH24:MI:SS') FROM dual TO_CHAR(ROUND(SYSDATE,'HH'),'DD-MON-YYHH24:MI:SS') ----------------------------------------------------------------- 24-JAN-00 15:00:00 2.6. 函數:TRUNC 语法: TRUNC(date[,format]) 用途: TRUNC函数与ROUND很相似,它根据指定的格式掩码元素,只返回输入日期用户所关心的那部分,与ROUND有所不同,它删除更精确的时间部分,而不是将其四舍五入. 例如: SELECT TRUNC(sysdate) FROM dual TRUNC(SYS --------- 24-JAN-00 FLOOR函数:求两个日期之间的天数用; select floor(sysdate - to_date('20080805','yyyymmdd')) from dual; 3. 字符函数 3.1. 函數:ASCII 语法: ASCII(character) 用途: 返回指定字符的ASCII码值.如果为字符串时,返回第一个字符的ASCII码值. 例如: SELECT ASCII('Z') FROM dual ASCII('Z') ---------- 90 3.2. 函數:CHR 语法: CHR(number) 用途: 该函数执行ASCII函数的反操作,返回其ASCII码值等于数值number的字符.该函数通常用于向字符串中添加不可打印字符. 例如: SELECT CHR(65)||'BCDEF' FROM dual CHR(65 ------ ABCDEF 3.3. 函數:CONCAT 语法: CONCAT(string1,string2) 用途: 该函数用于连接两个字符串,将string2跟在string1后面返回,它等价于连接操作符(||). 例如: SELECT CONCAT(‘This is a’,’ computer’) FROM dual CONCAT('THISISA',' ------------------ This is a computer 它也可以写成这样: SELECT ‘This is a’||’ computer’ FROM dual 'THISISA'||'COMPUT ------------------ This is a computer 这两个语句的结果是完全相同的,但应尽可能地使用||操作符. 3.4. 函數:INITCAP 语法: INITCAP(string) 用途: 该函数将字符串string中每个单词的第1个字母变成大写字母,其它字符为小写字母. 例如: SELECT INITCAP(first_name||'.'||last_name) FROM employee WHERE department_id=12 INITCAP(FIRST_NAME||'.'||LAST_N ------------------------------- Chris.Alberts Matthew.Fisher Grace.Roberts Michael.Douglas 3.5. 函數:INSTR 语法: INSTR(input_string,search_string[,n[,m]]) 用途: 该函数是从字符串input_string的第n个字符开始查找搜索字符串的第m次出现,如果没有找到搜索的字符串,函数将返回0.如果找到,函数将返回位置. 例如: SELECT INSTR('the quick sly fox jumped over the lazy brown dog','the',2,1) FROM dual INSTR('THEQUICKSLYFOXJUMPEDOVERTHELAZYBROWNDOG','THE',2,1) ---------------------------------------------------------- 31 3.6. 函數:INSTRB 语法: INSTRB(input_string,search_string[,n[,m]]) 用途: 该函数类似于INSTR函数,不同之处在于INSTRB函数返回搜索字符串出现的字节数,而不是字符数.在NLS字符集中仅包含单字符时,INSTRB函数和INSTR函数是完全相同的. 3.7. 函數:LENGTH 语法: LENGTH(string) 用途: 该函数用于返回输入字符串的字符数.返回的长度并非字段所定义的长度,而只是字段中占满字符的部分.以列实例中,字段first_name定义为varchar2(15). 语法: SELECT first_name,LENGTH(first_name) FROM employee FIRST_NAME LENGTH(FIRST_NAME) --------------- ------------------ JOHN 4 KEVIN 5 3.8. 函數:LENGTHB 语法: LENGTHB(string) 用途: 该函数用于返回输入字符串的字节数.对于只包含单字节字符的字符集来说LENGTHB函数和LENGTH函数完全一样. 3.9. 函數:LOWER 语法: LOWER(string) 用途: 该函数将字符串string全部转换为小写字母,对于数字和其它非字母字符,不执行任何转换. 3.10. 函數:UPPER 语法: UPPER(string) 用途: 该函数将字符串string全部转换为大写字母,对于数字和其它非字母字符,不执行任何转换. 3.11. 函數:LPAD 语法: LPAD(string,length[,’set’]) 用途: 在字符串string的左边加上一个指定的字符集set,从而使串的长度达到指定的长度length.参数set可以是单个字符,也可以是字符串.如果string的长度小于length时,取string字符串的前length个字符. 语法: SELECT first_name,LPAD(first_name,20,' ') FROM employee FIRST_NAME LPAD(FIRST_NAME,20,'') --------------- ----------------------------------------- JOHN JOHN KEVIN KEVIN 3.12. 函數:RPAD 语法: RPAD(string,length[,’set’]) 用途: 在字符串string的右边加上一个指定的字符集set,从而使串的长度达到指定的长度length.参数set可以是单个字符,也可以是字符串.如果string的长度小于length时,取string字符串的前length个字符. 例如: SELECT first_name,rpad(first_name,20,'-') FROM employee FIRST_NAME RPAD(FIRST_NAME,20,'-') --------------- ----------------------------------------- JOHN JOHN---------------- KEVIN KEVIN--------------- 3.13. 函數:LTRIM 语法: LTRIM(string[,’set’]) 用途: 该函数从字符串的左边开始,去掉字符串set中的字符,直到看到第一个不在字符串set中的字符为止. 例如: SELECT first_name,ltrim(first_name,'BA') FROM employee WHERE first_name='BARBARA' FIRST_NAME LTRIM(FIRST_NAM --------------- --------------- BARBARA RBARA 3.14. 函數:RTRIM 语法: RTRIM(string[,’set’]) 用途: 该函数从字符串的右边开始,去掉字符串set中的字符,直到看到第一个不在字符串set中的字符为止.具有NULL值的字段不能与具有空白字符的字段相比较. 这是因为空白字符与NULL字符是完全不同的两种字符.该函数的另外一个用途是当进行字段连接时去掉不需要的字符. 3.15. 函數:SUBSTR 语法: SUBSTR(string,start[,length]) 用途: 该函数从输入字符串中取出一个子串,从start字符处开始取指定长度的字符串,如果不指定长度,返回从start字符处开始至字符串的末尾. 3.16. 函數:REPLACE 语法: REPLACE(string,search_set[,replace_set]) 用途: 该函数将字符串中所有出现的search_set都替换成replace_set字符串.可以使用该函将字符串中所有出现的符号都替换成某个有效的名字.如果不指定replace_set,则将从字符串string中删除所有的搜索字符串search_set. 例如: SELECT REPLACE('abcdefbdcdabc,dsssdcdrd','abc','ABC') FROM dual REPLACE('ABCDEFBDCDABC, ----------------------- ABCdefbdcdABC,dsssdcdrd 3.17. 函數:TRANSLATE 语法: TRANSLATE(string,search_set,replace_set) 用途: 该函数用于将所有出现在搜索字符集search_set中的字符转换成替换字符集replace_set中的相应字符.注意:如果字符串string中的某个字符没有出现在搜索字符集中.则它将原封不动地返回.如果替换字符集replace_set比搜索字符集search_set小,那么搜索字符集search_set中后面的字符串将从字符串string中删除. 例如: SELECT TRANSLATE('GYK-87M','0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ', 9999999999xxxxxxxxxxxxxx') FROM dual TRANSL ------ xx-99x 4. 数值函数 4.1. 函數:ABS 语法: ABS(number) 用途: 该函数返回数值number的绝对值.绝对值就是一个数去掉符号的那部分. 4.2. 函數:SQRT 语法: SQRT(number) 用途: 该函数返回数值number的平方根,输入值必须大于等于0,否则返回错误. 4.3. 函數:CEIL 语法: CEIL(number) 用途: 该函数返回大于等于输入值的下一个整
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服