续
8、运算符
1>、关系运算符:
=、<> ~= != ^= 、>、>=、<、<=
2>、一般运算符:
+、-、*、/、:=(赋值号)、..(范围运算符)、||、=>(关系号)
3>、逻辑运算符:
is null、in、and、or、not、between and
4>、注意事项:
1)变量赋值:先声明再赋值。
v_storePhone varchar2(11); --手机号码
v_storePhone := '158' || lpad(abs(dbms_random.random), 8, 0);
2)null+数字 为null,null||字符串 为字符串
3)boolean类型的值只能取 true false null3个值
9、流程控制语句
1) 语句分类: 控制语句(IF)、
循环语句(LOOP 、EXIT)
顺序语句(GOTO、NULL)
2) 结构说明
a)
IF <布尔表达式> THEN
PL/SQL语句和SQL语句
END IF;
b)
IF <布尔表达式> THEN
PL/SQL语句和SQL语句
ELSE
其他语句
END IF;
IF <布尔表达式1> THEN
PL/SQL语句和SQL语句1
ELSIF <布尔表达式2> THEN
其他语句1
ELSIF <布尔表达式3> THEN
其他语句2
ELSE
其他语句3
END IF;
IF语句示例
declare
v_roleId varchar2(20); --角色编号
v_result varchar2(60);
begin
for vv in (select distinct su.role_id
from test_ur su
where su.role_id in ('project_sz',
'project_bj',
'project_gz',
'project_sh')) loop
if (vv.role_id = 'project_sz') then
v_result := vv.role_id || '_表示的是_角色1';
dbms_output.put_line(v_result);
elsif (vv.role_id = 'project_sh') then
v_result := vv.role_id || '_表示的是_角色2';
dbms_output.put_line(v_result);
elsif (vv.role_id = 'project_gz') then
v_result := vv.role_id || '_表示的是_角色3';
dbms_output.put_line(v_result);
elsif (vv.role_id = 'project_bj') then
v_result := vv.role_id || '_表示的是_角色4';
dbms_output.put_line(v_result);
else
v_result := vv.role_id || '_表示的是_未知角色';
dbms_output.put_line(v_result);
end if;
end loop;
dbms_output.put_line(to_char(sysdate, 'hh24:mi:ss') || '处理成功');
end;
loop语句示例
loop
执行的语句
exit when <条件语句>; --当条件为满足时,退出循环
end loop;
--loop示例
declare
v_count number;
v_time number;
begin
v_count := 0;
loop
v_count := v_count + 1;
dbms_output.put_line('第' || v_count || '次循环');
exit when(v_count > 3);
end loop;
end;
while语句示例
while <布尔表达式> loop
执行的语句
end loop;
--while示例
declare
v_count number;
v_time number;
begin
v_count := 0;
while (v_count < 3) loop
v_count := v_count + 1;
dbms_output.put_line('第' || v_count || '次循环');
end loop;
end;
for循环语句示例
for 循环计数器 in [reverse]下限 .. 上限 loop
执行的语句
end loop;
每循环1次,计数器自动加1,加上reverse关键字则自动减1,必须为从小到大的整数,可以使用exit when 退出循环
declare
v_count number;
begin
v_count := 8;
for i in 1 .. v_count loop
dbms_output.put_line('第' || i || '次循环');
exit when(i > 3);
end loop;
end;
case when循环语法
--语法1
case 条件表达式
when 表达式结果1 then
语句1
...
when 表达式结果n then
语句n
[else 表达式结果]
end case;
--语法2
case 条件表达式
when 表达式结果1 then
语句1
...
when 表达式结果n then
语句n
[else 语句]
end case;
case when语句示例
select trunc(tur.created_date, 'dd'),
count(case
when tur.role_id = 'project_sh' then
1
else
null
end) as 角色1,
count(case
when tur.role_id = 'project_gz' then
1
else
null
end) as 角色2,
count(case
when tur.role_id = 'project_sz' then
1
else
null
end) as 角色3,
from test_ur tur
group by trunc(tur.created_date, 'dd')
order by trunc(tur.created_date, 'dd') desc;
5)goto 无条件跳转到指定标签所在部分
goto lable
…
<<lable>>
6)null 不执行任何操作的语句
待续 ......