创建表:create table tablename(….)
修改表:alter table tablename add(columnname type …);
alter table tablename modify …
删除表:drop table tablename
INSERT INTO TABLENAME() VALUES()
UPDATE TABLENAME SET COLUMN=VALUE… WHERE 条件
DELETE FROM TABLENAME WHERE 条件
简化复杂的查询,查询部分数据作为一个视图
create view view_name as (查询语句)
create or replace view view_name as ….
若想和mysql等数据库一样实现某列自动增长的功能,可以利用序列
其中有两个变量:
nextval:取得序列的下一个内容
currval:取得序列的当前内容
先创建序列:
CREATE SEQUENCE SEQUENCENAME
INCREMENT BY 10
START WITH 120
MAXVALUE 9999
NOCACHE
NOCYCLE;
自增这样写:insert into tablename values(列名.nextval….)
单列索引:
create index indexname on tablename(columnname)
复合索引
create index indexname on tablename(…)
当数据量较大的时候,索引能加快查询速度。
CREATE PUBLIC SYNONYM synonymname for othertable.emp
declare
这里写一些说明(变量定义什么的。。。)
begin
代码部分,语句序列,DML
exception
例外语句,类似异常处理
End;
选择
循环
使用
例:
declare //声明部分
cursor cl is //声明游标
select * from emp; //游标指向
pemp emp%rowtype; //声明变量,类型为emp表
begin
open cl; //打开游标
loop
fetch cl //取一行游标的值
into pemp; //放入pemp变量中
exit when cl%notfound; //当游标为空的时候跳出循环
dbms_output.put_line(pemp.empno || ' ' || pemp.ename); //打印变量所指行的信息
end loop
close cl //关闭游标
end;
也可以指定游标的类型为特定的某一行
类似与java,也可以自己手动抛出异常。
自定义异常需要在declare中定义,然后使用时可以加入条件控制中,如果不正确可以抛出(raise)一个异常,然后进入exception块中
exception
when 自定义异常名 then
处理语句
在AS或者IS后可以加变量定义。
调用
存储函数和存储过程一般来说没有什么区别,返回结果的数量可以通过参数里的out指定
create or replace function empincome (eno in emp.empno%type) return number is //声明存储过程
psal emp.sal%type; //定义薪水变量
pcomm emp.comm%type; //定义奖金变量
begin
select t.sal,t.pcomm into psal,pcomm from emp t where t.empno=eno;
return psal*12+nvl(pcomm,0);
end
用存储过程实现
若使用游标
只需要将游标提取,然后用ResultSet类型转换即可查询游标所指内容
另外,写在过程中out语句后的用来返回结果集的游标类型应该为sys_refcursor,具体可以查看
触发器自带变量
另外一般不允许多个触发器对同一张表进行操作或者在触发器中对同一张表进行操作,容易产生递归循环触发。