`
onlylovexue
  • 浏览: 30201 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
最近访客 更多访客>>
社区版块
存档分类
最新评论

Oracle语法札记

阅读更多
alter tabel abc add c number;  修改表 加个字段
alter table abc drop column c;删除一个字段
ALTER   TABLE   table_name    modify (name varchar2(30)default 'hebei'); 或者用ALTER   TABLE   table_name    modify name varchar2(30)default 'hebei';  修改字段

grant  select  on 表名 to 用户名;  授权操作
revoke  select on 表名  from 用户名    解除

select length('abc') from dual;
select substr('abc',1,3) from dual;  接字符串
select  to_char(sysdate,'yyyy hh24')  from dual;   需加24来标示是 24小时制的

dual是oracle数据库默认提供的一个一行一列的数据库空表,常常用来使用一些oracle函数,如:select   sysdate   from   dual;  存在于sys 数据库中

select 7*9 from dual;

在oracle中 mm 和MM 都代表月份,  但字段中有空值的时候用count无法准确查找这个天数
decode()-->  decode(列名,'可能值',代替值,否则值)
           selecet sum(decode(sex,'男',1,0))  from lin;
-------------------------------------------------------
sqlplus  "sys/密码 as sysdba"   只要是sys登录一定是以sysdba或者是身份的
sql*plus下:connect to sys/密码 as  sysdba
           startup 
           shutdown  immediate 立即断开  而 shutdown  要等所有用户操作后才断开
-------------------------------------------------------
help  index  支持的命令
?或者help  查看命令
set SQLBLANKLINES on   设置可以跨行操作
select * from v$parameter where name=&name  变量的代替

list 用来查看在缓冲区写的命令  简写为l   l3表示查看缓存中第三条语句
c/FRON/FROM   c简写change    --但貌似好像只修改缓存中的最后一条语句
可用 /来重复执行缓冲区里的命令
DEL 4 删除缓冲区第4行 
DEL 2 3  删除2到3行
A  FROM students 用来在缓冲区里追加语句  再用/执行
save c:\oracle.txt  保存缓冲区的语句
@c:\oracle.txt 用来执行一个文件里的语句
get c:\oracle.txt  获取文件里的语句  但没有被执行
执行缓冲区的命令用/方式来执行
edit
describe 来显示描述  简写desc

set LINESIZE 50
ITITLE CENTER "我的标题"  SKIP 1-
LEFT "测试表格"  RIGHT "页"  -
ITITLE OFF

spool c:\oracle.txt  保存结果集到文件中
select * from stud
spool off

edit c:\oracle.txt  可以打开文本编辑器编辑

------------------------------------------
SQLPLUS /  nolog      --不登陆连接
sqlplus / as sysdba   --通过操作系统验证之后
sqlplus  scott/trigger@t:32.1.11.20:1521:orad
@t:网络协议,表示TCP/IP

select name,type,value from v$parameter  where name=&name
&name的可能取值:(db_2k_cache_size,sga_max_size,log_buffer,shared_pool_size,java_pool_size)

selecet name, type,value,description from v$parameter where name like'%processes%'用来查看  进程的情况  value指系统能启动进程的最大值,但等于该值时就不能再创建进该程了

select  *  from v$session  where type='user' 用来获取用户的会话信息
select name,status,enabled ,bytes  from  v$datafile;用来查找数据文件的语句,通过动态性能表

操作视图就是操作基本表
create or replace view  myview  as  selecet *  from lin  where no>30  with  check option(用来限制视图);
| with read only (视图只读)

在视图中  若视图是基于2个以上的基表时  则不允许同时对基表进行插入
desc  user_views  查看试图结构
select text  from  user_views where  view_name='..';

----------------------------------------------------
使用decode()
decode()-->  decode(列名,'可能值',代替值,否则值)
           selecet sum(decode(sex,'男',1,0))  from lin;

             查看用户下所有的表
             SQL>select * from user_tables;

查看名称包含log字符的表
             SQL>select object_name,object_id from user_objects
                 where instr(object_name,'LOG')>0;
学会instr函数的用法

查看序列号,last_number是当前值
             SQL>select * from user_sequences;

查看视图的名称
             SQL>select view_name from user_views;

  查看函数和过程的状态
             SQL>select object_name,status from user_objects where object_type='FUNCTION';
             SQL>select object_name,status from user_objects where object_type='PROCEDURE';

查看控制文件

     select name from v$controlfile;
查看控制文件中记录文档段的信息:
    select type,record_size,records_total,records_used from v$controlfile_record_section  where type='datafile'  --查看数据文件的相关信息


5、查看日志文件     select member from v$logfile;

9、查看数据库的创建日期和归档方式     Select Created, Log_Mode, Log_Mode From V$Database;
-----------------------------------------
用系统管理员,查看当前数据库有几个用户连接:
SQL> select username,sid,serial# from v$session;

如果要停某个连接用

SQL> alter system kill session 'sid,serial#';
如果这命令不行,找它UNIX的进程数

SQL> select pro.spid from v$session ses,v$process pro where ses.sid=21 and ses.paddr=pro.addr;

说明:21是某个连接的sid数

然后用 kill 命令杀此进程号。

b、在sqlplus下得到帮助信息
列出全部SQL命令和SQL*Plus命令
SQL>help
列出某个特定的命令的信息
SQL>help 命令名

使用INPUT命令可以在SQL缓冲区中增加一行或多行
SQL>i
SQL>输入内容

a、表的创建、修改、删除
创建表的命令格式如下:
create table 表名 (列说明列表);

为基表增加新列命令如下:
ALTER TABLE 表名 ADD (列说明列表)
例:为test表增加一列Age,用来存放年龄
     sql>alter table test
         add (Age number(3));

修改基表列定义命令如下:
ALTER TABLE 表名
MODIFY (列名 数据类型)
例:将test表中的Count列宽度加长为10个字符
     sql>alter atble test
         modify (County char(10));


年-月-日 小时:分钟:秒 的格式YYYY-MM-DD HH24:MI:SS

CREATE SEQUENCE 序列号的名称 (最好是表名+序列号标记) INCREMENT BY 1   START   WITH   1
MAXVALUE   99999   CYCLE   NOCACHE;
----------------------------------------------
DELETE FROM表名 WHERE 条件;

注意:删除记录并不能释放ORACLE里被占用的数据块表空间. 它只把那些被删除的数据块标成unused.
如果确实要删除一个大表里的全部记录, 可以用 TRUNCATE 命令, 它可以释放占用的数据块表空间
TRUNCATE TABLE 表名;
此操作不可回退.
4.TRUNCATE (清空表里的所有记录, 保留表的结构)
-----------------------
把表放在或取出数据库的内存区
ALTER TABLE 表名 CACHE;
ALTER TABLE 表名 NOCACHE;

查看放在ORACLE的内存区里的表
             SQL>select table_name,cache from user_tables where instr(cache,'Y')>0;
--------------------------
函数大全:
NVL(EXPR1, EXPR2)函数  
  F EXPR1=NULL
                 RETURN EXPR2
ELSE
                        RETURN EXPR1

DECODE(AA﹐V1﹐R1﹐V2﹐R2....)函数
解释:
IF AA=V1 THEN RETURN R1
IF AA=V2 THEN RETURN R2
..…
ELSE
RETURN NULL

LPAD(char1,n,char2)函数
解释:
字符char1按制定的位数n显示,不足的位数用char2字符串替换左边的空位

INSTR(字段名, ‘字符串’)>0
字段名 LIKE   ‘字符串%’   [‘%字符串%’]

每个表都有一个隐含的字段ROWID, 它标记着记录的唯一性.

ROWID中内容的意义:
OOOOOO:表示该条记录所在数据对象编号,同一个表所有的记录的ROWID前六个都一样
FFF:表示该条记录所在的某一表空间中的数据文件编号。若相同则表示存储在同一个数据文件中
BBBBBB:表示数据文件中数据块的编号,而不是相对于表空间的,所以判断两条记录是不是在同一个块
   要判断FFF和BBBBBB都一样
RRR:该条记录的编号,同一个表中的所有记录该RRR都不一样

利用ROWID可以唯一标示一条记录,查询表的存储结构,快速查找一条记录
-----------------------------------------
CREATE SEQUENCE 序列号的名称 (最好是表名+序列号标记) INCREMENT BY 1   START   WITH   1 MAXVALUE   99999   CYCLE   NOCACHE;

to_char(sysdate,"yyyy-MM-dd"); 其中一定要为date类型的转化
to_date("2008-9-7","yyyy-MM-dd") 其中一定要为char类型的转化

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics