PL/SQL:
知识回顾:
SQL: 结构化查询语言;
T-SQL: microsoft sql语言;
PL/SQL: Oracle sql语言;
变量命名规则:
1.首字母必须是字母,可以包含字母,下划线,$,#,数字
2.字符长度在30内
3.不能为关键字,保留字
命名规范:
1.见名知意; 见书hibernate p78;
2.普通变量: v_变量名
3.游标变量: cursor_变量名;
4.参数变量:p_变量名;
数据类型:
标量类型
timestamp:时间戳 比date更精确:精确到毫秒 lob类型
属性类型 表名.列名%type
变量赋值:
硬编码:变量名:=值
查询赋值: select 列名 into 变量名 from 表名 where 条件
begin end中可以包含:
DML:数据操作语言 >>del,insert,update
不能写在begin end中:使用动态SQL:excute immediate (SQL);
DDL:数据定义语言 >>create,drop,alter,truncate
DCL:数据控制语言 >>grant,revoke
DQL:数据查询语言 >>select 解决办法:游标;
控制语句:
if 布尔表达式
循环: loop [exit 退出循环] end loop;
for loop end loop;
游标:
声明: cursor cursor_表名 is select * from 表名 --定义变量 表名%rowtype;
》打开:begin open 游标名; end;
》提取:fetch 游标名 into
》关闭:close 游标名;
for循环会隐式声名 记录类型 rowtype的循环变量 游标查询语句必须查询所有列(select *) 自动打开,提取关闭游标
for v_row in (查询select) loop v_row.列; end loop;
java中调用存储过程:
CallableStatement call=con.prepareCall("{call 存储名([参数1,参数2])}");
// 填坑
call.set....
//注册输出参数类型
call.registerOutParameter(2,OracleTypes.CURSOR);
//获取输出值
call.execute();
//获取输出值
ResultSet rs=call.getObject(2);