Oracle基础

1.PL/SQL Developer登录时,connect as 选项有什么作用。
-----解决方案--------------------------------------------------------
    normal-正常连接,只可以操作该用户的数据库对象。
    sysdba-可以查看系统表,即具有sysdba角色中的权限,如果连接的用户不具有该权限,会通过OS进行认证。
    opera-具有opera角色的权限。
------解决方案--------------------------------------------------------
    如果是开发就选normal,
    sysdba和sysoper有特殊权限
    如果你的账号登陆出现ora-01031,就说明你没权限啦
    一般是dba用的
    可一般的dba又不用pl/sql 
2.oracle创建用户:
    一,PL/SQL图形化工具创建
        1).用sys用户登陆(密码sa)
        2).找到Users,new一个
        3).General:用户名和密码自定义,其他默认
        4).Object privileges默认
        5).Role privileges的Role选择dba其他2项勾选Grantable是可以对其他用户的数据库进行操作
        6).System privileges 的 Grantable勾选同上
        7).其他默认,最后Apply即创建成功
        8).创建后用用户登陆,执行show user select * from v$session;产看当前用户是否为登录用户
    二,使用语句建用户参考(oracle创建用户的语法.txt)
        建用户名和密码:create user USERNAME identified by PASSWORD;
        授权:grant connect,resource,dba to USERNAME;
3、常用sql语句
    连接数据库用户:conn USERNAME/PASSWORD;
    查询当前用户的所有表:select tname from tab;
                     select table_name from user_tables;
    查询数据库所有用户:select * from all_users;
    查询当前用户的名称:show user select * from v$session;
    删除用户:drop user 用户名 cascade;
    用oracle查询某个用户下的所有视图语句:select view_name from dba_views where owner = '用户名';
    查询用户表个数:select count(*) from user_tables;
4、序列 Sequence
    create sequence seq_ning;;
    drop sequence seq_ning;    
    insert into student_ning6 values(seq_ning.nextval, 'peter');
    
    create sequence seq_ning start with 1000
    increment by 10;
    select seq_ning.nextval from dual;
    select seq_ning.currval from dual;
    
    create sequence CLAIMS.REPORT_ARCHIVE_SEQ
    minvalue 1
    maxvalue 999999999999999999999999999
    start with 81
    increment by 1
    cache 20;
5.事物的提交/回滚
    Oracle中设置了一个自动提交的开关,如果把它设置为ON,那么所有的改变数据库中数据的语句都会立即生效,影响数据库中的数据,缺省值为OFF。格式:
        SET AUTOCOMMIT [ON|OFF];
    保存点的设置和使用格式:
        SAVEPOINT <保存点名称>ROLLBACK TO <保存点名称>;
6.oracle对表结构的操作:
    修改类型:alter table 表名 modify 列名 类型;
    添加非空约束:alter table 表名 modify 列名 not null;    
    添加默认值:alter table 表名 modify 列名 default 默认值;
    修改列名:    alter table 表名 rename column 原表名 to 新表名;
    添加一列:alter table 表名 add 列名 类型;        
    添加主键约束:alter table 表名 add constraint zh(关联名,自定义,一般与列名相同) primary key (列名);
    删除主键约束:alter table 表名 drop constraint zh(关联名,自定义,一般与列名相同) cascade;
    添加外键关联:alter table 本表名/子表名 add constraint zh(关联名,自定义,一般与关联2个表名) foreign key (列名)  references emp (关联表名/父表名);
    删除外键关联:alter table 表名 drop constraint zh(关联名);
7.排序:
    select * from 表名 order by 列名 desc(降序) 
    select * from 表名 order by 列名 asc(升序)
8.空值处理    
    select nvl(列名,0) from 表名;--为空的当0处理
9.批量privilege至role_map_privilege:
    DECLARE
      role_name_ VARCHAR2(20);
      CURSOR get_rec IS
         SELECT privilege_id
         FROM PRIVILEGE
         WHERE privilege_id NOT IN (SELECT privilege_id FROM ROLE_MAP_PRIVILEGE
         WHERE role_name=role_name_);
    BEGIN
      role_name_ := 'DEVELOP';
      FOR get_rec_ IN get_rec LOOP
         INSERT INTO ROLE_MAP_PRIVILEGE
            VALUES(role_name_,get_rec_.privilege_id);
      END LOOP;
    END;

 

posted on 2013-05-23 11:20  独臂刀客  阅读(261)  评论(0)    收藏  举报

导航