access 中能不能用 escape 语句,如果能,给出例子。

access 中能不能用 escape 语句,如果能,给出例子。,第1张

1 付键 也就是FK formary key

程序交流中心,这是专门为新手学习设立的论坛

二、SQL

Structur query language

结构化查询语言,是 *** 作关系型数据库中的对象。

DDL(Data definition language 数据定义语言),用于建表或删表 *** 作,以及对表约束进行修改

create table , alter table , drop table 对表结构的增删 *** 作。

DML(Data manipulation language 数据 *** 作语言),向表中插入纪录,修改纪录

insert , update , delete , merge

transaction ,事务控制语言,由DML语句组成的,commit; ,rollback;

select 查询语句

dcl 授权语句 grant

三、Oracle

DBMS 数据库管理系统

有Oracle提供,还提供AS,应用服务器

DBA 数据库管理员

四、相关 *** 作

1、sqlplus 访问数据库命令(本地访问/远程访问),和数据库建立连接的命令,是数据库 *** 作的环境

sqlplus 用户名/密码

2、show user 显示当前用户的用户名

改变身份可以直接connect 用户名/密码 --- 这个是sqlplus命令

在sqlplus中可以使用 ! 可以在shell和sqlplus间切换,!shell命令 可以在sqlplus中使用shell命令。

实际上是sqlplus开了子进程来执行shell命令。

3、Oracle数据库中的表分两类:用户表(用户使用 *** 作的表),系统表(数据库系统维护的表,也叫数据字典)

对用户表的DDL *** 作出发了对系统表的DML *** 作!

五、基本语法

1、select查询语句

select table_name from user_tables;(查询系统表)

以上的查询语句就是查询本用户下所拥有的所有表的表名。

投影 *** 作,只查看选择的字段的信息。

选择 *** 作,查看字段中的特定某些信息。

联接 *** 作,多表查询,通过表间连接,查寻出多表中的信息

(1)select table_name from user_tables;(查询系统表)

以上的查询语句就是查询本用户下所拥有的所有表的表名。

(2)sqlplus的buffer中会缓存最后一条sql语句,可以使用"/"来执行这最后一条sql语句,也可以使用

edit命令来编辑最后一条sql语句。

l命令(list)(sqlplus命令)可以显示buffer中最后一条命令。

sqlplus命令可以缩写

(3)desc [表名]

这是一条sqlplus命令,注意他不是sql语句,这条命令用于查看表的结构。descript的缩写

[字段名] [字段的类型],这是使用完desc命令后显示的表结构。

(4)select [表的字段名1],[表的字段名2], from 表名;

select from 表名; 查寻表中所有字段的信息

(5)关键字不等拆分,sql语句,以及表名,字段名是大小写不敏感的。

sql语句要以";"结尾,来表示sql语句结束,如果不加";"系统不会执行此条sql语句,并提示。

在Oracle中字符显示是左对齐,数值右对齐。

(6)在select 语句中可以使用数学表达式。

select [表达式(必须包含本表字段名)],[], from 表名;

运算的优先级的先乘除后加减,同级自左向右运算,括号改变优先级。

(7)别名

select [字段名或表达式] ["别名"],[] [""], from 表名;

可以通过在字段名或表达式后加空格"别名",可以给列,或者表达式结果其别名。

表达别名必须加双引号。

(8)字符串拼接使用||符号

select 目标字段名||" "||目标字段名 from 表名;

注意:在Oracle中的字符串要用''包含

别名中需要使用空格,或是大小写敏感时需要用""包含。

练习:

自己写一条SQL语句,执行的结果是select from ;

其中是每张系统表的表名

即在每张系统表的表名前加“select from” ,后加“;”

select 'select from '||table_name||';' from user_tables;

2、处理错误

(1)!oerr ora [错误号] ,系统可以显示错误的原因和如何修改。如果命令错误输入可以使用edit或ed来修改输入错误。

实际上是在编辑缓存文件中的最后一条sql语句。

也可以使用 (change) c /错误字段/正确字段,来进行替换 *** 作进行修改。

只有在Linux平台使用

! 相当于 host ,没有断连接,只是切换了一下,执行shell命令

(2)edit命令来编辑最后一条sql语句。

3、sqlplus设置

set pause on 回车响应,分屏显示,只在本会话中有效

set pause off 关闭分屏显示。

set pause "" 设置分屏显示的提示信息。

