PLSQL单行函数和组函数详解(免费)

合集下载

oraclePLSQL语法详细手册

oraclePLSQL语法详细手册

oraclePLSQL语法详细手册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 Itable_constraint}[,{ column datatype [DEFAULT expr^ [co1umn_constra i nt JI 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_clauseI 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 5pctused 30;2) create table mytable2as ( 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 niyseqincrement by 4 start with 50 maxvalue 60 minvalue 50cycle 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_vasselect substr(d. d_last_nanie, 1, 3),d. d_lastname, d. d_firstname, b. b_start_date, b. b_location fromnewl d,new2 bwhere 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_TEMPSELECT 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. TOTALFROM SALES_ORI)ER A, ITEM B, CUSTOMER C,PRODUCT 1), EMPLOYEE EWHERE MONTHS_BETWEEN(TO_DATE(A. ORI)ER_DATE), TO_DATE(J 01-7 月-91’ ))>0AND 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。

PLSQL编程讲义

PLSQL编程讲义

第二部分PL/SQL程序设计基础陈卫星目录第一章PL/SQL 程序设计简介 (4)§1.2SQL与PL/SQL (4)§1.2.1 什么是PL/SQL? (4)§1.2.1 PL/SQL的好处 (4)§1.2.2 PL/SQL 可用的SQL语句 (5)§1.3运行PL/SQL程序 (5)第二章PL/SQL块结构和组成元素 (6)§2.1PL/SQL块 (6)§2.2PL/SQL结构 (6)§2.3标识符 (6)§2.4PL/SQL变量类型 (7)§2.4.1 变量类型 (7)§2.4.2 复合类型(记录和表) (9)§2.4.3 使用%ROWTYPE (10)§2.4.4 LOB类型* (11)§2.4.5 用户定义的子类型 (11)§2.4.6 数据类型的转换* (13)§2.5运算符和表达式(数据定义) (13)§2.5.1 关系运算符 (13)§2.5.2 一般运算符 (13)§2.5.3 逻辑运算符 (13)§2.6变量赋值 (14)§2.6.1 字符及数字运算特点 (14)§2.6.2 BOOLEAN 赋值 (14)§2.6.3 数据库赋值 (14)§2.6.4 可转换的类型赋值 (15)§2.7变量作用范围及可见性 (15)§2.8注释 (16)§2.9简单例子 (16)§2.9.1 简单数据插入例子 (16)§2.9.2 简单数据删除例子 (17)第三章PL/SQL流程控制语句 (18)§3.1条件语句 (18)§3.2循环 (19)§3.3标号和GOTO (21)§3.4NULL语句 (21)第四章游标的使用 (22)§4.1游标概念 (22)§4.1.1 处理显式游标 (22)§4.1.2 处理隐式游标 (26)§4.2游标循环小结 (27)§4.2.1 简单循环 (27)§4.2.2 WHILE循环 (28)§4.2.3 游标FOR循环语句 (28)§4.2.4 关于NO_DATA_FOUND 和%NOTFOUND的区别 (29)§4.2.5 游标修改和删除操作 (29)§4.3游标变量 (30)§4.3.1 声明游标变量 (30)§4.3.2 游标变量操作 (31)§4.3.3 游标变量应用 (31)第五章异常错误处理 (32)§5.1异常处理概念 (32)§5.1.1 预定义的异常处理 (33)§5.1.2 非预定义的异常处理 (34)§5.1.3 用户自定义的异常处理 (34)§5.1.4 用户定义的异常处理 (35)§5.2异常错误传播 (37)§5.2.1 在执行部分引发异常错误 (37)§5.2.2 在声明部分引发异常错误 (37)§5.3异常错误处理编程 (38)§5.4在PL/SQL中使用SQLCODE,SQLERRM (38)第六章存储函数和过程 (40)§6.1引言 (40)§6.2创建函数 (40)§6.3存储过程 (43)§6.3.1 创建过程 (43)§6.3.2 使用过程 (45)§6.3.3 开发存储过程步骤 (47)§6.3.4 与过程相关数据字典( P112) (48)§6.4过程和函数中的异常处理 (48)§6.4.1 使用系统定义的异常处理 (48)§6.4.2 使用用户定义的异常处理+ (49)第七章包的创建和应用 (50)§7.1引言 (50)§7.2包的定义 (50)§7.3包的开发步骤 (51)§7.4包定义的说明 (51)§7.5子程序重载 (59)§7.6删除过程、函数和包 (60)§7.7包的管理 (61)第八章触发器 (62)§8.1触发器类型 (62)§8.1.1 DML触发器 (62)§8.1.2 替代触发器 (62)§8.1.3 系统触发器 (62)§8.2创建触发器 (62)§8.2.1 触发器触发次序 (64)§8.2.2 创建DML触发器 (64)§8.2.3 创建替代(Instead_of)触发器 (65)§8.2.3 创建系统事件触发器 (65)§8.2.4 系统触发器事件属性 (66)§8.2.5 使用触发器谓词 (67)§8.2.6 重新编译触发器 (67)§8.3删除和使能触发器 (67)§8.4触发器和数据字典 (68)§8.5数据库触发器的应用举例 (68)§8.6数据库触发器的应用实例 (78)第一章PL/SQL 程序设计简介PL /SQL是一种高级数据库程序设计语言,该语言专门用于在各种环境下对ORACLE数据库进行访问。

plsql用法,操作介绍

plsql用法,操作介绍

plsql用法,操作介绍PL/SQL是Oracle数据库中一种重要的编程语言,它提供了强大的数据处理和数据库操作能力。

本文将向大家介绍PL/SQL的用法和操作。

一、PL/SQL基础PL/SQL是一种过程化的编程语言,它可以在Oracle数据库中执行存储过程、函数、触发器和包等对象。

这些对象可以由用户自定义,并在数据库中存储,以供其他用户调用。

PL/SQL提供了丰富的数据类型、控制结构、函数和过程,使得开发者可以方便地编写复杂的数据库操作程序。

二、PL/SQL语法1. 声明语句:在PL/SQL中,需要先声明变量和常量,常见的声明语句有:变量声明(如:变量类型数据类型;),常量声明(如:CONST 常量名数据类型 = 值)。

2. 条件语句:PL/SQL支持多种条件语句,如IF-THEN-ELSE,CASE表达式等。

3. 循环语句:PL/SQL支持FOR循环、WHILE循环和LOOP循环等。

4. 异常处理:PL/SQL提供了异常处理机制,可以捕获和处理运行时出现的错误。

5. 函数和过程:PL/SQL支持定义函数和过程,可以对数据进行操作并返回结果。

三、PL/SQL操作1. 创建存储过程:可以使用CREATE PROCEDURE语句创建存储过程,指定过程的名称、参数和执行逻辑。

2. 调用存储过程:可以使用CALL语句调用存储过程,并传递参数。

3. 创建函数:可以使用CREATE FUNCTION语句创建函数,指定函数的名称、参数和返回值类型。

4. 调用函数:可以使用直接调用函数的方式或通过存储过程调用函数。

5. 创建触发器:可以使用CREATE TRIGGER语句创建触发器,用于在数据插入、更新或删除时触发特定的操作。

6. 修改和删除对象:可以使用ALTER PROCEDURE、DROP PROCEDURE、DROP FUNCTION等语句修改或删除已存在的PL/SQL对象。

四、示例以下是一个简单的PL/SQL程序示例,用于将输入的字符串转换为大写并输出:```plsqlDECLAREv_str VARCHAR2(100);v_upper VARCHAR2(100);BEGIN-- 获取输入字符串:in_str := 'hello world';v_str := :in_str;-- 将字符串转换为大写并输出v_upper := UPPER(v_str);DBMS_OUTPUT.PUT_LINE('转换后的字符串为: ' || v_upper);END;```在上述示例中,我们使用了DECLARE语句声明了两个变量v_str 和v_upper,分别用于存储输入的字符串和转换后的结果。

很好的PLSQL函数

很好的PLSQL函数
SELECT AscII([Chr1]) FROM [Table] //CHAR返回ASC码
SELECT Chr([Num1]) FROM [Table] //ASC返回CHAR值
SELECT Concat([Str1],[Str2]) FROM [Table] //连接两个字符串
修改下次执行时间--dbms_Job.next_date(Job,next_date);
修改间隔时--------dbms_Job.interval(Job,interval);
停止Job-----------dbms.broken(Job,broken,nextdate);
启动Job-----------dbms_Job.run(Jobno);
=================以为为常用函数用法=================
SELECT Least([Num1],[Num2],[Num3],[Num4]) FROM [Table] //取最小值者
SELECT Greatest([Num1],[Num2],[Num3]) FROM [Table] //取最大值者
Alter Table [Table] Drop UnUsed Columns
Alter Table [Table] Modify([Column] Decimal(14,0)) //修改列
Create Sequence BUFFER_FORMULA_Seq NoMaxValue Nocycle //创建序列
W--------WEEK OF THE MONTH----------------1,2,3,4,5
WW-------WEEK OF THE YEAR-----------------1,2,3,.....53

PLSQL语法以及程序编写介绍

PLSQL语法以及程序编写介绍

NCHAR:来存储Unicode字符集的定长 字符型数据,长度<= 1000 字节。它的声明 方式与CHAR相同。 NVARCHAR2:用来存储Unicode字符 集的变长字符型数据,长度<= 1000 字节。 它的声明方式与VARCHAR2相同。 LONG:用来存储最大长度为2GB的变 长字符数据。
七、条件逻辑 在PL/SQL中,可以使用命令if,else和elsif来控 制可执行命令段的命令流。下面列出了可用的条 件逻辑命令的格式(循环条件除外) 格式1: if <条件> then <命令> elsif <条件> then <命令> else <命令> end if;
格式2: if <条件> then if <条件> then <命令> end if; else <命令> end if; 总的说来除了格式上与C略有区别,其它都 是一样的
实际数据
7456123.89 7456123.89 பைடு நூலகம்456123.89 7456123.89 7456123.89 7456123.89 7456123.89
定义
NUMBER NUMBER(9) NUMBER(9,2) NUMBER(9,1) NUMBER(6) NUMBER(7,-2) NUMBER(7,2)
area_id
1 2
addr_zipcode
325200 325400
3
4 5 6 7 8
325800
325100 325600 325700 325300 325500
其他
325000
八、循环 在一个单独的PL/SQL代码块中可以使用 循环处理多个记录。PL/SQL支持三种类型 的循环。 简单循环

PLSQL函数

PLSQL函数

plsql常用方法在SQLPLUS下,实现中-英字符集转换alter session set nls_language='AMERICAN';alter session set nls_language='SIMPLIFIED CHINESE';主要知识点:一、有关表的操作1)建表create table test as select * from dept; --从已知表复制数据和结构create table test as select * from dept where 1=2; --从已知表复制结构但不包括数据2)插入数据:insert into test select * from dept;二、运算符算术运算符:+ - * / 可以在select 语句中使用连接运算符:|| select deptno|| dname from dept;比较运算符:> >= = != < <= like between is null in逻辑运算符:not and or集合运算符:intersect ,union,union all,minus要求:对应集合的列数和数据类型相同查询中不能包含long 列列的标签是第一个集合的标签使用order by时,必须使用位置序号,不能使用列名例:集合运算符的使用:intersect ,union,union all,minusselect * from emp intersect select * from emp where deptno=10 ;select * from emp minus select * from emp where deptno=10;select * from emp where deptno=10 union select * from emp where deptno in (10,20); --不包括重复行select * from emp where deptno=10 union all select * from emp where deptno in (10,20); --包括重复行三,常用ORACLE 函数sysdate为系统日期dual为虚表一)日期函数[重点掌握前四个日期函数]1,add_months[返回日期加(减)指定月份后(前)的日期]select sysdate S1,add_months(sysdate,10) S2,add_months(sysdate,5) S3 from dual;2,last_day [返回该月最后一天的日期]select last_day(sysdate) from dual;3,months_between[返回日期之间的月份数]select sysdate S1, months_between('1-4月-04',sysdate) S2,months_between('1-4月-04','1-2月-04') S3 from dual4,next_day(d,day): 返回下个星期的日期,day为1-7或星期日-星期六,1表示星期日select sysdate S1,next_day(sysdate,1) S2,next_day(sysdate,'星期日') S3 FROM DUAL5,round[舍入到最接近的日期](day:舍入到最接近的星期日)select sysdate S1,round(sysdate) S2 ,round(sysdate,'year') YEAR,round(sysdate,'month') MONTH ,round(sysdate,'day') DAY from dual6,trunc[截断到最接近的日期]select sysdate S1,trunc(sysdate) S2,trunc(sysdate,'year') YEAR,trunc(sysdate,'month') MONTH ,trunc(sysdate,'day') DAY from dual7,返回日期列表中最晚日期select greatest('01-1月-04','04-1月-04','10-2月-04') from dual二)字符函数(可用于字面字符或数据库列)1,字符串截取select substr('abcdef',1,3) from dual2,查找子串位置select instr('abcfdgfdhd','fd') from dual3,字符串连接select 'HELLO'||'hello world' from dual;4, 1)去掉字符串中的空格select ltrim(' abc') s1,rtrim('zhang ') s2,trim(' zhang ') s3 from dual2)去掉前导和后缀select trim(leading 9 from 9998767999) s1,trim(trailing 9 from 9998767999) s2,trim(9 from 9998767999) s3 from dual;5,返回字符串首字母的Ascii值select ascii('a') from dual6,返回ascii值对应的字母select chr(97) from dual7,计算字符串长度select length('abcdef') from dual8,initcap(首字母变大写),lower(变小写),upper(变大写)select lower('ABC') s1,upper('def') s2,initcap('efg') s3 from dual;9,Replaceselect replace('abc','b','xy') from dual;10,translateselect translate('abc','b','xx') from dual; -- x是1位11,lpad [左添充] rpad [右填充](用于控制输出格式)select lpad('func',15,'=') s1, rpad('func',15,'-') s2 from dual;select lpad(dname,14,'=') from dept;12, decode[实现if ..then 逻辑]select deptno,decode(deptno,10,'1',20,'2',30,'3','其他') from dept;三)数字函数1,取整函数(ceil 向上取整,floor 向下取整)select ceil(66.6) N1,floor(66.6) N2 from dual;2, 取幂(power) 和求平方根(sqrt)select power(3,2) N1,sqrt(9) N2 from dual;3,求余select mod(9,5) from dual;4,返回固定小数位数(round:四舍五入,trunc:直接截断)select round(66.667,2) N1,trunc(66.667,2) N2 from dual;5,返回值的符号(正数返回为1,负数为-1)select sign(-32),sign(293) from dual;四)转换函数1,to_char()[将日期和数字类型转换成字符类型]1) select to_char(sysdate) s1,to_char(sysdate,'yyyy-mm-dd') s2,to_char(sysdate,'yyyy') s3,to_char(sysdate,'yyyy-mm-dd hh12:mi:ss') s4,to_char(sysdate, 'hh24:mi:ss') s5,to_char(sysdate,'DAY') s6 from dual;2) select sal,to_char(sal,'$99999') n1,to_char(sal,'$99,999') n2 from emp2, to_date()[将字符类型转换为日期类型]insert into emp(empno,hiredate) values(8000,to_date('2004-10-10','yyyy-mm-dd')); 3, to_number() 转换为数字类型select to_number(to_char(sysdate,'hh12')) from dual; //以数字显示的小时数五)其他函数user:返回登录的用户名称select user from dual;vsize:返回表达式所需的字节数select vsize('HELLO') from dual;nvl(ex1,ex2):ex1值为空则返回ex2,否则返回该值本身ex1(常用)例:如果雇员没有佣金,将显示0,否则显示佣金select comm,nvl(comm,0) from emp;nullif(ex1,ex2):值相等返空,否则返回第一个值例:如果工资和佣金相等,则显示空,否则显示工资select nullif(sal,comm),sal,comm from emp;coalesce:返回列表中第一个非空表达式select comm,sal,coalesce(comm,sal,sal*10) from emp;nvl2(ex1,ex2,ex3) :如果ex1不为空,显示ex2,否则显示ex3如:查看有佣金的雇员姓名以及他们的佣金select nvl2(comm,ename,') as HaveCommName,comm from emp;六)分组函数max min avg count sum1,整个结果集是一个组1) 求部门30 的最高工资,最低工资,平均工资,总人数,有工作的人数,工种数量及工资总和select max(ename),max(sal),min(ename),min(sal),avg(sal),count(*) ,count(job),count(distinct(job)) ,sum(sal) from emp where deptno=30;2, 带group by 和having 的分组1)按部门分组求最高工资,最低工资,总人数,有工作的人数,工种数量及工资总和select deptno, max(ename),max(sal),min(ename),min(sal),avg(sal),count(*) ,count(job),count(distinct(job)) ,sum(sal) from emp group by deptno;2)部门30的最高工资,最低工资,总人数,有工作的人数,工种数量及工资总和select deptno, max(ename),max(sal),min(ename),min(sal),avg(sal),count(*) ,count(job),count(distinct(job)) ,sum(sal) from emp group by deptno having deptno=30;3, stddev 返回一组值的标准偏差select deptno,stddev(sal) from emp group by deptno;variance 返回一组值的方差差select deptno,variance(sal) from emp group by deptno;4, 带有rollup和cube操作符的Group Byrollup 按分组的第一个列进行统计和最后的小计cube 按分组的所有列的进行统计和最后的小计select deptno,job ,sum(sal) from emp group by deptno,job;select deptno,job ,sum(sal) from emp group by rollup(deptno,job);cube 产生组内所有列的统计和最后的小计select deptno,job ,sum(sal) from emp group by cube(deptno,job);七、临时表只在会话期间或在事务处理期间存在的表.临时表在插入数据时,动态分配空间create global temporary table temp_dept(dno number,dname varchar2(10))on commit delete rows;insert into temp_dept values(10,'ABC');commit;select * from temp_dept; --无数据显示,数据自动清除on commit preserve rows:在会话期间表一直可以存在(保留数据)on commit delete rows:事务结束清除数据(在事务结束时自动删除表的数据)1.0摘要//简要说明该文档内容SQL是用来访问关系型数据库一种通用语言,其执行特点是非过程化,即不用指明执行的具体方法和途径,而是简单的调用相应语句来直接取得结果即可。

