天天看点

oracle 存储过程-第一个存储过程

1. 创建存储过程:

1.1 在命令窗口创建: 

该窗口有两个面板。

对话框面板:执行sql语句

编辑器面板:编辑sql, 其就是一个文本编辑器

oracle 存储过程-第一个存储过程

1.2 在存储过程文件夹中创建

oracle 存储过程-第一个存储过程

2. 存储过程语法

CREATE [OR REPLACE] PROCEDURE pro_name [(i_NAME IN VARCHAR2, o_age OUT NUMBER)] AS 
    ...
BEGIN

    ...
exception
when others then
    ...
END [pro_name];

create:创建存储过程的动作命令
or replace: 如果存储过程名称已存在,则替换
procedure: 存储过程关键字
pro_name:存储过程名称,自定义,一般以“pro_”开头
(i_NAME IN VARCHAR2, o_age OUT NUMBER): 参数,分入参, 出参。 如果没有参数则括号也不能有

as和begin:as和begin之间用来声明变量
begin和end: begin和end之间是存储过程逻辑处理区域
exception和end:exception和end之间是异常处理逻辑, 可省略
end后面的pro_name: 存储过程名称, 可省略
           

3.存储过程案例:

/*
注意事项:
  1. 没有参数时,声明部分不能有括号
  2. 声明变量时可以显示指定变量模式:in表示为入参, out表示为出参, 不写则既可以是入参,也可以是出参。 最好明确具体模式
  3. 参数需要指定参数类型, 但不能指定参数精度,如:varchar2(400)
  4. 字符串的拼接使用双竖线"||", 不能用“+”, “+”只用在数字操作
  5. 变量赋值使用":=", 如: age := 34;
  6. 除了表字段别名可以使用双引号,其他的都用单引号。 表别名的双引号是可以省略的,所以尽量不在存储过程中使用双引号
  7. 单引号既有引号的作用, 又有转义下一个单引号的作用。  简单理解:连续的两个引号(除了最外层的一个引号)表示输出一个单引号
  8. 存储过程最后的”/" 在命令窗口中编译存储过程时,需要用"/"标识该存储过程已经结束。 非命令窗口时,可以不写

*/
CREATE OR REPLACE PROCEDURE pro_demo_create (i_NAME IN VARCHAR2, o_age OUT NUMBER) AS 
   /* as 和begin之间是声明变量的区域 */
   v_NAME VARCHAR2(40) := 'changez';-- 声明变量并赋值
   v_age NUMBER DEFAULT 20; --声明变量并赋值

BEGIN
   IF i_NAME IS NOT NULL THEN
      v_NAME := i_name;
   END IF;
   -- dbms_output.put_line() 输出内容到控制台
   dbms_output.put_line('第一个存储过程');
   
   -- 字符串的拼接用 "||"
   dbms_output.put_line('v_NAME=' || v_NAME || ',v_age=' || v_age);
EXCEPTION --异常部分
WHEN OTHERS THEN --OTHERS 异常类型,可以捕获所有的异常
   -- Sqlcode: 异常码
   -- SQLERRM: 异常信息
   dbms_output.put_line(Sqlcode||', '||SQLERRM);   
END pro_demo_create;
/
           

4. 存储过程编译

在命令窗口的“编辑器”面板全选,然后按F8, 或者将要编译的完成代码复制到“对话框”面板,即可完成编译,当对话框里面出现“Procedure created”表示存储过程编译成功

oracle 存储过程-第一个存储过程

5. 可能出现的问题

5.1 存储过程卡在这里了,没有出现编译通过的提示, 这种情况多半是存过程末尾没有“/”, 在这里输入"/” 然后回车即可。

oracle 存储过程-第一个存储过程

5.2 提示编译错误, 如下图, 这是因为存储过程中有语法

oracle 存储过程-第一个存储过程

可以输入 show error 查看具体的出错原因, 如下图

oracle 存储过程-第一个存储过程