Oracle的基础案例

  1 1.PL/sql输出语句
  2 set serverout on
  3 declare
  4 v_sname varchar2(20);
  5 begin
  6 dbms_output.put_line(‘181lj‘);
  7 v_sname:=‘王工具人‘;
  8 dbms_output.put_line(‘183‘||v_sname||‘跟鬼一样‘);
  9 end;
 10 /
 11 ~~输出结果
 12 181lj
 13 183王工具人跟鬼一样
 14 
 15 2.边赋值边输出
 16 set serverout on
 17 declare
 18 v_sname varchar2(20):=‘王工具人‘;
 19 begin
 20 dbms_output.put_line(‘183‘||v_sname||‘跟鬼一样‘);
 21 end;
 22 /
 23 ~~输出结果
 24 183王工具人跟鬼一样
 25 
 26 3.输入输出
 27 set serverout on
 28 declare
 29 name varchar2(20):=&p_sname;
 30 begin
 31 dbms_output.put_line(name||‘跟鬼一样‘);
 32 end;
 33 /
 34 ~~输出结果
 35 输入 p_sname 的值: 1
 36 原值 2: name varchar2(20):=&p_sname;
 37 新值 2: name varchar2(20):=1;
 38 1跟鬼一样
 39 
 40 4.创建并获取另一个表的构造
 41 create table newdept
 42 as
 43 select * from dept where 1=2;
 44 
 45 5.为新表插入数据
 46 set serverout on
 47 declare
 48 v_deptno number(2):=&p_deptno;
 49 v_dname varchar2(14):=&p_dname;
 50 v_loc varchar2(13):=&p_loc;
 51 begin
 52 insert into newdept(deptno,dname,loc) values(v_deptno,v_dname,v_loc);
 53 commit;
 54 end;
 55 /
 56 ~~输出结果
 57 输入 p_deptno 的值: 1
 58 原值 2: v_deptno number(2):=&p_deptno;
 59 新值 2: v_deptno number(2):=1;
 60 输入 p_dname 的值: ‘市场部‘
 61 原值 3: v_dname varchar2(14):=&p_dname;
 62 新值 3: v_dname varchar2(14):=‘市场部‘;
 63 输入 p_loc 的值: ‘阜阳市‘
 64 原值 4: v_loc varchar2(13):=&p_loc;
 65 新值 4: v_loc varchar2(13):=‘阜阳市‘;
 66 
 67 6.插入值,但定义变量的数据类型。长度动态的和表中的数据类型,长度保持一致
 68 set serverout on
 69 declare
 70 v_deptno newdept.deptno%type:=&p_deptno;
 71 v_dname newdept.dname%type:=&p_dname;
 72 v_loc newdept.loc%type:=&p_loc;
 73 begin
 74 insert into newdept(deptno,dname,loc) values(v_deptno,v_dname,v_loc);
 75 commit;
 76 end;
 77 /
 78 ~~输出结果
 79 输入 p_deptno 的值: 2
 80 原值 2: v_deptno newdept.deptno%type:=&p_deptno;
 81 新值 2: v_deptno newdept.deptno%type:=2;
 82 输入 p_dname 的值: ‘数学部‘
 83 原值 3: v_dname newdept.dname%type:=&p_dname;
 84 新值 3: v_dname newdept.dname%type:=‘数学部‘;
 85 输入 p_loc 的值: ‘青网科技园‘
 86 原值 4: v_loc newdept.loc%type:=&p_loc;
 87 新值 4: v_loc newdept.loc%type:=‘青网科技园‘;
 88 
 89 7.根据id查询一行数据
 90 set serverout on
 91 declare
 92 v_deptno newdept.deptno%type:=&p_deptno;
 93 v_dname newdept.dname%type;
 94 begin
 95 select dname into v_dname from newdept where deptno=v_deptno;
 96 dbms_output.put_line(v_deptno||‘----‘||v_dname);
 97 end;
 98 /
 99 ~~输出结果