set pause on 先输出提示信息,回车响应,分屏显示

set head off 提头输出关闭

set feed off 结尾输出关闭

set echo off 回写关闭

spool 文件名sql 写入指定文件

spool off 关闭写入。

4、sql脚本

也就是在文件中写有sql语句的文件,可以在sqlplus中运行。

引入sql脚本

sqlplus 用户名/密码 @sql脚本 (注意:在用户名密码输入结束后一定要加空格然后再写@sql脚本)

在脚本中最后一行写上“exit”,则运行完脚本以后,回到shell上

5、

Oracle中的空值 空值会当无穷大处理,其实空值根本就不会存储,只是看作是无穷大。

Oracle中控制处理函数 NVL(字段名,值),这个字段中的空值替换为指定值,如果不为空,则会返回其原值。

例:select (salary12)(NVL(commission_pct,0)/100+1) salary,first_name from s_emp;

distinct关键字,去掉重复行(这个关键字会触发排序 *** 作)

例: select distinct dept_id,title from s_emp;

dept_id与title的联合不唯一

注意:distinct,关键字之后会对from之前的字段进行排重 *** 作。

6、column命令 --- sqlplus命令

column命令 列格式的定义

column 目标列名 查看这个类是否定义了格式

column 目标列名 format a 设置列宽。

column last_name heading 'Employee|Name' FORMAT A15

设置题头

这其中的'|'是换行符

column salary justify left format $99,99000

定义数字显示格式

注意:如果不满足显示的格式,就会把数据显示为"#"

column salary justify left format $00,00000

会出现$00,92800 ,用0补齐

column 列名 clear (清除列格式定义)

注意:只有sqlplus命令才有简写,并且在使用sqlplus命令时结尾也不能加分号。

六、选择 *** 作

1、order by

排序子句 ASC(默认,升序) DESC(降序)

order by 目标列名(别名) 排序顺序(不写排序顺序,会默认为升序排序)

例:select first_name from s_emp order by first_name;

select first_name from s_emp order by first_name desc;

注意:升序空值在结果的末尾,降序空值在结果的最前面。

2、where子句

where子句使用在 select from 后面,用来选择所需(符合条件的)的记录

where后面跟的是表达式 也就是 XXX=XXX, XXX between X and X ,XXX in(X,X,X)

like '' 通配查询

between and ,表示结果在这之间,between and是一个闭区间,

也就相当于 <= and >= 。

!=,<>,^=,这三个都标识不等于,<=,>=,=,这些运算符都可以使用。

in (va1,val2,) 判断结果是否在这个枚举中存在

like '' 字符串通配查询,'%'表示多个字符,'_',表示一个字符。

注意:转义的用法:like ‘S\_%’ escape ‘\’

and 表示只有两个条件同时满足

or 表示条件只要满足其中只一就可以

all 是要求都满足条件。

not ,则是可以与以上的条件产生反效果。

空值会对not in造成影响,也就是不等于任何值,但是空值例外。

is null 使用来判断值是否为空。

注意:Oracle中的字符串是严格区分大小写的。

(1)注意数据类型,数字类型直接写,字符用'' ,缺省格式的Date可以用'',只有别名

才用" "包含。

(2)选择合适的运算符

七、单行函数

1字符函数

字符是大小写敏感的

转小写 lower(字段名) --- 其中的参数可以是一个字符串常量或是一个字段名

转大写 upper(字段名)

首字母大写 initcap(字段名)

字符串拼接 concat(字段1, 字段2)

截取子串 substr(字段名, 起始位置,取字符个数)

dual表,是专门用于函数测试和运算的,他只有一条记录

字符串拼接 concat(,)

求指定子串 substr(,起始位置,取字符个数)

可以使用"-"表示从右向左取,取的时候可以从左往友取。

例:select substr(first_name,-2,2) sub from s_emp;(取后两个)

select substr(first_name,2,2) sub from s_emp;(取前两个)

2,数值函数

四舍五入 round(数据,保留小数点后几位)

可以用负数表示小数点前,0,表示小数点后第一位,也就是保留个位,-1表示个位(保留到十 位)。

例:select round(1536,1) from dual;

截取数字函数 trunc(数据,保留的位数(小数点后位数)) 截取个位之后补0

例:select trunc(123456,1) from dual;

3,日期函数

日期格式,

全日期格式 世纪信息,年月日,时分秒。

