导航

oracle faq自学小节

Posted on 2004-10-22 16:33  万建明  阅读(342)  评论(0)    收藏  举报

在sql/plus中别忘了最后输入commit命令。

1.列出oracle数据库名的SQL命令
  select name from v$database;
  show parameter db_name
  需要select any table权限。
2.打印表的结构。
 describe tb_name
 desc tb_name
3.显示用户名.
 show user
4. 连接数据库
 conn 用户名/密码@dbname
5. 开启sql plus的界面输出。
  set serveroutput on
  这样触发器中的dbms_output.put_line就会被开启。
6。在sql plus中创建一个触发器的简单例子。
  a。创建一个表;
 create table customer(customer_id number(10) not null,surname varchar2(30) not null,first_name varchar2(20),sales_region char(2), ytd_sales number(10,2), total_sales number(14,2));
  b. describe customer查看customer的结构。
  c.创建trigger.
    create or replace trigger trigger_name
    before insert or update
    on customer
    for each row
    declare
 new_sales_amt number;
    begin
 new_sales_amt := :new.total_sales-nvl(:old.total_sales,0);
 dbms_output.put_line('New sales amount: '||new_sales_amt);
   end;
   /
   e. set serveroutput on
   f.执行插入和更新语句可以看到结果了.
7.创建角色.
 create role role_name;
8.将角色赋给用户.
 grant role_name to user_name;
9.查看一个数据库中某个用户创建的表的数目。
   SELECT TABLE_NAME FROM ALL_TABLES WHERE OWNER='USER_NAME';
10.查询sql plus的参数设置。
  show all
11.创建过程。
  create or replace procedure proc_name (para1 in type,para2 out type ....)
12.游标的使用。
  见oracle8i初学者指南142页。
13.游标的系统变量。
  %found,%notfound,
  %isopen.检查游标是否打开.
14.系统属性。
 在数据库中有一个v$option表,记录了各个参数的值。
15. rownum 不可以使用> 和=符号。
Oracle小知识:为什么用条件 where rownum > 1 取结果集时肯定为空?

SELECT * FROM employees WHERE ROWNUM > 1;

select 执行过程中:
取第一行时,由于是整个结果集中的第一行,则rownum = 1, where 条件为 false,不取出。
取第二行时,由于仍是整个结果集中的第一行,则rownum = 1, where 条件为 false,不取出。
之后,所有的行都因为这个原因而无法取出。

故: 返回的结果集为空。

16.更改表的列的属性.
 alter table table_name modify(col_name data_type,...);
17.给普通用户分配创建存储过程的权限
  grant create procedure to user_name;
  注意:首先登入的用户要具有授权权限。可以在dba中以system用户登陆,给普通用户授权。

18.所有的表明存放在什么地方。
  在sys.obj$存放了所有的表明,并与用户号对应,其中owner#表示用户的号码.与sys.user$表的user#项对应.
  用户名存放在sys.user$表中.
19.更改用户密码
  sqlplus /nolog
  conn / as sysdba
  alter user user_name identified by password 密码是数字需要加上双引号.
20.使用edit(简写ed)命令.
   在sqlplus命令行中直接输入edit,系统会自动调入define_editor变量所定义的编辑器,并输入内存中的最后一条命令,编辑,保存关闭后自动导入系统内存.
21.系统的属性参数
   set heading off 关闭输出时的表头.
   set pagesize 4 设置页面行的大小,由于表头本身需要三行,(一个空行,一个标题行,一个短横"-"的分隔行")所以当x小于4时,是没有表头的.
   set trimspool on 告诉SQL*Plus去掉输出的尾部空格
   set feedback off 告诉SQL*Plus不显示满足了查询条件而被检索到的行//即不显示返回的搜索到多少行的话语.
   set echo off 告诉SQL*Plus在执行语句时不要回显语句行.
22.自增:
   create sequence seq_name
   increment by 1
   start with 1
   maxvalue 999999;

   Insert into table_name(Id,...)values(seq_name.nextval,...) 


create sequence idiom_seq increment by 1 start with 1 maxvalue 999999;

23.用触发器,自增序列实现,自增id;
   1.首先创建了table:
   create table idiom(id number(10) default(0) not null,word varchar2(100),meaning varchar2(1000));
   2.创建序列:
   create sequence idiom_seq
   increment by 1
   start with 1
   maxvalue 999999;
  3.创建trigger如下
 A.create trigger idiom_trg after insert on idiom /* for each row 此句不能要*/
   begin
   update idiom set id=idiom_seq.nextval where id=0;
   end;
   /
 B.create trigger idiom_trg before insert on idiom for each row
   begin
     select idiom_seq.nextval into :new.id from dual;
   end;
   /
 

24.创建自定义数据类型。
   DECLARE
    type t_studentRecord is record(
      firstName VARCHAR2(10),
      LastName VARCHAR2(10),
      CurrentCredits NUMBER(3)
    );
25.创建过程,函数时参数类型声明的方法
   参数的类型有两种方法。
   a. var type;例如: name VARCHAR2; 不可写为:name VARCHAR2(10),关于name的实际长度是由实参传入时确定的.
   b. var column_name%type;此时的类型为column_name的类型,所以在调用时,实参的类型必须与之相同,否则错误.
26.注释部分要另起一行写.
 /
 --注释.
27.序列的一个用法。
 例如:有一个表tt为:
 id,name
 0,tt
 0,tt
 0,tt
 0,tt
 0,tt
 使用序列后 update tt set id=seq.nextval where id=0;将得到
 1,tt
 2,tt
 3,tt
 4,tt
 5,tt
28。对表空间的权限。
    必须对表空间有某种权限才可以在该空间中创建表。
29.普通用户登入dba studio所需的权限.
    需要select any table的权限.
30.创建同义词.
   create synonym "username"."synonym_name" for "user_name"."table_name";
31.针对某个表赋予某用户权限.
   grant select on table_name to user_name (with grant option);
32.针对某个表撤销某种权限.
   revoke 权限表 on table_name from user_name;
33.一个文件中需要写多个trg语句时,各个语句用”/“分开。但是”/“要顶格写;