存储过程是经过语法检查和编译的SQL语句
创建过程时,系统会对其进行编译,并将执行代码存储到数据库中。有名字,可接收参数,没有返回值。
创建时不执行,调用时才执行。
1.在SQL>提示符下调用过程,execute 过程名(参数 ...)
2.在PL/SQL块中调用过程,过程名(参数 …),可独立作为PL/SQL语句
可以在匿名块、其他的存储过程、函数中调用。
存储过程中可以直接执行DML语句(select、insert、update、delete),不能直接执行DDL语句。
存储过程中如需执行DDL语句,先把DDL语句存放在一个字符串变量中,然后通过execute immediate语句执行字符串内容,字符串内容必须符合SQL语法。用户从角色中获取的权限,在PL/SQL块中
存储过程中创建触发器实现主键自增长:
create or replace procedure pk_auto_increment_pro(t_name varchar2) is
v_ddl varchar2(2000);
begin
v_ddl := 'create or replace trigger pk_auto_increment_' || t_name ||
' before insert on ' || t_name ||
' for each row
begin
dbms_output.put_line(''赋值前id:'' ||:new.id);
select test_seq.nextval into :new.id from dual;
dbms_output.put_line(''赋值后id:'' ||:new.id);
end;';
execute immediate v_ddl;
end;
create [or replace] procedure 过程名 [(参数名 参数模式 参数类型,...)] is|as
[declaration] --定义部分
begin
--执行部分
[exception]
--异常处理部分
end [过程名];