PLSQL简明教程

PLSQL简明教程

PL/SQL 简明教程什么是PL/SQL结构化查询语言(Structured Query Language,简称SQL)是用来访问关系型数据库一种通用语言,它属于第四代语言(4GL),其执行特点是非过程化,即不用指明执行的具体方法和途径,而是简单的调用相应语句来直接取得结果即可。

例:delete from students where major=‘Nutrition’;然而,对于有些复杂的业务流程又要求相应的程序来描述,那么4GL就有些无能为力了。

PL/SQL通过增加了用在其它过程性语言中的结构来对SQL进行了扩展,使得它不仅仅是一个数据库查询语言,而且也是一个编程语言。

课程内容一PL/SQL 基本查询与排序本课重点:1、写SELECT 语句进行数据库查询2、进行数学运算3、处理空值4、使用别名ALIASES5、连接列6、在SQL PLUS 中编辑缓冲,修改SQL SCRIPTS7、ORDER BY 进行排序输出。

8、使用WHERE 字段。

一、写SQL 命令:不区分大小写。

SQL 语句用数字分行,在SQL PLUS 中被称为缓冲区。

最后以;或/ 结束语句。

也可以用RUN 来执行语句二、例1:SQL> SELECT dept_id, last_name, manager_id2 FROM s_emp;2:SQL> SELECT last_name, salary * 12, commission_pct2 FROM s_emp;对于数值或日期型的字段,可以进行相应的四则运算,优先级与标准的高级语言相同。

