sqlplus常用命令使用 --转

  show和set命令是两条用于维护SQL*Plus系统变量的命令

     SQL> show all --查看所有68个系统变量值

     SQL> show user --显示当前连接用户

     SQL> show error                --显示错误

     SQL> set heading off --禁止输出列标题,默认值为ON

     SQL> set feedback off --禁止显示最后一行的计数反馈信息,默认值为"对6个或更多的记录,回送ON"

     SQL> set timing on --默认为OFF,设置查询耗时,可用来估计SQL语句的执行时间,测试性能

     SQL> set sqlprompt "SQL> " --设置默认提示符,默认值就是"SQL> "

     SQL> set linesize 1000 --设置屏幕显示行宽,默认100

     SQL> set autocommit ON --设置是否自动提交,默认为OFF

     SQL> set pause on --默认为OFF,设置暂停,会使屏幕显示停止,等待按下ENTER键,再显示下一页

     SQL> set arraysize 1 --默认为15

     SQL> set long 1000 --默认为80

     说明:
     long值默认为80,设置1000是为了显示更多的内容,因为很多数据字典视图中用到了long数据类型,如:

SQL> desc user_views
列名                          可空值否   类型
------------------------------- -------- ----
VIEW_NAME                       NOT NULL VARCHAR2(30)
TEXT_LENGTH                              NUMBER
TEXT                                     LONG

 

命令列表:
假设当前执行命令为:select * from tab;

(a)ppend     添加文本到缓冲区当前行尾    a  order by tname 结果:select * from tab order by tname;
                                      (注:a后面跟2个空格)