100 输入 p_deptno 的值: 1
101 原值 2: v_deptno newdept.deptno%type:=&p_deptno;
102 新值 2: v_deptno newdept.deptno%type:=1;
103 1----市场部
104 
105 8.查询多个字段,同时进行多个变量的赋值
106 set serverout on
107 declare
108 v_deptno newdept.deptno%type:=&p_deptno;
109 v_dname newdept.dname%type;
110 v_loc newdept.loc%type;
111 begin
112 select dname,loc into v_dname,v_loc from newdept where deptno=v_deptno;
113 dbms_output.put_line(v_deptno||‘----‘||v_dname||‘----‘||v_loc);
114 end;
115 /
116 ~~输出结果
117 输入 p_deptno 的值: 1
118 原值 2: v_deptno newdept.deptno%type:=&p_deptno;
119 新值 2: v_deptno newdept.deptno%type:=1;
120 1----市场部----阜阳市
121 
122 9.创建赋值部分的表结构
123 create table newemp
124 as
125 select empno,ename,job,sal from emp where 1=2;
126 
127 10.查询所有字段且赋值
128 set serverout on
129 declare
130 v_empno newemp.empno%type:=&p_empno;
131 v_ename newemp.ename%type;
132 v_job newemp.job%type;
133 v_sal newemp.sal%type;
134 begin
135 select
136 empno,ename,job,sal
137 into
138 v_empno,v_ename,v_job,v_sal
139 from
140 newemp
141 where
142 empno=v_empno;
143 dbms_output.put_line(v_empno||‘----‘||v_ename||‘----‘||v_job||‘----‘||v_sal);
144 end;
145 /
146 
147 
148 
149 10.为newemp添加数据
150 set serverout on
151 declare
152 v_empno newemp.empno%type:=&p_empno;
153 v_ename newemp.ename%type:=&p_ename;
154 v_job newemp.job%type:=&p_job;
155 v_sal newemp.sal%type:=&p_sal;
156 begin
157 insert into newemp(empno,ename,job,sal) values(v_empno,v_ename,v_job,v_sal);
158 commit;
159 end;
160 /
161 
162 11.%type的用法:定义变量时,让变量的数据类型,长度动态的和表中的数据类型,长度动态的保持一致
163 查询赋值:select 字段1,字段2,...into 变量1,变量2,...from表名 where条件
164 set serverout on
165 declare
166 v_empno newemp.empno%type:=&p_empno;
167 v_ename newemp.ename%type;
168 v_job newemp.job%type;
169 v_sal newemp.sal%type;
170 begin
171 --使用select...into进行查询赋值操作
172 select
173 empno,ename,job,sal
174 into
175 v_empno,v_ename,v_job,v_sal
176 from
177 newemp
178 where
179 empno=v_empno;
180 --打印输出
181 dbms_output.put_line(v_empno||‘---‘||v_ename||‘---‘||v_job||‘---‘||v_sal);
182 end;
183 /
184 
185 12.通过简单的java的类和对象去了解oracle的行数据类型的变量
186 数据库 java
187 表名 类名
188 一行数据 一个对象
189 列名 属性名
190 
191 emp表
192 列:empno,ename,job,sal
193 
194 Emp类
195 属性:empno,ename,job,sal
196 
197 类类型 对象类型(包括很多属性)
198 Emp emp(包括Emp中所有属性)
199 
200 表类型 行类型
201 emp %rowtype(包括emp表中所有属性)
202 
203 题目:查询某条完整的数据,赋值行变量(表对象==携带完整的某行数据)
204 set serverout on
205 declare
206 --定义存储条件的变量
207 v_empno newemp.empno%type:=&p_empno;
208 
209 --定义表对象==行类型变量
210 rec_newemp newemp%rowtype;
211 begin
212 --条件查询某条数据赋值给定义好的行类型变量(表对象)
213 select
214 *
215 into
216 rec_newemp 
217 from 
218 newemp
219 where
220 empno=v_empno
221 --因为上面将所有列值赋值给了行对象,因此打印输出时,通过行对象,列名的的形式调用
222 dbms_output.put_line(rec_newemp.empno||‘---‘||rec_newemp.ename||‘---‘||rec_newemp.job||‘---‘||rec_newemp.sal);
223 end;
224 /
225 
226 13.对newdept插入一行
227 
228 set serverout on
229 declare
230 v_deptno newdept.deptno%type:=&p_deptno;
231 v_dname newdept.dname%type:=&p_dname;
232 v_loc newdept.loc%type:=&p_loc;
233 v_info varchar2(100);
234 begin
235 insert into newdept(deptno,dname,loc) values(v_deptno,v_dname,v_loc)
236 returning deptno||‘--‘||dname||‘---‘||loc
237 into v_info;
238 dbms_output.put_line(v_info);
239 end;
240 /
241 输入 p_deptno 的值: 1
242 原值 2: v_deptno newdept.deptno%type:=&p_deptno;
243 新值 2: v_deptno newdept.deptno%type:=1;
244 输入 p_dname 的值: 12
245 原值 3: v_dname newdept.dname%type:=&p_dname;
246 新值 3: v_dname newdept.dname%type:=12;
247 输入 p_loc 的值: 25
248 原值 4: v_loc newdept.loc%type:=&p_loc;
249 新值 4: v_loc newdept.loc%type:=25;
250 1--12---25
251 14.判断
252 题目:薪资小于1000涨薪50
253 set serverout on
254 declare
255 v_empno newemp.empno%type:=&p_empno;
256 v_sal newemp.empno%type;
257 v_info varchar2(100);
258 begin
259 select sal into v_sal from newemp where empno=v_empno;
260 dbms_output.put_line(v_empno||‘的原始薪资为:‘||v_sal);
261 if v_sal<1000 then
262 update newemp set sal=sal+50 where empno=v_empno
263 returning empno||‘涨薪50后的薪资为:‘||sal
264 into v_info;
265 dbms_output.put_line(v_info);
266 else
267 dbms_output.put_line(‘已经能解决温饱,不在加薪‘);
268 end if;
269 end;
270 /
271 延伸:
272 set serverout on
273 declare
274 v_empno newemp.empno%type:=&p_empno;
275 v_sal newemp.empno%type;
276 v_info varchar2(100);
277 begin
278 select sal into v_sal from newemp where empno=v_empno;
279 dbms_output.put_line(v_empno||‘的原始薪资为:‘||v_sal);
280 if v_sal<1000 then
281 update newemp set sal=sal+200 where empno=v_empno
282 returning empno||‘涨薪200后的薪资为:‘||sal
283 into v_info;
284 dbms_output.put_line(v_info);
285 
286 else if 1000<v_sal<2000 then
287 update newemp set sal=sal+100 where empno=v_empno
288 returning empno||‘涨薪100后的薪资为:‘||sal
289 into v_info;
290 dbms_output.put_line(v_info);
291 
292 else if 2000<v_sal<3000 then
293 update newemp set sal=sal+50 where empno=v_empno
294 returning empno||‘涨薪50后的薪资为:‘||sal
295 into v_info;
296 dbms_output.put_line(v_info);
297 else
298 dbms_output.put_line(‘生活已经小康,不在加薪‘);
299 end if;
300 end;
301 /
302 
303 loop循环:
304 语法:
305 Loop
306 要执行的语句;
307 EXIT when<条件语句> 循环退出条件
308 --条件满足,退出循环语句
309 END LOOP;
310 
311 循环打印1-10之间的值
312 set serverout on
313 declare
314 i number(10):=1;
315 begin
316 loop
317 dbms_output.put_line(i);
318 exit when i=10;
319 
320 i:=i+1;
321 
322 end loop;
323 end;
324 /
325 
326 15.while循环
327 语法 
328 定义循环的初始条件
329 WHILE<布尔表达式> LOOP
330 要执行的语句;
331 END LOOP;
332 案例:循环打印1-10之间的值
333 set serverout on
334 declare
335 --定义循环的初始值
336 i number:=1;
337 begin
338 --定义循环结构且定义循环条件
339 while i<=10 loop
340 --定义循环内容
341 dbms_output.put_line(i);
342 --定义迭代语句
343 i:=i+1;
344 end loop;
345 end;
346 /
347 语法3:
348 [<<循环标签>>]
349 for 循环计数器 in [reverse] 下限 ...上限 loop
350 要执行的语句
351 end loop[循环标签];
352 案例:
353 set serverout on
354 begin
355 for i in 0..10 loop
356 dbms_output.put_line(i);
357 end loop;
358 end;
359 /
360 16.游标==java的集合
361 游标分为:显示游标,隐式游标
362 隐式游标调用:SQL%
363 drop table emp;
364 create table emp
365 as
366 select empno,ename,job,sal,deptno from newemp where 1=1;
367 set serverout on
368 declare
369 --定义和newemp表中deptno同类型同长度的变量,用来接受系统的值
370 v_deptno newemp.deptno%type:=&p_deptno;
371 begin
372 --删除某个部门下的员工
373 delete from newemp where deptno=v_deptno;
374 --增删改操作时,会存在隐式游标吗,rowcount表示受影响的行数
375 if SQL%ROWCOUNT>0 then
376 dbms_output.put_line(v_deptno||‘下的员工已经删除‘);
377 else
378 --如果某个部门下没有员工,则删除某个部门的信息
379 delete from newdept where deptno=v_deptno;
380 dbms_output.put_line(v_deptno||‘所对应的部门信息已经删除‘);
381 end if;
382 end;
383 /
384 
385 
386 16.删除数据,如果没有数据删除表
387 set serverout on
388 declare
389 v_deptno newemp.deptno%type:=&p_deptno;
390 begin
391 delete from newemp where deptno=v_deptno;
392 if SQL%rowcount>0 then
393 dbms_output.put_line(v_deptno||‘下的员工已经删除‘);
394 else
395 delete from newdept where deptno=v_deptno;
396 dbms_output.put_line(v_deptno||‘的部门信息已经删除‘);
397 end if;
398 end;
399 /
400 
401 17.定义游标 并获取游标
402 set serverout on
403 declare
404 v_deptno newdept.deptno%type;
405 v_dname newdept.dname%type;
406 cursor cursor_newdept
407 is
408 select deptno,dname from newdept;
409 begin
410 open cursor_newdept;
411 fetch cursor_newdept into v_deptno,v_dname;
412 while cursor_newdept%found loop
413 dbms_output.put_line(v_deptno||‘----‘||v_dname);
414 fetch cursor_newdept into v_deptno,v_dname;
415 end loop;
416 close cursor_newdept;
417 end;
418 /
419 
420 18.使用行记录变量去接受显示游标查询的结果
421 set serverout on
422 declare
423 record_newemp newemp%rowtype;
424 cursor cursor_newemp
425 is
426 select * from newemp;`
427 begin
428 open cursor_newemp;
429 fetch cursor_newemp into record_newemp;
430 while cursor_newemp%found loop
431 dbms_output.put_line(record_newemp.empno||‘----‘||record_newemp.ename);
432 fetch cursor_newemp into record_newemp;
433 end loop;
434 close cursor_newemp;
435 end;
436 /
437 19.有参数的游标
438 set serverout on
439 declare
440 record_newemp newemp%rowtype;
441 cursor cursor_newemp(p_deptno newdept.deptno%type default 10)
442 is
443 select * from newemp where deptno=p_deptno;
444 begin
445 open cursor_newemp(20);
446 fetch cursor_newemp into record_newemp;
447 while cursor_newemp%found loop
448 dbms_output.put_line(record_newemp.empno||‘----‘||record_newemp.ename||‘----‘||record_newemp.deptno);
449 fetch cursor_newemp into record_newemp;
450 end loop;
451 close cursor_newemp;
452 end;
453 /
454 
455 20.低于2000的人加50
456 set serverout on
457 declare
458 record_newemp newemp%rowtype;
459 cursor cursor_newemp
460 is
461 select * from newemp;
462 begin
463 open cursor_newemp;
464 loop
465 fetch cursor_newemp into record_newemp;
466 exit when cursor_newemp%notfound;
467 if record_newemp.sal<2000 then
468 update newemp set sal=sal+50 where empno=record_newemp.empno;
469 dbms_output.put_line(record_newemp.empno||‘----‘||record_newemp.ename||‘----‘||‘薪资加50‘);
470 else
471 dbms_output.put_line(record_newemp.empno||‘----‘||record_newemp.ename||‘----‘||‘生活已经小康,不在加薪‘);
472 end if;
473 fetch cursor_newemp into record_newemp;
474 end loop;
475 close cursor_newemp;
476 end;
477 /

 

Oracle的基础案例

上一篇:viewPager的切换动画


下一篇:JavaScript设计模式读书笔记之一:接口