SQL> SELECT last_name, salary, 12 * (salary + 100)2 FROM s_emp;三、列的别名ALIASES:计算的时候特别有用;紧跟着列名,或在列名与别名之间加“AS”;如果别名中含有SPACE,特殊字符,或大小写,要用双引号引起。

例(因字体原因,读者请记住:引号为英文双引号Double Quotation):SQL> SELECT last_name, salary,2 12 * (salary + 100) ”Annual Salary”3 FROM s_emp;四、连接符号:||连接不同的列或连接字符串使结果成为一个有意义的短语:SQL> SELECT first_name || ‟‟ || last_name2 || ‟, ‟|| title ”Employees”3 FROM s_emp;五、管理NULL 值:SQL> SELECT last_name, title,2 salary * NVL(commission_pct,0)/100 COMM3 FROM s_emp;此函数使NULL 转化为有意义的一个值,相当于替换NULL。

PLSQL单行函数和组函数详解

PLSQL单行函数和组函数详解

PLSQL单行函数和组函数详解函数是一种有零个或多个参数并且有一个返回值的程序。

在SQL中Oracle内建了一系列函数,这些函数都可被称为SQL或PL/SQL语句,函数主要分为两大类:单行函数、组函数。

1、SQL中的单行函数SQL和PL/SQL中自带很多类型的函数,有字符、数字、日期、转换、和混合型等多种函数用于处理单行数据,因此这些都可被统称为单行函数。

这些函数均可用于SELECT,WHERE、ORDER BY 等子句中,例如下面的例子中就包含了TO_CHAR,UPPER,SOUNDEX等单行函数。

SELECT ename,TO_CHAR(hiredate,'day,DD-Mon-YYYY')FROM emp Where UPPER(ename) Like'AL%'ORDER BY SOUNDEX(ename)单行函数也可以在其他语句中使用,如update的SET子句,INSERT的VALUES子句,DELET的WHERE子句,认证考试特别注意在SELECT语句中使用这些函数,所以我们的注意力也集中在SELECT 语句中。

NULL和单行函数在如何理解NULL上开始是很困难的,就算是一个很有经验的人依然对此感到困惑。

NULL值表示一个未知数据或者一个空值,算术操作符的任何一个操作数为NULL值,结果均为提个NULL值,这个规则也适合很多函数,只有CONCAT,DECODE,DUMP,NVL,REPLACE在调用了NULL参数时能够返回非NULL值。

在这些中NVL函数时最重要的,因为他能直接处理NULL值,NVL有两个参数:NVL(x1,x2),x1和x2都是表达式,当x1为null时返回X2,否则返回x1。

下面我们看看emp数据表它包含了薪水、奖金两项,需要计算总的补偿column name emp_id salary bonuskey type pk nulls/unique nn,u nnfk table datatype number number numberlength 11.2 11.2不是简单的将薪水和奖金加起来就可以了,如果某一行是null值那么结果就将是null,比如下面的例子:update emp set salary=(salary+bonus)*1.1这个语句中,雇员的工资和奖金都将更新为一个新的值,但是如果没有奖金,即 salary + null,那么就会得出错误的结论,这个时候就要使用nvl函数来排除null值的影响。

plsql常用函数

plsql常用函数

plsql常用函数plsql 常用函数PLSQL常用函数1)处理字符的函数|| 或 CONCAT---并置运算符。

