1.pl/sql 语法:
declare(可选) 声明变量 数据类型 【:=赋值】
begin
end
在output中显示: dbms_output.put_line('HelloWorld')
begin dbms_output.put_line('wangjie'); end;
2.声明变量
间接指定
表名.字段名%type
declare
name books.author%type:='wangjie';
begin
dbms_output.put_line(name);
end;
用于指定变量的数据类型和某一个表中的某一个字段的数据类型相同
表名%rowtype
declare
roww books%rowtype;
begin
select *
into roww from books where name='朝花夕拾';
dbms_output.put_line(roww.id);
end;
声明一个变量,意味着,这个变量指的是这个表中的一行数据
可以通过变量名 . 字段名来访问存入变量中的那一行数据
直接指定
数据类型 【:=赋值】
3. 分支语句
if分支
单分支
语法: if 条件(布尔类型) then 执行体 end if;
双分支
语法:if 条件(布尔类型) then 执行体 else 执行体 end if;
例子:已知一个值0901 判断是否是生日
begin
if to_number(to_char(sysdate,'mmdd'))=0325 then dbms_output.put_line('生日');
else dbms_output.put_line('不是生日');
end if;
end;
多分支
语法:
if 条件(布尔类型) then 执行体 elsif 条件 then 执行体 ......... else 执行体 end if;
例子:定义一个变量,输入1 输出星期一
declare
week char(2):='1';
begin
if week ='1'
then dbms_output.put_line('星期一');
elsif week = '2' then dbms_output.put_line('星期二');
elsif week = '3' then dbms_output.put_line('星期三');
elsif week = '4' then dbms_output.put_line('星期四');
elsif week = '5' then dbms_output.put_line('星期五');
elsif week = '6' then dbms_output.put_line('星期六');
elsif week = '7' then dbms_output.put_line('星期日');
else dbms_output.put_line('输入有误');
end if;
end;
case分支(case表达式) : 主要用于赋值
语法
变量名 := case 变量 when 常量 then 值 when 常量 then 值 .... else 值 end;
例子:
declare
pt_week char(2):=1;
week char(8);
begin
week:=case pt_week
when '1' then '星期一'
when '2' then '星期二'
when '3' then '星期三'
when '4' then '星期四'
when '5' then '星期五'
when '6' then '星期六'
when '7' then '星期日'
else '输入有误'
end;
dbms_output.put_line(week);
end;
4. 循环
for loop循环
语法: for 变量 in[reverse] 下限..上限 loop 循环体 end loop;
注意: 变量由下限到上限
如果有reverse 反转由上限到下限
下限上限必须由小到大,否则不报任何错误,但是循环体不执行
下限上限使用整数,因为小数部分不输出
例子:
begin
for i in reverse 1..12
loop dbms_output.put_line(i);
end loop;
end;
exit的 作用: 跳出循环, 近似于Java中的break
例:
begin
for i in reverse 1..12
loop dbms_output.put_line(i);
if i=5
then exit;
end if;
end loop;
dbms_output.put_line('111');
end;
loop循环
语法:
loop 循环体 exit when 布尔型; end loop;
exit when 和end loop 之间一般只是设置步长
相当于 Java中的 do...while
while loop
语法
while 布尔型 loop 循环体 end loop;
goto关键字
设置一个<<print_label>>,goto 在循环中,用于结束循环至指定位置代码
作用: 结束循环,跳转到指定位置
null 关键字
什么都不执行,只是为了完善语法