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 类似