oracle常用操作2

来源:互联网 发布:java保留两位小数输出 编辑:程序博客网 时间:2024/06/15 07:15

declare 
    -- 声明变量时指定初始值。
    v_name varchar2(50) := '孙悟空';
    
begin
    v_name := '白骨精';
end;

select * from emp;
select * from emp where comm is null;

-- expr1 between expr2 and expr3
-- expr1、expr2、expr3 它们都可以变量、常量、表达式、列名
-- 只要expr1 >= expr2 and expr1 <= expr3 就可以了。
select * from emp where nvl(comm , 0)*2+1800 between sal and 4500;

select * from emp where sal between 3000 and 4500;
select * from emp where sal between 4500 and 3000;

select * from emp where 列 in (val1 ,val2 , val3);

-- expr1 in(expr2 , expr3 ,expr4...);
-- expr1、expr2、expr3、expr4 它们都可以变量、常量、表达式、列名
-- 只要expr1 = expr2 or expr1 = expr3 or expr1 = expr4 就可以了。
select * from emp where 700*2 in(sal-100 , comm);

SQL> declare
  2  v_name varchar2(50);
  3  begin
  4    v_name := 'aa';
  5    dbms_output.put_line(v_name);
  6  end;
  7  /
 
PL/SQL procedure successfully completed
 
SQL> var v_max_price number;
SQL> begin
  2      :v_max_price := 200;
  3  end;
  4  /
 
PL/SQL procedure successfully completed
v_max_price
---------
200
 
SQL> 
SQL> 
SQL> print v_max_price;
v_max_price
---------
200
 
SQL> begin
  2      dbms_output.put_line(:v_max_price);
  3  end;
  4  /
 
PL/SQL procedure successfully completed
v_max_price
---------
200

declare
    -- 定义Table类型
    type name_table_type is table of varchar2(50)
    index by binary_integer;
  
    -- 定义了一个Table变量
    name_table name_table_type;
    
    type two_dimen_table_type is table of name_table_type
    index by binary_integer;
    
    v_2_table two_dimen_table_type;
    
    v_index binary_integer;
    
begin
    name_table(0) := '孙悟空';   
    name_table(-29) := '白骨精'; 
    name_table(100) := '牛魔王';
    
    dbms_output.put_line(name_table(100));
    
    -- v_index等于name_table里第一个元素的索引
    v_index := name_table.first;
    while name_table.exists(v_index) loop
        dbms_output.put_line(v_index || '-->' 
            || name_table(v_index));
        -- 获取下一个元素的索引值。
        v_index := name_table.next(v_index);
    end loop;
  
    v_2_table(0)(20) := '猪八戒';
    
    dbms_output.put_line(v_2_table(0)(20));
    
end;

declare
    -- 定义了一个数组类型
    type name_array_type is varray(10)
    of varchar2(50);
    
    v_name_array name_array_type := name_array_type('aa' , 'bb', 'cc', 'dd');
    v_name2_array name_array_type := name_array_type('甲' ,'乙'
         , '丙' , '丁' , '戊');
begin
    dbms_output.put_line('---');
    
    v_name_array(1) := 'aaa';
    
    v_name2_array(5) := 'aaa';
end;

declare
    -- 定义了一个record类型
    type dept_record_type is record
    (
         v_deptno number,
         v_dname varchar2(50),
         v_loc varchar2(50)
    );
    
    v_dept_record dept_record_type;
    
begin
    -- record类型的变量,相当于表的一行。
    v_dept_record.v_deptno := 10;
    v_dept_record.v_dname := '研发部';
    v_dept_record.v_loc := '广州';
    
    dbms_output.put_line(v_dept_record.v_deptno
        || v_dept_record.v_dname
        || v_dept_record.v_loc);
    
    -- record变量最大的用处在于:存、取表格里的一条记录。
    -- 把表格的一条记录存入record变量,
    -- 直接把record变量整体insert到某个表中。
end;


declare
    -- 该变量的主要用于存 dept表里dname列的值
    -- 这个语法可以保证v_dname的类型永远和dname列的类型相同。
    v_dname dept.dname%type;
    
    -- 让v_myname的类型永远和v_dname的类型保持一致。
    v_myname v_dname%type;
    
    v_emp_record emp%rowtype;
    
begin
    v_dname := '市场部';
    
    dbms_output.put_line(v_dname);
    
    v_emp_record.empno := 8992;
    v_emp_record.ename := '王琥';
    v_emp_record.job := '经理';
    
    insert into emp values v_emp_record;
end;
select * from emp;

declare
    v_dname dept.dname%type;
    v_loc dept.loc%type;
    
    v_emp_record emp%rowtype;

begin
    select dname , loc
    into v_dname , v_loc
    from dept
    where deptno = 20;
    
    dbms_output.put_line(v_dname ||
        '-->' || v_loc);
    
    -- 把查询出来的表记录存入record变量
    select * 
    into v_emp_record
    from emp
    where empno = 7934;
    
    -- 如果查询的记录超过了一行,需要使用游标
    
    dbms_output.put_line(v_emp_record.ename ||
        '-->' || v_emp_record.sal);    
end;

declare
    v_dept_record dept%rowtype;
begin
    v_dept_record.deptno := 11;
    while v_dept_record.deptno < 20 loop
    
        v_dept_record.dname := '部门'
             || to_char(v_dept_record.deptno);
        v_dept_record.loc := '位置' 
             || to_char(v_dept_record.deptno);        
        -- 直接把一条record记录插入指定表
        insert into dept
        values v_dept_record;
        
        v_dept_record.deptno := v_dept_record.deptno + 1;
    end loop;
end;


select * from dept;
rollback;

declare
     v_deptno dept.deptno%type;
begin
     v_deptno := 12;
     while v_deptno < 20 loop
          update dept
          set dname='新部门'
          where deptno = v_deptno;
          v_deptno := v_deptno + 2;
     end loop;      
end;


begin
     delete from dept 
     where to_char(deptno) not like '%0';
     dbms_output.put_line('删除了' ||
         SQL%rowcount || '条记录');
end;

select * from dept;

rollback;

create table test
(
  test_id number
);

begin
   execute immediate 'drop table test';
   execute immediate 'drop user fkjava';   
end;

 


0 0
原创粉丝点击