• Oracle存储过程_语法


      1 create or replace procedure procedure_name --存储过程名字
      2 (
      3     --进行输入/输出的量 量_name in out 量_类型
      4     --e.g. 
      5     username in varchar2,                                  --varchar2类型无需标明长度
      6     id out number(38)
      7 )
      8 is/as
      9     --基本认为is和as是一致的,但是略有区别,在这个部分进行变量和常量的声明              //类似PL/SQL语句块中的declare部分
     10     
     11     --变量/常量_name (constant)     1.变量/常量_类型;
     12     --                                 2.table_name.col_name%type                 //这个变量沿用这个表中的这个列的类型
     13     --                                 3._name                      //某个变量需要从外部传入,&**_name作为一个占位符
     14     --                                 4.自定义类型                                  //使用对象的概念理解
     15     --                                 5.table_name%rowtype
     16     
     17     --e.g. 
     18     --1
     19         i constant     number:=5;
     20         username        varchar2(40);
     21     --2
     22         username        tb_user.username%type;
     23     --3
     24         username        varchar2:=&name;
     25     --4
     26         type type_name is record
     27         (
     28             id             number(38);
     29             username    varchar2(40);
     30         );
     31         type_obj type_name;                                                        --(将某行的部分需要的值放进去)使用的时候:select tb.id,tb.username into type_obj from tb_user tb
     32     --5
     33         users tb_user%rowtype;                                                    --(将某行的值放进去)使用的时候:select * into users from tb_user where id='1';
     34     
     35     
     36     --声明游标,获取查询语句的结果集(多行多列);                                      //游标申明中不要使用into子句 cursor cur_name is select col_name,col_name,, from table_name;
     37     --e.g.
     38     cursor temCur is select * from tb_user;
     39     
     40 begin
     41     --放置sql语句和pl/sql语句块
     42     
     43     --赋值 
     44     a:=b;
     45     
     46     --输出语句 
     47     dbms_output.put_line(''||''||'');                                            --如果需要显示结果,set serveroutput on
     48     
     49     --sql语句
     50     --
     51     insert into table_name(col_name,col_name,,)
     52     values(val_val,val_val,,);
     53     
     54     --
     55     update table_name set col_name = val_val;
     56     
     57     --
     58     delete from table_name …… 
     59     
     60     --游标
     61     --1.显式游标
     62     --2.隐式游标 select * into emp from table_name ……
     63     
     64     
     65     --打开游标
     66     --open cur_name;
     67     --将游标中的值赋值到某值中
     68     --fetch cur_name into get_name,get_name,,;
     69     --关闭游标
     70     --close cur_name;
     71     
     72     --游标状态信息
     73     --%isoipen    //boolean
     74     --%notfound //
     75     --%found    //
     76     --%rowcount //目前为止,总行数
     77     
     78     select col_name into temp_name from table_name                                --将表中的值(一行一列的值)取出放到这个“临时变量中”
     79     
     80     --循环
     81     --1.
     82     loop
     83     ***
     84     exit when *** 
     85     end loop;
     86     
     87     --2.
     88     while *** 
     89     loop
     90     ***
     91     end loop;
     92     
     93     --3.
     94     for index in[reverse] *** 
     95     loop
     96     ***
     97     end loop;
     98     
     99     --判断
    100     if *** then ***
    101     elsif *** then ***
    102     else ***
    103     end if;
    104     
    105     --提交事务
    106     commit;
    107 
    108 exception
    109     --//异常处理
    110     when too_many_rows then
    111     ***
    112     when no_data_found then
    113     ***
    114     *when others then
    115     ***
    116     --rollback;
    117     --commit
    118 end procedure_name;
    119 
    120 
    121 
    122 --调用存储过程
    123 exec pro_name();
    124 
    125 
    126 
    127 
    128 
    129 
    130 
    131 
    132 
    133 /*
    134 --使用循环获取游标数据
    135 declare
    136    -- 定义emp类型
    137    emp employees%rowtype;
    138    -- 定义一个游标:拿到所有员工
    139    cursor my_corsor is select * from employees;
    140 begin
    141   -- 打开游标
    142   open my_corsor;
    143   --循环开始打印游标 
    144  loop
    145        -- 移动光标并获取相应的数据 
    146        fetch my_corsor into emp; 
    147        -- 如果没有相应数据则离开
    148        exit when my_corsor%notfound;
    149        -- 没有离开代表有数据,则可以打印展示出来
    150        dbms_output.put_line(emp.first_name||'  '|| emp.salary);   
    151  end loop;
    152  --关闭游标
    153   close my_corsor;
    154 end;
    155 
    156 
    157 --使用游标的for循环
    158 PL/SQL语言提供了游标的for循环语句。
    159 自动的执行游标的open,fetch和close。
    160 当进入循环后,游标for循环语句会自动的打开游标,并提取第一行数据,
    161 当程序处理完当前数据后,自动提取下一行数据。
    162 当结果集中的内容提取完毕后,自动关闭游标。
    163 
    164 格式:
    165     FOR variables IN cursor_name(value,value...) LOOP
    166         --处理语句
    167     END  LOOP;
    168     
    169     declare
    170     
    171     --定义一个游标:拿到所有员工
    172     cursor my_corsor is select * from employees;
    173 begin
    174     --循环开始打印游标 
    175     for emp in my_corsor  loop
    176         -- 没有离开代表有数据,则可以打印展示出来
    177         dbms_output.put_line(emp.first_name||'  '|| emp.salary);    
    178    end loop;
    179 end;
    180 
    181 
    182 
    183 */
  • 相关阅读:
    web测试用例表(自用)
    程序员技术练级攻略
    整理:Google jQuery 引用地址大全和方法(转)
    开发神器之--Sublime Text
    Intellij编译时报“java: System Java Compiler was not found in classpath” 解决办法
    JAVA编译异常处理:java.lang.OutOfMemoryError: PermGen space
    mongo中查询Array类型的字段中元素个数
    BigDecimal进行除法divide运算注意事项
    用来代替本机IP的万能IP:127.0.0.1
    oracle中sys和System的默认密码
  • 原文地址:https://www.cnblogs.com/justmaomao/p/9564764.html
Copyright © 2020-2023  润新知