格式∶CONCAT(STRING1, STRING2)例:’ABC’|| ’DE’=’ABCDE’CONCAT(‘ABC’,’DE’) =’ABCDE’ASCII---返回字符的ASCII码。

例:ASCII(‘A’) = 65CHR---返回指定ASCII码的字符。

例:CHR(65) = ‘A’INSTR---搜索子串位置格式∶INSTR(STRING , SET[ , 开始位置[ , 出现次数]]) 例∶ INSTR (‘this is a test’ , ‘i’ , 1,2)=6INITCAP---将字符串每个单词首字母均变为大写例: INITCAP(‘this is a test’)=’ This Is A Test’’LENGTH----计算串长格式∶ LENGTH(string)RPAD,LPAD---右填充、左填充。

默认为填充空格。

格式: RPAD(字符串 , 字符个数 , 填充字符)例: RPAD(‘ABC’ , 6 , ’H’)=’ABCHHH’LTRIM,RTRIM-----左右截断。

默认为删除空格。

格式∶ LTRIM(STRING[,’SET’])例∶ LTRIM(‘***tes*t***’ , ’*’)=’ tes*t***’LOWER----将字符串转换为小写格式∶LOWER(string)UPPER---将字符串转换为大写格式∶UPPER(string)SUBSTR----提取子串。

START为正数时从左开始、为负数时从右开始格式∶ SUBSTR(STRING , START [ , COUNT])例∶ SUBSTR(‘WORDSTAR’ , 2 , 3)=’ ORD’REPLACE---搜索指定字符串并替换格式∶REPLACE(string , substring , replace_string)例∶ REPLACE(‘this is a test’ , ‘this’ , ‘that an’)=’that an is a test’TRIM---删除字符串前缀或尾随字符格式∶TRIM( [LEADING | TRAILING |BOTH] [ trimchar FROM ] string)LEADING---删除前缀字符TRAILING---删除后缀字符BOTH---前后缀字符均删除(默认方式)Trimchar---指定删除的字符注:INSTR,LENGTH,SUBSTR加B时针对字节.2)处理数字的函数LEAST---返回参数列表中的最小值。

PLSQL函数

PLSQL函数

plsql常用方法在SQLPLUS下,实现中-英字符集转换alter session set nls_language='AMERICAN';alter session set nls_language='SIMPLIFIED CHINESE';主要知识点:一、有关表的操作1)建表create table test as select * from dept; --从已知表复制数据和结构create table test as select * from dept where 1=2; --从已知表复制结构但不包括数据2)插入数据:insert into test select * from dept;二、运算符算术运算符:+ - * / 可以在select 语句中使用连接运算符:|| select deptno|| dname from dept;比较运算符:> >= = != < <= like between is null in逻辑运算符:not and or集合运算符:intersect ,union,union all,minus要求:对应集合的列数和数据类型相同查询中不能包含long 列列的标签是第一个集合的标签使用order by时,必须使用位置序号,不能使用列名例:集合运算符的使用:intersect ,union,union all,minusselect * from emp intersect select * from emp where deptno=10 ;select * from emp minus select * from emp where deptno=10;select * from emp where deptno=10 union select * from emp where deptno in (10,20); --不包括重复行select * from emp where deptno=10 union all select * from emp where deptno in (10,20); --包括重复行三,常用ORACLE 函数sysdate为系统日期dual为虚表一)日期函数[重点掌握前四个日期函数]1,add_months[返回日期加(减)指定月份后(前)的日期]select sysdate S1,add_months(sysdate,10) S2,add_months(sysdate,5) S3 from dual;2,last_day [返回该月最后一天的日期]select last_day(sysdate) from dual;3,months_between[返回日期之间的月份数]select sysdate S1, months_between('1-4月-04',sysdate) S2,months_between('1-4月-04','1-2月-04') S3 from dual4,next_day(d,day): 返回下个星期的日期,day为1-7或星期日-星期六,1表示星期日select sysdate S1,next_day(sysdate,1) S2,next_day(sysdate,'星期日') S3 FROM DUAL5,round[舍入到最接近的日期](day:舍入到最接近的星期日)select sysdate S1,round(sysdate) S2 ,round(sysdate,'year') YEAR,round(sysdate,'month') MONTH ,round(sysdate,'day') DAY from dual6,trunc[截断到最接近的日期]select sysdate S1,trunc(sysdate) S2,trunc(sysdate,'year') YEAR,trunc(sysdate,'month') MONTH ,trunc(sysdate,'day') DAY from dual7,返回日期列表中最晚日期select greatest('01-1月-04','04-1月-04','10-2月-04') from dual二)字符函数(可用于字面字符或数据库列)1,字符串截取select substr('abcdef',1,3) from dual2,查找子串位置select instr('abcfdgfdhd','fd') from dual3,字符串连接select 'HELLO'||'hello world' from dual;4, 1)去掉字符串中的空格select ltrim(' abc') s1,rtrim('zhang ') s2,trim(' zhang ') s3 from dual2)去掉前导和后缀select trim(leading 9 from 9998767999) s1,trim(trailing 9 from 9998767999) s2,trim(9 from 9998767999) s3 from dual;5,返回字符串首字母的Ascii值select ascii('a') from dual6,返回ascii值对应的字母select chr(97) from dual7,计算字符串长度select length('abcdef') from dual8,initcap(首字母变大写),lower(变小写),upper(变大写)select lower('ABC') s1,upper('def') s2,initcap('efg') s3 from dual;9,Replaceselect replace('abc','b','xy') from dual;10,translateselect translate('abc','b','xx') from dual; -- x是1位11,lpad [左添充] rpad [右填充](用于控制输出格式)select lpad('func',15,'=') s1, rpad('func',15,'-') s2 from dual;select lpad(dname,14,'=') from dept;12, decode[实现if ..then 逻辑]select deptno,decode(deptno,10,'1',20,'2',30,'3','其他') from dept;三)数字函数1,取整函数(ceil 向上取整,floor 向下取整)select ceil(66.6) N1,floor(66.6) N2 from dual;2, 取幂(power) 和求平方根(sqrt)select power(3,2) N1,sqrt(9) N2 from dual;3,求余select mod(9,5) from dual;4,返回固定小数位数(round:四舍五入,trunc:直接截断)select round(66.667,2) N1,trunc(66.667,2) N2 from dual;5,返回值的符号(正数返回为1,负数为-1)select sign(-32),sign(293) from dual;四)转换函数1,to_char()[将日期和数字类型转换成字符类型]1) select to_char(sysdate) s1,to_char(sysdate,'yyyy-mm-dd') s2,to_char(sysdate,'yyyy') s3,to_char(sysdate,'yyyy-mm-dd hh12:mi:ss') s4,to_char(sysdate, 'hh24:mi:ss') s5,to_char(sysdate,'DAY') s6 from dual;2) select sal,to_char(sal,'$99999') n1,to_char(sal,'$99,999') n2 from emp2, to_date()[将字符类型转换为日期类型]insert into emp(empno,hiredate) values(8000,to_date('2004-10-10','yyyy-mm-dd')); 3, to_number() 转换为数字类型select to_number(to_char(sysdate,'hh12')) from dual; //以数字显示的小时数五)其他函数user:返回登录的用户名称select user from dual;vsize:返回表达式所需的字节数select vsize('HELLO') from dual;nvl(ex1,ex2):ex1值为空则返回ex2,否则返回该值本身ex1(常用)例:如果雇员没有佣金,将显示0,否则显示佣金select comm,nvl(comm,0) from emp;nullif(ex1,ex2):值相等返空,否则返回第一个值例:如果工资和佣金相等,则显示空,否则显示工资select nullif(sal,comm),sal,comm from emp;coalesce:返回列表中第一个非空表达式select comm,sal,coalesce(comm,sal,sal*10) from emp;nvl2(ex1,ex2,ex3) :如果ex1不为空,显示ex2,否则显示ex3如:查看有佣金的雇员姓名以及他们的佣金select nvl2(comm,ename,') as HaveCommName,comm from emp;六)分组函数max min avg count sum1,整个结果集是一个组1) 求部门30 的最高工资,最低工资,平均工资,总人数,有工作的人数,工种数量及工资总和select max(ename),max(sal),min(ename),min(sal),avg(sal),count(*) ,count(job),count(distinct(job)) ,sum(sal) from emp where deptno=30;2, 带group by 和having 的分组1)按部门分组求最高工资,最低工资,总人数,有工作的人数,工种数量及工资总和select deptno, max(ename),max(sal),min(ename),min(sal),avg(sal),count(*) ,count(job),count(distinct(job)) ,sum(sal) from emp group by deptno;2)部门30的最高工资,最低工资,总人数,有工作的人数,工种数量及工资总和select deptno, max(ename),max(sal),min(ename),min(sal),avg(sal),count(*) ,count(job),count(distinct(job)) ,sum(sal) from emp group by deptno having deptno=30;3, stddev 返回一组值的标准偏差select deptno,stddev(sal) from emp group by deptno;variance 返回一组值的方差差select deptno,variance(sal) from emp group by deptno;4, 带有rollup和cube操作符的Group Byrollup 按分组的第一个列进行统计和最后的小计cube 按分组的所有列的进行统计和最后的小计select deptno,job ,sum(sal) from emp group by deptno,job;select deptno,job ,sum(sal) from emp group by rollup(deptno,job);cube 产生组内所有列的统计和最后的小计select deptno,job ,sum(sal) from emp group by cube(deptno,job);七、临时表只在会话期间或在事务处理期间存在的表.临时表在插入数据时,动态分配空间create global temporary table temp_dept(dno number,dname varchar2(10))on commit delete rows;insert into temp_dept values(10,'ABC');commit;select * from temp_dept; --无数据显示,数据自动清除on commit preserve rows:在会话期间表一直可以存在(保留数据)on commit delete rows:事务结束清除数据(在事务结束时自动删除表的数据)1.0摘要//简要说明该文档内容SQL是用来访问关系型数据库一种通用语言,其执行特点是非过程化,即不用指明执行的具体方法和途径,而是简单的调用相应语句来直接取得结果即可。

