oracle PL/SQL编程笔记

1.第一范式:实体的所有属性都是不可分割的,称该表满足1NF;
  第二范式:允许用多个属性作为主码
  第三范式:不存在传递函数依赖关系,即存在一个属性,其函数依赖的属性既不是主码也不是候选码
  Boyce-Codd范式:在表中,可以将其中一列或多列指定为主码,也可以指定其他某些列为候选码,表中也存在着其他属性。不考虑候选码,  唯一的函数依赖关系存在于表中每个属性和整个主码之间
2.SQL语言:DDL(Create drop alter crate view drop view create index drop index)、SELECT、DML、TC、DCL
3.select sysdate from dual
4.一个表中最多只能有一个Long列,Long列不能索引,不能出现在完整性约束中
5.ROWID数据类型是Orcale数据表中一个伪列,他是数据表中每行数据内在的唯一的标识。
6.describe <table_name>;drop table <table_name>;
7.delete from <table_name>;全部删除
8.order by必须是最后一条子句
9.日期默认格式是“DD-MON-YY”,to_char(date,'YYYY-MM-DD')
10.NVL(EXPR1,EXPR2):expr1和expr2必须为同一数据类型,选择expr1和expr2中不为null的那个值;
11.NVL2(EXPR1,EXPR2,EXPR3):类似于EXPR1 is null?EXPR2:EXPR3
12.COLALESCE(EXPR1,...[EXPRN]);选择第一个非空值
13.=,>,<,>=,<=,<>,!=,IN,ONT IN,BETWEEN AND ,NOT BETWEEN AND ,LIKE ,NOT LIKE,IS NULL,IS NOT NULL,AND ,OR ,NOT
14.逻辑运算符AND,OR,NOT中,not优先级最高,and其次,or最低,并且他们的优先级低于任何一种比较操作符
15.count(column):列不为null的行数
16.group by 将表的行分为若干组,组中的行并不重复,然后通过列函数分别统计每个组,这样每个组都有一个统计值
   select mdzt,count(*) from md_mdjcxx group by mdzt;
17.group by   having
18.select department_id ,AVG(wage) from teachers where wage>3000 group by department_id having AVG(wage)>=2000 order by 2;
19.IN:匹配于子查询结果的任意一个值
   ANY:只要符合子查询结果的任意一个值
   ALL:必须要符合子查询结果的所有值结果
20.union:用于得到两个查询结果集的并集,并集中自动去掉重复行
   union all:用于得到两个查询结果集的并集,并集中保留重复行
   intersect:用于得到两个查询结果结果集的交集,交集以结果的第一列进行排序;
   minus:用于得到两个查询结果集的差集,差集以结果的第一列进行排序
   使用并、交、差三种运算符进行集合操作时,要求参与集合操作的查询结果集列的数据类型相匹配
21.事务处理语句:commit(提交)、rollback(撤销)、savepoint(保留点)
22.TRUNCATE TABLE <table_name>删除teachers表的所有数据
23.savepoint savepoint_name 可撤销部分事务
24.set tansaction read only:设置当前事务为只读事务,不允许执行DML语句,只允许执行查询语句
25.ADD_MONTHS(x,n):返回日期x加上n个月所对应的日期,n可为负值
26.LAST_DAY(x):返回日期x所在月份的最后一天的日期
27.MONTHS_BETWEEN(x,y):返回日期x和日期y两个日期之间相差的月数
28.create table teacher2 as select * from teacher
29.select * from user_sys_privs
30.删除表的外关键字约束:drop constraint t1_fk_d1;删除表的某列的notnull约束:alter table student modify name null;禁止约束:alter table student disable constraint sex_ch
31.建立索引:create index wage_idx on teacher(wage);唯一索引:create unique index wage_idx on teacher(wage);
32.建立视图:create view departments_view as select * from departments;
33.select table_name,tablespace_name,temporary from user_tables;
34.修改视图:create or replace view student_view as slect student_id,name,specialty from students where sex='男'
35.PL/SQL编程:
   set serveroutput on
   DECLARE
     Declarations
   BEGIN
     Executable code
   EXCEPTION
     Exceptional handlers
   END;
ps: declare
      v_sname varchar2(10)
    begin
      select name into v_sname from students where student_id=&student_id;
    dbms_output.put_line('学生姓名:'||v_sname);
    exception
      where no_data_found then
      dbms_output.put_line('输入的学号不存在');
    end;
    /
