zoukankan      html  css  js  c++  java
  • oracle学习总结4

    1:三范式
    a:一张表里必须要有主键,列不可分。
    b:如果一张表里面,两个字段作为主键,那么其他字段不能够部分依赖这两个字段。


    2:pl sql:Procedural language(过程语言)

    写一个输出hello world的小程序。
    begin
    dbms_output.put_line('hello world!');
    end;
    /

    set serveroutput on; --设置服务器端输出

    写一个声明变量,然后赋值,最后输出的小程序。

    declare
    v_name varchar(20);
    begin
    v_name := 'jack';
    dbms_output.put_line(v_name);
    end;
    /

    exception 捕捉异常,如果执行程序过程中发生错误,会把异常跑到
    exception代码块,others then就是上面的异常没有捕捉到时,会捕捉
    所有的异常。

    declare
    v_num number;
    begin
    v_num := 0;
    dbms_output.put_line(2/v_num);
    exception
    when others then
    dbms_output.put_line('error');
    end;
    /

    3:显示当前用户
    show user;


    4:变量的声明
    declare
    id number(4) :=1001;
    name varchar2(30) :='jack';
    begin
    dbms_output.put_line(name);
    end;
    /

    声明的变量用来放表里面的数据,但是表结构可能会产生变化,为了
    在表结构产生变化时,声明的变量的类型也会产生变化,可以使用%type

    declare
    id number(4) :=1001;
    name emp.empno%type :='jack';
    begin
    dbms_output.put_line(name);
    end;
    /


    5:声明数据类型table 代表数组类型
    声明一个数据类型type_table_name
    declare
    type type_table_name is table of emp.empno%type index by binary_integer;
    v_empnos type_table_name;
    begin
    v_empnos(0):=1001;
    v_empnos(1):=1002;
    v_empnos(-1):=1003;
    dbms_output.put_line(v_empnos(-1));
    end;
    /

    6:声明数据类型record ,相当于java中的类

    declare
    type type_record_dept is record
    (
    deptno dept.deptno%type,
    dname dept.dname%type,
    loc dept.loc%type
    );
    v_dept type_record_dept;
    begin
    v_dept.deptno :=1001;
    v_dept.dname :='sales';
    v_dept.loc :='shanghai';
    dbms_output.put_line(v_dept.loc);
    end;
    /

    可以使用%rowtype来声明record,这样,即使dept这张表的数据结构发生变化,变量结构
    也会随之发生变化。
    declare
    v_dept dept%rowtype;
    begin
    v_dept.deptno :=1001;
    v_dept.dname :='sales';
    v_dept.loc :='shanghai';
    dbms_output.put_line(v_dept.loc);
    end;
    /


    7:pl中的select语句

    select empno into v_empno from emp where empno='1001'; --pl中的select语句有且仅能查到一条数据

    declare
    v_empno emp.empno%type;
    v_ename emp.ename%type;
    begin
    select empno,ename into v_empno,v_ename from emp where empno='1001';
    dbms_output.put_line(v_empno || ' ' || v_ename);
    end;
    /


    使用%rowtype放一条记录
    declare
    v_emps emp%rowtype;
    begin
    select * into v_emps from emp where empno=1001;
    dbms_output.put_line(v_emps.empno || ' '||v_emps.ename ||' '||v_emps.sal);
    end;
    /


    8:pl sql中的dml语句

    向表中插入数据:
    declare
    v_empno emp.empno%type :=1006;
    v_ename emp.ename%type :='markson';
    begin
    insert into emp (empno,ename) values(v_empno,v_ename);
    commit;
    end;
    /

    更新表中的数据
    declare
    v_deptno emp.deptno%type;
    begin
    v_deptno := 10;
    update emp set sal=sal/2 where deptno=v_deptno;
    dbms_output.put_line('影响了'||sql%rowcount||'条记录!');
    commit;
    end;
    /

    sql%rowcount :sql是一个关键字,rowcount表示执行上一条语句产生多少影响。


    9:pl sql中ddl语言
    在执行语句前面加上 execute immediate,然后create语句放在单引号内,如果单引号内有单引号,
    那么使用双引号来代替单引号。
    begin
    execute immediate 'create table T(id number(4), name varchar(20) not null)';
    end;

    10:pl sql中的分支结构if elsif else

    declare
    v_sal emp.sal%type;
    begin
    select sal into v_sal from emp where empno=1001;
    if(v_sal<=1000) then
    dbms_output.put_line('low');
    elsif(v_sal<=2000) then
    dbms_output.put_line('middle');
    else
    dbms_output.put_line('high');
    end if;
    end;
    /


    11:pl sql中的循环结构
    pl sql中的循环必须以loop开始,以end loop结束
    相当于java中的do... while 结构
    先循环再判断:
    declare
    i binary_integer :=1;
    begin
    loop
    dbms_output.put_line(i);
    i :=i+1;
    exit when(i>=11);
    end loop;
    end;
    /

    相当于java中的while结构,先判断,在循环:
    declare
    i binary_integer :=1;
    begin
    while(i<11) loop
    dbms_output.put_line(i);
    i :=i+1;
    end loop;
    end;
    /

    for循环:相当于java中的forhance循环,可以正序,也可以倒序:

    declare
    i binary_integer :=1;
    begin
    for k in 1..10 loop
    dbms_output.put_line(k);
    end loop;

    for k in reverse 1..10 loop
    dbms_output.put_line(k);
    end loop;
    end;
    /


    cursor:游标
    recursion:递归
    drigger:触发器

  • 相关阅读:
    宏定义中的#
    HDU1506 Largest Rectangle in a Histogram 动态规划
    HDU1864 最大报销额 DP
    POJ2771 Guardian of Decency 最大独立子集
    POJ1698 Alice's Chance 最大流
    HDU1003 Max Sum 动态规划
    eval格式化事件类型的字符串
    C#虚方法virtual详解
    c# 利用反射获得某个类或者对象的所有属性
    windows服务的通常写法
  • 原文地址:https://www.cnblogs.com/warrior4236/p/5398384.html
Copyright © 2011-2022 走看看