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 */

 

posted @ 2018-08-31 11:16  justMww  阅读(3881)  评论(0编辑  收藏  举报