缺省日期格式,日-月-年 dd-mon-rr

修改当前会话的日期格式,会按照指定的格式输出日期

alter session set nls_date_format='yyyy mm dd hh24:mi:ss';

返回当前日期 sysdate

例:select sysdate from dual;

select sysdate+1 from dual; 获得明天的日期,加1,单位是天

日期是格式敏感的

求两个日期间相隔了多少个月 months_between(date1,date2)

加减指定数量的月份 add_months(date,月数),月数可以为负,负值就是减去相应的月数。

从date日期开始的第一个星期五 next_day(date,FriDay)

返回月末的日期 last_day(date)

截取日期 trunc(date,'年或月或日或时分秒')

例:select next_day(sysdate,2) from dual;

例:select trunc(add_months(sysdate,1),'month') from dual;

ROUND('25-MAY-95','MONTH') 01-JUN-95

ROUND('25-MAY-95 ','YEAR') 01-JAN-95

TRUNC('25-MAY-95 ','MONTH') 01-MAY-95

TRUNC('25-MAY-95 ','YEAR') 01-JAN-95

练习:

返回下个月的第一天的日期

select round(last_day(sysdate),'MONTH') from dual;

select add_months(trunc(sysdate,'MONTH'),1);

4,不同数据类型间转换函数

将日期转成字符 tochar(date,'日期格式')

日期格式要用有效格式,格式大小写敏感 'yyyy mm dd hh24:mi:ss',

'year'(全拼的年),'mm'(数字表示的月) 'month'(全拼的月),'day'(星期的全拼),'ddspth' (日期的全拼) 'yy mm dd'

例:select to_char(sysdate,'yyyy mm dd hh24:mi:ss')from dual;

将字符转换成数字 to_number('')

将数字转字符to_char(number,'fmt') fmt是数字格式

将字符串转成日期 to_date('','日期格式')

例:select to_char(to_date('2006 11 03','yyyy mm dd'),'dd-month-yy') from dual;

1、等值连接

select [表别名1字段名1],[表别名2字段名2],

from 表1 表别名1 ,表2 表别名2

where 表别名1字段名3=表别名2字段名4;

表连接时,当表与表之间有同名字段时,可以加上表名或表的别名,加以区分,使用时要用

表名字段名或表别名字段名(列名)。当表的字段名是唯一时,可以不用加上表名或表的别名。

注意:当为表起了别名,就不能再使用表名字段名。

例:select afirst_name,alast_name,bname

from s_emp a,s_dept b

where adept_id=bid;

2、非等值连接

select [表别名1字段名1],[表别名2字段名2],

from 表1 表别名1 ,表2 表别名2

where 表别名1字段名3 表别名2字段名4

可以使比较运算符,也可以使其他的除了'='的运算符

例:select eename, dgrade,esal

from emp e,salgrade d

where esal between dlosal and dhisal;

3、自连接

用别名把一张表中的数据分成两部分,然后在使用条件过滤。

select [表别名1字段名1],[表别名2字段名2],

from 表1 表别名1 ,表1 表别名2

where 表别名1字段名3=表别名2字段名4;

例:select afirst_name ename,bfirst_name cname

from s_emp a,s_emp b

where amanager_id=bid;

以上所提到的表连接,都叫做内连接,严格匹配两表的记录。

4、外连接

会使用一方表中的所有记录去和另一格表中的记录按条件匹配,空值也会匹配,这个表中的所有记录都会显示,数据库会模拟出记录去和那些不匹配的记录匹配。

例:select afirst_name enamei,aid,bfirst_name cname,bid

from s_emp a,s_emp b

where amanager_id=bid(+);

即用a表中的数据去匹配b表的,若b表中有null,系统模拟纪录与其匹配

注意:要把那一方的记录全部都显示出来,还有注意条件(+)跟在要全部选出的对端。

外连接的应用:

列出哪个部门没有员工

select edeptno,ddeptno

from emp e,dept d

where edeptno(+)=ddeptno

and edeptno is null;

三、组函数

group 组

group by 分组子句,按指定的分组规则分组 ,这个group by 子句可以跟在 select 语句后或是 having后面。

group by子句也会出发排序 *** 作,会按分组字段排序。

select [组函数或分组的字段名] , from 表名 group by [字段名1],[字段名2],;

例:select avg(salary) from s_emp group by dept_id;

注意:组函数可以处理一组数据,返回一个值。