sql语句单行函数每次传入一行列值,返回一行返回值

sql语句单行函数每次传入一行列值,返回一行返回值

SQL语句单行函数是数据库中非常重要的一部分,它可以用来对数据进行处理和转换,在数据分析和报表生成中有着非常重要的作用。

在SQL语句中,单行函数每次接收一行列值作为参数,返回一行返回值。

本文将从基本概念、使用方法和实例等方面来详细介绍SQL语句单行函数的相关知识。

一、基本概念SQL语句单行函数是一种特殊类型的函数,它们作用于查询的每一行数据,并对其进行处理。

这些函数可以用于数学运算、字符串操作、日期处理等各种用途。

常见的单行函数包括但不限于:数值函数、字符函数、日期函数等。

二、使用方法在SQL语句中使用单行函数非常简单,只需要在SELECT语句中的列名或者表达式的位置调用相应的函数即可。

语法格式为:SELECT 函数名(列名或表达式) FROM 表名;其中,函数名为要调用的函数名称,列名或表达式为要传入函数中的参数,表名为要查询的表的名称。

三、实例1. 数值函数数值函数可以用来对数值型的数据进行处理,比如取绝对值、对数运算、四舍五入等。

我们可以使用ABS函数来取得某列数据的绝对值:SELECT ABS(column_name) FROM table_name;2. 字符函数字符函数可以用来对字符串类型的数据进行处理,比如转换大小写、字符串连接、截取字符串等。

我们可以使用UPPER函数将某列数据转换为大写:SELECT UPPER(column_name) FROM table_name;3. 日期函数日期函数用来对日期类型的数据进行处理,比如取得年份、月份、日期间的差值等。

我们可以使用YEAR函数来获取某列数据的年份:SELECT YEAR(date_column) FROM table_name;四、总结通过本文的介绍,我们了解了SQL语句单行函数的基本概念、使用方法和实例。

单行函数在实际的数据处理和分析中有着非常重要的作用,可以大大提高数据处理的效率和灵活性。

掌握SQL语句单行函数的相关知识对于数据库开发和数据分析人员来说是非常重要的。

02.PLSQL中的函数

02.PLSQL中的函数

------------------ ----------------------------- ------------- ---------------MARTIN ALLEN TURNER WARD MARTINSALESMAN ALLENSALESMAN TURNERSALESMAN WARDSALESMAN 6 5 6 4 2 1 0 2
TO_CHAR 函数对日期的转换
• TO_CHAR(date, 'fmt') • 格式(fmt)
– 必须用单引号括起来,并且大小写敏感 – 可包含任何有效的日期格式 – 有一个fm元素去掉前面的零
日期格式的元素
YYYY/YYY/YY YEAR MM MON MONTH DD DY DAY 不同位数的数字表示年 年的拼写 数字月 月的缩写 月的全拼 数字日 星期的缩写 星期的全拼
TO_NUMBER和TO_DATE
• 使用TO_NUMBER函数将字符转换为数字
– TO_NUMBER(char [, 'fmt']))
• 使用TO_DATE函数将字符转换为日期
– TO_DATE(char [, 'fmt'])
嵌套函数
• 单行函数可以嵌套。 • 嵌套函数的执行顺序是由内到外。
F3(F2(F1(col,arg1),arg2),arg3)
SQL> SELECT last_name, CONCAT (last_name, job) CAN, LENGTH(last_name) LEN, INSTR(last_name, 'A') INS FROM employees WHERE SUBSTR(job_id,1,5) = 'SALES'; LAST_NAME CON LEN INS

PL_SQL函数总结分解

PL_SQL函数总结分解

number数字类型函数ABS(x) 函数,此函数用来返回一个数的绝对值。

ACOS(x)函数,返回X的反余弦值。

X范围从1到-1,输入值从0到派,以弧度为单位。

ASIN(x)函数,返回X的反正弦值。

X范围从1到-1,输入值从-PI/2到PI/2,以弧度为单位。

ATAN(x)函数,返回X的反正切值。

输入值从-PI/2到PI/2,以弧度为单位。

BITAND(x,y)函数,返回X和Y的与结果。

X和Y必须为非负整数。

注意没有BITOR函数,但是在UTL_R AW包中有用于RAW值的位操作符。

CEIL(x)函数,用来返回大于或等于X的最小整数。

COS(x)函数,返回x的余弦值。

x是以弧度表示的角度。

COSH(x)函数,返回X的双曲余弦。

EXP(x)函数,与power(x,y)函数类似,不过不用指明基数,返回E的X次幂。

E=2.71828183...FLOOR(x)函数,用来返回小于或等于X的最大整数。

LN(x)函数,返回x的自然对数。

x必须大于0。

LOG(x,y)函数,返回以X为底Y的对数。

底必须是不为0和1的正数,Y是任意正数。

MOD(被除数,除数)求余函数,如果除数为0,则返回被除数。

POWER(x,y)函数,返回X的Y次幂。

底X和指数Y都不必是正整数,但如果X是负数的话,Y必须是整数。

ROUND(x[,y])函数,返回舍入到小数点右边Y位的X值。

Y缺省为0,这将X舍入为最接近的整数。

如果Y是负数,那么舍入到小数点左边相应的位上,Y必须为整数。

SIGN(x)函数,此函数用来返回一个数的正负值,若为一个正数则返回1,若为一个负数则返回-1,若为0则仍返回0,有点像把模拟量数字化的意思。

SIN(x)函数,返回X的正弦。

x是以弧度表示的角度。

SINH(x)函数,返回x的双曲正弦。

