PL/SQL语法总结

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;
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值