declare
v_hello varchar(20);
begin
v_hello := 'Hello Oracle';
dbms_output.put_line(v_hello);
end;
begin
dbms_output.put_line('hello');
end;
set serveroutput on;
begin
dbms_output.put('a1');
dbms_output.put('b2');
dbms_output.new_line();--输出缓存中的信息,新起一行
dbms_output.put_line('aaaaa');--会输出缓存中的信息和当前的信息,不会换行
end;
declare
a number(3):=&请输入a;
b number(3):=&请输入b;
v_num number(3);
begin
a:=10;
v_num:=a+b;
dbms_output.put_line(v_num);
dbms_output.put_line(a||'+'||b||'='||v_num); --||符号进行拼接
end;
--绑定表字段类型%type
--1.%type:变量和字段类型的绑定
--2.%rowtype:表结构中的一条记录的绑定
declare
v_name student.name%type;
v_sex varchar2(3);
begin
select name,sex into v_name,v_sex from student where id='901';
dbms_output.put_line(v_name||v_sex);
end;
declare
v_student student%rowtype;
begin
select *into v_student from student where id='901';
dbms_output.put_line(v_student.name||v_student.sex);
end;
--控制语句
declare
v_age number(3):=&请输入年龄;
begin
dbms_output.put_line(v_age);
if v_age =18 then
dbms_output.put_line('刚成年');
elsif v_age >18 then
dbms_output.put_line('成年已久');
else
dbms_output.put_line('未成年');
end if;
end;
--case语句
declare
v_age number(3):=&请输入年龄;
begin
dbms_output.put_line(v_age);
case
when v_age =18 then
dbms_output.put_line('刚成年');
when v_age >18 then
dbms_output.put_line('成年已久');
else
dbms_output.put_line('未成年');
end case;
end;
--循环语句
--loop循环
declare
v_i number(3):=0;
begin
loop
dbms_output.put_line(v_i);
exit when v_i>=10; --退出循环;
v_i:=v_i+1;
end loop;
end;
-- whlie
declare
v_i number(3):=0;
begin
while v_i<=10 loop
dbms_output.put_line(v_i);
v_i:=v_i+1;
end loop;
end;
--for
begin
for i in 1..10 loop
dbms_output.put_line(i);
end loop;
end;
--动态sql
declare
v_sql varchar2(100);
v_name student.name%type;
v_id number(3):='901';
begin
v_sql:='select name from student where id=:id';
execute immediate v_sql
into v_name --查询结果中绑定到对应变量中
using v_id; --对sql中的占位符赋值
dbms_moutput.put_line(v_name);
end;
declare
v_name student.name%type :='&请输入姓名';
v_sex student.sex%type :='&请输入性别';
v_sql varchar2(200);
v_row student%rowtype;
begin
v_sql:='select * from student where 1=1';
if v_name is not null then
v_sql:=v_sql||'and name like ''%'||v_name||'%''';
end if;
if v_sex is not null then
v_sql:=v_sql||'and sex ='''||v_sex||'''';
end if;
execute immediate v_sql into V_row;
dbms_output.put_line(v_row.name||'---'||v_row.sex||'---'||v_row.department);
end;
/*
在运行程序时出现的错误叫做异常
发生异常后,语句将停止执行,控制权转移到PL/SQL块的异常处理部分
异常有两种类型
·预定义异常-当PL/SQL程序违反Oracle规则或超越系统限制时隐式引发
·用户定义异常-用户可以在PL/SQL块的声明部分定义异常,自定义的异常通过RAISE语句显式引发处理系统预定义异常:
*/
--异常应用
--系统预定义异常:
--too_many_rows 多行数据
--no_data_found 找不到
--others 其他异常
declare
v_name student.name%type;
begin
select name into v_name from student where id='900';
dbms_output.put_line(v_name);
--异常语句块
exception
when too_many_rows then
dbms_output.put_line('返回行数太多');
when on_date_found then
dbms_output.put_line('找不到数据');
when others then
dbms_output.put_line('找不到数据');
end;
declare
myException exception;
v_name student.name%type:='张三1';
begin
if v_name not in('张三','李四','王五') then
--满足条件就抛出自定义异常
raise myException;
else
dbms_output.put_line('--------');
end if;
dbms_output.put_line('---6666---');
exception
when MyException then
dbms_output.put_line('----触发自定义异常----');
when others then
dbms_output.put_line('----其他异常----');
end;