(c)hange/old/new 在当前行用新的文本替换旧的文本 c/*/tname     结果:select tname from tab;
(c)hange/text  从当前行删除文本        c/tab       结果:select tname from ;
del       删除当前行
del n      删除第n行
(i)nput 文本   在当前行之后添加一行
(l)ist      显示缓冲区中所有行
(l)ist n     显示缓冲区中第 n 行
(l)ist m n    显示缓冲区中 m 到 n 行
run       执行当前缓冲区的命令
/        执行当前缓冲区的命令
r        执行当前缓冲区的命令
@文件名     运行调入内存的sql文件,如:

SQL> edit s<回车>
如果当前目录下不存在s.sql文件,则系统自动生成s.sql文件,
在其中输入“select * from tab;”,存盘退出。

SQL> @s<回车>
系统会自动查询当前用户下的所有表、视图、同义词。

@@文件名     在.sql文件中调用令一个.sql文件时使用

save 文件名   将缓冲区的命令以文件方式存盘,缺省文件扩展名为.sql
get 文件名    调入存盘的sql文件
start 文件名   运行调入内存的sql文件

spool 文件名   把这之后的各种操作及执行结果“假脱机”即存盘到磁盘文件上,默认文件扩展名为.lst
spool      显示当前的“假脱机”状态
spool off    停止输出

例:
SQL> spool a
SQL> spool
正假脱机到 A.LST
SQL> spool off
SQL> spool
当前无假脱机


exit       退出SQL*PLUS
desc 表名    显示表的结构
show user    显示当前连接用户
show error    显示错误
show all     显示所有68个系统变量值
edit       打开默认编辑器,Windows系统中默认是notepad.exe,把缓冲区中最后一条SQL语句调入afiedt.buf文件中进行编辑
edit 文件名   把当前目录中指定的.sql文件调入编辑器进行编辑

clear screen   清空当前屏幕显示

 -22-----------------------------------------------------------------------------------------------

第三章附:上机练习

内容:1.创建一数据库,启动实例并装配它。
   2.通过访问数据字典了解数据库的结构及实例结构。

步骤:
  一.创建数据库
用Netterm或Ptelnet,以Oracle8帐号登录uibm主机(IP:210.34.0.23)。

进入 /oracle/目录,ls查看其结构。
           -------- clt1  ---- oradata  -- ora
           |              |--- testdata -- test
           |
      |------- ctl2  ----- oradata  -- ora
      |              |---  testdata -- test
      |
      |------- ctl3    …  … 
以上目录为各数据库中数据文件存放目录。
效仿以上的目录结构,在ctl1、ctl2、clt3目录下再建一个tstdata目录,并在各tstdata
目录下建立一个tst目录

cd /oracle/app/oracle/admin
此目录为Oracle各数据库的管理目录。
cd test
进入test目录了解Oracle目录组织结构(OFA结构),结合ls命令。
       ora  ------- bdump  后台存储文件目录(BACKGROUP_DUMP_DEST的值)
       |------ udump  用户转储文件目录(USER_DUMP_DEST的值)
       |------ cdump  核心文件
       |------ pfile  init.ora和任何其它数据库初始化参数
       |------ create 用于创建初始化数据和数据库对象的脚本
       |------ SQL    数据库管理SQL文件
      
进入create目录阅读crdbtest.sql及crdb2test.sql这两个数据库ORA的创建脚本,进而知
道创建数据库的过程命令。

 效防test下的目录结构,创建一名为tst的目录,拷贝test/pfile及test/create下的所有
文件到对应目录。
          Cd /oracle/app/oracle/admin
          Mkdir tst
          Cd tst
          Mkdir bdump
          Mkdir udump
          Mkdir cdump
          Mkdir pfile
          Mkdir create
          Mkdir sql
          Cp ../test/pfile/* pfile
          Cp ../test/create/* create
          进入tst/pfile目录,启动vi编辑器编辑configora.ora文件:
       将所有与原来test目录有关的目录全以tst替换test.
         如:原来的control_files参数中
                把/oracle/ctl1/oradata/test/control01.ctl,改为
                  /oracle/ctl1/oradata/tst/control01.ctl,
            需要改的地方还有:core_dump_dest
                              user_dump_dest 
                              db_name 参数行
                  
        把文件configtest.ora改名为configtst.ora
              inittest.ora   改名为inittst.ora
              inittest_0.ora 改名为inittst_0.ora
        编辑inittst.ora及inittst_0.ora文件,把它们中的前面的ifile指
      定文件原来为:
         ifile = /oracle/app/oracle/admin/test/pfile/configtest.ora   
       改为:
         ifile  = /oracle/app/oracle/admin/tst/pfile/configtst.ora   


进入tst/create目录
把crdbtest.sql及crdb2test.sql改名为crdbtst.sql及crdb2tst.sql

编辑crdbtst.sql文件,修改以下行(将test改为tst):
  spool /oracle/app/oracle/admin/test/create/crdbtest.lst
         startup nomount pfile= …
         create database "test" 改为create database “tst”
       将create database语句的用的character set改为ZHS16CGB231280,
       原先为US7ASCII。ZHS16CGB231280为Oracle中支持中文国标的字符集名。
      
        编辑crdb2tst.sql文件,将其做类似以上的修改(将创建命令中所用到的有关原来
test目录改为tst目录,并可以适当调节你所要建立数据库的相关数据文件大小。

修改ORACLE_SID环境变量值为新的SID名,此SID告诉oracle欲启动的实例名。
     ORACLE_SID=tst;exprot ORACLE_SID

  进入tst/create目录,启动服务器管理器(svrmgrl)执行crdbtst.sql脚本:
cd /oracle/app/oracle/admin/tst/create
     svrmgrl  @crdbtst.sql
    执行后在svrmgrl状态下再执行crdb2tst.sql脚本。
    Svrmgrl> start crdb2tst.sql
    创建过程需要数分钟,请耐心等待 … 

        等上以脚本执行完毕,新的数据库已建立。此时,可以退出svrmgrl。

        拷贝tst/pfile/inittst.ora文件至$ORACLE_HOME/dbs目录,省得每次启动svrmg
rl还要指定init.ora文件位置。在启动svrmgrl时,若没有特别指定init.ora的文件,ORA
CLE将在$ORACLE_HOME/dbs找init.ora作为其启动的初始化参数文件,SID为ORACLE_S
ID环境变量值。

再次启动svrmgrl(注意:ORACLE_SID值必须已改为新的SID值。)
  svrmgrl
svrmgrl>connect internal;
svrmgrl>startup            (启动数据库)
svrmgrl>start $ORACLE_HOME\dbs\catproc.sql 
  
catproc.sql脚本安装Procedural Option所必需的脚本或PL/SQL对象及其支持的数据库结
构。

至此,我们已成功创建了一个新的数据库tst,并且我们也用实例tst来装配启动它。
为了能够让用户从远程访问此数据库,我们还必须配置Oracle的TNS(Transparent Netwo
rk Service),配置这一服务只要改变一下其配置文件listener.ora即可,最简单的办法
是拷贝一个副本备份,然后直接编辑它,把原来的实例名更换为新的实例名即可。更名后
,重新启动tnslistener进程即生效。
$lsnrctl stop     (在操作系统状态下执行)
$lsnrctl start


更改SYS及SYSTEM用户的默让密码。
  grant connect to sys(或system) identified by
 或 alter user sys identified by  
    以上命令可以在服务器管理器状态下执行,也可以在Sqlplus下执行。
 


二、考察数据库及实例结构
 启动sqlplus用SYS或SYSTEM用户连接。
或启动svrmgrl,connect internal

1. 查询实例启动时间。
     select to_char(a.value,’J’)+b.value/86400,
            ’HH24:MI:SS DD-MON-RR’) start_time 
            from v$instance a,v$instance b
            where a.key=’STARTUP TIME –JULIAN’ AND
                   b.key=’STARTUP TIME –SECONDS’;
         
观看实例存储器分配信息
SELECT name,bytes from v$sgastat
      Where name in (‘free memory’,’fixed_sga’,’db_block_buffers’,
                     ‘log_buffer’,’dictionary cache’,’library cache’,
                     ‘sql area’);

查看进程实例进程
select spid,name from v$process, v$bgprocess where addr =paddr; 

查看数据库用户
select username from dba_users;

查看活动的控制文件
select * from v$controlfile

查看回滚段信息
select a.segment_name,b.bytes,b.extents,a.tablespace_name, 
       c.shrinks,c.extends,c.hwmsize
  from dba_rollback_segs a,dba_segments b,v$rollstat c
  where a.segment_id=c.usn and a.segment_name=b.segment_name;
       
查看重做日志信息
select   member,bytes,members,a.status 
   from  v$log, V$logfile b
   where a.group# = b.group#
   order by member;

查看数据库链接
select spid,mame from v$sysstatprocess,v$sysstatbgprocess
     where paddr(+)=addr;

查看多线程服务器进程
   select * from v$dispatcher;
   select * from v$shared_server;

 

 

第四章:SQL
                  (本次课在机房,结合上机讲授)
本章介绍SQL的基础知识。理解了SQL就理解了关系数据库。Oracle与数据库的所有交互都
使用SQL(Structured Query Language)。SQL*Plus是基于SQL但又具有Oracle特定功能的一
种工具,它可用来生成报表、控制屏幕显示和打印输出格式。

术语
下面介绍本章使用的一引技术术语:
■ DDL(Data Definition Language)   数据定义语言是SQL中定义数据库中数据的结构的
语言。定义数据时,将在Oracle的数据字典中生成数据项。常见的DDL关键字是create、r
evoke、grant和alter
DML(Data Manipulation Language) 数据操纵语言为SQL结构,用来操纵数据库中数据(而
非定义数据,定义数据由DDL完成)。常见的DML关键字为select、insert、update和dele
te。
在Oracle中,我们使用commit(提交)语句表示已经将修改后的数据保存到数据库。每次用
户保存结果时,Oracle将引用用户的提交操作。
约束(constraint) 是一种保证一个Oracle表的数据间关系或两不同表中数据间的一致性的
机制。
Oracle8数据库中一个对象(object)是一个有意义的事物,可在其内部存放信息。我们常谈
的对象类型——表和视图是两种最常见的。
利用如SQL*Plus这样的程序将信息从Oracle数据库中提取出来的操作称为查询(query)。

■ 回滚(Rollback)为当某个对话更改了数据库中的数据后,由于某种原因不想提交些更
改时Oracle所采取的操作。这是一个把信息恢复到用户update前状态的操作。

   SQL语句有两大类:DDL和DML。下面我们进一步来看看二者的差异:

  二.DDL
DDL数据定义语言是一组SQL命令,用于创建和定义数据库对象,并且将其保存在数据字典
中。

数据定义语言使用户能完成下列任务:
创建(create)数据库对象
删除(drop)数据库对象
更改(alter)数据库对象
为数据库对象授权(grant)
回收已授给数据库对象的权限(revoke)

当发布一条DDL SQL语句时,在每一条DDL语句执行前后,Oracle都将提交当前的事务,理
解这一上点很重要。因此如果用户插入(insert)记录到数据库中并且发布了一条DDL语句
,如create table,此时来自insert命令的数据将提交到数据库。
 
属于DDL的语句是自动提交的,这意味着当Oracle8通知用户比如“Revoke succeeded”,
此时命令已完成不能回滚了。

  DDL语句部分列表:
  alter procedure           重编译存贮过程
  alter table               增加表列、修改表列、更改存贮分配
  analyze                 收集数据库对象的性能统计值并送入代价的优化器
  alter table add constraint   在已有的表上增加约束
  create table              创建表
  create index              创建索引
  drop index               删除索引
  drop table               删除表
  grant                   将权限或角色授予用户或其它角色
  truncate                 删除表中所有行
  revoke                  从用户或数据库角色回收权限
  三.DML
DML(数据操纵语言)允许用户对数据库中的数据进行insert、update、delete和select等操
作。正如名字所示,DML处理数据库中的数据内容。最常见的DML语句是insert、update、
delete和select。

Insert
Delete
Update
Select
Commit work          把当前事务所作的更改永久化(写入磁盘)
Rollback              作废上次提交以来的所有更改
    
     在学习了两种主要类型的SQL语句后,下面作进一步的介绍。首先登录进SQL*Plus,
然后试一些最常见的DDL和DML语句。
    
 
  四.SQL*Plus入门
学习SQL最简单的办法就是使用SQL*Plus。因此先登录到SQL*Plus。Oracle安装后有一用户
名scott,口令为tiger。我们可以用这个帐号登录试用。
有两种方式进入SQL*Plus:
1.使用客户端的的SQL* Plus 8.0。
  此程序项在启动菜单栏的Oracle For Windows95组中。启动它,在connect对话框中按提
示输入用户名、口令及主机字符串。如果单机已装了Personal Oracle的,主机字符串可以
不填,否则填上SQL * Net已配置的service name,所连接的数据库实例在service里已定
义,这些定义可以使用Oracle Net8 Easy Config进行配置。
其结果保存在\ORAWIN95\NET80\ADMIN\TNSNAMES.ORA文件中。
   
使用Unix上的SQL*Plus
登录到UNIX主机上,
打入命令 sqlplus scott/tiger   或sqlplus然后再按提示输入用户名及口令

SQL*Plus: Release 8.0.4.0.0 - Production on Sat Jul 3 0:31:55 1999

(c) Copyright 1997 Oracle Corporation.  All rights reserved.

Connected to:
Oracle8 Enterprise Edition Release 8.0.4.0.0 - Production
    PL/SQL Release 8.0.4.0.0 - Production
     SQL>
  
  在进入SQL*Plus后,会看到SQL*Plus提示符SQL>
这时您就可以键入想试验的SQL语句。

  下面我们讲一下与SQL缓冲器一起使用的SQL*Plus命令,这些可以帮助我们高效地输入命
令。
命令   缩写 动作
APPEND text A text 在行尾增加text
CHANGE  old/new C old/new 在一行中将old文本改为new文本
CLEAR BUFFER CL BUFF  删除所有行
DEL 删除缓冲器中所有行
INPUT I  将一行或多行增加到缓冲器
INPUT text I text 增加一由text组成的行
LIST L 列出SQL*Plus缓冲器内容
LIST n Ln或n 列出行n
LIST * L * 列出当前行
LIST m n  L m n 列出行m至行n
LIST LAST  L LAST 列出缓冲器中的最后一行
RUN 运行缓冲器中的命令
 SQL*Plus中的命令行以分号(;)结束。

 下面我们给出一些SQL语句,大家可以在自己的机器上试验一下:
select table_name from user_tables
  此命令用数据字典user_tables中列出用登录用户所拥有的表。
若用scott登录,列出的结果如下:
TABLE_NAME
------------------------------
BONUS
DEPT
DUMMY
EMP
HELP
   SALGRADE

   这些表是在数据库安装时建立的让用户试验学习的表,查看这些表的结构可以用descr
ibe命令,例如:
   SQL>describe emp             
   查看emp表的结构,结果如下:
 Name                            Null?    Type
 ------------------------------- -------- ----
 EMPNO                           NOT NULL NUMBER(4)
 ENAME                                    VARCHAR2(10)
 JOB                                      VARCHAR2(9)
 MGR                                      NUMBER(4)
 HIREDATE                                 DATE
 SAL                                      NUMBER(7,2)
 COMM                                     NUMBER(7,2)
    DEPTNO                                   NUMBER(2)
   SQL>select empno,ename from emp
   查看表内容。

  2.create语句
   在任何数据库总是以DDL语句开始,因为创建数据库对象的工作是由DDL语句来完成的。
首先,我们将创建四个表:Customer、State、X和Y:
SQL>create table customer (
last_name  varchar2 (30) not null,
state_cd   varchar(2),
sales      number)
tablespace  users
storage (initial 25k next 25k minextents 1);
Table created.
SQL>create table state (
   2  state_cd     varchar(2) not null,
   3  state_name   varchar2(30);
Table created.
SQL>create table x(
   2  col      varchar2(30);
Table created.
SQL>create table y(
col varchar2(30));
Table created.

▲Null与Not Null
    在创建customer表时,last_name表列后跟一个限定符“not null”,这表示数据库不
接受没有表列数据行到customer表中。换句话说,not null表列是强制性字段,在表cust
omer和state中,这意味着要在表中插入一行,last_name和state_cd字段必须含有值。


什么是空值(null value)
空(null)是不包括数据的表列。可以将null理解为长度为0的字符串。很多时候若不知道某
表列的类型可以给它赋一空值。但人们最容易犯的一个错误就是将空值加载到一个数值型
表列中,而问题在于“1+null=null”!因此,如果用户偶然将空值加载至数值域中,那么
产生的统计报表肯定不正确。

3.Insert
   现在我们已经建立了一些表,让我们用不用DML语句,在我们建立的表上插入一些数据
,这些数据也将作为我们试验命令的数据。
SQL>insert into customer values (‘Teplow’,’MA’,23445.67);
SQL>insert into customer values (‘Abbev’,’CA’,6969.96);

每次成功地完成一条insert语句后,均返回建立信息,
1 row created.
该信息通知用户建立的行数。

SQL>insert into customer values (‘Porter’,’CA’,6989.99);
SQL>insert into customer values (‘Martin’,’CA’,2345.45);
SQL>insert into customer values (‘Laursen’,’CA’,34.34);
SQL>insert into customer values (‘Bambi’,’CA’,1234.55);
SQL>insert into customer values (‘McGraw’,’NJ’,123.45);

现在我们用稍加变化的insert命令的数据插入state表。我们将指定数据要插入的表列名。
这在处理大表时很有用,因为用户可能没有表中每一列的数据。例如:在一个预算系统中
,只有在月末才有实际的花销数。

SQL>insert into state (state_name,state_cd)
values (‘Massachusetts’,’MA’);
SQL>insert into state (state_name,state_cd)
values (‘California’,’CA’);
  
  最后我们再插入一些数据到表X和表Y中。
SQL>insert into x values (‘1’);
SQL>insert into x values (‘2’);
SQL>insert into x values (‘3’);
SQL>insert into y values (‘3’);
SQL>insert into y values (‘4’);
SQL>insert into y values (‘5’);

4.Select 
select命令用于从Oracle数据库中检索数据,select是用户最常用的SQL语句,select
命令由四个基本部分构成:
1).select后跟用户要检索的信息(表或视图中的列名),这是select命令不可少的部分,
可用*号代表全部列。
2).from后跟检索对象(如存放数据的一个或多个表或视图的名称),from部分也是必不可少
的。
3).where后跟检索条件,可选的。
4).order by后跟分类准则,可选的。

现在我们来查看我们刚才插入的数据:
SQL>select * from customer;
SQL>select state_name from state;
SQL>select * from x;
SQL>select * from y;

   下面我们来看一下条件及范围检索:
select last_name,state_cd,sales from customer where state_cd=’MA’;
查看state_cd值为MA的所有客户。

select * from customer where state_cd=’CA’ and sales>6000
  select * from customer where state_cd=’CA’ or sales>6000
  select * from customer where state_cd!=’MA’;

带检索表
select * from customer where state_cd in (‘NJ’,’CA’);

带匹配条件
Select * from customer where last_name like ‘M%’;
Select * from customer where last_name like ‘%tin%;

  总结:
     =
 !=   不等于
 ^=   不等于
^=   不等于
<>   不等于
     <
     >
     <=
     >=
in  (    )                等于括号内任一成员
not in  (   )             不等于括号内任一成员
between A and B           大于等于A与小于等于B
not between A and B       不大于等于A与小于等于B
like ‘%tin%’               包括给定子串(即‘tin’)


Order by:
   Select * from customer order by last_name desc;
   Select * from customer order by last_name;
   在order by子句中未指定升序或降序时,Oracle按升序排序。

5.Update、Delete和Alter

Update修改表中的数据
  SQL>Update customer set sales=23890.66 where state_cd=’MA’;

  若没有用where指定修改的条件行,将修改表中全部行。

Delete删除行数据
  Delete from customer,将删除customer表的所有记录;delete from customer where
 state_cd=’CA’,将删除state_cd为CA的客户记录。

Alter table修改表结构
  此语句有如Foxpro中的Modify stru语句。在创建表后,用户可能想要增加表列。这时就
要用到alter table命令了。

  Alter table customer add (sale_date date);
  将成功地把表列sale_date加到表customer中。

  Alter table x modify(col date),改变一个已存在表列的数据类型。

6.连接两个表
现实中,用户需要的大量数据往往存放在多个表中。很多情况下需要处理多个表。例如,
customer表中只存放州代码(state_code),然而用户还想知道州名,这时需要将表custom
er与表state连接。这就要用到表的连接。通过定义,Oracle一类的关系数据库允许用户基
于公共域连接两个或更多表。这些公共域通常称为键域(key field)。
有两种类型的键:主键(primary)和外部键(foreign)。主键使表中的数据行保持唯一。
在表state中,state_cd就是主键。表customer中也包含有state_cd,此时的state_cd就是
外部键。一个表的外部键用于从其他(foreign)表中获取信息。
SQL>select * right.col,left.col from x right,y left 
where right.col=left.col;


五.内部函数
数值型函数
 函  数    返回值    样  例 显示
Abs(n) N的绝对值 Select abs(-321) from dual; 321
Ceil(n) 大于等于数值n的最大整数 Select ceil(10.6) from dual; 11
Floor(n) 小于等于数值n的最大整数 Select floor(10.6) from dual; 10
Mod(m,n) M除以n的余数,若n=0返回n Select mod(7,5) from dual; 2
Power(m,n) M的n次方 Select power(3,2) from dual; 9
Round(n,m) 将n四舍五入,保留小数点后m位 Select round(1234.5678,2) from dual 12
34.57
Sign(n) N=0,返回0;n>0,返回1;n<0,返回-1 Select sign(12) from dual; 1
Sqrt(n) N的平方根 Select sqrt(25) from dual; 5
  Dual表拥有者为SYS,在句法正确,而数据库中没有其他表可用于该语句时,可使用dua
l表。
   2.字符串函数
 函   数   返回值 样例 显示
initcap(char)   把每个字符串的第一个字符换成大写 Select initcap(‘mr.telpow’)
 from dual; Mr.Telplow
Lower(char) 整个字符串换成小写 Select lower(‘Mr.Frank Townson’) from dual; m
r.frank townson
Replace(char,str1,str2) 字符串中所有str1换成str2 Select replace(‘Scott’,  ’
S’,’Boy’) from dual; Boycott
Soundex(char) 字符串的语音表示,查找发音相似拼写不同的字符串 Select last_name
from employee where soundex (last_name) = soundex(‘SMYTHE’); SMITH
Substr(char,m,n) 取出从m字符开始的n个字符的子串 Select substr(‘ABCDEF’,2,1)
from dual; B
Length(char) 求字符串的长度 Select length(‘Anderson’) From dual; 8
 
  ||  并置运算符。
  Select ‘Dear’||’John’||’:’ from customer 
  将返回 ‘DearJohn:’

   3.日期型函数
  函数 返回值 样例 显示
Sysdate 当前日期和时间 Select sysdate from dual;
Last_day 本月最后一天 Select last_day(sysdate) From dual
Add_month(d,n) 当前日期d后推n个月 Select add_months(sysdate,2) from dual;
Months_between (f,s) 日期f和s间相差月数 Select months_between(sysdate,’12-MAR
-99’) from dual;
Next_day(d,day) D后第一周指定day的日期 Select next_day(sysdate,’Monday’) fro
m dual;
Oracle缺省的日期格式为DD-MON-YY。为保证进入21世纪不出问题,请尽可能用四位数字的
年份。Oracle提供了一种特殊的世纪日期格式标记为DD-MON-RR。

常用日期格式
格式 返回值 样例
Y、YY或YYY 年的最后一位,两位或三位 Select to_char(sysdate,’YYY’) from dual;

SYEAR或YEAR 年,SYEAR公元前的年前加一负号 Select to_char(sysdate,’SYEAR’) fr
om dual;
Q 季度,1到3月为第一季度 Select to_char(sysdate,’Q’) from dual;
MM 月份数
Month 用9个字符长度表示月分(英文)
WW 当年第几周
W 本月第几周
D 周内第几天
DD 当月第几天
DY 周内第几天缩写(如:SUN)
HH 12进制小时数
HH24 24进制小时数
MI 分钟数
SS 秒数

类型转换
   to_char  将任意类型的数据转换成字符串
   to_number
   to_date


六.格式化输出
在SQL*Plus中,有许多参数可以控制SQL*Plus的输出显示格式,利用SQL*Plus命令show a
ll用户能知道显示格式的当前设置。
SQL>show all;
appinfo is ON and set to "SQL*Plus"
arraysize 15
autocommit OFF
autoprint OFF
autotrace OFF
shiftinout INVISIBLE
blockterminator "." (hex 2e)
btitle OFF and is the 1st few characters of the next SELECT statement
cmdsep OFF
colsep " "
compatibility version NATIVE
concat "." (hex 2e)
copycommit 0
COPYTYPECHECK is ON
define "&" (hex 26)
echo OFF
editfile "afiedt.buf"
   embedded OFF
    …  ...

1).行和页的大小
   set linesize
   set pagesize
 例:
  SQL>set linesize 80;
  SQL>set pagesize 25;

2) 页头标、页脚标
   ttitle  <br>   btitle  <Foot title string> </p> <p> 例:  (connect as scott) <br>  SQL>ttitle ‘Database Technoloies| Customer Report’; <br>  SQL>select empno,ename from emp; <br>  SQL>btitle ‘-----------Sample.sql------------‘; <br>  SQL>select empno,ename from emp; <br>  <br>   |   表示换行。 </p> <p><br>3).SQL*Plus结果到文件 <br>  spool  <目标文件> <br>  如:spool  c:\temp\out.list <br>  这个输出将放在spool命令指定的文件中。为停止假脱机(spooling),可用命令spool o<br>ff或spool out。后者关闭输出文件并打印输出。 </p> <p>4).格式化输出列表 <br>column </p> <p>大多数情况下,用户需要格式化实例的表列数据。Column命令可完成这项工作。下面我们<br>先执行两条格式化命令,然后再查询customer表。 <br>   SQL>column last_name format a8 wrap heading ‘Last |Name’; <br>   SQL>column state_cd format a8 heading ‘State | Code’ ; <br>   <br>                   8  表示显示宽度, <br>                a  表示每个位置只能是字符 <br>                wrap 说明若last_name长度大于8个字符,多余的字符显示下一行的对应<br>位置。 <br>                Heading 部分告诉SQL*plus,last_name的列标。 <br>   现在我们查询一下customer表来看不下输出效果: <br>SQL>select * from customer ; <br>Sun Jul 04                                                      page    1 <br>                             Database Technologies <br>                                 Customer Report </p> <p>Last     State <br>Name     Code      SALES <br>-------- -- ---------- <br>Teplow   MA   23445.67 <br>Abbev    CA    6969.96 <br>Porter   CA    6989.99 <br>Martin   CA    2345.45 <br>Laursen  CA      34.34 <br>Bambi    CA    1234.55 <br>McGraw   NJ     123.45 </p> <p>               -------------------sample.sql--------------------- </p> <p> </p> <p>本章小结: <br>本章简要地介绍了SQL及其一些常用的命令,及SQL*Plus的应用。有关SQL的更详细的使用<br>说明可以参阅本第4章至第8章,课本在从建表到查询等操作都有较为详细的介绍,虽然书<br>中的章节较长,但其内容简单易懂,由于课时所限无法在此逐一介绍。建议大家可以在自<br>己的PC上安装个Personal Oracle 8,按课本的例子,进行学习试验。 </p> <p><br>第五章.PL/SQL <br>     前面我们所使用的SQL语言,它不具备过程能力,但Oracle通过PL/SQL语言对SQL进行<br>了过程语言功能的扩展。PL/SQL是一种比较复杂的的程序设计语言,用于从不同环境中访<br>问Oracle数据库,。 <br>PL/SQL是Procedural Language/SQL(过程性语言的缩写)。正如其名所表达的,PL/SQL通<br>过增加了用在其他过程性语言中的结构(construct)来对SQL进行了扩展,例如: <br>变量和类型(包括预定义的和用户定义的) <br>控制结构,例如IF-THEN-ELSE语句和循环。 <br>过程和函数 <br>对象类型和方法 <br>    过程性结构与Oracle SQL无缝地集成在一起,这样便产生了一种结构化的强有力的语<br>言。在使用Oracle的存储过程、数据库触发器、包和函数都要用PL/SQL编写代码。因此,<br>如果不了解PL/SQL就不能深入掌握Oracle。 <br>    PL/SQL具有高度的可移植性,在所有Oracle平台上都是标准化的。因为其数据类型基<br>于数据库服务器,所以语言完全与机器无关。你无需针对UNIX、Windows、Netware等等去<br>学习各种PL/SQL。PL/SQL程序可以在任何Oracle Server上编译和运行而无需进行任何修改<br>。 </p> <p><br>一.PL/SQL基础     <br> 下面我们通过实例程序来学习PL/SQL: <br>首先我们可以运行一下hello.sql这一简单的程序,此程序输出”Hello,world!”。 <br>Hello.sql <br>SET SERVEROUTPUT ON <br>BEGIN <br>  DBMS_OUTPUT.enable; <br>  DBMS_OUTPUT.put_line(‘Hello, world!’); <br>END; <br>/ <br>   启动SQL*plus并以system帐号连接Oracle. <br> SQL>start c:\plssql\hello.sql  <br>   用以上命令运行些程序。 <br>   第1行让SQL*Plus写出服务器返回给它的内容。 <br>   第2行和第5 行提供当前块的作用范围。 <br>   第3行打开输出机制。 <br>   第4行打印簇“Hello, world!”。 <br>   第6行执行这个无名PL/SQL块。 <br>服务器响应如下: <br>Hello, World! <br>PL/SQL过程已成功完成. <br>SQL> <br>    在PL/SQL中字符串用单引号围起来,PL/SQL对文字大小写唯一敏感的地方是在字符串<br>是,对一些变量、命令等大小写不敏感。 <br>数据文字可以任何整数或浮点数值,例如: <br>整数文字 <br>-12345.0             浮点数文字 <br>1234.567890          浮点文字可以是任意精度 <br>这也是浮点文字,精度为零 <br>1.2345E2             可以使用科学计数 <br>1.2345E-3 <br>     0.123 或 .123         开头的0是可选择的 </p> <p>下面我们再来看另一个程序: <br>Circle.sql <br>DECLARE <br>  PI CONSTANT REAL:=3.14159265359;   -- PI常量值 <br>  Circumference REAL;           --周长 <br>  Area REAL;                   --面积 <br>  Radius REAL:=&Radius;        --半径 <br>BEGIN <br>  Circumference:=PI*radius*2.0; <br>  Area:=PI*radius**2; <br>  DBMS_OUTPUT.put_line(‘Radius=’||To_CHAR(radius)|| <br>                        ’,Circumference=’||To_CHAR(circumference)|| <br>                        ‘,Area=’||To_CHAR(area)); <br>END; <br>/ <br>SQL> start c:\plsql\circle.sql <br>在运行这个程序时,SQL*Plus首先提示你给&号指定的联编变量指定一个值(第5行)屏幕<br>显示信息为: <br>输入radius的值: 5 <br>原值   5:  Radius REAL:=&Radius; <br>新值   5:  Radius REAL:=5; <br>Radius=5,Circumference=31.4159265359,Area=78.53981633975 </p> <p>PL/SQL 过程已成功完成。 </p> <p>   SQL> </p> <p>程序注释 <br>单行注释 <br>  单行注释由两个连字符开始,后面一直到行尾都是注释(回车符标识着注释的结束)。</p> <p>如上边程序中的: <br>          PI CONSTANT REAL:=3.14159265359;   -- PI常量值 <br>     如果行注释超过一行,必须在每一行的开头上使用双连字符(--)。 </p> <p>多行注释 <br>多行注释由/*开始,由*/结束。这是C语言中使用的注释风格。如circle.sql中的开头部分<br>所示。 <br>多行注释可以扩展到任意多的行上,但它们不能嵌套。 </p> <p>PL/SQL块结构 <br>PL/SQL块是基本的编程结构,用块结构进行编程适用于自上而下的结构化积木式编程和直<br>观逻辑组织。 <br>一个无名PL/SQL块有三部分:说明部分、正文(体)部分和异常部分。其中异常部分为可<br>选项。 <br>    DECLARE <br>---- declarations (说明) <br> BEGIN <br>      ----executable code(执行代码) <br>EXCEPTION <br>    ----  exception handlers(异常处理代码) <br>END; <br>实际上说明部分也是可选项,但不声明变量是不能执行实质性的工作。用户定义的全部变<br>量、常数、数据类型、指示器、函数和过程均在这一部分中说明。若没有定义其中任何一<br>个,你可以略去这一部分。 </p> <p>变量声明 <br>   PL/SQL提供了SQL没有的附加数据类型。除一般的Oracle SQL数据类型外,PL/SQL还可<br>以让您用用这些数据类型对变量进行说明: </p> <p>   BOOLEAN   布尔类型       可用预定义常量TRUE、FALSE或NULL对一个布尔变量赋值。</p> <p>   BINARY-INTEGER           该类型适用于在-2,147,483,647到2,147,483,643 <br>   (二进制整数)                 范围内的带符号整数 <br>   NATURAL(自然数)           是BINARY-INTEGER的一个子集,这种数据类型是整数集的<br>一部分,从0到2,147,483,647。 <br>   POSITIVE(正整数)         是BINARY-INTEGER的另一个子集, 这种数据类型是整数<br>集的一部分,从0到2,147,483,647。 <br>   %TYPE                     这种设计可使您说明一个变量的数据类型与某一指定列的<br>数据类型相同,其结果产生更易于维护的PL/SQL代码。 <br>   %ROWTYPE                用这种数据类型您可以说明一个复合变量,与一特定表中的<br>一行相同,这种复合变量是由引用表中的列名和数据类型组成的。 <br>   除此之外,PL/SQL还提供两种复合数据类型:TABLE类型和RECORD型。我们将在以后介<br>绍。 <br>变量作用域 <br>   变量在仅它所在的块内块内是可见的。 <br><<l_outer>> <br>DECLARE <br>  V_AvailableFlag BOOLEAN; <br>  V_SSN        NUMBER(9); <br>BEGIN <br>fds <br>DECLARE <br>  V_SSN     CHAR(11); <br>BEGIN <br>       --v_SSN(char 11)是可见的,要引用v_SSN(number 9)可用 <br>         -- l_outerV_SSN <br>END; </p> <p>END; </p> <p>变量名风格 <br>变量名的关键是它们是描述性的。声明 <br> x number; <br>不会告诉您有关x的用途的任何事情。但是 <br> v_StudenID  NUMBER(5); <br>将告诉我们该变量可能要用来存储学生ID号,尽管在声明旁边没有解释的注释。请记住,<br>PL/SQL标识符的最大长度是30个字符,所有的字符都可以用来传递一些含义的。30个字符<br>通常足以用来存储一个描述性的名称了。 <br>变量名也可以告诉我们该变量的用途。有的人使用下划线将一个字母代码和变量的其他部<br>分分隔来以指明这一点。例如: <br>v_VariableName         程序变量 <br>e_ExceptionName       用户定义异常 <br>t_TypeName            用户定义类型 <br>p_ParameterName       过程或函数参数 <br>c_ConstantValue         常量 </p> <p> </p> <p><br>  下面我们再来看一个程序, loop.sql  (参见课本P198) <br>CREATE TABLE test_table (record_number number(3),current_date date); </p> <p>DECLARE <br>  max_records CONSTANT int:=100; <br>  I   int:=1; <br>BEGIN <br>  FOR I in 1..max_records LOOP <br>    If  (mod(i,10)=0)   then <br>       INSERT INTO test_table <br>          (record_number,current_date) <br>       VALUES <br>          (I, SYSDATE); <br>    ELSE <br>       NULL; <br>    END IF; <br>  END LOOP; <br>  COMMIT; <br>END; <br>/ </p> <p>COLUMN current_date FORMAT a20 <br>SELECT  record_number,to_char(sysdate,'HH24:MI SS')  FROM test_table; <br>    DROP TABLE test_table; </p> <p>循环语句 (P.195) <br> FOR-LOOP 与 WHILE-LOOP   <br>  语法: <br> FOR loop variable IN [REVERSE] lower-bound..upper-bound LOOP <br>   Statement; … statemnet; <br> END LOOP; </p> <p>     WHILE condition LOOP <br>       Statement; … statement; <br>     END LOOP; </p> <p>     Condition是一个有效的PL/SQL条件; <br>     Statement是一个有效的PL/SQL语句。 <br>  <br>简单的LOOP语句 <br>  语法: <br>LOOP  <br>   Statement; … statement; <br>END LOOP; <br>无条件循环,为了跳出循环,可在当一个条件被满足时执行EXIT语句。 </p> <p>  EXIT语句: <br>EXIT  [lable-name]  WHEN condition; <br>  <br> IF语句 <br>   IF  condition THEN <br>Statement;  … statement; <br>[ELSIF  condition  THEN  <br>  Statement;  … statement; <br>  … <br>[ELSIF  condition THEN <br>  statement; … statement; <br>[ELSE  <br>  statement;  … statement;] <br>END IF; <br>  注意拼写:是ELSIF而不是ELSEIF;END IF而不是ENDIF。 </p> <p><br>使用过程 <br>   过程是执行少量重复工作、严格地通过参数列表传入和传出值的子例行程序。 <br>   Table.sql  <br>SET SERVEROUTPUT ON <br>DECLARE  <br>  --  常量 <br>  TB CONSTANT VARCHAR2(1):=CHR(9);   -- TAB <br>  --  变量 <br>  status NUMERIC; <br>  table_rec  all_tables%ROWTYPE; <br>  --  例程  <br>  PROCEDURE get_table(Powner     IN       all_tables.owner%TYPE, <br>                     Ptable    IN       all_tables.table_name%TYPE, <br>                      Prec      OUT      all_tables%ROWTYPE, <br>                      Pstatus    IN   OUT NUMBER) IS <br>     -- Local cursors <br>     CURSOR table_cur (Cowner all_tables.owner%TYPE, <br>                       Ctable all_tables.table_name%TYPE) IS <br>       SELECT  *  <br>          FROM all_tables <br>          WHERE owner=Cowner AND table_name = Ctable; <br>     -- 局部变量 <br>     Lowner  all_tables.owner%TYPE; <br>     Ltable  all_tables.table_name%TYPE; <br>  BEGIN <br>    Pstatus:=0;    -- OK <br>    Lowner:=UPPER(Powner); <br>    Ltable:=UPPER(Ptable); <br>    OPEN table_cur(Lowner, Ltable); <br>    FETCH table_cur INTO Prec; <br>    IF (table_cur%NOTFOUND) THEN <br>      RAISE NO_DATA_FOUND; <br>    END IF; <br>      CLOSE table_cur; <br>    EXCEPTION <br>      WHEN OTHERS THEN <br>       BEGIN <br>        Pstatus:=SQLCODE;   -- 捕获错误代码 <br>        IF (table_cur%ISOPEN) THEN <br>          CLOSE table_cur; <br>        END IF; <br>        Prec:=NULL; <br>        DBMS_OUTPUT.put_line('get_table:'||SQLERRM(Pstatus)); <br>        DBMS_OUTPUT.put_line('OWNER='||'<'||Lowner||'>'); <br>        DBMS_OUTPUT.put_line('TABLE ='||'<'||Ltable||'>'); <br>       EXCEPTION <br>        WHEN OTHERS THEN <br>          NULL;  --don't care(avoid infinite loop) <br>       END; <br>  END get_table; <br>BEGIN <br>  DBMS_OUTPUT.enable; <br>  DBMS_OUTPUT.put_line('TABLE'||TB||'TABLESPACE'||TB|| <br>                       'INITIAL'||TB||'NEXT'||TB||'MAX'); <br>  DBMS_OUTPUT.put_line(RPAD('-',43,'-'));   -- Just an under line <br>  Get_table('scott','dept',table_rec,status); <br>  IF (status=0) THEN <br>    DBMS_OUTPUT.put_line( <br>         Table_rec.table_name       ||TB|| <br>         Table_rec.tablespace_name  ||TB|| <br>         Table_rec.initial_extent   ||TB|| <br>         Table_rec.next_extent      ||TB|| <br>         Table_rec.max_extents); <br>  END IF; <br>  Get_table('scott','garbage',table_rec,status); <br>  IF (status =0 ) THEN <br>    DBMS_OUTPUT.put_line( <br>         Table_rec.table_name       ||TB|| <br>         Table_rec.tablespace_name  ||TB|| <br>         Table_rec.initial_extent   ||TB|| <br>         Table_rec.next_extent      ||TB|| <br>         Table_rec.max_extents); <br>  END IF; <br>END; <br>/ </p> <p>游标的使用: <br>    参阅课本P.251 <br>     说明游标 (declare) <br>     打开(open)游标 <br>     用游标提取数据行(fetch) <br>     关闭(close)游标 </p> <p>定义过程: <br> PROCEDURE  procedure-name [(argument1[,argumentN])]  IS <br>[局部变量声明] <br>BEGIN <br>  Executable-section <br>  [exception-section] <br>END [procedure-name]; </p> <p>参数说明 <br>      IN       参数的值传递给过程或函数,但是没有返回给调用它的PL/SQL子程序。在<br>一个过程或函数内部,您不能给说明为IN的参数赋值,只能引用这种类型参数的值。 </p> <p>      OUT     过程或函数不能使用参数传递的值,但给调用它的PL/SQL子程序一个返回<br>值。在一个过程或函数内部,您不能用引用说明为OUT的参数值,只能给这种类型参数赋值<br>。 </p> <p>      IN OUT  参数的值传递给过程或函数,并且给调用它的PL/SQL子程序一个返回值。<br>如果说明一个参数为IN OUT类型,则在过程或函数内部,既可引用这种类型参数的值又可<br>给其赋值。 </p> <p><br>函数说明: <br>    一个PL/SQL函数说明与过程说明很相——只是函数返回一个预定义的数据类型的值。</p> <p>说明一个函数的语法如下: <br>FUNCTION function-name  [(argument1 [,argumentN]) <br>  RETURN  function-datatype IS <br>    [local-variable-decarations] <br>  BEGIN <br>    Executable-section <br>    [exception-section] <br>  END [function-name]; </p> <p><br>二.使用存储过程或函数 <br>存储过程或函数是存储在Oracle数据库中的PL/SQL程序,可由用户直接或间接调用。使用<br>存储过程和函数的主要优越性有以下几点: <br>.提高了效率 : 在客户机应用向数据库服务器提出对SQL的需求。随着户数的的增加,SQ<br>L请求也就不断地增加,使网络很快就成为运行的瓶颈。使用存储过程可使运行性能得到显<br>著的改进,因为对存储过程的一次调用,即用了在服务器中执行的多个SQL语句,从而减少<br>了网络的拥护。 <br>.可重用性:  一个PL/SQL程序只需编写一次,即可用在各种地方——SQL脚本、数据库触发<br>器和客户机应用程序。 <br>.可移植性:您可在任何Oracle数据库中使用存储过程,而不用考虑平台问题,所以您不需<br>要处理象操作系统或编译版本中出现的兼容性问题。只要平台支持Oracle,不需要做任何<br>改变就可调用存储过程。当然如果存储过程包含对文件和路径名的引用,您就需要另做一<br>些改变。 <br>.可维护性:一个存储过程用于完成一个特写的任务,如数据库触发器、SQL*Plus脚本、应<br>用程序或其他存储过程可能需要调用该过程。从所有这些地方均可调用一个存储过程,这<br>样可降低软件维护的成本。 </p> <p>建立存储过程或函数 <br>CREATE [OR REPLACE]  PROCEDURE  procedure_name <br>  [(argument1 [,argumentN])] IS <br>  [local-variable-declarations] <br> BEGIN <br> Executable-section <br> [exception-section] <br>   END  procedure-name; </p> <p>   CREATE [OR REPLACE] FUNCTION function-name <br>  [(argument1 [,argumentN])] IS <br>  [local-variable-declarations] <br> BEGIN <br> Executable-section <br> [exception-section] <br>   END  function-name; </p> <p><br>检索存储过程 <br>建立存储过程后,您也许想看一看PL/SQL程序的源代码,不过,用于建立存储过程的SQL脚<br>本是不可见的,尽管如此,您还是可以使用查询Oracle数据字典视图的方法检索存储过程<br>的源代码。 <br>其中一个视图名为:USER_SOURCE <br>               (另一个DBA_SOURCE) <br>它提供以下四个列: <br>  NAME    包括过程、函数、包或包体的名字。 <br>  TYPE     指出源代码是否属于过程、函数包还是包体。 <br>  TEXT     包含源代码的一行。 <br>  LINE      包含在TEXT中源代码包含的行数。 <br>假设我们已建立了名为DROP_CLASS的存储过程,如果您想看DROP_CLASS的源代码,查询US<br>ER_SOURCE数据字典视图,那么用下面的SQL命令: <br>   select line,text from user_source <br>        where name=’DROP_CLASS’ order by line; </p> <p><br>获得过程、函数、包或包体的目录列表 <br>  我们可以查询USER_OBJECTS获得属于当前所连接的Oracle帐号的存储过程、函数、包或<br>包体的目录列表。如果您想看不管属于谁的所有对象,可以查询DBA_OBJECTS。 <br>  Select distinct object_type  from user_objects; </p> <p>三.使用提供的ORACLE数据库程序包 <br>Oracle数据库提供两组程序包:一组是标准程序包,它向Oracle Server提供基本功能,如<br>你的基本子类型说明和数据类型转换例行程序;另一组程序包供DBA和开发人员使用。这些<br>程序包由它们的名字区分,名字以DBMS_或UTL_打头,意思是它们与数据库打交道或提供通<br>用的实用程序。 </p> <p>表4.1 提供的程序包汇总 <br>程序包名 程序包头文件 描述 <br>DBMS_ALERT Dbmsalrt.sql 数据库事件的异常处理 <br>DBMS_APPLICATION_INFO Dbmsutil.sql 记录当前运行的应用程序名(用于性能监控) </p> <p>DBMS_DDL Dbmsutil.sql 重新编译存储的子程序和程序包,分析数据库对象 <br>DBMS_DESCRIBE Dbmsdesc.sql 描述存储子程序的参数 <br>DBMS_JOB Dbmsjob.sql 在指定时间或时间间隔内运行用户定义的工作 <br>DBMS_LOCK Dbmslock.sql 管理数据库锁定 <br>DBMS_OUTPUT Dbmsotpt.sql 将文本行写入缓冲器供以后检索和显示 <br>DBMS_PIPE Dbmspipe.sql 在会话之间通个存储“管道”存储和发送信息 <br>DBMS_REFRESH Dbmssnap.sql 管理可以一起刷新的快照组 <br>DBMS_SESSION Dbmsutil.sql 有计划地执行alter session语句 <br>DBMS_SHARED_POOL Dbmspool.sql 观察和管理内容 <br>DBMS_SNAPSHOT Dbmssnap.sql 刷新、管理快照和清除快照 <br>DBMS_SPACE Dbmsutil.sql 获取段空间信息 <br>DBMS_SQL Dbmssql.sql 执行动态SQL和PL/SQL <br>DBMS_SYSTEM Dbmsutil.sql 关闭/打开给定会话的SQL跟踪 <br>DBMS_TRANCACTION Dbmsutil.sql 管理SQL事务 <br>DBMS_UTILITY Dbmsutil.sql 各种实用程序 <br>UTL_RAW Utlraw.sql 用于RAW数据类型的簇函数 <br>UTL_FILE Utlfile.sql 读/写基于ASCII的操作系统文件 <br>UTL_HTTP Utlhttp.sql 从给定的URL获取HTML格式的页面 <br>DBMS_LOB Dbmslob.sql 管理大对象 <br>   </p> <p>在您可以使用Oracle提供的程序包内的例行程序时,您应该首先检查它们是否存已经安装<br>和是否有效。DBA可以运行下列查询: <br>SELECT object_name,object_type,status <br>  FROM dba_objects <br>  WHERE owner=’SYS’ AND object_type LIKE ‘PACKAGE%’ <br>  ORDER BY object_name,object_type; </p> <p>    Oracle提供的程序包存放在¥$ORACLE_HOME\rdbms\admin目录下,你可以对这些程序<br>包中的每一个检查其程序包头文件看一看有什么例行程序和全局变量可以使用。 <br>    在以上所述目录下,我们还可以看到以prvt*.sql 和prvt*.plb形式存在的文件。前者<br>是提供的程序包包体,为ASCII格式。后者是程序包包体的二进制编译版的程序包包体。这<br>些代表程序包包体的发布形式。 </p> <p>第六章:DBA <br> 本章将介绍怎样成为数据库管理员(DBA)。DBA工作的贡献在于使所有运行在Oracle数据<br>库上的系统能够有效地工作。DBA为每一个用户提供技术支持,并且应当熟悉Oracle软件方<br>面的所有技术出版物。DBA具有以下职责: <br>Oracle数据库的日常操作 <br>Oracle软件的安装与升级 <br>性能协调 <br>备份与恢复管理策略 <br>个人数据库管理咨询 <br>开发者咨询 </p> <p>  一.启动与关闭数据库 <br>在大多数情况下,当启动数据库时,用户只需要简单地启动Server Manager,连接到数据<br>库,然后输入“Startup”使系统运转。现在我们介绍辅助启动命令选项。当需要时可在S<br>erver Manager中使用这些选项。 </p> <p>   1.启动命令选项 <br>1).正常启动(Startup Normal) <br>  这是默认的启动方式(可省略Normal一词)。在前面的学习中,我们已多次使用这种方<br>式启动了数据库。 </p> <p>SVRMGR> connect internal <br>Connected. <br>SVRMGR> startup <br>ORACLE instance started. <br>Total System Global Area                         16113888 bytes <br>Fixed Size                                          45280 bytes <br>Variable Size                                     7802880 bytes <br>Database Buffers                                  8192000 bytes <br>Redo Buffers                                        73728 bytes <br>Database mounted. <br>    Database opened. </p> <p>2).安装启动(Startup Mount) <br>   这种方式用于改变数据库的归档或执行恢复状态。此时数据未打开,所以不允许用户访<br>问数据。启动服务器管理器后,按下述步骤操作: <br>   SVRMGR>connect internal; <br>   SVRMGR>Startup Mount; </p> <p> </p> <p>3).非安装启动(Startup Nomount) <br>   这种方式用于重建控制文件或重建数据库。由于数据库没有打开,因此不允许用户访问<br>。启动服务器管理器后,按下述步骤操作: <br>   SVRMGR>connect internal; <br>   SVRMGR>Startup Nomount; <br>   ORACLE instance started. <br>   Total System Global Area                         16113888 bytes <br>   Fixed Size                                          45280 bytes <br>   Variable Size                                     7802880 bytes <br>   Database Buffers                                  8192000 bytes <br>   Redo Buffers                                        73728 bytes <br>       Database mounted. </p> <p>4).约束启动(Startup Restrict) <br>使用这种方式能够启动数据库,但只允许具有一定特权的用户访问。该命令的输出信息与<br>不受限方式的启动命令的信息相同。数据库已打开,如果非特权用户试图登录,则将出现<br>下列错误信息: <br>        使用alter system disable restricted session可以使数据库处于非约束访问方<br>式,用户可以再次登录。 </p> <p><br>5).强制启动(Startup Force) <br>当不能关闭数据库时,采用强制启动先项可处理这种罕见状态。首先关闭数据库,然后执<br>行无选项的数据库启动操作。启动操作与执行“Startup”命令相同。启动服务器管理后,<br>按下述步骤操作: <br>   SVRMGR>connect internal; <br>   SVRMGR>Startup force </p> <p>    完成上述操作后,数据库被打开,用户可访问信息。 </p> <p><br>6).带初始化参数启动(Startup Pfile) <br>启动命令使用该选项不影响数据库的运行方式,而只是定义了初始化参数文件(pfile)的<br>名称及位置。正如前面所讨论,初始化参数文件由Oracle打开数据库时读取。Oracle期望<br>已定位的缺省的初始化参数文件名。 <br>   SVRMGR>connect internal; <br>   SVRMGR>Startup pfile= parameter_file_name </p> <p>关闭选项 <br>当Oracle数据库不运行时,称其为停止(down)。关闭数据库有多种理由,有些软件做备<br>份时关闭数据库;当升级或安装一些新的Oracle软件时,在升级或安装对话期间,Oracle<br>数据库必须关闭。 </p> <p>Showdown immediate 立即关闭,绝大多数情况下使用这种关闭方式。在用户别无选择时使<br>用shutdown abort选项关闭数据库,这是作为最后一种手段,非不得已的情况下才用。如<br>果使用中止(abort)选项关闭数据库,应立即启动数据库再做一次正常关闭,经验表明这<br>是处理中止关闭的最好办法。 </p> <p>        <br>  二.用户及用户权限管理 <br>建立用户 </p> <p>建立一个用户,实际上是建立一个安全、有用的帐号,它具有适当的权限和正确的缺省设<br>置。使用create user命令要建立一个新的数据库帐户,当该帐户建立后,在授权前它没有<br>任何效力,甚至不能注册。 <br>所有用户帐号所需的设置都可由一个create user命令来指定。这些设置可以包括下表所有<br>的参数值。 <br>   参    数                    使    用 <br>Username 模式名 <br>Password 帐号口令,也可以是直接与操作系统主机帐号相连 <br>Default Tablespace 缺省表空间用来存储在该模式下建立的对象。这个并不是真正给用户<br>建立的对象,而仅是设置一个缺省值 <br>Temporary Tablespace 这个表空间只用来存储排序处理的临时段 <br>Quota  [on tablespace] 充许用户在限额指定尺寸的表空间存储对象 <br>Profile 给用户指定一个环境文件。如未指定,则使用缺省环境文件。环境文件是用来限<br>制对系统资源的使用的执行口令管理规则   <br>   下面列出一个简单的create user命令。在这个例子中,建立一个叫Rudolf和反用户,<br>口令为lamb,缺省表空间为USERS,临时表空间为TEMP,没有限额,使用缺省环境文件。 </p> <p>   Create user rudolf <br>      Identified by lamb <br>      Default tablespace USERS <br>      Temporary tablespace TEMP; </p> <p>由于没有指定环境文件,数据库使用缺省环境文件。环境文件名为DEFAULT;其初始值是由<br>UNLIMITED设置的所有资源消耗的限值。 <br>由于没有指定限额,用户就不能在数据库建立对象。 <br>当授权资源限额时,使用create user或alter user的quota参数,如下面所列出的。这个<br>例子中,授予rudolf的限额为USERS表空间的10MB。 <br>Alter user rudolf  <br>   Quota 10M on users </p> <p>这时用户Rudolf可以在USERS表空间中建立最多为10M的数据段。用户不需要临时表空间中<br>空间限额来建立他们查询时的临时段。 <br>除用户名外,create user命令的参数都可以由alter user命令来替换。 </p> <p> </p> <p>2.删除用户 </p> <p>  可以用drop user命令来把一个用户从数据库中完全删除。这个命令只有一个参数——c<br>ascade,它能删除用户模式中的所有对象。如果是用户固有对象,为删除用户,你必须先<br>指定cascade。下面举例说明drop user命令: <br>drop user rudolf cascade </p> <p>   任何视图、同义词、过程、函数或数据包等被引用的对象在删除用户都会标上INVALID<br>。如果不久后另一个用户建立一个同样的名字,那么他在他的前任用户继承不到任何东西<br>。  </p> <p>    <br>3.系统级权限 <br>   <br>   可以使用系统级角色分配有效的系统级命令,以管理数据库。也可以建立用户系统级角<br>色或使用自身所带的有效权限,可以通过系统级角色授予,见下表: </p> <p>   权限 授权能力 <br>对象管理 <br>CREATE [ANY] CLUSTER <br>CREATE [ANY] DIRECTORY <br>CREATE [ANY] INDEX <br>CREATE [ANY] LIBRARY <br>CREATE [ANY] PROCEDURE <br>CREATE [ANY] SEQUENCE <br>CREATE [ANY] SNAPSHOT <br>CREATE  ANY SYNONYM <br>CREATE [PUBLIC] SYNONYM <br>CREATE [ANY] TABLE <br>CREATE [ANY] TRIGGER <br>CREATE [ANY] TYPE <br>CREATE [ANY] VIEW <br>ALTER [ANY] CLUSTER <br>ALTER [ANY] INDEX <br>ALTER [ANY] PROCEDURE <br>… <br>DROP ANY CLUSTER <br>DROP ANY DIRECTORY <br>DROP ANY <br>… <br>BACKUP ANY TABLE <br>COMMENT ANY TABLE <br>LOCK ANY TABLE <br>SELECT ANY TABLE <br>INSERT ANY TABLE <br>UPDATE ANY TABLE <br>DELETE ANY TABLE <br>EXECUTE ANY TYPE <br>EXECUTE ANY PROCEDURE <br>数据库管理 <br>CREATE [PUBLIC] DATABASE LINK <br>CREATE PROFILE <br>CREATE ROLE <br>CREATE ROLLBACK SEGMENT <br>CREATE TABLESPACE <br>CREATE USER <br>ALTER PROFILE <br>ALTER  RESOURCE COST <br>ALTER ANY ROLE <br>ALTER ROLLBACK SEGMENT <br>ALTER TABLESPACE  <br>ALTER USER <br>DROP PROFILE <br>DROP PUBLIC DATABASE LINK <br>DROP ANY ROLE <br>DROP ROLLBACK SEGMENT <br>DROP TABLESPACE <br>ALTER DATABASE <br>ALTER SYSTEM <br>ANALYZE ANY <br>ANUDITANY AUDIT SYSTEM <br>BECOME USER <br>FORCE [ANY] TRANSACTION <br>GRANT ANY PRIVILEGE <br>GRANT ANY ROLE <br>MANAGER TABLESPACE <br>RESTRICTED SYSTEM <br>SYSDBA   可以建立数据库一样执行系统管理功能(recover、startup、shutdown) <br>SYSOPER   可以执行与数据库备份、启动/关闭有关的系统管理功能(装载、恢复、打开和<br>关闭数据库) </p> <p>   使用grant命令给用户授权,grant命令的子句with grant option,是用于给被授予都<br>传递授予用户权限的能力。 <br>   Oracle提供了8个系统级角色。它们分别是CONNECT,RESOURCE,DBA,IMP_FULL_DATAB<br>ASE,EXP_FULL_DATABASE,SELECT_CATALOG_ROLE,EXECUTE_CATALOG_ROLE和DELETE_CATALOG<br>_ROLE。使用这些角色可以用来限制数据库管理角色的系统级权限。 <br>  CONNECT角色是授予最终用户的典型。尽管它具有一些建立对象的能力(如CREATE TABL<br>E权限),但它不能给用户任何表空间的额度。由于用户没有表空间,所以也就不能建表。<br>  <br>  RESOURCE角色是授予开发人员的,是开发人员最有效的角色。 <br>  DBA</p> </div> </div> </div> </div> </div> <!--PC和WAP自适应版--> <div id="SOHUCS" sid="1290375553664229376"></div> <script type="text/javascript" src="/views/front/js/chanyan.js"></script> <!-- 文章页-底部 动态广告位 --> <div class="youdao-fixed-ad" id="detail_ad_bottom"></div> </div> <div class="col-md-3"> <div class="row" id="ad"> <!-- 文章页-右侧1 动态广告位 --> <div id="right-1" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_1"> </div> </div> <!-- 文章页-右侧2 动态广告位 --> <div id="right-2" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_2"></div> </div> <!-- 文章页-右侧3 动态广告位 --> <div id="right-3" class="col-lg-12 col-md-12 col-sm-4 col-xs-4 ad"> <div class="youdao-fixed-ad" id="detail_ad_3"></div> </div> </div> </div> </div> </div> </div> <div class="container"> <h4 class="pt20 mb15 mt0 border-top">你可能感兴趣的:(数据库知识,SQL,Oracle,SQL,Server,数据结构,配置管理)</h4> <div id="paradigm-article-related"> <div class="recommend-post mb30"> <ul class="widget-links"> <li><a href="/article/1950224745093984256.htm" title="在线人数统计业务设计(场景八股文)" target="_blank">在线人数统计业务设计(场景八股文)</a> <span class="text-muted"></span> <div>业务问题在当经的网站中,在线人数的实时统计已经是一个必不可少的模块了,并且该统计功能最好能够按不同的时间间隔做的统计,现在需要你设计一个在线人数统计的模块,你应该怎么进行设计的呢?背景一个网校下会有多个学员。目前平台大概有十个,平台对应的网校大概五十几个,平均一个网校会有5w个用户,预计总人数为200w,最该学员的在线人数在10w左右。设计思路最开始的时候,想到的就是使用mysql直接实现,但是明</div> </li> <li><a href="/article/1950224618606358528.htm" title="Aop +反射 实现方法版本动态切换" target="_blank">Aop +反射 实现方法版本动态切换</a> <span class="text-muted"></span> <div>需求分析在做技术选型的时候一直存在着两个声音,mongo作为数据库比较mysql好,mysql做为该数据比mongo好。当然不同数据库都有有着自己的优势,我们在做技术选型的时候无非就是做到对数据库的扬长避短。mysql最大的优势就是支持事务,事务的五大特性保证的业务可靠性,随之而来的就是事务会产生的问题:脏读、幻读、不可重复度,当然我们也会使用不同的隔离级别来解决。(最典型的业务问题:银行存取钱)</div> </li> <li><a href="/article/1950215918101524480.htm" title="第二十二天(数据结构,无头节点的单项链表)" target="_blank">第二十二天(数据结构,无头节点的单项链表)</a> <span class="text-muted">肉夹馍不加青椒</span> <a class="tag" taget="_blank" href="/search/c%E8%AF%AD%E8%A8%80/1.htm">c语言</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a> <div>线性表:一个线性表里面可以是任意的数据元素,但是同一个线性表里面数据应该是同类型的1存在一个/唯一被称为第一个节点的节点2存在一个/唯一被称为最后一个节点的节点3除了第一个以外,每一个元素都有一个前驱节点4除了最后一个,每一个元素都有一个后继节点满足以上性质,这个表就被称为线性表数组就是一个线性表想实现线性表的保存,我们需要考虑下面的事情1元素要保存2元素与元素之间的序偶关系谁是前面的谁是后面的我</div> </li> <li><a href="/article/1950208485933248512.htm" title="mysql复习" target="_blank">mysql复习</a> <span class="text-muted">立夏的李子</span> <a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/database/1.htm">database</a> <div>mysqlselect语法selectfromjoinwheregroupbyhavingorderbylimit联合查询innerjoin()leftjoin(以左表为基准,匹配右表,不匹配的返回左表,右表以null值填充)rightjoind··(去除列重复的数据)索引类型主键索引(PrimaryKey)唯一索引(Unique)常规索引(Index)全文索引(FullText)索引准则索引不是</div> </li> <li><a href="/article/1950204072141320192.htm" title="MySQL复习题" target="_blank">MySQL复习题</a> <span class="text-muted"></span> <div>一.填空题1.关系数据库的标准语言是SQL。2.数据库发展的3个阶段中,数据独立性最高的是阶段数据库系统。3.概念模型中的3种基本联系分别是一对一、一对多和多对多。4.MySQL配置文件的文件名是my.ini或my.cnf。5.在MySQL配置文件中,datadir用于指定数据库文件的保存目录。6.添加IFNOTEXISTS可在创建的数据库已存在时防止程序报错。7.MySQL提供的SHOWCREA</div> </li> <li><a href="/article/1950202684451647488.htm" title="[spring6: Mvc-网关]-源码解析" target="_blank">[spring6: Mvc-网关]-源码解析</a> <span class="text-muted"></span> <div>推荐阅读:[spring6:Mvc-函数式编程]-源码解析GatewayServerMvcAutoConfiguration@AutoConfiguration(after={HttpClientAutoConfiguration.class,RestTemplateAutoConfiguration.class,RestClientAutoConfiguration.class,FilterAu</div> </li> <li><a href="/article/1950190326673108992.htm" title="Spark SQL架构及高级用法" target="_blank">Spark SQL架构及高级用法</a> <span class="text-muted">Aurora_NeAr</span> <a class="tag" taget="_blank" href="/search/spark/1.htm">spark</a><a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a> <div>SparkSQL架构概述架构核心组件API层(用户接口)输入方式:SQL查询;DataFrame/DatasetAPI。统一性:所有接口最终转换为逻辑计划树(LogicalPlan),进入优化流程。编译器层(Catalyst优化器)核心引擎:基于规则的优化器(Rule-BasedOptimizer,RBO)与成本优化器(Cost-BasedOptimizer,CBO)。处理流程:阶段输入输出关键动</div> </li> <li><a href="/article/1950188184285540352.htm" title="Mac OSX 下的mysql数据库文件存放位置" target="_blank">Mac OSX 下的mysql数据库文件存放位置</a> <span class="text-muted">Bruuuces</span> <a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a><a class="tag" taget="_blank" href="/search/mac/1.htm">mac</a><a class="tag" taget="_blank" href="/search/osx/1.htm">osx</a><a class="tag" taget="_blank" href="/search/%E4%BD%8D%E7%BD%AE/1.htm">位置</a><a class="tag" taget="_blank" href="/search/%E5%AD%98%E6%94%BE/1.htm">存放</a> <div>之前我的mysql的系统数据库里的表被我玩坏了,万般无奈之下只得删除所有mysql的东西重新构建数据库。按照网上搜到的内容删除后重装发现数据库没有什么变化。于是自己在每个可能存放数据库文件的目录查找,最终确认目录位置如下:使用HomeBrew安装为/usr/local/var/mysql使用官方下载的dmg镜像安装为/usr/local/mysql删除这个目录再重新安装mysql就会重新生成系统数</div> </li> <li><a href="/article/1950185411020124160.htm" title="mac os 10.9 mysql_MAC OSX 10.9 apache php mysql 环境配置" target="_blank">mac os 10.9 mysql_MAC OSX 10.9 apache php mysql 环境配置</a> <span class="text-muted">AY05</span> <a class="tag" taget="_blank" href="/search/mac/1.htm">mac</a><a class="tag" taget="_blank" href="/search/os/1.htm">os</a><a class="tag" taget="_blank" href="/search/10.9/1.htm">10.9</a><a class="tag" taget="_blank" href="/search/mysql/1.htm">mysql</a> <div>#终端内运行sudoapachectlstart#启动Apachesudoapachectlrestart#重启Apachesudoapachectlstop#停止Apache#配置Apachesudovi/private/etc/apache2/httpd.conf#将里面的这一行去掉前面的##LoadModulephp5_modulelibexec/apache2/libphp5.so#配置P</div> </li> <li><a href="/article/1950185032945561600.htm" title="mac升级mysql_Mac OSX下的MySQL数据库升级" target="_blank">mac升级mysql_Mac OSX下的MySQL数据库升级</a> <span class="text-muted">weixin_39801714</span> <a class="tag" taget="_blank" href="/search/mac%E5%8D%87%E7%BA%A7mysql/1.htm">mac升级mysql</a> <div>MacOSX下的数据库升级最麻烦的不过权限的问题.本文的MySQL的安装方式为OSX下DMG磁盘镜像的安装方式,MacPorts/Homebrew的方式大同小异.从5.6.17升级到5.7.18安装目录信息ls-al/usr/local|grepmysqllrwxr-xr-x1rootwheel30B52100:39mysql@->mysql-5.6.17-osx10.7-x86_64drwxr-</div> </li> <li><a href="/article/1950180497007112192.htm" title="【MySQL】MySQL数据库如何改名" target="_blank">【MySQL】MySQL数据库如何改名</a> <span class="text-muted">武昌库里写JAVA</span> <a class="tag" taget="_blank" href="/search/%E9%9D%A2%E8%AF%95%E9%A2%98%E6%B1%87%E6%80%BB%E4%B8%8E%E8%A7%A3%E6%9E%90/1.htm">面试题汇总与解析</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a><a class="tag" taget="_blank" href="/search/vue.js/1.htm">vue.js</a><a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a> <div>MySQL建库授权语句https://www.jianshu.com/p/2237a9649ceeMySQL数据库改名的三种方法https://www.cnblogs.com/gomysql/p/3584881.htmlMySQL安全修改数据库名几种方法https://blog.csdn.net/haiross/article/details/51282417MySQL重命名数据库https://</div> </li> <li><a href="/article/1950179866523529216.htm" title="大学社团管理系统(11831)" target="_blank">大学社团管理系统(11831)</a> <span class="text-muted">codercode2022</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/boot/1.htm">boot</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/echarts/1.htm">echarts</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/cloud/1.htm">cloud</a><a class="tag" taget="_blank" href="/search/sentinel/1.htm">sentinel</a><a class="tag" taget="_blank" href="/search/java-rocketmq/1.htm">java-rocketmq</a> <div>有需要的同学,源代码和配套文档领取,加文章最下方的名片哦一、项目演示项目演示视频二、资料介绍完整源代码(前后端源代码+SQL脚本)配套文档(LW+PPT+开题报告)远程调试控屏包运行三、技术介绍Java语言SSM框架SpringBoot框架Vue框架JSP页面Mysql数据库IDEA/Eclipse开发四、项目截图有需要的同学,源代码和配套文档领取,加文章最下方的名片哦!</div> </li> <li><a href="/article/1950171670966759424.htm" title="修改gitlab默认的语言" target="_blank">修改gitlab默认的语言</a> <span class="text-muted">Victor刘</span> <a class="tag" taget="_blank" href="/search/gitlab/1.htm">gitlab</a> <div>文章目录网上的方法1.采用数据库触发器的方法2.登录pg库2.1查看表2.2创建function2.3创建触发器2.4修改历史数据网上的方法网上修改/opt/gitlab/embedded/service/gitlab-rails/config/application.rb的方法,我试了,没生效,没进一步研究1.采用数据库触发器的方法2.登录pg库su-gitlab-psqlpsql-h/var/</div> </li> <li><a href="/article/1950166876634017792.htm" title="如何在 Ubuntu 24.04 或 22.04 Linux 上安装和运行 Redis 服务器" target="_blank">如何在 Ubuntu 24.04 或 22.04 Linux 上安装和运行 Redis 服务器</a> <span class="text-muted">山岚的运维笔记</span> <a class="tag" taget="_blank" href="/search/Linux/1.htm">Linux</a><a class="tag" taget="_blank" href="/search/%E8%BF%90%E7%BB%B4%E5%8F%8A%E4%BD%BF%E7%94%A8/1.htm">运维及使用</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">服务器</a><a class="tag" taget="_blank" href="/search/ubuntu/1.htm">ubuntu</a><a class="tag" taget="_blank" href="/search/redis/1.htm">redis</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a> <div>Redis(RemoteDictionaryServer,远程字典服务器)是一种内存数据结构存储,通常用作NoSQL数据库、缓存和消息代理。它是开源的,因此用户可以免费安装,无需支付任何费用。Redis旨在为需要快速数据访问和低延迟的应用程序提供速度和效率。Redis支持多种数据类型,包括字符串(Strings)、列表(Lists)、集合(Sets)、哈希(Hashes)、有序集合(SortedS</div> </li> <li><a href="/article/1950163472050352128.htm" title="数据库基础概念梳理" target="_blank">数据库基础概念梳理</a> <span class="text-muted">22:30Plane-Moon</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a> <div>1.数据存储类型表(Table):存储结构化数据的标准方式,数据以行和列的形式组织,具有固定的格式。非结构化数据(UnstructuredData):如音频、视频、图片、文本文档等,其格式不固定,不易直接用表存储。2.SQL的核心优势SQL尤其擅长处理和操作存储在表中的结构化数据。2.1数据类型约束(DataTypeConstraints):定义列可存储的数据种类。整数类型:TINYINT(1字节</div> </li> <li><a href="/article/1950161706533580800.htm" title="SQL笔记纯干货" target="_blank">SQL笔记纯干货</a> <span class="text-muted">AI入门修炼</span> <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a> <div>软件:DataGrip2023.2.3,phpstudy_pro,MySQL8.0.12目录1.DDL语句(数据定义语句)1.1数据库操作语言1.2数据表操作语言2.DML语句(数据操作语言)2.1增删改2.2题2.3备份表3.DQL语句(数据查询语言)3.1查询操作3.2题一3.3题二4.多表详解4.1一对多4.2多对多5.多表查询6.窗口函数7.拓展:upsert8.sql注入攻击演示9.拆表</div> </li> <li><a href="/article/1950161707464716288.htm" title="Ubuntu Docker 安装Redis" target="_blank">Ubuntu Docker 安装Redis</a> <span class="text-muted">LLLL96</span> <a class="tag" taget="_blank" href="/search/Ubuntu/1.htm">Ubuntu</a><a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/docker/1.htm">docker</a><a class="tag" taget="_blank" href="/search/redis/1.htm">redis</a><a class="tag" taget="_blank" href="/search/ubuntu/1.htm">ubuntu</a> <div>目录介绍1.数据结构丰富2.高性能3.持久化1.拉取Redis镜像2.创建挂载目录(可选)3.配置Redis持久化(可选)4.使用配置文件运行容器5.查看redis日志介绍1.数据结构丰富Redis支持多种数据结构,包括:字符串(String):可以用来存储任何类型的数据,例如文本、数字或二进制数据。哈希(Hash):存储字段和值的映射,适合用于表示对象。列表(List):有序的字符串列表,可以用</div> </li> <li><a href="/article/1950160572502831104.htm" title="Ubuntu24安装MariaDB/MySQL后不知道root密码如何解决" target="_blank">Ubuntu24安装MariaDB/MySQL后不知道root密码如何解决</a> <span class="text-muted"></span> <div>Ubuntu24.04安装MariaDB后root密码未知?解决方案在此在Ubuntu24.04上新安装MariaDB后,许多用户会发现自己不知道root用户的密码,甚至在安装过程中也没有提示设置密码。这是因为在较新的MariaDB版本中,默认情况下root用户采用了unix_socket身份验证插件。这意味着您可以使用操作系统的root用户权限直接登录MariaDB,而无需输入密码。本文将为您详</div> </li> <li><a href="/article/1950160194403102720.htm" title="Java:数据结构-ArrayList和顺序表(2)" target="_blank">Java:数据结构-ArrayList和顺序表(2)</a> <span class="text-muted">blammmp</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a> <div>一ArrayList的使用1.ArrayList的构造方法第一种(指定容量的构造方法)创建一个空的ArrayList,指定容量为initialCapacity。publicArrayList(intinitialCapacity){if(initialCapacity>0){this.elementData=newObject[initialCapacity];}elseif(initialCap</div> </li> <li><a href="/article/1950158344555655168.htm" title="mysql创建线程处理链接请求" target="_blank">mysql创建线程处理链接请求</a> <span class="text-muted">斜不靠谱</span> <div>mysqld通过RUN_HOOK(server_state,before_handle_connection,(NULL));调用/**Threadhandlerforaconnection@paramargConnectionobject(Channel_info)Thisfunction(normally)doesthefollowing:-Initializethread//初始化线程-In</div> </li> <li><a href="/article/1950154776767426560.htm" title="【数据结构】--ArrayList与顺序表" target="_blank">【数据结构】--ArrayList与顺序表</a> <span class="text-muted">bubu__</span> <a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a> <div>文章目录1.线性表2.顺序表3.ArrayList简介4.MyArrayList的实现5.ArrayList使用5.1ArrayList的构造5.2ArrayList常见操作5.3ArrayList的遍历5.4ArrayList的扩容机制6.ArrayList的具体使用6.1简单的洗牌算法6.2杨辉三角1.线性表线性表(linearlist)是n个具有相同特性的数据元素的有限序列。线性表是一种在实</div> </li> <li><a href="/article/1950151117719531520.htm" title="数据结构2-集合类ArrayList与洗牌算法" target="_blank">数据结构2-集合类ArrayList与洗牌算法</a> <span class="text-muted"></span> <div>文章目录★引言:一.MyArrayList模拟实现(一)IList(二)MyArrayList(1)add(Tdata)(2)add(intpos,Tdata)(3)IllgalPosException(4)indexOf(ObjecttoFind)(5)contains(ObjecttoFind)(6)get(intpos)(7)set(intpos,Tvalue)(8)remove(Objec</div> </li> <li><a href="/article/1950147339964444672.htm" title="【Druid】学习笔记" target="_blank">【Druid】学习笔记</a> <span class="text-muted">fixAllenSun</span> <a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/%E7%AC%94%E8%AE%B0/1.htm">笔记</a><a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a> <div>【Druid】学习笔记【一】简介【1】简介【2】数据库连接池(1)能解决的问题(2)使用数据库连接池的好处【3】监控(1)监控信息采集的StatFilter(2)监控不影响性能(3)SQL参数化合并监控(4)执行次数、返回行数、更新行数和并发监控(5)慢查监控(6)Exception监控(7)区间分布(8)内置监控DEMO【4】Druid基本配置参数介绍【5】Druid相比于其他数据库连接池的优点</div> </li> <li><a href="/article/1950144189979226112.htm" title="Spring Security OAuth2.0在分布式系统中的安全实践" target="_blank">Spring Security OAuth2.0在分布式系统中的安全实践</a> <span class="text-muted"></span> <div>引言分布式系统架构下,安全认证与授权面临跨服务、高并发、多租户等挑战。SpringSecurity与OAuth2.0的结合为微服务安全提供了标准化解决方案。分布式系统中的安全挑战跨服务身份认证的复杂性令牌管理的可扩展性问题多租户场景下的权限隔离需求防止CSRF、XSS等常见攻击SpringSecurityOAuth2.0核心架构授权服务器设计@EnableAuthorizationServer配置</div> </li> <li><a href="/article/1950144063588069376.htm" title="Serverless架构下Spring Function的创新实践" target="_blank">Serverless架构下Spring Function的创新实践</a> <span class="text-muted">tmjpz04412</span> <a class="tag" taget="_blank" href="/search/serverless/1.htm">serverless</a><a class="tag" taget="_blank" href="/search/%E6%9E%B6%E6%9E%84/1.htm">架构</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a> <div>引言:Serverless与Spring生态的交汇背景介绍:云计算与Serverless架构的兴起Spring生态的演进与云原生适配性核心问题:传统Spring应用如何融入Serverless范式Serverless架构的核心特征与挑战事件驱动、弹性伸缩与按需计费冷启动问题与性能优化需求Spring应用在Serverless环境中的典型瓶颈(如依赖注入、上下文初始化)SpringFunction的</div> </li> <li><a href="/article/1950140903616212992.htm" title="Java朴实无华按天计划从入门到实战(强化速战版-66天)" target="_blank">Java朴实无华按天计划从入门到实战(强化速战版-66天)</a> <span class="text-muted">岫珩</span> <a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/%E5%90%8E%E7%AB%AF/1.htm">后端</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E5%8F%91%E8%AF%AD%E8%A8%80/1.htm">开发语言</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0/1.htm">学习</a><a class="tag" taget="_blank" href="/search/Java/1.htm">Java</a><a class="tag" taget="_blank" href="/search/%E6%97%B6%E9%97%B4%E5%AE%89%E6%8E%92/1.htm">时间安排</a><a class="tag" taget="_blank" href="/search/%E5%AD%A6%E4%B9%A0%E8%AE%A1%E5%88%92/1.htm">学习计划</a> <div>致敬读者感谢阅读笑口常开生日快乐⬛早点睡觉博主相关博主信息博客首页专栏推荐活动信息文章目录Java朴实无华按天计划从入门到实战(强化速战版-66天)1.基础(18)1.1JavaSE核心(5天)1.2数据库与SQL(5天)1.3前端基础(8天)2.进阶(17天)2.1JavaWeb核心(5天)2.2Mybatis与Spring全家桶(6天)2.3中间件入门(4天)2.4实践项目(2天)3.高阶(1</div> </li> <li><a href="/article/1950138760230400000.htm" title="C语言基础-数组和指针的区别" target="_blank">C语言基础-数组和指针的区别</a> <span class="text-muted">阿部春光</span> <a class="tag" taget="_blank" href="/search/C%E8%AF%AD%E8%A8%80/1.htm">C语言</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84/1.htm">数据结构</a><a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a> <div>在C语言中,数组和指针是两个密切相关但又有显著区别的概念。下面我会详细解释它们之间的区别和联系。区别数组和指针在C语言中虽然经常一起使用,但它们是两个不同的概念,具有一些关键的区别:本质不同:数组:数组是一种数据结构,用于存储固定数量的同类型元素的连续内存块。数组名在某些上下文中(如取地址操作或sizeof操作符)代表整个数组,但在其他上下文中(如作为函数参数或用于指针算术)通常退化为指向数组第一</div> </li> <li><a href="/article/1950135104319844352.htm" title="Navicat练习与实操(第九节课内容总结见下篇)" target="_blank">Navicat练习与实操(第九节课内容总结见下篇)</a> <span class="text-muted">咩?</span> <a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/%E5%89%8D%E7%AB%AF/1.htm">前端</a><a class="tag" taget="_blank" href="/search/sql/1.htm">sql</a> <div>MySQL练习练习题目现在有以下四张表Student学生ID学生名字学生生日学生性别s_ids_names_births_sexCourse课程ID课程名字教师IDc_idc_namet_idTeacher教师ID教师名字t_idt_nameScore学生ID课程ID学生分数s_idc_ids_score1.对以上表格分别建表(要求:id为各个表的主键、其他字段非空设置默认值为、给表以及表中字段设</div> </li> <li><a href="/article/1950134096558616576.htm" title="Python STL概念学习与代码实践" target="_blank">Python STL概念学习与代码实践</a> <span class="text-muted">体制教科书</span> <div>本文还有配套的精品资源,点击获取简介:通过”py_stl_learning”项目,学习者可以使用Python实现和理解C++STL的概念,包括数据结构、算法、容器适配器、模板和泛型容器等。Python中的列表、集合、字典等数据结构与STL中的vector、set、map等类似,而Python的itertools和functools模块提供了STL风格的算法功能。Python通过其面向对象的特性以及</div> </li> <li><a href="/article/1950128298788974592.htm" title="Redis五大基本数据类型" target="_blank">Redis五大基本数据类型</a> <span class="text-muted">ruan114514</span> <a class="tag" taget="_blank" href="/search/redis/1.htm">redis</a><a class="tag" taget="_blank" href="/search/%E6%95%B0%E6%8D%AE%E5%BA%93/1.htm">数据库</a><a class="tag" taget="_blank" href="/search/%E7%BC%93%E5%AD%98/1.htm">缓存</a><a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div>Redis作为高性能的键值存储系统,其核心价值在于丰富的数据结构。本文将深入剖析Redis的五种基本数据类型,揭示其内部实现原理,并提供实际应用场景和最佳实践。一、字符串(String):Redis的基石底层实现Redis字符串使用简单动态字符串(SDS)结构:structsdshdr{intlen;//已使用长度intfree;//未使用空间charbuf[];//字节数组};优势特性:O(1)</div> </li> <li><a href="/article/122.htm" title="java数字签名三种方式" target="_blank">java数字签名三种方式</a> <span class="text-muted">知了ing</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/jdk/1.htm">jdk</a> <div>以下3钟数字签名都是基于jdk7的 1,RSA String password="test"; // 1.初始化密钥 KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA"); keyPairGenerator.initialize(51</div> </li> <li><a href="/article/249.htm" title="Hibernate学习笔记" target="_blank">Hibernate学习笔记</a> <span class="text-muted">caoyong</span> <a class="tag" taget="_blank" href="/search/Hibernate/1.htm">Hibernate</a> <div>1>、Hibernate是数据访问层框架,是一个ORM(Object Relation Mapping)框架,作者为:Gavin King 2>、搭建Hibernate的开发环境      a>、添加jar包:      aa>、hibernatte开发包中/lib/required/所</div> </li> <li><a href="/article/376.htm" title="设计模式之装饰器模式Decorator(结构型)" target="_blank">设计模式之装饰器模式Decorator(结构型)</a> <span class="text-muted">漂泊一剑客</span> <a class="tag" taget="_blank" href="/search/Decorator/1.htm">Decorator</a> <div>1. 概述        若你从事过面向对象开发,实现给一个类或对象增加行为,使用继承机制,这是所有面向对象语言的一个基本特性。如果已经存在的一个类缺少某些方法,或者须要给方法添加更多的功能(魅力),你也许会仅仅继承这个类来产生一个新类—这建立在额外的代码上。       </div> </li> <li><a href="/article/503.htm" title="读取磁盘文件txt,并输入String" target="_blank">读取磁盘文件txt,并输入String</a> <span class="text-muted">一炮送你回车库</span> <a class="tag" taget="_blank" href="/search/String/1.htm">String</a> <div>public static void main(String[] args) throws IOException {    String fileContent = readFileContent("d:/aaa.txt");    System.out.println(fileContent);    </div> </li> <li><a href="/article/630.htm" title="js三级联动下拉框" target="_blank">js三级联动下拉框</a> <span class="text-muted">3213213333332132</span> <a class="tag" taget="_blank" href="/search/%E4%B8%89%E7%BA%A7%E8%81%94%E5%8A%A8/1.htm">三级联动</a> <div> //三级联动 省/直辖市<select id="province"></select> 市/省直辖<select id="city"></select> 县/区 <select id="area"></select> </div> </li> <li><a href="/article/757.htm" title="erlang之parse_transform编译选项的应用" target="_blank">erlang之parse_transform编译选项的应用</a> <span class="text-muted">616050468</span> <a class="tag" taget="_blank" href="/search/parse_transform/1.htm">parse_transform</a><a class="tag" taget="_blank" href="/search/%E6%B8%B8%E6%88%8F%E6%9C%8D%E5%8A%A1%E5%99%A8/1.htm">游戏服务器</a><a class="tag" taget="_blank" href="/search/%E5%B1%9E%E6%80%A7%E5%90%8C%E6%AD%A5/1.htm">属性同步</a><a class="tag" taget="_blank" href="/search/abstract_code/1.htm">abstract_code</a> <div>         最近使用erlang重构了游戏服务器的所有代码,之前看过C++/lua写的服务器引擎代码,引擎实现了玩家属性自动同步给前端和增量更新玩家数据到数据库的功能,这也是现在很多游戏服务器的优化方向,在引擎层面去解决数据同步和数据持久化,数据发生变化了业务层不需要关心怎么去同步给前端。由于游戏过程中玩家每个业务中玩家数据更改的量其实是很少</div> </li> <li><a href="/article/884.htm" title="JAVA JSON的解析" target="_blank">JAVA JSON的解析</a> <span class="text-muted">darkranger</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a> <div> // { // “Total”:“条数”, // Code: 1, // // “PaymentItems”:[ // { // “PaymentItemID”:”支款单ID”, // “PaymentCode”:”支款单编号”, // “PaymentTime”:”支款日期”, // ”ContractNo”:”合同号”, // </div> </li> <li><a href="/article/1011.htm" title="POJ-1273-Drainage Ditches" target="_blank">POJ-1273-Drainage Ditches</a> <span class="text-muted">aijuans</span> <a class="tag" taget="_blank" href="/search/ACM_POJ/1.htm">ACM_POJ</a> <div>POJ-1273-Drainage Ditches http://poj.org/problem?id=1273 基本的最大流,按LRJ的白书写的 #include<iostream> #include<cstring> #include<queue> using namespace std; #define INF 0x7fffffff int ma</div> </li> <li><a href="/article/1138.htm" title="工作流Activiti5表的命名及含义" target="_blank">工作流Activiti5表的命名及含义</a> <span class="text-muted">atongyeye</span> <a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C%E6%B5%81/1.htm">工作流</a><a class="tag" taget="_blank" href="/search/Activiti/1.htm">Activiti</a> <div>activiti5 - http://activiti.org/designer/update在线插件安装 activiti5一共23张表 Activiti的表都以ACT_开头。 第二部分是表示表的用途的两个字母标识。 用途也和服务的API对应。 ACT_RE_*: 'RE'表示repository。 这个前缀的表包含了流程定义和流程静态资源 (图片,规则,等等)。 A</div> </li> <li><a href="/article/1265.htm" title="android的广播机制和广播的简单使用" target="_blank">android的广播机制和广播的简单使用</a> <span class="text-muted">百合不是茶</span> <a class="tag" taget="_blank" href="/search/android/1.htm">android</a><a class="tag" taget="_blank" href="/search/%E5%B9%BF%E6%92%AD%E6%9C%BA%E5%88%B6/1.htm">广播机制</a><a class="tag" taget="_blank" href="/search/%E5%B9%BF%E6%92%AD%E7%9A%84%E6%B3%A8%E5%86%8C/1.htm">广播的注册</a> <div>      Android广播机制简介 在Android中,有一些操作完成以后,会发送广播,比如说发出一条短信,或打出一个电话,如果某个程序接收了这个广播,就会做相应的处理。这个广播跟我们传统意义中的电台广播有些相似之处。之所以叫做广播,就是因为它只负责“说”而不管你“听不听”,也就是不管你接收方如何处理。另外,广播可以被不只一个应用程序所接收,当然也可能不被任何应</div> </li> <li><a href="/article/1392.htm" title="Spring事务传播行为详解" target="_blank">Spring事务传播行为详解</a> <span class="text-muted">bijian1013</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/%E4%BA%8B%E5%8A%A1%E4%BC%A0%E6%92%AD%E8%A1%8C%E4%B8%BA/1.htm">事务传播行为</a> <div>        在service类前加上@Transactional,声明这个service所有方法需要事务管理。每一个业务方法开始时都会打开一个事务。         Spring默认情况下会对运行期例外(RunTimeException)进行事务回滚。这</div> </li> <li><a href="/article/1519.htm" title="eidtplus operate" target="_blank">eidtplus operate</a> <span class="text-muted">征客丶</span> <a class="tag" taget="_blank" href="/search/eidtplus/1.htm">eidtplus</a> <div>开启列模式: Alt+C 鼠标选择   OR   Alt+鼠标左键拖动 列模式替换或复制内容(多行): 右键-->格式-->填充所选内容-->选择相应操作 OR Ctrl+Shift+V(复制多行数据,必须行数一致) -------------------------------------------------------</div> </li> <li><a href="/article/1646.htm" title="【Kafka一】Kafka入门" target="_blank">【Kafka一】Kafka入门</a> <span class="text-muted">bit1129</span> <a class="tag" taget="_blank" href="/search/kafka/1.htm">kafka</a> <div>这篇文章来自Spark集成Kafka(http://bit1129.iteye.com/blog/2174765),这里把它单独取出来,作为Kafka的入门吧   下载Kafka http://mirror.bit.edu.cn/apache/kafka/0.8.1.1/kafka_2.10-0.8.1.1.tgz 2.10表示Scala的版本,而0.8.1.1表示Kafka</div> </li> <li><a href="/article/1773.htm" title="Spring 事务实现机制" target="_blank">Spring 事务实现机制</a> <span class="text-muted">BlueSkator</span> <a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/%E4%BB%A3%E7%90%86/1.htm">代理</a><a class="tag" taget="_blank" href="/search/%E4%BA%8B%E5%8A%A1/1.htm">事务</a> <div>Spring是以代理的方式实现对事务的管理。我们在Action中所使用的Service对象,其实是代理对象的实例,并不是我们所写的Service对象实例。既然是两个不同的对象,那为什么我们在Action中可以象使用Service对象一样的使用代理对象呢?为了说明问题,假设有个Service类叫AService,它的Spring事务代理类为AProxyService,AService实现了一个接口 </div> </li> <li><a href="/article/1900.htm" title="bootstrap源码学习与示例:bootstrap-dropdown(转帖)" target="_blank">bootstrap源码学习与示例:bootstrap-dropdown(转帖)</a> <span class="text-muted">BreakingBad</span> <a class="tag" taget="_blank" href="/search/bootstrap/1.htm">bootstrap</a><a class="tag" taget="_blank" href="/search/dropdown/1.htm">dropdown</a> <div>bootstrap-dropdown组件是个烂东西,我读后的整体感觉。 一个下拉开菜单的设计: <ul class="nav pull-right"> <li id="fat-menu" class="dropdown"> </div> </li> <li><a href="/article/2027.htm" title="读《研磨设计模式》-代码笔记-中介者模式-Mediator" target="_blank">读《研磨设计模式》-代码笔记-中介者模式-Mediator</a> <span class="text-muted">bylijinnan</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F/1.htm">设计模式</a> <div>声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移步 原作者的博客http://chjavach.iteye.com/ /* * 中介者模式(Mediator):用一个中介对象来封装一系列的对象交互。 * 中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。 * * 在我看来,Mediator模式是把多个对象(</div> </li> <li><a href="/article/2154.htm" title="常用代码记录" target="_blank">常用代码记录</a> <span class="text-muted">chenjunt3</span> <a class="tag" taget="_blank" href="/search/UI/1.htm">UI</a><a class="tag" taget="_blank" href="/search/Excel/1.htm">Excel</a><a class="tag" taget="_blank" href="/search/J%23/1.htm">J#</a> <div>  1、单据设置某行或某字段不能修改 //i是行号,"cash"是字段名称 getBillCardPanelWrapper().getBillCardPanel().getBillModel().setCellEditable(i, "cash", false); //取得单据表体所有项用以上语句做循环就能设置整行了 getBillC</div> </li> <li><a href="/article/2281.htm" title="搜索引擎与工作流引擎" target="_blank">搜索引擎与工作流引擎</a> <span class="text-muted">comsci</span> <a class="tag" taget="_blank" href="/search/%E7%AE%97%E6%B3%95/1.htm">算法</a><a class="tag" taget="_blank" href="/search/%E5%B7%A5%E4%BD%9C/1.htm">工作</a><a class="tag" taget="_blank" href="/search/%E6%90%9C%E7%B4%A2%E5%BC%95%E6%93%8E/1.htm">搜索引擎</a><a class="tag" taget="_blank" href="/search/%E7%BD%91%E7%BB%9C%E5%BA%94%E7%94%A8/1.htm">网络应用</a> <div>      最近在公司做和搜索有关的工作,(只是简单的应用开源工具集成到自己的产品中)工作流系统的进一步设计暂时放在一边了,偶然看到谷歌的研究员吴军写的数学之美系列中的搜索引擎与图论这篇文章中的介绍,我发现这样一个关系(仅仅是猜想)   -----搜索引擎和流程引擎的基础--都是图论,至少像在我在JWFD中引擎算法中用到的是自定义的广度优先</div> </li> <li><a href="/article/2408.htm" title="oracle Health Monitor" target="_blank">oracle Health Monitor</a> <span class="text-muted">daizj</span> <a class="tag" taget="_blank" href="/search/oracle/1.htm">oracle</a><a class="tag" taget="_blank" href="/search/Health+Monitor/1.htm">Health Monitor</a> <div>About Health Monitor Beginning with Release 11g, Oracle Database includes a framework called Health Monitor for running diagnostic checks on the database. About Health Monitor Checks Health M</div> </li> <li><a href="/article/2535.htm" title="JSON字符串转换为对象" target="_blank">JSON字符串转换为对象</a> <span class="text-muted">dieslrae</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/json/1.htm">json</a> <div>    作为前言,首先是要吐槽一下公司的脑残编译部署方式,web和core分开部署本来没什么问题,但是这丫居然不把json的包作为基础包而作为web的包,导致了core端不能使用,而且我们的core是可以当web来用的(不要在意这些细节),所以在core中处理json串就是个问题.没办法,跟编译那帮人也扯不清楚,只有自己写json的解析了.   </div> </li> <li><a href="/article/2662.htm" title="C语言学习八结构体,综合应用,学生管理系统" target="_blank">C语言学习八结构体,综合应用,学生管理系统</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/C%E8%AF%AD%E8%A8%80/1.htm">C语言</a> <div>实现功能的代码: # include <stdio.h> # include <malloc.h> struct Student { int age; float score; char name[100]; }; int main(void) { int len; struct Student * pArr; int i,</div> </li> <li><a href="/article/2789.htm" title="vagrant学习笔记" target="_blank">vagrant学习笔记</a> <span class="text-muted">dcj3sjt126com</span> <a class="tag" taget="_blank" href="/search/vagrant/1.htm">vagrant</a> <div>想了解多主机是如何定义和使用的, 所以又学习了一遍vagrant   1. vagrant virtualbox 下载安装 https://www.vagrantup.com/downloads.html https://www.virtualbox.org/wiki/Downloads   查看安装在命令行输入vagrant     2.</div> </li> <li><a href="/article/2916.htm" title="14.性能优化-优化-软件配置优化" target="_blank">14.性能优化-优化-软件配置优化</a> <span class="text-muted">frank1234</span> <a class="tag" taget="_blank" href="/search/%E8%BD%AF%E4%BB%B6%E9%85%8D%E7%BD%AE/1.htm">软件配置</a><a class="tag" taget="_blank" href="/search/%E6%80%A7%E8%83%BD%E4%BC%98%E5%8C%96/1.htm">性能优化</a> <div>1.Tomcat线程池 修改tomcat的server.xml文件: <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" maxThreads="1200" m</div> </li> <li><a href="/article/3043.htm" title="一个不错的shell 脚本教程 入门级" target="_blank">一个不错的shell 脚本教程 入门级</a> <span class="text-muted">HarborChung</span> <a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/shell/1.htm">shell</a> <div>一个不错的shell 脚本教程 入门级 建立一个脚本   Linux中有好多中不同的shell,但是通常我们使用bash (bourne again shell) 进行shell编程,因为bash是免费的并且很容易使用。所以在本文中笔者所提供的脚本都是使用bash(但是在大多数情况下,这些脚本同样可以在 bash的大姐,bourne shell中运行)。   如同其他语言一样</div> </li> <li><a href="/article/3170.htm" title="Spring4新特性——核心容器的其他改进" target="_blank">Spring4新特性——核心容器的其他改进</a> <span class="text-muted">jinnianshilongnian</span> <a class="tag" taget="_blank" href="/search/spring/1.htm">spring</a><a class="tag" taget="_blank" href="/search/%E5%8A%A8%E6%80%81%E4%BB%A3%E7%90%86/1.htm">动态代理</a><a class="tag" taget="_blank" href="/search/spring4/1.htm">spring4</a><a class="tag" taget="_blank" href="/search/%E4%BE%9D%E8%B5%96%E6%B3%A8%E5%85%A5/1.htm">依赖注入</a> <div>Spring4新特性——泛型限定式依赖注入 Spring4新特性——核心容器的其他改进 Spring4新特性——Web开发的增强 Spring4新特性——集成Bean Validation 1.1(JSR-349)到SpringMVC  Spring4新特性——Groovy Bean定义DSL Spring4新特性——更好的Java泛型操作API  Spring4新</div> </li> <li><a href="/article/3297.htm" title="Linux设置tomcat开机启动" target="_blank">Linux设置tomcat开机启动</a> <span class="text-muted">liuxingguome</span> <a class="tag" taget="_blank" href="/search/tomcat/1.htm">tomcat</a><a class="tag" taget="_blank" href="/search/linux/1.htm">linux</a><a class="tag" taget="_blank" href="/search/%E5%BC%80%E6%9C%BA%E8%87%AA%E5%90%AF%E5%8A%A8/1.htm">开机自启动</a> <div>执行命令sudo gedit /etc/init.d/tomcat6 然后把以下英文部分复制过去。(注意第一句#!/bin/sh如果不写,就不是一个shell文件。然后将对应的jdk和tomcat换成你自己的目录就行了。 #!/bin/bash # # /etc/rc.d/init.d/tomcat # init script for tomcat precesses</div> </li> <li><a href="/article/3424.htm" title="第13章 Ajax进阶(下)" target="_blank">第13章 Ajax进阶(下)</a> <span class="text-muted">onestopweb</span> <a class="tag" taget="_blank" href="/search/Ajax/1.htm">Ajax</a> <div>index.html <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/</div> </li> <li><a href="/article/3551.htm" title="Troubleshooting Crystal Reports off BW" target="_blank">Troubleshooting Crystal Reports off BW</a> <span class="text-muted">blueoxygen</span> <a class="tag" taget="_blank" href="/search/BO/1.htm">BO</a> <div>http://wiki.sdn.sap.com/wiki/display/BOBJ/Troubleshooting+Crystal+Reports+off+BW#TroubleshootingCrystalReportsoffBW-TracingBOE   Quite useful, especially this part: SAP BW connectivity For t</div> </li> <li><a href="/article/3678.htm" title="Java开发熟手该当心的11个错误" target="_blank">Java开发熟手该当心的11个错误</a> <span class="text-muted">tomcat_oracle</span> <a class="tag" taget="_blank" href="/search/java/1.htm">java</a><a class="tag" taget="_blank" href="/search/jvm/1.htm">jvm</a><a class="tag" taget="_blank" href="/search/%E5%A4%9A%E7%BA%BF%E7%A8%8B/1.htm">多线程</a><a class="tag" taget="_blank" href="/search/%E5%8D%95%E5%85%83%E6%B5%8B%E8%AF%95/1.htm">单元测试</a> <div>#1、不在属性文件或XML文件中外化配置属性。比如,没有把批处理使用的线程数设置成可在属性文件中配置。你的批处理程序无论在DEV环境中,还是UAT(用户验收 测试)环境中,都可以顺畅无阻地运行,但是一旦部署在PROD 上,把它作为多线程程序处理更大的数据集时,就会抛出IOException,原因可能是JDBC驱动版本不同,也可能是#2中讨论的问题。如果线程数目 可以在属性文件中配置,那么使它成为</div> </li> <li><a href="/article/3805.htm" title="正则表达式大全" target="_blank">正则表达式大全</a> <span class="text-muted">yang852220741</span> <a class="tag" taget="_blank" href="/search/html/1.htm">html</a><a class="tag" taget="_blank" href="/search/%E7%BC%96%E7%A8%8B/1.htm">编程</a><a class="tag" taget="_blank" href="/search/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F/1.htm">正则表达式</a> <div>今天向大家分享正则表达式大全,它可以大提高你的工作效率 正则表达式也可以被当作是一门语言,当你学习一门新的编程语言的时候,他们是一个小的子语言。初看时觉得它没有任何的意义,但是很多时候,你不得不阅读一些教程,或文章来理解这些简单的描述模式。 一、校验数字的表达式 数字:^[0-9]*$ n位的数字:^\d{n}$ 至少n位的数字:^\d{n,}$ m-n位的数字:^\d{m,n}$</div> </li> </ul> </div> </div> </div> <div> <div class="container"> <div class="indexes"> <strong>按字母分类:</strong> <a href="/tags/A/1.htm" target="_blank">A</a><a href="/tags/B/1.htm" target="_blank">B</a><a href="/tags/C/1.htm" target="_blank">C</a><a href="/tags/D/1.htm" target="_blank">D</a><a href="/tags/E/1.htm" target="_blank">E</a><a href="/tags/F/1.htm" target="_blank">F</a><a href="/tags/G/1.htm" target="_blank">G</a><a href="/tags/H/1.htm" target="_blank">H</a><a href="/tags/I/1.htm" target="_blank">I</a><a href="/tags/J/1.htm" target="_blank">J</a><a href="/tags/K/1.htm" target="_blank">K</a><a href="/tags/L/1.htm" target="_blank">L</a><a href="/tags/M/1.htm" target="_blank">M</a><a href="/tags/N/1.htm" target="_blank">N</a><a href="/tags/O/1.htm" target="_blank">O</a><a href="/tags/P/1.htm" target="_blank">P</a><a href="/tags/Q/1.htm" target="_blank">Q</a><a href="/tags/R/1.htm" target="_blank">R</a><a href="/tags/S/1.htm" target="_blank">S</a><a href="/tags/T/1.htm" target="_blank">T</a><a href="/tags/U/1.htm" target="_blank">U</a><a href="/tags/V/1.htm" target="_blank">V</a><a href="/tags/W/1.htm" target="_blank">W</a><a href="/tags/X/1.htm" target="_blank">X</a><a href="/tags/Y/1.htm" target="_blank">Y</a><a href="/tags/Z/1.htm" target="_blank">Z</a><a href="/tags/0/1.htm" target="_blank">其他</a> </div> </div> </div> <footer id="footer" class="mb30 mt30"> <div class="container"> <div class="footBglm"> <a target="_blank" href="/">首页</a> - <a target="_blank" href="/custom/about.htm">关于我们</a> - <a target="_blank" href="/search/Java/1.htm">站内搜索</a> - <a target="_blank" href="/sitemap.txt">Sitemap</a> - <a target="_blank" href="/custom/delete.htm">侵权投诉</a> </div> <div class="copyright">版权所有 IT知识库 CopyRight © 2000-2050 E-COM-NET.COM , All Rights Reserved. <!-- <a href="https://beian.miit.gov.cn/" rel="nofollow" target="_blank">京ICP备09083238号</a><br>--> </div> </div> </footer> <!-- 代码高亮 --> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shCore.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shLegacy.js"></script> <script type="text/javascript" src="/static/syntaxhighlighter/scripts/shAutoloader.js"></script> <link type="text/css" rel="stylesheet" href="/static/syntaxhighlighter/styles/shCoreDefault.css"/> <script type="text/javascript" src="/static/syntaxhighlighter/src/my_start_1.js"></script> </body> </html>