数据库

位置:IT落伍者 >> 数据库 >> 浏览文章

PL/SQL学习笔记(一)


发布日期:2022年03月28日
 
PL/SQL学习笔记(一)

基本概念

数据库对象

约束条件保证数据完整性

视图虚表命名的查询语句

索引加速查询(加快查询的速度)

序列一串连续递增或递减的数字步长相同(代理键)

同义词一个对象的另外一个叫法(对象的别名)

存储过程用于操作

函数用作复杂运算的用于计算

触发器由事件触发的存储过程

数据库安全

用户

方案或模式(Schema)是用户所对应的对象的集合用户名等于方案名

权限

角色权限组一组权限

配额(quota)允许被使用的空间用户可以在表空间上可以使用的空间

端口

环境变量

ORACLE_BASE基本目录

ORACLE_NAME 当前的主目录

ORACLE_NLS

使用USASCLL字符集时不用设

PATH 路径

////////////////////////////////////////////////////////////////////////////////////////////////////////////

基本的SQL SELECT 语句

口令中的第一个字符不能为数字

语句

(一)查询SELECT

数据操作语句DML(数据的插入INSERT删除DELETE修改UPDATE合并MERGE)

(二)合并把一个表中的数据合并到另一个表中去如果数据在原表中存在做UPDATE否则INSERT(I独有)

(三)事务控制语句COMMIT 提交ROLLBACK 回滚

SAVEPOINT 存储点(与 ROLLBACK 搭配使用)在回滚的时候可以回滚到某个存储点上否则回滚到最初起点上

(四)数据定义语句对对象操作TRUNCATE 清除表中所有数据 /CREATE 创建 /DROP 删除 /ALTER 修改

(五)权限控制语句(DCL)GRANT 授予权限 /REVOKE 移除权限

SELECT

SELECT 查询列表 FROM 数据源

*&* SQL命令必须加分号

ALTER USER HR IDENTIFIED BY HR ACCOUNT UNLOCK

修改用户解锁

给HR解锁

CONNECT(conn) HR/HR(密码) 用HR用户连接数据库

*&*(不是SQL命令 是 SQLPLUS 命令)不用加分号

DESCRIBE(desc) DEPARTMENTS

关键字表名

描述表命令(SQLPLUS 命令)

SQL语句说明

)语句文本的书写不区分大小写(但字符串在作为值的时候要注意大小写)

)语句可以写单行也可以写多行

)关键字不能缩写或跨行

)语句通常被分多行书写

)缩进被用于提高语句的可读性

数字和日期都可以使用数学运算符建立表达式

+*/ <>不等于

日期可以加减数字数字默认为天

日期不能加日期但日期可以减日期

字符不能加减

定义空(NULL)值

空值出现在表达式中会导致整个表达式的值为空

NVL(字段名将要赋予的值)函数

作用将空值转换成其他有ASCLL码的值

annual_salary年薪

别名

可以加中文的字段别名

如果想强制地改变列名的大小写可以在别名的定义时加上双引号列名有空格时也要在列名上加双引号

select lastname as employees name from employees;

spool +路径

保存命令(将显示保存)

连接操作符

||

select lastname || work in || department_id from tablename;

select last_name || s salary is || salary 员工月薪 from employees;

~~~

在单引号中还要使用单引号的话就必须使用两个单引号来实现一个单引号的功能

文本字符串

*可以代表字符数字或是日期

*当代表字符或日期的时候用单引号括起来数字不需要

在查询时默认显示所有的行包括有重复值的行

DISTINCT 消除重复行关键字放在整查询列表的最前面

作用范围整个查询列表的组合

消除重复行后会按字段的特性做升序排列(执行过程先排序再消除重复)

select distinct department_idjob_id from employees;

SQLPLUS 与 SQL 的关系

SQL *是一种语言

*ANSI标准

*关键字不能缩写

*用于操作数据库中的数据和表的定义

SQLPLUS命令的功能

*描述表的结构

*编辑SQL语句

查询 SQLPLUS 命令

help + 命令

SQLPLUSW 在 WINDOWS 下运行的分析器

登陆ISQLPLUS

)先到服务中启动OracleOraHomeHTTPServer

)在浏览器中输入//wnj:/isqlplus

~~~~~~~~~~~~~~~

URL(网页中的地址)

SQLPLUS 命令

