PLSQL基本知识

  1 create table student (
  2    xh number(4), --学号
  3    xm varchar2(20), --姓名
  4    sex char(2), --性别
  5    birthday date, --出生日期
  6    sal number(7,2) --奖学金
  7 );
  8 /*
  9 *第一种写法
 10 */
 11 declare 
 12   v_name varchar(100);
 13   v_xh number :=0;
 14 begin 
 15   select xm,xh into v_name,v_xh  from student where xh=3;
 16   dbms_output.put_line(v_name||'------------>'||v_xh);
 17 end;
 18 /*
 19 *第二种写法
 20 */
 21 declare 
 22   type stu_record is record(
 23     v_name varchar(100),
 24     v_xh number :=0
 25   );
 26   v_interface stu_record;
 27 begin 
 28   select xm,xh into v_interface  from student where xh=6;
 29   dbms_output.put_line(v_interface.v_name||'------------>'||v_interface.v_xh);
 30 end;
 31 
 32 
 33 
 34 /*
 35 *if else
 36 */
 37 
 38 declare 
 39     v_xh student.xh%TYPE;
 40     v_temp varchar(30);
 41 begin
 42   select xh into v_xh from student where xh=23;
 43   if v_xh<6 then 
 44     v_temp:='xh小于6';
 45   elsif v_xh=6 then 
 46     v_temp:='xh等于6';
 47   else 
 48     v_temp:='xh大于6';
 49   end if;
 50   dbms_output.put_line(v_temp);
 51 end;
 52 
 53 /*
 54 *case when then end
 55 */
 56 
 57 declare 
 58     v_xm varchar(30);
 59     v_temp varchar(30);
 60 begin
 61   select xm into v_xm from student where xh=2;
 62   v_temp:=''
 63   case v_xm when 'john' then 'xh是偶数'      
 64             when 'martin' then 'xh是奇数'      
 65             else 'null'   
 66   end;
 67   dbms_output.put_line(v_temp);
 68 end;
 69 
 70 /**
 71 *loop 循环
 72 */
 73 declare 
 74   --
 75   v_i number(5) :=1;
 76 begin
 77  loop  
 78    dbms_output.put_line(v_i);
 79  --
 80  exit when v_i>=100;
 81    --
 82    v_i:=v_i+1;
 83  end loop;
 84 end;
 85 
 86 /*
 87 *while
 88 */
 89 declare 
 90   v_i number(5) :=1;
 91 begin
 92   while v_i <=100 loop 
 93     dbms_output.put_line('--------------->'||v_i);
 94     v_i:=v_i+1;
 95   end loop;
 96 end;
 97 
 98 /*
 99 *for
100 */
101 begin
102   for c in 1..100 loop 
103     dbms_output.put_line('c'||c);
104   end loop;
105 end;
106 
107 
108 
109 /*
110 *游标
111 */
112 declare 
113   v_name student.xm%Type;
114   --定游标
115   cursor stu is select xm from student;
116 begin
117   --打开游标
118   open stu;
119   --提取游标
120   fetch stu into v_name;
121   while stu%found loop
122     dbms_output.put_line(v_name);
123     fetch stu into v_name;
124   end loop;
125 end;
126 /*
127 *练习
128 */
129 --游标练习
130 declare 
131   type stu_record is record(
132     v_xm varchar(100),
133     v_xh number :=0
134   );
135   v_student stu_record;
136   --定游标
137   cursor stu is select xm,xh from student;
138 begin
139   --打开游标
140   open stu;
141   --提取游标
142   fetch stu into v_student;
143   while stu%found loop
144     dbms_output.put_line(v_student.v_xh||'---------------->'||v_student.v_xm);
145     fetch stu into v_student;
146   end loop;
147   --关闭游标
148   close stu;
149 end;
150 /**
151 *for代替游标
152 */
153 declare 
154   --定游标
155   cursor stu is select xm,xh from student;
156 begin
157   for c in stu loop 
158     dbms_output.put_line(c.xh||'---------------->'||c.xm);
159   end loop;
160 end;
161 
162 
163 /*
164 *函数
165 */
166 create or replace function hello(v_xm varchar2)
167 return varchar2 
168 is
169 begin 
170   return '===========hello=============='||v_xm;
171 end;
172 select hello('王正和') from dual;
173 --练习
174 --1
175 create or replace function get_sysadte
176 return date 
177 is
178 begin 
179   return sysdate;
180 end;
181 select get_sysadte from dual;
182 --2
183 create or replace function add_parm(v_num1 number,v_num2 number)
184 return number 
185 is
186  v_sum number(10);
187 begin 
188   v_sum:=v_num1+v_num2;
189   return v_sum;
190 end;
191 select add_parm(100,300) from dual;
192 /*
193 *存过
194 */
195 create or replace procedure deal_hello
196 is 
197 begin 
198   dbms_output.put_line('---------------->hello');
199 end;
200 --1
201 create or replace procedure deal_sum_xh
202 is 
203 v_sum number(20) :=0;
204 cursor stu is select xh,xm from student;
205 begin 
206   for c in stu loop
207      v_sum:=c.xh+v_sum;
208      dbms_output.put_line('<-----数据----------->'||c.xh);
209   end loop;
210   dbms_output.put_line('-----最终数据----------->'||v_sum);
211 end;
原文地址:https://www.cnblogs.com/2070393244com/p/13138691.html