组函数会忽略空值。

avg(),求平均值,sum(),求和 这两个函数的参数只能是number型的。

以下所提到的函数可以使用任意类型做参数。

count(),用来统计记录数,可以使用排重命令。count()默认使用的是all。

max(),min()求最大值和最小值,

count(),统计表中记录数。

例:select max(bname),avg(asalary), max(cname)

from s_emp a,s_dept b,s_region c

where adept_id=bid and bregion_id=cid

group by bdept_id;

注意:只要写了group by子句,

select后就只能用group by后的字段或者是组函数。

where子句只能够过滤记录,放单行函数。

having子句可以过滤组函数结果或是分组的信息,且写在group by子句后。

例:

select max(bname),avg(asalary), max(cname)

from s_emp a,s_dept b,s_region c

where adept_id=bid and bregion_id=cid

group by bid

having sum(asalary)>4000;

column 也可以定义有别名的列的格式。

column "别名" 格式定义

注意:要先过滤掉不需要的记录,然后再进行分组 *** 作,提高效率。

四、子查询

子查询,就是可以嵌在任何的sql语句中的select语句。

在select语句中嵌套子查询时,会先执行子查询。一般的会将子查询放在运算符的右边。

注意:在使用子查询时,要注意这个运算符是单行的(也就是只能是单值),还是多行运算符(范围,多值,in)。

配合使用子查询返回的结果必须符合运算符的用法。

例:

select first_name,title

from s_emp

where title=any(select title from s_emp

where last_name='Smith')

and upper(last_name)!='SMITH';

select first_name,title

from s_emp

where title in (select title from s_emp

where last_name='Smith')

and upper(last_name)!='SMITH';

五、将业务需求转换成可 *** 作的表

一: 需求分析

二: 画E-R图

三: 转换成表关系

四: 割接(新老系统交接)

五:

E-R图属性:

为强制且非空属性

o 可选属性(可以有值也可以没有)

# 表示此属性唯一且非空

实体关系:

mastbean maybean

数量关系: 多对一关系

一对多关系

一对一关系

多对多关系

第一范式,所有的属性都必须是单值,也就是属性只表示单一的意义。(记录可以重复,没有任何限制)

第二范式,属性要求唯一且非空,(记录不可重复,但是数据可能会出现冗余)。

第三范式,非主属性只能依赖于主属性,不能依赖于其他非主属性。(解决数据冗余问题)

六、约束

约束是针对表中的字段进行定义的。

primary key (主键约束 PK)保证实体的完整性,保证记录的唯一

主键约束,唯一且非空,并且每一个表中只能有一个主键,有两个字段联合作为主键,只有两个字段放在一起唯一标识记录,叫做联合主键。

foreign key (外建约束 FK)保证引用的完整性,

外键约束,外键的取值是受另外一张表中的主键或唯一值得约束,不能够取其他值,只能够引用主键会唯一键的值,被引用的表,叫做parent table(父表),引用方的表叫做child table(子表),要想创建子表,就要先创建父表,后创建子表,记录的插入也是如此,先父表后子表,删除记录,要先删除子表记录,后删除父表记录,要修改记录,如果要修改父表的记录要保证没有被子表引用。要删表时,要先删子表,后删除父表。

unuque key(唯一键),值为唯一

index(索引)是数据库特有的一类对象,view(示图)

典型的一对多 class 对应多个学生。

student table class table

______________________________ _________________________

| id | name | address| class_id| | id |class_desc|class_num|

|(PK)|______|________|___(FK)__| |(pk)|__________|_________|

| | | | | | | | |

一对一

student tabel shenfenzheng table

____________________ _________________________________

| id | name | address| | s_id |shenfen_desc|shenfen_num|

|(PK)|______|________| |(PK,FK)|____________|___________|

| | | | | | | |

多对多

student tabel zhongjian table kecheng table

____________________ _________________________________ __________________

| id | name | address| | s_id |shenfen_desc|shenfen_num| | kid | kechengname|

|(PK)|______|________| |(FK,FK)|____________|___________| | (PK)|____________|

| | | | |联合主键| | | | | |

引用对方表的主键,当作本身的主键,所以这个表的主键,既是主键又是外建

建表和其他相关 *** 作

DDL语句

创建表:

create table 表名 ( 字段名1 类型(数据长度)(default ) 约束条件, 字段名2 类型(数据长度) 约束条件 );