与文件相关的命令

spool + 路径

spool off

save

把当前内存中的语句保存为文本文件

run 或 /

运行当前内存中的语句

clear buffer(cl buff)

清空当前内存中的语句

start @

读取并执行

get

读取不执行

编辑命令

list

列出一条语句

*表示当前行

change

修改命令

原来c/jj/kk

c/jjj/xxx

input

在当前行之后插入一行新的数据

append

在当前行中插入新的东西

n

写数字显示对应行

delete

del + 回车 删除当前行

del 删除第一到第三行

edit

lciande

查看当前用户

SHOW USER

默认的日期格式

DDMONRR

日期可以进行比较

字符可以进行比较(以字母的ASCLL码比较)

IN(set)或NOT IN 匹配任何列表中的值

LIKE 模糊匹配字符串值

IS NULL 是否空值

IS NOT NULL 是否不为空

BETWEEN 可以做数字日期和字符的比较

通配符

%

S_mith

WHERE first_name like s/_%escape/;

解释这个符号后的下划线为正常的字符

如果不加将被视为通配符作用的下划线

_只能通配一个字符

主要用于通配固定位数的字符例如查询月收入五位数以上的员工五位就可以用_来查询

逻辑操作符(用在WHERE子句中)

AND

OR

NOT

先执行 NOT 再执行 AND 最后执行 OR

ORDER BY

ORDER BY子句在 SELECT 语句的最后

ASC升序

DESC降序

空值作为无穷大来处理

rownum 显示行数量约束的关键字(在结果中可以做代理键使用)

可以按照查询列表中序号进行排序

系统在用户写出查询列表的同时就赋予每个列名一个序号升序赋予

SELECT namephoneadress from;

单行函数对单行数据进行计算并返回一个值的函数

*修改数据项

*接受参数返回一个值

*对每行进行操作

*每行返回一个结果

*可以修改数据类型

*可以嵌套

character字符类型函数

LOWER()强制小写

UPPER()强制大写

INITCAP()每个单词首字母大写

可以用在WHERE子句中

CONCAT()连接函数

{

SUBSTR(stringa[b])返回string的一部分a和b以字符为单位

SUBSTRB(stringa[b])返回string的一部分a和b是以字节为单位

SUBSTRC(stringa[b])返回string的一部分a和b是以UNICODE完全字符为单位

SUBSTR(stringa[b])返回string的一部分a和b是以UCS代码点为单位

SUBSTR(stringa[b])返回string的一部分a和b是以UCS代码点为单位

以上函数都是返回string的一部分从字符位置A开始长为B个字符如果A是那它就被认为是(字符串的开始位置)如果A是正数那么字符从左边开始数如果是负数则从STRING的末尾开始从右边数如果B不存在那么缺省是整个字符串如果B小于将返回NULL如果A或B使用了浮点数那么该数值首先被节取成一个整数返回类型与STRING相同

}

{

LENGTH(string)

LENGTHB(string)

LENGTHC(string)

LENGTH(string)

LENGTH(string)

以上函数返回string的长度因为CHAR类型的值是填充空格的所以如果string是CHAR数据类型那么末尾的空格算在长度之内如果string是NULL函数返回NULL

}

{

INSTR(stringstring[a][b]) 返回string中包含string的位置a和b以字符为单位

INSTRB(stringstring[a][b])返回string中包含string的位置a和b是以字节为单位

INSTRC(stringstring[a][b])返回string中包含string的位置a和b是以UNICODE完全字符为单位

INSTR(stringstring[a][b])返回string中包含string的位置a和b是以UCS代码点为单位

INSTR(stringstring[a][b])返回string中包含string的位置a和b是以UCS代码点为单位

以上函数返回string中包含string的位置从左边开始扫描string起始位置是A如果A为负数那么从右边开始扫描第B次出现的位置将被返回A和B缺省都为即返回在string中第一次出现string的位置如果string在A和B的规定下没有找到那么就返回位置的计算是相对于string的开始位置的而不关A和B的取值

}

LPAD(列名数字要补上的字符)左补位

RPAD(列名数字要补上的字符)右补位

TRIM(child_str FROM parents_str)将连续子串(只能有一个字符)从主串的两边截取出来区分大小写

默认为截取空格

LTRIM()左截取

RTRIM()右截取

ascii(x)函数返回X字符的十进制数即X的ASCII码值

