oracle存储过程 存储函数

 1.创建如下表

 oracle存储过程 存储函数_第1张图片

2.创建存储过程

CREATE OR REPLACE PROCEDURE TEST_PROCEDURE(MYNMAE IN VARCHAR2,
                                           AGE    IN NUMBER,
                                           OUT_R  OUT NUMBER,
                                           DATA   OUT SYS_REFCURSOR) IS
  --int float都可以定义为 NUMBER 类型, 入参 VARCHAR2不要定义长度(本来就是可变长度的)  IS AS都可以, 默认是IN,可以省略IN
  --入参mynmae不能作为赋值目标,即不可以 myname:='zhangsan'; 只能对声明的变量进行赋值(mysql最后啊也遵循这一点规范)
  --存储过程有IN OUT   函数只有IN
  --声明变量不需要 declare关键字
  --使用前必须先声明变量, 变量不区分大小写
  --字符串类型必须指定size(否则报错), 变量的声明必须在 begin之前
  --断点调试(在行号处打断点),选中 入参myname 右键选择 add variable to watches
  V_NAME       VARCHAR2(30) := '小丽' || '小花'; --变量的声明 和 赋值一块进行
  V_SQL        VARCHAR2(100); -- 也可以写为V_NAME my_user.name%type;  表示V_NAME变量 数据类型和my_user表的name字段一致
  I_BEGIN_DATE DATE;
BEGIN
  OPEN DATA FOR
    SELECT * FROM MY_USER; --存储过程返回结果集
  OUT_R := 88; --给OUT赋值
  DBMS_OUTPUT.PUT_LINE(V_NAME); --输出结果到DBMS标签页面
  --oracle的动态sql
  V_SQL := 'SELECT NAME FROM MY_USER WHERE ID=:1'; --注意这里用的是=: 不是前面赋值用的:=
  EXECUTE IMMEDIATE V_SQL
    INTO V_NAME
    USING 1;
  COMMIT; --当执行增删改操作设计事务,必须COMMIT
  DBMS_OUTPUT.PUT_LINE(V_NAME);
  --存储过程中的异常问题
EXCEPTION
  WHEN OTHERS THEN
    DBMS_OUTPUT.PUT_LINE('error');
END TEST_PROCEDURE;

3.点击调试存储过程 F9 执行可以断点调试

oracle存储过程 存储函数_第2张图片

除了可以在下方表格填写入参, 当然也可以  :AGE替换为入参的数字,点击F8执行也是没问题的

oracle存储过程 存储函数_第3张图片

oracle存储过程 存储函数_第4张图片

 

存储函数

CREATE OR REPLACE FUNCTION TEST_FUNCTION(AGE IN NUMBER)
RETURN NUMBER --返回的函数值类型
 AS
  V_NAME VARCHAR2(30); --定义变量但不用
BEGIN
  RETURN AGE * 2;
END;

oracle存储过程 存储函数_第5张图片

 

 

你可能感兴趣的:(oracle存储过程 存储函数)