Oracle数据库中的数据类型

varchar(长度),可变长字符串,char(长度) 定长

number(,),number 表示浮点数,或者是整数

long 大对象,clog 字符的大对象,相当于文本文件在表中只存放一个相当于只针对值

blog 二进制的大对象,也是以相当于指针的形式存放的。

primary key约束:

主键约束的定义:

第一种定义形式:

create table test(c number primary key ); 列级约束

第二种定义形式:

create table test(c number , primary key(c) ) ; 表级约束

create table test( c1 number constraints pkc1 primary key ); 此约束有名字: pkc1

create table test(c number , c2 number , primary key (c ,c1) ) ; 用表级约束可以实现联合主键

foregin key (fk) 外键约束:

(先定义父表,再定义子表)

carete table parent(c1 number primary key );

create table child (c number primary key , c2 number references parent(c1));

或表级约束定义:

create table child( c number primary key , c2 number , foreign key(c2) references parent(c1));

如果两个字段都为唯一且非空,这时可以定义成UK+NOT NULL

(PK或UK)一对多(FK)

(PK+UK)一对一(FK) 或 (PK)一对一(PK)

多对对多关系,一般都通过一张中间表来分解成两个一对多的表

建立表

create table[schema]table

schema: 一个用户对应一个schema 不同用户下的表不能互相查看

select count() from s_dept; <===> select count() from sd0611s_dept;

一个表中只能存储一个LONG类型

CLOB 存储大的文本对象

BLOB 存储大的二进制对象

create table test(c1 number primary key); 设置主键

create table test(c1 number constraints test_c1 primary key); 定义约束名,默认约束名为SYS_ 在列后面定义约束称为列级约束

create table test(c1 number primary key(c1)); 所有列定义完后再定义约束称为表级约束(能定义联合主键)

cretae table test(c1 number,c2 number,priary key(c1,c2)); 定义联合主键

create table child(c1 number primary key); 先要定义父表

create table child(c1 number primary key, c2 number references parent(c1)); 然后定义子表 references parent定义外键

create table child(c1 number primary key, c2 number references parent(c1) on delete cascate); on delete cascate为级联删除

create table child(c1 number primary key, c2 number references parent(c1) on delete set null); on delete set null删除后将外键置空

create table child (c1 number primary key, c2 number,foreignkey(c2) references parent(c1));

二、约束

1、非空约束(not null)

这是一个列级约束

在建表时,在数据类型的后面加上 not null ,也就是在插入时不允许插入空值。

例:create table student(id number primary key,name varchar2(32) not null,address varchar2(32));

2、unique 唯一约束

唯一约束,是会忽略空值的,唯一约束,要求插入的记录中的值是为一的。

例:create table student(id number,name varchar2(32),address varchar2(32),primary key (id),unique (address));

如果创建一个uk,系统自动建一个唯一索引

3、pk、uk

Oralce支持级联删除,不支持级联更新

4、check约束

检查约束,可以按照指定条件,检查记录的插入。check中不能使用尾列,不能使用函数,不能引用其他字段。

例:create table sal (a1 number , check(a1>1000));

一般在SQL>下进行SQLPLUS *** 作,都需要进行必要的环境设置才能完成我们所需要的输出。所有环境的设置由SET命令加相应的环境变量来完成。下面是常用的环境设置:

§251 ARRAYSIZE(取回的行数)

SET ARRAY[SIZE]{integer}

一次可以提取(Fetch)的行的数目,1->5000,当有较长字段时应设小些。

§252 AUTOCOMMIT(自动提交)

SET AUTO [COMMIT] { [ OFF | ON | IMM | n] }

用于在 *** 作中是自动提交或是部分提交或是不自动提交。

1) 或IMM使得在完成每条SQL语句时将未提交的改变立刻提交给数据库系统。ON

2) 允许在用户发出COMMIT后,可以执行命令的数量(将n条SQL语句所做的改变进行提交)。N

3) 停止自动提交,用户必须用COMMIT命令才能被提交。OFF

§253 LINESIZE(行显示宽度)

可以设置LINESIZE环境变量来控制行的显示宽度,缺省是80个字符。

SET Lin[esize]{80|integer}

Integer =设置行宽度(字符个数),最大值999,如:

SQL>set linesize 160

§254 LONG(长类型显示字节数)