chr(x)函数返回ASCII码为X的字符

length(x)函数求串X的长度与之相似的是lengthb(x)函数用在多字节字符中

replace(xy[z])函数返回值为将串X中的Y串用Z串替换后的结果字符串若省略Z参数则将串X中为Y串的地方删除

soundex(x)函数返回串X的语音描述这个描述由个字符组成说明串X的声音表示形式发音有时在只知道一个名字的发音而不知道拼写情况下或许能用到

select soundex(smith) from dual; 返回值为S

translate(xyz)函数返回将X串中每个字符按它在Y串中出现的位置翻译成Z串中相应位置的字符后的结果相当与替换

select translate(this is an examplemy is@#$%^&) from dual;

NLS函数

除了NCHR这些函数都是以字符类型为参数返回字符类型值

CONVERT(stringdest_charset[source_charset])

将输入string转换为指定字符集dest_charsetsource_charset是输入值的字符集——如果它没有被指定则缺省为数据库字符集输入值可以是CHARVARCHARNCHARNVARCHARCLOB和NCLOB类型返回值为

VARCHAR类型如果dest_charset中没有输入字符串中的一个字符将会使用一个代替字符(由dest_charset定义)

NCHR(X)

返回数据库国家字符集中值为X的字符NCHR(X) 等价于CHR(x USING NCHAR_CS)

NLS_CHARSET_DECL_LEN(byte_widthcharset)

返回一个NCHAR值的声明宽度(以字符为单位)byte_width是该值以字节为单位的长度charset是该值的字符集ID

NLS_CHARSET_ID(charset_name)

返回指定字符集charset_name的数字ID为charset_name指定CHAR_CS将返回数据库字符集的ID为charset_name指定NCHAR_CS将返回数据库国家字符集的ID如果charset_name是一个无效字符集名将返回

NULLNLS_CHARSET_ID和NLS_CHARSET_NAME是互为反函数

NLS_CHARSET_NAME([charset_id])

返回指定字符集ID charset_id 的名字如果 charset_id 是一个无效字符集ID将返回NULL;

NLS_INITCAP(string[nlsparams])

以字符串中每个单词第一个字符大写而单词中其余字母小写的形式返回stringnlsparams指定了一个与该会话缺省的不同的排序次序如果没有指定该参数NLS_INITCAP与INITCAP相同nlsparams应该采取下面的形式

NLS_SORT=sort其中sort是一个语言排序序列

NLS_UPPER(string[nlsparams])

以大写形式返回string不是字母的字符不受影响如果没有指定nlsparamsNLS_UPPER与UPPER相同

NLS_LOWER

以小写形式返回string不是字母的字符不受影响如果没有指定nlsparamsNLS_LOWER与LOWER相同

NLSSORT(string[nlsparams])

返回用于排序string的字符串字节所有值都被转换为字节字符串这样在不同数据库之间就保持了一致性

如果没有指定nlsparams那么就会使用会话中缺省排序序列

TRANSLATE(string USING {CHAR_CSINCHAR_CS})

TRANSLATEUSING 将输入string参数转换为数据库字符集(指定CHAR_CS)或数据库国家字符集(指定NCHAR_CS)string可以是CHARVARCHARNCHARNVARCHAR类型如果指定CHAR_CS返回类型为VARCHAR如果指定NCHAR_CS返回类型为NVARCHARTRANSLATEUSING是CONVERT功能的子集

如果输入值包含UCS字符或反斜线符号要使用UNSTR函数

SQL> select translate(asd using NCHAR_CS) from dual;数据库国家字符集

TRANSL

asd

SQL> select translate(asd using CHAR_CS) from dual;数据库字符集

TRA

asd

UNSTR(s)

返回转换为数据库UNICODE字符集的字符串s可包含escaped UCS 代码点字符它由一个反斜线符号加上十六进制代码点数字组成因此要在字符串中包含一个反斜线符号就必须使用双反斜线符号(\\)UNISTR与

TRANSLATEUSING相似差别是它仅能转换为UNICODE而且可以包含escaped 字符

general

//number

//conversion

//date

多行函数对多行数据(一组数据)进行计算并返回一个值的函数

               

上一篇:动态SQL和PL/SQL的EXECUTE IMMEDIATE选项

下一篇:深入浅出SQL教程之Groupby和Having