输入student_id的值:10228
36.如果字符串文字中本身就包含单引号,则可用两个连续的单引号进行转义。或者使用其他分隔符([],(),<>):q'[I'm a student.]'
37.case
     when ...then
     when ...then
     else
   end case;
38.为了使PL/SQL代码中定义的变量,能与数据库中的某一列或某一行的数据类型相联系,oracle提供了%type和%rowtype的变量定义方式(甚至可以使某一张表)
   Declare v_student student/%rowtype;
   Begin
     select * into v_student from student
   END;
   /
39.变量初始化
   declare v_id student.student_id%type:=10199(注意:=而不是=)
40.if condition then
     statements1;
   else  statements2
   end if;
41.loop
     statement(s);
     exit [when condition];
   end loop;
42.while condition loop
    statement(s);
   end loop;
43.for loop_index in [REVERSE] lowest_number .. highest_number loop
     statement(s);
   end loop;REVERSE 表示循环控制变量从上限向下限递减(减1)计数
44.异常:Exception when zero_divide then dbms_output.put_line('除数为0'); end;/
45.输入字符串接收应该为
   v_specialty :='&specialty';
46.抛出自定义异常:raise exception_name;
47.声明游标:cursor cursor_name is select_statement;
declare cursor students_cur is select name,dob from students where specialty='计算机';
48.打开游标:open students_cur;
49.读取游标:fetch students_cur into v_sname,v_dob;
50.关闭游标:close cursor_name;
51.select object_name ,created,status from user_objects where object_name='tatol';通过视图user_objects查看函数信息
52.select text from user_source where name='tatol';
53.函数中的out参数必须预先定义:variable v_sname varchar2(10);
   函数中返回的参数也得预先定义:variable grade number; execute :grade:=show_grade(101101,10201,:v_sname,:v_cname);
54.输出返回的参数 print :v_sname :v_cname
55.函数输入参数形式为:
   variable v_id number
   variable v_name varchar2(10)
   execute :v_id:=222
   execute :v_name:='航空机械'
其实最好的方式是在调用函数的时候一起赋值,就不用一个一个execute了
56.建立触发器:
   create or replace trigger chage_teacher
     before insert or update or delete on teachers
   begin
     if(tochar(sysdate,'HH24')not between '8' and '17') or (to_char(sysdate,'dy','nls date_langudage=american')in ('sat','sun'))
     then
     raise_application_error(-20000,'在非工作时间不能改变教师信息');
     end if;
   end chage_teacher;
57.禁用触发器执行:alter trigger chage_teacher disable;
   启用:alter trigger chage_teacher enable;
58.审计:
    create or replace trigger s_g_change
     after update of score on students_grade
     for each row
     begin
      insert into students_grade_change
       values(:old.student_id,:old.course_id,:old.score,:new.score.sysdate);
     end s_g_change;
59.常用命令:
   connect sys/password@localhost as sysdba;
   disc
   password scott
   /*缓冲区*/
   list
   append
   change
   del
   input
   N
   edit
   run或/
   clear
   /*文件*/
   save(保存缓冲区内容到文件)
   get(获取)
   start或者@(运行SQL脚本文件)
   /*交互式命令*/
   &:使用替换变量,即需要运行时输入的变量,且注意字符串数据必须‘&varibale_name’
   &&:只需给替换变量赋值一次,在当前环境中一直使用
   variable:变量 variable variable_name type
   print
   prompt(输出提示信息)
   pause(暂停sql脚本文件的执行)
   accept(用于定义替换变量的类型)
方案(schema)是方案对象(schema  object)的一个结合,每一个数据库用户对应一个方案。
select object_name,object_type from user_objects;
selct owner,object_name,object_type from all_objects.
slect owner,object_name,object_type from sys.dba_objects;
v$datafile视图包含数据库数据文件的信息
v$fixed_table视图包含性能表和数据库视图的信息
SGA(系统全局区):oracle数据库存放系统信息的一块内存区域
恢复管理器:RMAN
iSQL*PLUS URL:http://localhost:5560/isqlplus
Enterprise Manager 10g Database Control URL:http://localhost:5500/em



数据结构与java:
1.在开始一个大循环的开始前,是不是可以先将其分组得到的效率会更高一点呢?当然这有可能会增加内存的消耗。
2.解决散列表冲突:分离链接法和开放定址法:分离链接法将新插入的元素插入到链表的前端:因为经常发生这样的事实:新近插入的元素最

有可能不久又被访问
3.归并排序的话要实现先排好序,那效率肯定高了

你可能感兴趣的:(数据结构,oracle,sql,编程,脚本)