在缺省的SQL> 状态下,SQL>缓冲区用于显示LONG 的字节数只有80个字符。如果我们需要查询的列中含有 LONG类型的字段的话,就需要将LONG缓冲区设置大些。

SET LONG{80|integer}

Integer是 显示或拷贝long值的最大宽度, n=1->32767(但必须小于Maxdata值)

SQL>show Maxdata (最大行宽)

SQL>set long 2000

§255 PAGESIZE(页行数)

在缺省的SQL> 状态下,SQL>缓冲区显示页的行数是24行,其中22行显示数据,2行显示标题和横线。我们将pagesize 设置大些以减少提示标题和横线。

SET pag[esize] {24|integer}

SQL>SET pagesize 66

§256 PAUSE(暂停)

可以设置 PAUSE 为ON 或OFF来控制屏幕显示。当设置为ON 时,在select 语句发出后需要按Enter键才能显示一屏。

SET PAUSE [ ON | OFF ]

SQL> setpause on

提示:在发出select 语句并按Enter键后还要再按Enter键才能显示结果

§257 SPACE(列间空格)

可用 set space 来设置各列间的空格数,语法为:

SET SPA[CE] {1|n}

N为设置输出行列间的空格数,最大为10。

SQL>set space 2

建议:在一般情况下,不用设置space参数。

§258 Termout (启/停屏幕显示)

TERMOUT用于设置在屏幕上显示或不显示所输出的信息。

SET TERMOUT { ON | OFF }

set termout off

set termout on

set termout off 常用SPOOL XXX时,即关闭报表在屏幕上的显示(节省时间)

set termout on 常用SPOOL off之后,即恢复报表在屏幕上的显示

§259 ECHO (启/停命令显示)

可以用ECHO命令来显示或不显示所执行的SQL命令。语法如:

SET ECHO{OFF|ON}

显示执行当中的各命令( 即用start 时)

set echo 受到 set termout 的影响

set pagesize 100

set echo on

select table_name from dict where rownum<20;

select from cat where rownum<30;

set echo off

--下面只显示结果不显示命令:

select table_name from dict where rownum<20;

select from cat where rownum<30;

§2510 TRANSACTION (启动事务)

一个很重要的事务环境设置是TRANSACTION。它包括两个部分的内容:

SET TRANSACTION { READ ONLY | USE ROLLBACK SEGMENT segment_name }

READ ONLY是用于保证读的一致性。即其他用户的修改不影响当前查询结果。

USE ROLLBACK SEGMENT segment_name是为当前所处理的事务指定专门的回滚段。这主要是在进行大量的Insert或Delete或Update时,需要一个大的回滚段以保证事务正常完成。详细见数据库管理员。

§2511 SHOW ALL(列出所有参数)

可以用SHOW ALL来显示当前的所有参数情况。它的用法很简单。比如:

SQL> show all

appinfo为ON并且已设置为"SQLPlus"

arraysize 15

autocommit OFF

autoprint OFF

autorecovery OFF

autotrace OFF

blockterminator "" (hex 2e)

btitle OFF and为下一条SELECT语句的前几个字符

cmdsep OFF

colsep " "

compatibility version NATIVE

concat "" (hex 2e)

copycommit 0

COPYTYPECHECK为ON

define "&" (hex 26)

describe DEPTH 1 LINENUM OFF INDENT ON

markup HTML OFF SPOOL OFF ENTMAP ON PREFORMAT OFF

echo OFF

editfile "afiedtbuf"

embedded OFF

escape OFF

flagger OFF

flush ON

heading ON

headsep "|" (hex 7c)

instance "local"

linesize 80

lno 14

loboffset 1

logsource ""

long 80

longchunksize 80

newpage 1

null ""

numformat ""

numwidth 10

pagesize 14

PAUSE为OFF

pno 0

recsep WRAP

recsepchar " " (hex 20)

release 801070000

repfooter OFF and为NULL

repheader OFF and为NULL

serveroutput OFF

shiftinout INVISIBLE

showmode OFF

spool OFF

sqlblanklines OFF

sqlcase MIXED

sqlcode 0

sqlcontinue "> "

sqlnumber ON

sqlprefix "#" (hex 23)

sqlprompt "SQL> "

sqlterminator ";" (hex 3b)

suffix "sql"

tab ON

termout ON

time OFF

timing OFF

trimout ON

trimspool OFF

ttitle OFF and为下一条SELECT语句的前几个字符