SQRT(x)函数,返回x的平方根,x不能是负数。

TAN(x)函数,返回x的正切。

x是以弧度表示的角度。

TANH(x)函数,返回x的双曲正切。

plsql知识梳理-常用函数

plsql知识梳理-常用函数

plsql中很多的操作函数,我这边只是梳理了一些特常用的函数。

1 substr()substr(字段,a,b)a代表第几个位置b代表长度a参数中0和1的效果一样用负数则从右边开始数第几个位置如下图执行的效果2 concat()concat 函数只能连接2个字符串,不能一次性的连3个字符串。

3 lower,upperLower:返回字符串,并将所有的字符小写Upper:返回字符串,并将所有的字符大写4 Trim,Ltrim,Rtrimrim、Ltrim及Rtrim函数完成将字符串中的一部分或全部空格去掉。

Trim去掉字符串中的头部和未部空格。

Ltrim去掉字符串中起始的空格。

而Rtrim将字符串末尾的空格都去掉。

请看下图的执行效果5 to_char(n,format) 和to_date(string,format)to_char 就是将数值型或者日期型转化为字符型数值型函数规格化时 90.0999的含义是有9的地方如果是数字就显示如果没有数字就不显示;有0的地方在没有数字的时候也会有0来占位。

主要事项:1) 上图中的0.789数值经过to_char后再显示变成了.789。

2) 指定的FM格式会在按位截取小数的时候四舍五入了。

to_char ---日期格式的内容To_date()函数将char 或varchar2类型的值转化为一个Date值。

6 floor ceil round truncFLOOR——对给定的数字取整数位CEIL ——返回大于或等于给出数字的最小整数ROUND——按照指定的精度进行四舍五入,传回一个数值,该数值是按照指定的小数位元数进行四舍五入运算的结果TRUNC——按照指定的精度进行截取一个数trunc(x [,y]),其中如果没有指定y,则对x在0位小数上进行简单的截断. 如果y是负数,则对x在小数点左边的第|y|位处进行截断,对应负数,位数计算是从0开始的,小数点左一位为0位置。

PLSQL教程学习教程

PLSQL教程学习教程
例: DECLARE Ename varchar2(20) :=’KING’; BEGIN DELETE FROM emp WHERE ename=ename; END;
第7页/共36页
PL/SQL中的标识符
下面是建议使用的变量命名方法
标识符 程序变量 程序常量 游标变量 异常标识
表类型 表
记录类型 参数
trim
N/A
从集合的最后删除一个元素
可变数组
Delete(n)
N/A
删除元素下标为n的元素

第22页/共36页
表和数组属性
例: DECLARE type strings_table is table of varchar2(10) index by binary_integer; strings strings_table; int number;
-- Declare a varray with four element
v_list strings := strings('scott','peter','smith','tom');
int number;
BEGIN
int := 1;
dbms_output.put_line(v_list(int));
PL/SQL中的变量类型
类型 CHAR(n) VARCHAR2(n) BINARY_INTEGER NUMBER(p,s)
LONG DATE BOOLEAN ROWID
说明 定长字符串,长度可选,缺省1。最大可达2000字节 可变字符串,长度不能缺省,最大可达4000字节 带符号整数,为整数计算优化性能 数值,p代表刻度,s代表精度 变长字符串 日期 布尔 存放数据库行号

plsql讲义

plsql讲义

第一章:PL/SQL概述一、什么是PL/SQLORACLE公司发明PL/SQL为了克服SQL语言自身的一些缺陷并为那些要在ORACLE中运行核心业务提供一种完整的解决方案。

PL/SQL具有以下特点是一种高度结构化、易读易理解的语言是一种标准的、可移植的ORACLE语言,实现了编写一次到处运行是一种嵌入式语言,必须在特定的宿主环境内执行,不能编写一个PL/SQL可执行程序是一种高性能的、高集成度的数据库语言,如果你使用VB、DELPHI等进行数据库开发,最终你会发现使用PL/SQL将比其他任何语言都跟轻松高效二、改进的执行授权和事物一致性数据库和SQL语言让我们可以紧密地控制对任何个别数据库表的访问和修改,例如可以通过GRANT命令确保只有特定的角色和用户可以对指定的表执行更新操作,另一方面GRANT命令不能确保用户或者应用执行的更新操作能够正确执行,换句话说,数据库不能确保跨越多个表的事物一致性,在业务事务中涉及多个表是很常见的。

PL/SQL实现紧密地控制和管理能力是通过执行授权。

我们只是授权执行某个过程,后者控制对底层数据结构的访问。

从ORACLE8I开始,PL/SQL提供了AUTHID子句,我们可以使用之前描述的定义者权限模型,也可以使用调用者权限模型。

三、PL/SQL结构:SQL整合DeclareI_book_count int;BeginSelect count(*) into i_book_count from books where author like ;‘12’Dbms_output.put_line(‘123’);--改名;Update books set author = ‘31’End;说明:Declare:声明单元Begin:执行单元--:注释出现错误PL/SQL提供了强大的错误处理机制Procedure check_account(account_id_in in accounts.id%type)IsI_balance_remaining number;I_balance_below_minimum exception;I_account_name %type;BeginSelect name into i_account_name from accounts where id = account_id_in;I_balance_remaining := account_balance(account_id_in);If i_balance_remaining < 1000ThenRaise i_balance_below_minimum;End if;ExceptionWhen no_data_foundThen log_error(….);When i_balance_below_minumumThen log_error(….);Raise;End;第二章:语言基础2.1、PL/SQL块结构块:最小的有意义的代码单元,一个块就是一组代码,这个块给出了执行边界,也为变量声明和异常处理提供了作用范围,PL/SQL允许我们创建匿名块和命名块,命名块可以使包、过程、函数、触发器或者对象。

plsql 使用手册

plsql 使用手册

plsql 使用手册PL/SQL 使用手册PL/SQL 是一种过程化编程语言,特别适合与 Oracle 数据库一起使用。

本文将为您提供 PL/SQL 的使用手册,详细介绍 PL/SQL 的特性、语法以及常用技巧,帮助您快速上手并有效地利用 PL/SQL 进行数据库开发。

1. PL/SQL 简介PL/SQL 是 Oracle 数据库中扩展功能的一部分,它结合了 SQL 语句和流程控制语句,允许开发人员在数据库中执行复杂的任务和操作。

PL/SQL 以块的方式组织代码,这些代码块可以嵌套和重用,提高了代码的可维护性和复用性。

2. PL/SQL 基础语法2.1 变量和数据类型在 PL/SQL 中,可以声明各种类型的变量来存储数据。

常见的数据类型包括整型、浮点型、字符型等。

通过变量,可以存储和操作数据,使得代码更加灵活和可读性更强。

2.2 控制流程PL/SQL 提供了丰富的控制流程语句,如条件判断、循环等,用于实现不同的业务逻辑。

通过控制流程语句,可以根据不同的情况执行不同的代码块,实现灵活的程序逻辑。

2.3 异常处理PL/SQL 具有强大的异常处理机制,通过使用 EXCEPTION 关键字来捕获和处理异常。

可以使用 TRY-CATCH 结构捕获异常,并在异常发生时执行相应的操作,保证程序的健壮性和稳定性。

3. PL/SQL 常用技巧3.1 存储过程存储过程是 PL/SQL 的一种重要应用,可以将一系列的 SQL 语句和逻辑封装在一个过程中,提供数据库操作的接口。

存储过程可以提高性能,减少网络开销,并增加代码的重用性。

3.2 游标游标是 PL/SQL 用于遍历结果集的一种对象。

通过游标,可以从查询结果中提取出数据,并逐条进行处理。

这在需要对查询结果进行逐行处理时非常有用。

3.3 包和触发器PL/SQL 支持包和触发器的概念,这些是组织和管理代码的有力工具。

