DML/DDL/DCL、增删改查、建表、约束、序列sequence、索引index、游标cursor、plsql块、存储过程、function
DDL: CREATE,ALTER,DROP,TRUNCATE
DML: INSERT,DELETE,UPDATE,SELECT
DCL: rollback,commit,grant,revoke,savepoint
表操作:
建表:create table 表名(列1 数据类型,列2 数据类型。。。。。。。)
添加列:alter table 表名 add 列名 数据类型
删除列:alter table 表名 drop column 列名
列重命 名: alter table 表名 rename column 列名 to 新列名
删除表: drop table 表名
伪列:ROWID和ROWNUM
查询关键词:from, where, order by desc/asc,group by [having...],sysdate,like,in,not,exists,null,union [all],join......
函数:
count(*),sum,avg,max,min,trunc,mod
decode(value,if1 then1,if 2,then2,缺省值…..),substr (char, m, n),Concat (expr1,xpr2),Length(char),NVL(value,值)
replace(char, searchstring,[replacement_string]),lower,upper,trim
ADD_MONTHS(day,n),MONTHS_BETWEEN(day1,day2 ),LAST_DAY(day),sysdate,systimestamp
to_char,to_date,to_number
约束:constraint 约束名 primary key/foregin key/unique/check
alter table table_name modify column_name constraint 约束名 not null | null;
alter table table_name add constraint 约束名 primary key/unique(column_name [, column_name]);
alter table table_name add constraint 约束名 foregin key(column_name) references ref_table_name (ref_column_name);
alter table table_name add constraint 约束名 check (expression);
建/删索引:
create index 索引名 on 表名 (列 ASC );
drop index 索引名;
建/删序列:currVal,nextVal from dual;
CREATE SEQUENCE 序列名 MINVALUE 10 MAXVALUE 2000 START WITH 10 INCREMENT BY 1 CACHE 10;
drop sequence序列名;
存储过程prodcure :exec存储过程名(....);
create or replaceprodcure存储过程名[(参数名1 [in/out/in out] 参数类型,参数名2 [in/out/in out] 参数类型...... )]
is/as
变量定义
begin
程序段;
exception
when 异常[NO_DATA_FOUND] then
程序段;
end 存储过程名;
/
pl/sql块:直接执行
declare
变量定义
begin
程序段
exception
when 异常[NO_DATA_FOUND] then
程序段;
end;
函数:function存储过程、pl/sql块,sql可调用 需要返回值
create or replacefunction函数名[(参数名1 [in] 参数类型,参数名2 [in] 参数类型...... )]
return 数据类型[数据库类型] is/as
变量定义
begin
程序段;
exception
when 异常[NO_DATA_FOUND] then
程序段;
end 存储过程名;
/
语法:变量定义支持 %TYPE 和 %ROWTYPE 属性类型
1、条件控制:
a.if条件then程序段;elsif条件then程序段;else程序段;end if;
b.case
whenv_g='指定值1'then程序段;
whenv_g='指定值2'then程序段;.....
else程序段;
end case;
2、循坏控制
a.loop程序段end loop;
b.while条件loop程序段end loop;
c.foriin1..100loop程序段end loop;
3、执行动态sql:
EXECUTE IMMEDIATEdynamic_sql_string [INTO define_variable_list] [USING bind_argument_list];
4、异常处理:预定义异常/自定义异常
预定义:
异常说明
ACCESS_INTO_NULL在未初始化对象时出现
CASE_NOT_FOUND在case语句中的选项与用户输入的数据不匹配时出现
COLLECTION_IS_NULL在给尚未初始化的表或数据赋值时出现
CURSOR_ALREADY_OPEN在用户试图打开已经打开的游标时出现。
INVALID_CURSOR执行非法游标运算时出现
TOO_MANY_ROWS在执行select into语句后返回多行时出现。
ZERO_DIVIDE以零作除数时出现
VALUE_ERROR产生大小限制错误时出现。如:变量中的列值超出变量的大小
NO_DATA_FOUND在表中不存在请求的行时出现。
自定义:声明异常: myexcption exception; 抛异常: rasie myexcption;
游标:隐式、显式、REF
隐式:自动声明,打开,关闭
隐式游标的属性有:
%FOUND – SQL 语句影响了一行或多行时为 TRUE
%NOTFOUND – SQL 语句没有影响任何行时为TRUE
%ROWCOUNT – SQL 语句影响的行数
%ISOPEN - 游标是否打开,始终为FALSE
显式:
定义:CURSOR IS SELECT statement FOR UPDATE;
打开: open cursor_name;
使用:
loop
fetch cursor_name into 变量名
EXITWHEN cursor_name%NOTFOUND;
程序段;
--更新数据
UPDATE SET WHERE CURRENT OF ;
--删除数据
DELETE FROM WHERE CURRENT OF ;
end loop;
for 循坏:
for dataAll in cursor_name
loop
程序段;
end loop;
关闭:close cursor_name;
REF:
声明:
a. 定义ref:TYPE IS REF CURSOR [RETURN ];
b. 定义ref变量: ref_var ref_cursor_name;
使用游标:
open ref_var for 'SELECT statement';
loop
fetch cursor_name into 变量名
EXITWHEN cursor_name%NOTFOUND;
程序段;
end loop;
关闭游标:close ref_var ;
网友评论