【Oracle】存储进程写法小例子

一 、存款和储蓄进度的大旨语法:

  CREATE O君越 REPLACE PROCEDURE 存款和储蓄进程名(param1
in type,param2 out type)

  IS

  变量1 类型(值范围);

  变量2 类型(值范围);  

  BEGIN

    select
count(*) into 变量1 from 表名 where 列名=param1;

    if (测量圭表)
then

      select 列名
into 变量2 from 表名 where 列名=param1;

      DBMS_OUTPUT.put_line(‘打字与印刷音讯’);

    Elsif
(度量标准) then

      dbms_output.put_line(‘打印消息’);

    Else

      Raise
异常名 (NO_DATA_FOUND);

    End if;

  Exception

      When
others then

        Rollback;
  

  END;

② 、已命名的丰裕:

  命名的种类丰硕              
发生原因

  ACCESS_INTO_NULL           未定义对象

  CASE_NOT_FOUND             
CASE中若未包蕴相应的WHEN,并且没有设置ELSE时

  COLLECTION_IS_NULL          
集合成分未开头化

  CURSER_ALREDAY_OPEN         
游标已经打开

  DUP_VAL_NO_INDEX             
唯一索引对应的列上有再一次的列

  INVALID_CUSE瑞鹰              
在非法的游标上操作

  INVALID_NUMBE君越              
内嵌的SQL语句不能够将字符转换为数字

  NO_DATA_FOUND              
使用select into 未回来行,或应用索引表未初始化

  TOO_MANY_ROWS               
执行select into 时,结果集当先一行

  ZERO_DIVIDE                 
除数为0

  SUBSCRIPT_BEYOND_COUNT         
成分下标超越嵌套表或VA大切诺基RAY的最大值

  SUBSCRIPT_OUTSIDE_LIMIT         
使用嵌套表或VASportageRAY时,将下标钦命为负数

  VALUE_E大切诺基RO奥迪Q5              
赋值时,变量长度不足以容纳实际数目

  LOGIN_DENIED              
PL/SQL应用程序连接到ORACLE数据库时,提供了不得法的用户名和密码

  NO_LOGGED_ON                
PL/SQL应用程序在尚未连接ORACLE数据库的情状下访问数据 

  PROGRAM_EXC90ROPRADO             
PL/SQL内部难题,恐怕必要重装数据字典& PL/SQL系统包

  ROWTYPE_MISMATCH            
宿主游标变量与PL/SQL游标变量的归来类型不包容

  SELF_IS_NULL                
使用对象类型时,在NULL对象上调用对象方法

  STORAGE_ERRO奔驰M级               
运维PL/SQL时,超出内部存款和储蓄器空间

  SYS_INVALID_ID              无效的ROWID字符串

  TIMEOUT_ON_RESOUEscortCE            
ORACLE在等待能源时超时

 

叁 、实际例子

  2.1 没有参数的历程

  create or replace
procedure test_count
  is
  v_total int;
  v_date varchar(20);
  begin

    select
count(*) into v_total from dual;
       select to_char(sysdate,’yyyy-mm-dd’) into v_date from
dual;
         DBMS_OUTPUT.put_line(‘总人数:’||v_total);
         DBMS_OUTPUT.put_line(‘当前时间:’||v_date);
  end;

  调用方法:

  begin

    test_count;
  end;

  2.2 仅带传入参数的长河

  create or replace
procedure test_count1(v_id in varchar2)
       as
       v_name varchar(100);
       begin
         select c_name into v_name from tb_store where
c_stono=v_id;
         DBMS_OUTPUT.put_line(v_id||’店的名号为:’||v_name);
        exception
         when no_data_found then
dbms_output.put_line(‘no_data_found’);
       end;

       调用方法:

  begin
           test_count1(11910);
       end;

  2.3 仅带输出参数的历程

  create or replace
procedure test_count2(v_name out varchar2)
  is
  begin
        select c_name into v_name from tb_store where
c_stono=’1101′;
    exception
        when no_data_found then
dbms_output.put_line(‘no_data_found’);
  end;

  调用方法:

  declare
  v_name varchar(200);
  begin
    test_count2(v_name);
    dbms_output.put_line(v_name);
  end;

  2.4 带输入参数和出口参数的存款和储蓄进程

  create or replace
procedure test_count3(v_id in int,v_name out varchar2)
  is
  begin
    select c_name into v_name from tb_store where c_stono=v_id;
    dbms_output.put_line(v_name);
    exception
      when no_data_found then
dbms_output.put_line(‘no_data_found’);

  end;

  调用艺术:

  declare
  v_name varchar(200);
  begin
    test_count3(‘1101’,v_name);
  end;

  2.5 带格外输出的囤积进度

  

  

相关文章