通过将相关的过程和函数组织到包中,可以提高代码的可维护性和可读性。

PLSQL常用函数

PLSQL常用函数

PL/SQL 函數 2008-01-18 10:56--【字符串函数】 --字符串截取 substr(字段名,起始点,个数) select Name,substr(Name,2,4),substr(Name,0,3),substr(Name,-2,3),substr(Name,-2,1) from t1;--字符串从前面取三个(0 开 始) select Name,substr(Name,0,3) from t1; --字符串从后面取三个 select Name,substr(Name,-3,3),length(Name) 串长度 from t1;SELECT ASCII('A'),ASCII('B') from dual;select CHR(100),CHR(80) from dual;select CONCAT(CHR(65),CONCAT(CHR(67),CHR(98))) from dual;select CHR(65)||CHR(66)||CHR(76) from dual;--将每 个单词的第一个字母大写其它字母小写返回。

select INITCAP('substr,abc,substring') from dual; --返回 i 在 MISSISSIPPI 中第 3 次出现的位置, select INSTR('Mississippi','i',5,3) from dual; select INSTR('Mississippi','i',-2,3) from dual; --返回的是字节 select INSTRB('Mississippi','i',5,3) from dual; select INSTRB('Mississippi','i',-2,3) from dual; --长度 select length('WHO ARE YOU') from dual; select nvl(null,'空') from dual; --小写 select lower('WHo are You') from dual; --LPAD 左侧用字符串补足到一定长度 select LPAD('DFSDf................',9,'WHO') from dual; select LPAD('DFSD',9,'WHO') from dual; select LPAD('DFSD',9,'') from dual; select LPAD('DFSD',length('DFSD')+length('WHO......'),'WHO......') from dual;--把最左边的字符去掉,使其第一个字符不在其中 select ltrim('Mississippi','Mis') from dual; select ltrim('Mississippi','miD') from dual; --RPAD 右侧用字符串补足到一定长度 select RPAD('DFSDf................',9,'WHO') from dual; select RPAD('DFSD',9,'WHO') from dual; select RPAD('DFSD',9,'') from dual; select RPAD('DFSD',length('DFSD')+length('WHO......'),'WHO......') from dual; --把最右边的字符去掉,使其第一个字符不在其中 select Rtrim('Mississippi','Mis') from dual; select Rtrim('Mississippi','miD') from dual; --替换 select REPLACE('uptown','up','down') from dual; --substr 和 substrb select SUBSTR('Message',1,4) from dual; select SUBSTR('ABCDEFG',5) from dual; select substrb('国际劳动节国营农场',5) from dual; select substrb('国际劳动节国营农场',2) from dual; select substrb('国际劳动节国营农场',4,8) from dual; select substrb('国际劳动节国营农场',3,8) from dual; --发音 select SOUNDEX('dawes') Dawes,SOUNDEX('daws') Daws, SOUNDEX('dawson') from dual; --translate select TRANSLATE('ABCDefghijklmn','eg','替代') test from dual;select TRIM(' Space padded0..o0.. ') trim from dual;select UPPER('abDCCfasdfsdafasdf') from dual;--【数学函数】所有函数都有数字参数并返回数字值。

plsql排序方法

plsql排序方法

plsql排序方法PL/SQL是一种过程式编程语言,广泛应用于Oracle数据库中。

在PL/SQL中,排序数据是一种常见的操作。

本文将介绍PL/SQL的排序方法,包括序列排序和单行排序,并给出实际的排序实例。

2.PL/SQL排序方法在PL/SQL中,有两种主要的排序方法:有序列排序和单行排序。

有序列排序是根据某一列或多列的值进行排序,而单行排序则是根据某一行的值进行排序。

这两种排序方法都可以基于列值或表达式进行。

3.有序列排序的方法有序列排序的方法主要包括使用ROWNUM伪列、ROW_NUMBER()分析函数和自定义列。

3.1 使用ROWNUM伪列ROWNUM是一个伪列,它按照查询结果的顺序递增。

我们可以使用ROWNUM对查询结果进行排序。

以下是一个实例:```SELECT * FROM (SELECT t.*, ROWNUM r FROM (SELECT * FROM your_table) t) WHERE r BETWEEN 1 AND 10;```3.2 使用ROW_NUMBER()分析函数ROW_NUMBER()分析函数可以为每一行分配一个唯一的序号。

以下是一个实例:```SELECT * FROM (SELECT t.*, ROW_NUMBER() OVER (ORDER BY age) r FROM your_table t) WHERE r BETWEEN 1 AND 10;```3.3 使用ID列或其他自定义列我们可以添加一个ID列或其他自定义列,然后使用此列进行排序。

以下是一个实例:```ALTER TABLE your_table ADD (id NUMBER);UPDATE your_table SET id = ROWNUM;SELECT * FROM your_table ORDER BY id;```4.单行排序的方法单行排序的方法主要包括使用ORDER BY子句、变量或表达式作为排序依据,以及使用CASE语句实现多条件排序。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

函数是一种有零个或多个参数并且有一个返回值的程序。

在SQL中Oracle内建了一系列函数,这些函数都可被称为SQL或PL/SQL语句,函数主要分为两大类:单行函数组函数本文将讨论如何利用单行函数以及使用规则。

SQL中的单行函数SQL和PL/SQL中自带很多类型的函数,有字符、数字、日期、转换、和混合型等多种函数用于处理单行数据,因此这些都可被统称为单行函数。

这些函数均可用于SELECT,WHERE、ORDER BY等子句中,例如下面的例子中就包含了TO_CHAR,UPPER,SOUNDEX等单行函数。

单行函数也可以在其他语句中使用,如update的SET子句,INSERT的VALUES子句,DELET的WHERE子句,认证考试特别注意在SELECT语句中使用这些函数,所以我们的注意力也集中在SELECT语句中。

NULL和单行函数在如何理解NULL上开始是很困难的,就算是一个很有经验的人依然对此感到困惑。

NULL值表示一个未知数据或者一个空值,算术操作符的任何一个操作数为NULL值,结果均为提个NULL值,这个规则也适合很多函数,只有CONCAT,DECODE,DUMP,NVL,REPLACE在调用了NULL参数时能够返回非NULL值。

在这些中NVL函数时最重要的,因为他能直接处理NULL值,NVL有两个参数:NVL(x1,x2),x1和x2都式表达式,当x1为null时返回X2,否则返回x1。

下面我们看看emp数据表它包含了薪水、奖金两项,需要计算总的补偿不是简单的将薪水和奖金加起来就可以了,如果某一行是null值那么结果就将是null,比如下面的例子:这个语句中,雇员的工资和奖金都将更新为一个新的值,但是如果没有奖金,即salary + null,那么就会得出错误的结论,这个时候就要使用nvl函数来排除null值的影响。

所以正确的语句是:单行字符串函数用于操作字符串数据,他们大多数有一个或多个参数,其中绝大多数返回字符串ASCII()c1是一字符串,返回c1第一个字母的ASCII码,他的逆函数是CHR()CHR(<i>)[NCHAR_CS]i是一个数字,函数返回十进制表示的字符CONCAT(,)c1,c2均为字符串,函数将c2连接到c1的后面,如果c1为null,将返回c2.如果c2为null,则返回c1,如果c1、c2都为null,则返回null。

他和操作符||返回的结果相同INITCAP()c1为一字符串。

函数将每个单词的第一个字母大写其它字母小写返回。

单词由空格,控制字符,标点符号限制。

INSTR(,[,<i>[,]])c1,c2均为字符串,i,j为整数。

函数返回c2在c1中第j次出现的位置,搜索从c1的第i个字符开始。