underline "-" (hex 2d)

USER为"SYS"

verify ON

wrap :行将为已换行

SQL>

你可以从上面的参数中看到其当前值,也可以修改某些参数的值。

格式化输出

§261 一般数据的格式化输出

在Oracle的SQL>下,经常用COLUMN命令来对所输出的列进行格式化,即按照一定的格式进行显示。COLMUN命令语法如下:

COL[UMN] [{ column | expr } [ option_1 option_n ] ]

column:列名

expr:有效的SQL表达式

option_1option_n:可以是下列之一:

ALI[AS] alias

CLE[AR]

FOLD_A[FTER]

FOLD_B[EFORE]

FOR[MAT] format

HEA[DING] text

JUS[TIFY] {L[EFT]|C[ENTER]|C[ENTRE]|R[IGHT]}

LIKE {expr|alias}

NEWL[INE]

NEW_V[ALUE] variable

NOPRI[NT]|PRI[NT]

NUL[L] text

OLD_V[ALUE] variable

ON|OFF

WRA[PPED]|WOR[D_WRAPPED]|TRU[NCATED]

下面给出常用的关键字的解释:

Alias 给出列的别名,BREAK和COUMN可以引用所定义的别名。

CLEAR 取消列的定义。

FORMAT列显示格式,format为:

9999990 9或0的个数决定最多显示多少位

9,999,99999按照逗号和小数点来显示数据,若是0以空格显示

099999 显示前面补0

$999,99999 数字前加美圆号

B99999 若为0,则结果为空白

99999Mi 若数字为负,则负号放在数字后(右边),缺省放在左边

99999PR 负号将以括号括起

9999EEEE 以科学记数法表示(必须有4个E)

999V99 数字乘以10n ,如1234变为123400

DATE 采用日期数字格式(MM/DD/YY)

Heading重新标记列的显示标题,如:

SQL> col ename heading 姓名format a10

SQL> select ename,sal from emp;

例子:

SQL

COLUMN SALARY FOR $9,999,99999

COLUMN LAST_NAME FOR A35

§262 日期的格式化输出

Oracle系统提供了一个NLS_DATE_FORMAT的环境变量来设置日期的显示格式。用它可以完成按照不同格式要求的显示,比如按照中国的习惯为yyyy年mm月dd日等。

1系统日期 sysdate 的显示

用sysdate 可以显示ORACLE RDBMS 所在机器的日期及时间,如:

SQL> alter session set nls_date_format ='"公元"yyyy"年"mm"月"dd"日"';

会话已更改。

SQL> select sysdate from dual;

SYSDATE

------------------

公元2001年05月30日

2日期类型的显示

select sysdate,to_char(sysdate,’yyyymmdd hh24:mi;ss’) from dual;

SQL> connect scott/tiger

已连接。

SQL> alter session set nls_date_format ='yyyy"年"mm"月"dd"日生"';

会话已更改。

SQL> col HIREDATE heading生日

SQL> col sal heading工资

SQL> col sal ename姓名

SQL> select ename,sal,hiredate from emp;

姓名 工资 生日

---------- ---------- -----------------

SMITH 800 1980年12月17日生

ALLEN 1600 1981年02月20日生

WARD 1250 1981年02月22日生

JONES 2975 1981年04月02日生

MARTIN 1250 1981年09月28日生

BLAKE 2850 1981年05月01日生

CLARK 2450 1981年06月09日生

SCOTT 3000 1987年04月19日生

KING 5000 1981年11月17日生

TURNER 1500 1981年09月08日生

ADAMS 1100 1987年05月23日生

JAMES 950 1981年12月03日生

FORD 3000 1981年12月03日生

MILLER 1300 1982年01月23日生

已选择14行。

§27 加标题

有时在输出一些结果时,可能需要加一些标题,如表上面的顶标题,落款等。这样的要求可由Ttitle和Btitle来完成。

ttitle和btitle

ttitle [center|left|right]string 顶标题

btitle [center|left|right]string 底标题

ttitle center 'XX公司人员情况表'

btitle left '制表人:xxxx' right '日期:xxxx年xx月'

Clear ttitle

§28 建立简单报告

我们可以用TTITLE、BTITLE、COLUMN、BREAK ON、COMPUTE SUM及SET LINESIZE、SET PAGESIZE、SET NEWPAGE来设置查询结果的显示格式;在用SPOOL命令将显示结果输出到一个 *** 作系统文件中去,一般输出文件的类型为LST。

