hello world
sqldeveloper菜单栏–>查看–>DBMS输出
sqlplus界面,最后加上/才能执行程序,输入set serveroutput on回车后才能显示输出的结果
begin
dbms_output.put_line('hello world');
end;
普通变量
赋值两种办法,:=或者select into
declare
v_no char(5) := '002';
v_name varchar2(10);
begin
select 姓名 into v_name from xsb where 学号 = v_no;
dbms_output.put_line('学号:'||v_no||' 姓名:'||v_name);
end;
引用型变量
表名.列名%type 表示类型和指定列保持一致
declare
v_no xsb."学号"%type := '002';
v_name xsb."姓名"%type;
begin
select 姓名 into v_name from xsb where 学号 = v_no;
dbms_output.put_line('学号:'||v_no||' 姓名:'||v_name);
end;
记录型变量
表名%rowtype 接收表中的一行数据,相当于java的对象
declare
v_no xsb."学号"%type := '002';
v_stu xsb%rowtype; --v_stu存放表的一行数据
begin
select * into v_stu from xsb where 学号 = v_no;
dbms_output.put_line(v_stu.学号||v_stu.姓名);
end;
注意select后面必须是*,不然会报错
条件分支
if 条件 then 执行语句
elsif 条件 then 执行语句
else 执行语句
end if;
注意elsif不要写错,最后不要忘记写end if
declare
v_no number := 6;
begin
if v_no > 5 then dbms_output.put_line('大于5');
elsif v_no < 5 then dbms_output.put_line('小于5');
else dbms_output.put_line('等于5');
end if;
end;
loop循环
loop
exit when 退出循环的条件
end loop;
declare
v_cnt number := 1;
v_sum number := 0;
begin
loop
exit when v_cnt > 10;
v_sum := v_sum + v_cnt;
v_cnt := v_cnt + 1;
end loop;
dbms_output.put_line(v_sum);
end;
无参游标
用于临时存储一个查询返回的多行数据,通过遍历游标可以访问该集合。
使用游标的过程:声明,打开,读取,关闭
cursor 游标名[参数列表] is 查询语句
open 游标名
fetch 游标名 into 变量列表
close 游标名
游标的属性:%ROWCOUNT,%FOUND,%NOTFOUND,%ISOPEN
--查询所有学生的信息
declare
cursor c_xsb is select 学号, 姓名 from xsb;
v_no xsb."学号"%type;
v_name xsb."姓名"%type;
begin
open c_xsb;
loop
fetch c_xsb into v_no, v_name;
exit when c_xsb%notfound; --如果没查询到结果,退出循环
dbms_output.put_line(v_no||v_name);
end loop;
close c_xsb;
end;
注意fetch的位置,要放在exit when c_xsb%notfound的前面
带参游标
--查询计算机专业的学生信息
declare
cursor c_xsb(v_specialty xsb."专业"%type) is select 学号, 姓名 from xsb where "专业" = v_specialty;
v_no xsb."学号"%type;
v_name xsb."姓名"%type;
begin
open c_xsb('计算机'); --传入参数
loop
fetch c_xsb into v_no, v_name;
exit when c_xsb%notfound;
dbms_output.put_line(v_no||v_name);
end loop;
close c_xsb;
end;
存储过程(无参)
create or replace procedure 过程名称[参数列表] as
变量
begin
执行语句
end[过程名称];
create or replace procedure p_hello as
begin
dbms_output.put_line('hello');
end p_hello;
调用过程:
begin
p_hello;
end;
存储过程(带输入参数)
--根据学号查询某学生的专业
create or replace procedure p_xsb(v_no in xsb."学号"%type) as
v_specialty xsb.专业%type;
begin
select 专业 into v_specialty from xsb where 学号 = v_no;
dbms_output.put_line(v_specialty);
end p_xsb;
调用过程:
begin
p_xsb('001');
end;
存储过程(带输出参数)
--根据学号查询某学生的专业
create or replace procedure p_xsb(i_no in xsb."学号"%type, o_specialty out xsb.专业%type) as
begin
select 专业 into o_specialty from xsb where 学号 = i_no;
end p_xsb;
调用过程:
declare
v_specialty xsb.专业%type;
begin
p_xsb('003', v_specialty);
dbms_output.put_line(v_specialty);
end;