当没有发现需要的字符时返回0,如果i为负数,那么搜索将从右到左进行,但是位置的计算还是从左到右,i和j的缺省值为1.INSTRB(,[,i[,j])与INSTR()函数一样,只是他返回的是字节,对于单字节INSTRB()等于INSTR()LENGTH()c1为字符串,返回c1的长度,如果c1为null,那么将返回null值。

LENGTHb()与LENGTH()一样,返回字节。

lower()返回c的小写字符,经常出现在where子串中LPAD(,<i>[,])c1,c2均为字符串,i为整数。

在c1的左侧用c2字符串补足致长度i,可多次重复,如果i小于c1的长度,那么只返回i那么长的c1字符,其他的将被截去。

c2的缺省值为单空格,参见RPAD。

LTRIM(,)把c1中最左边的字符去掉,使其第一个字符不在c2中,如果没有c2,那么c1就不会改变。

RPAD(,<i>[,])在c1的右侧用c2字符串补足致长度i,可多次重复,如果i小于c1的长度,那么只返回i那么长的c1字符,其他的将被截去。

c2的缺省值为单空格,其他与LPAD相似RTRIM(,)把c1中最右边的字符去掉,使其第后一个字符不在c2中,如果没有c2,那么c1就不会改变。

REPLACE(,[,])c1,c2,c3都是字符串,函数用c3代替出现在c1中的c2后返回。

STBSTR(,<i>[,])c1为一字符串,i,j为整数,从c1的第i位开始返回长度为j的子字符串,如果j 为空,则直到串的尾部。

SUBSTRB(,<i>[,])与SUBSTR大致相同,只是I,J是以字节计算。

SOUNDEX()返回与c1发音相似的词TRANSLATE(,,)将c1中与c2相同的字符以c3代替TRIM([[]] from c3)将c3串中的第一个,最后一个,或者都删除。

UPPER()返回c1的大写,常出现where子串中单行数字函数操作数字数据,执行数学和算术运算。

所有函数都有数字参数并返回数字值。

所有三角函数的操作数和值都是弧度而不是角度,oracle没有提供内建的弧度和角度的转换函数。

ABS()返回n的绝对值ACOS()反余玄函数,返回-1到1之间的数。

n表示弧度ASIN()反正玄函数,返回-1到1,n表示弧度ATAN()反正切函数,返回n的反正切值,n表示弧度。

CEIL()返回大于或等于n的最小整数。

COS()返回n的余玄值,n为弧度COSH()返回n的双曲余玄值,n 为数字。

EXP()返回e的n次幂,e=2.71828183.FLOOR()返回小于等于N的最大整数。

LN()返回N的自然对数,N必须大于0LOG(,)返回以n1为底n2的对数MOD()返回n1除以n2的余数,POWER(,)返回n1的n2次方ROUND(,)返回舍入小数点右边n2位的n1的值,n2的缺省值为0,这回将小数点最接近的整数,如果n2为负数就舍入到小数点左边相应的位上,n2必须是整数。

SIGN()如果n为负数,返回-1,如果n为正数,返回1,如果n=0返回0.SIN()返回n的正玄值,n为弧度。

SINH()返回n的双曲正玄值,n为弧度。

SQRT()返回n的平方根,n为弧度TAN()返回n的正切值,n为弧度TANH()返回n的双曲正切值,n为弧度TRUNC(,)返回截尾到n2位小数的n1的值,n2缺省设置为0,当n2为缺省设置时会将n1截尾为整数,如果n2为负值,就截尾在小数点左边相应的位上。

单行日期函数单行日期函数操作DATA数据类型,绝大多数都有DATA数据类型的参数,绝大多数返回的也是DATA数据类型的值。

ADD_MONTHS(,<i>)返回日期d加上i个月后的结果。

i可以使任意整数。

如果i是一个小数,那么数据库将隐式的他转换成整数,将会截去小数点后面的部分。

LAST_DAY()函数返回包含日期d的月份的最后一天MONTHS_BETWEEN(,)返回d1和d2之间月的数目,如果d1和d2的日的日期都相同,或者都使该月的最后一天,那么将返回一个整数,否则会返回的结果将包含一个分数。

NEW_TIME(,,)d1是一个日期数据类型,当时区tz1中的日期和时间是d时,返回时区tz2中的日期和时间。

tz1和tz2时字符串。

NEXT_DAY(,)返回日期d后由dow给出的条件的第一天,dow使用当前会话中给出的语言指定了一周中的某一天,返回的时间分量与d的时间分量相同。

ROUND([,])将日期d按照fmt指定的格式舍入,fmt为字符串。

SYADATE函数没有参数,返回当前日期和时间。

TRUNC([,])返回由fmt指定的单位的日期d.单行转换函数单行转换函数用于操作多数据类型,在数据类型之间进行转换。

CHARTORWID()c 使一个字符串,函数将c转换为RWID数据类型。

CONVERT(,[,])c尾字符串,dset、sset是两个字符集,函数将字符串c由sset字符集转换为dset 字符集,sset的缺省设置为数据库的字符集。

HEXTORAW()x为16进制的字符串,函数将16进制的x转换为RAW数据类型。

RAWTOHEX()x是RAW数据类型字符串,函数将RAW数据类转换为16进制的数据类型。

ROWIDTOCHAR()函数将ROWID数据类型转换为CHAR数据类型。

TO_CHAR([[,)x是一个data或number数据类型,函数将x转换成fmt指定格式的char数据类型,如果x为日期nlsparm=NLS_DATE_LANGUAGE 控制返回的月份和日份所使用的语言。

如果x为数字nlsparm=NLS_NUMERIC_CHARACTERS 用来指定小数位和千分位的分隔符,以及货币符号。

TO_DATE([,[,)c表示字符串,fmt表示一种特殊格式的字符串。

返回按照fmt格式显示的c,nlsparm 表示使用的语言。

函数将字符串c转换成date数据类型。

TO_MULTI_BYTE()c表示一个字符串,函数将c的担子截字符转换成多字节字符。

TO_NUMBER([,[,)c表示字符串,fmt表示一个特殊格式的字符串,函数返回值按照fmt指定的格式显示。

nlsparm表示语言,函数将返回c代表的数字。

TO_SINGLE_BYTE()将字符串c中得多字节字符转化成等价的单字节字符。

该函数仅当数据库字符集同时包含单字节和多字节字符时才使用其它单行函数BFILENAME(,)dir是一个directory类型的对象,file为一文件名。

函数返回一个空的BFILE 位置值指示符,函数用于初始化BFILE变量或者是BFILE列。

DECODE(,,[,,,[])x是一个表达式,m1是一个匹配表达式,x与m1比较,如果m1等于x,那么返回r1,否则,x与m2比较,依次类推m3,m4,m5....直到有返回结果。

DUMP(,[,[,[,]]])x是一个表达式或字符,fmt表示8进制、10进制、16进制、或则单字符。

函数返回包含了有关x的内部表示信息的VARCHAR2类型的值。

如果指定了n1,n2那么从n1开始的长度为n2的字节将被返回。

EMPTY_BLOB()该函数没有参数,函数返回一个空的BLOB位置指示符。

函数用于初始化一个BLOB变量或BLOB列。

EMPTY_CLOB()该函数没有参数,函数返回一个空的CLOB位置指示符。

函数用于初始化一个CLOB变量或CLOB列。

GREATEST()exp_list是一列表达式,返回其中最大的表达式,每个表达式都被隐含的转换第一个表达式的数据类型,如果第一个表达式是字符串数据类型中的任何一个,那么返回的结果是varchar2数据类型,同时使用的比较是非填充空格类型的比较。

LEAST()exp_list是一列表达式,返回其中最小的表达式,每个表达式都被隐含的转换第一个表达式的数据类型,如果第一个表达式是字符串数据类型中的任何一个,将返回的结果是varchar2数据类型,同时使用的比较是非填充空格类型的比较。

相关文档
最新文档