oracle 数据库中,语句一般分为这几种:
DML(data manipulation language) : 数据库操纵语句,有
select 、insert、update、delete 能对数据进行操作的语言,严格说来select 不算在其中
DDL(Data Definition Language) :数据库定义语言,有
create、drop、alter、truncate 等,通常是数据库管理系统的一部分,用于定义数据库的所有特性和属性
DCL Data Control Language):数据控制语言,有
Grant、Revoke、Commit、Rollback,其中Commit、Rollback 严格可以归纳为TCLTransaction Control Language(事务控制语言)。
1.表复制,复制dept 表,后面使用
create table my_dept as select * from dept;
注意:-- 表复制,不会复制约束条件
2.动态插入
begin insert into my_dept values('&no','&name','&location') ; commit; end;
注意:同理可以进行其他操作
3.上下文区域(context area):游标(cursor)
SQL%ROWCOUNT是游标属性,表示刚刚执行的sql语句影响的记录条数.
declare v_rows number := 0; begin delete from my_dept where deptno > 40; v_rows := SQL%ROWCOUNT; commit; dbms_output.put_line (v_rows||' deleted'); end;
4.创建临时表 temp_ran
if 存在,清空数据trucate 或者drop
if 不存在,创建
declare v_count number(2) :=0; begin select count(*) into v_count from user_tables where table_name = 'TEMP_RAN'; if v_count = 1 then execute immediate 'drop table temp_ran'; end if; execute immediate 'create table temp_ran as select * from dept'; end; -- 其他逻辑,类似
注意: user_table 是用户下的表,表名默认是大写的,immediate是立即的执行,为了提高效率,具体用
法去官网看 。
5.分支语句
declare v_rate number(3,2); v_job emp.job%type; v_sal emp.sal%type; v_empno emp.empno%type :=&no; begin select job,sal into v_job,v_sal from emp where empno = v_empno; if v_job = 'ANALYST' then v_rate := 1.2; elsif v_job = 'MANAGER' then v_rate := 1.1; elsif v_job = 'SALESMAN' then v_rate := 1.05; else v_rate := 1; end if; update emp_ran set sal = sal*v_rate where empno = v_empno; commit; dbms_output.put_line(v_job || 'old :'||v_sal||', new :'||v_sal*v_rate); end;
注意:这里是elsif 不是elseif, 'ANALYST' emp表中复制的数据
也可以用case 方式
declare v_rate number(3,2); v_job emp.job%type; v_sal emp.sal%type; v_empno emp.empno%type := &no; begin SELECT job,sal into v_job,v_sal from emp_ran where empno = v_empno; case v_job when 'ANALYST' then v_rate :=1.2; when 'MANAGER' then v_rate :=1.1; when 'SALESMAN' then v_rate :=1.05; else v_rate :=1; end case; update emp_ran set sal = sal * v_rate where empno = v_empno; commit; dbms_output.put_line(v_job ||' old:'||v_sal||','||'new:'||v_sal * v_rate); end;
注意:这里查找不到会出现:no data found 异常,这是系统自带异常,可以自己定义。
6.循环语句
declare v_i number :=10; BEGIN loop -- 插入数据 insert into emp_ran(empno) values(v_i); -- 当 v_i =20 ,退出,自增1 exit when v_i = 20; v_i := v_i+1; end loop; COMMIT ; END ;
另外的方式,和JAVA for 循环差不多
declare v_i number :=10; begin for v_i in 100..110 loop insert into emp_ran(empno) values(v_i); -- commit; end loop; end;
while 方式:
declare v_i number := 1000; begin while v_i < 1010 loop insert into emp_ran(empno) values(v_i); v_i := v_i + 1; end loop; commit; end;
这里介绍的就是常用的 分支 和循环语句,和JAVA 类似