oracle数据库对象-存储过程

存储过程:一段程序,用于改变数据库对象的状态,可以包含一个或多个行为,往往是将一个表的记录经过处理后放到另一个表。

1、基本语法:

CREATE [OR REPLACE] PROCEDURE procedure_name
[(parameter_name [IN | OUT | IN OUT] TYPE[,....])]
{IS | AS }
  [LOCAL declarations]
BEGIN
  executable statements;
[EXCEPTION 
  exception_statements;
END procedure_name;


例子:

--/
CREATE OR REPLACE PROCEDURE proc_1 (num number, name varchar2)
IS
BEGIN
  insert into emp(empno, ename) values (num, name);
END;
/



调用:

--/
BEGIN
  proc_1(1002, '1002');
END;
/


2、in和out参数:
in参数表示存储过程的输入参数。out参数表示存储过程的输出参数,输出参数会改变参数的值,传递到调用方的一个变量当中。
例子:

--/
CREATE OR REPLACE PROCEDURE proc_2 (num in number, v_emp out emp%rowtype)
IS
BEGIN
  select * into v_emp from emp where empno = num;
END;
/


调用:

--/
DECLARE
  var emp%rowtype;
BEGIN
  proc_2(1000, var);
  dbms_output.put_line(var.ename);
END;
/


3、同时带in和out参数:
IN OUT模式是IN和OUT方式的组合,又称为输入/输出参数。
当过程被调用的时候,实际参数的值会被传递给过程,形式参数可以被读出和写入。当过程调用结束,控制返回到调用环境时,形式参数的内容被赋予实际的值。
例子:

--/
CREATE OR REPLACE PROCEDURE proc_3(x IN NUMBER, y IN OUT NUMBER)
IS
  v_tmp NUMBER;
BEGIN
  v_tmp := x + y;
  y := v_tmp;
END;
/


调用:

--/
DECLARE
  num1 number :=1;
  num2 number :=2;
BEGIN
  proc_3(num1, num2);
  dbms_output.put_line(num2);
END;
/


4、
存储过程中具体的处理依赖于pl sql的基础语法来实现。