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;