1.序列
序列是一个计数器,它并不会与特定的表关联。通过创建Oracle序列和触发器实现表的主键自增。 序列的用途一般用来填充主键和计数。--创建序列create sequence seq_usersstart with 1--开始值为1increment by 1;--每次增长一个(步长、频次)--使用序列select seq_users.nextval from dual;--删除序列drop sequence seq_users;
2.存储过程
预先存储好的SQL程序;保存在oracle中;通过名称和参数执行;可带参数,也可返回结果;可包含数据操纵语句、变量、逻辑控制语句等优点: 执行速度更快;减少网络流通量定义存储过程的语法:create or replace procedure 存储过程名( 参数1 in|out|in out 数据类型,参数2 in|out|in out 数据类型,.....)as[声明需要输出的变量]BEGINsql语句end;存储过程的执行:1. exec 存储过程名(参数或者表达式);2. begin存储过程名(参数或者表达式);end;实例:无参的存储过程create or replace procedure hello_proasBEGINdbms_output.put_line('hello procedure');end;
set serveroutput on;beginhello_pro;end;实例:有参的存储过程--1.参数的数据类型不能加长度--2.不加in 或 out时,默认是in,即输入参数--3.调用有参数的存储过程必须要传参create or replace procedure with_param_pro(str VARCHAR2)asBEGINdbms_output.put_line(str);end;
set serveroutput on;beginwith_param_pro('aaaaaaa');end;
实例:通过epmno查找员工姓名和工资create or replaceprocedure user_pro(id_v emp.empno% TYPE)asname_v emp.ename% TYPE;sal_v emp.sal% TYPE;BEGINSELECT ename into name_v from emp where empno=id_v;SELECT sal into sal_v from emp where empno=id_v;dbms_output.put_line('姓名:'||name_v||' 工资:'||sal_v);end;exec emp_print_pro(7499);--或者beginemp_print_pro(eno=7499);end;