建立简单报告主要使用下面命令来实现:

1. SPOOL命令

SPOOL filename 将缓冲区的内容写到文件中

SPOOL off 终止写命令

2. COLUMN 命令

column col_name[,heading] format format_spe

把字段的结果指定为一种输出格式

COL name heading '姓名' for a10

COL sal heading '工资' for 9,99999

3ttitle、btitle

ttitle [center|left|right]string 顶标题

btitle [center|left|right]string 底标题

ttitle center 'XX公司人员情况表'

btitle left '制表人:赵元杰' right '日期:199811月'

Clear ttitle

4break、compute

clear breaks,clear computes

break on column 在该列上中断

break on row 在每一行上中断

break on Page

break on report

skip n 跳过n行

skip page 跳过未用完的页

compute avg

compute count

compute max

compute min

compute std

compute sum

compute var

compute num 计算所有行

compute sum of sal on deptno

5set 在报表中的设置

l set termout off、set termout on命令

l set termout off 常用SPOOL XXX前,即关闭报表在屏幕上的显示(节省时间)

l set termout on 常用SPOOL off之后,即恢复报表在屏幕上的显示

l set ECHO{OFF|ON} 显示执行当中的各命令(即用start 时),set echo 受到 set termout 的影响

l set Lin[esize]{80|integer} 设置行宽度,最大值999

l set pag[esize] {24|integer} 设置页的大小

例子:

SQL>COL ename heading ‘姓名’ for a12

SQL>COL sal heading ‘工资’ for a999,99999

SQL>COL hiredate heading ‘出生’

SQL>SET LINESIZE 200

SQL>SET PAGESIZE 60

SQL>SPOOL c:\all_emp

SQL>select ename,sal,deptno,hiredate from emp order by deptno;

SQL>SPOOL OFF

§29 输入变量

Oracle提供一种在处理SQL语句时可以将参数作为变量来对待的技术,即在条件句中可以是变量而不是具体的值,这样的处理就是输入变量。这样做的目的就是可以重复使用同样的语句,每次只要输入相应的值即可。要实现将参数写成为变量,只要在变量前加一个&号即可。看下面语句:

Select sid, serial#,username, command from v$session

Where USERNAME = upper(‘&usr’);

这样的语句在运行中,系统会自动提示你回答变量的具体值,上面语句运行时提示和回答时显示的信息如下:

SQL> Select sid, serial#,username, command from v$session

2 Where USERNAME = upper('&usr');

输入 usr 的值: sys

原值 2: Where USERNAME = upper('&usr')

新值 2: Where USERNAME = upper('sys')

SID SERIAL# USERNAME COMMAND

---------- ---------- ------------------------------ ----------

7 26 SYS 3

在变量说明中,可以使用多个变量,比如:

Alter system kill session ‘&sid,&ser’;

Alter system kill session ‘&会话号,&序列号’;

它的运行情况如下:

SQL> Select sid, serial#,username, command from v$session;

SID SERIAL# USERNAME COMMAND

---------- ---------- ------------------------------ ----------

1 1 0

2 1 0

3 1 0

4 1 0

5 1 0

6 1 0

7 26 SYS 3

8 16 ZHAO 0

已选择8行。

SQL> Alter system kill session '&sid,&ser';

输入sid的值: 8

输入ser的值: 16

原值 1: Alter system kill session '&sid,&ser'

新值 1: Alter system kill session '8,16'

系统已更改。

一般系统缺省下是使用 “&” 符号来定义变量,你也可以使用另外的符号来代替,比如不喜欢用 & 而要用 ?,则有:

SQL> set define

SQL> select sid,serial#,username from v$session where username='usr';

输入 usr 的值: SYS

原值 1: select sid,serial#,username from v$session where username='usr'

新值 1: select sid,serial#,username from v$session where username='SYS'

SID SERIAL# USERNAME

---------- ---------- ------------------------------

7 26 SYS

次时由于我们修改了会话环境的参数值,可以用下面命令查看:

SQL> show define

define "" (hex 3f)

以上就是关于access 中能不能用 escape 语句,如果能,给出例子。全部的内容,包括:access 中能不能用 escape 语句,如果能,给出例子。、java存储富文本到什么数据库、数据库如何删除表中的一段区间内的所有数据等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9532248.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存