PLSQL基本语法

--plsql的基本语法
--3个部分,声明,执行块,异常
--执行块是必须的
declare
begin

exception
end;
--最简形式
begin

end;

--声明变量:变量名 数据类型
--声明时赋值 :=
--在执行部分赋值
--not null 声明时就要赋值
--constant 声明时就要赋值,执行中不能改变
DECLARE
  a NUMBER NOT NULL := 6;
  b CONSTANT NUMBER := 7;
BEGIN
  a := 4;
  
END;
--输出变量的值
DECLARE
  a NUMBER NOT NULL := 6;
  b CONSTANT NUMBER := 7;
BEGIN
  a := 4;
  dbms_output.put_line(a);
END;
--定义记录类型
DECLARE
  --相当于创建了一个Java类
  TYPE stu_rec IS RECORD(
    v_id   BINARY_INTEGER,
    v_name VARCHAR2(20),
    v_age  NUMBER);
    --相当于创建了这个类的一个对象
  v_stu1 stu_rec;
BEGIN
  dbms_output.put_line(4);
END;

--定义记录类型,如果这个记录类型是为了保存某个表中的数据
--就不用自定义数据类型,而是可以直接引用表中的数据类型
--引用的好处,如果表的结构发生了变化,写好的plsql块不用修改
DECLARE
  --相当于创建了一个Java类
  TYPE stu_rec IS RECORD(
    v_id   student.s_id%type,
    v_name student.s_name%type,
    v_age  student.s_age%type);
    --相当于创建了这个类的一个对象
  v_stu1 stu_rec;
BEGIN
  dbms_output.put_line(4);
END;

--创建表类型
DECLARE
  --相当于创建了一个学生类的集合
  TYPE stu_table IS TABLE OF stuednt%ROWTYPE INDEX BY BINARY_INTEGER;
  --相当于创建了这个集合的实例
  stus stu_table;
BEGIN
  NULL;
END;

--在plsql程序中储存数据库中查询到的数据
--使用变量记录每一个字段的值
--记录类型是变量的集合,记录就可以保存一行数据
--表类型是记录的集合,表可以保存一个表格数据
--plsql的运算符

--变量的作用域
DECLARE
  outside NUMBER := 1;
BEGIN
  DECLARE
    inside NUMBER := 2;
  BEGIN
    NULL;
  END;
  dbms_output.put_line(outside);
  --dbms_output.put_line(inside);
END;

--另一种注释/* */,多行注释
/*这一行
这一行
还有这一行都是注释*/

--DML语句的返回值
DECLARE
  v_id NUMBER;
BEGIN
  INSERT INTO student
  VALUES
    (20, 'aa', 18, '男', '一年四班')
  RETURNING s_age INTO v_id;
  dbms_output.put_line(v_id);
END;

--获取学号为1的学生的姓名,输出来
DECLARE
  v_id   NUMBER := 1;--变量用于保存一个数据
  v_age number;
  v_name VARCHAR2(30);
BEGIN
  SELECT s_name,s_age INTO v_name,v_age FROM student WHERE s_id = v_id;
  dbms_output.put_line(v_name);
  dbms_output.put_line(v_age);
END;

--获取学号为1的学生的姓名,年龄,班级,输出来
DECLARE
  TYPE stu_rec IS RECORD(--记录类型用于保存一行数据
    v_name  student.s_name%TYPE,
    v_age   student.s_age%TYPE,
    v_class student.s_class%TYPE);
  stu1 stu_rec;--记录类型的一个实例
BEGIN
  --查询数据表中的一行记录,保存在记录类型的实例中
  SELECT s_name, s_age, s_class INTO stu1 FROM student WHERE s_id = 1;
  dbms_output.put_line(stu1.v_name);
  dbms_output.put_line(stu1.v_age);--通过实例名.变量名来使用变量
  dbms_output.put_line(stu1.v_class);
END;

--获取一行记录中的一部分,使用上面的形式
--获取整行更简单
DECLARE
  stu1 student%ROWTYPE; --生成和学生表的一行相匹配的记录类型,并生成实例
BEGIN
  --查询数据表中的一行记录,保存在记录类型的实例中
  --通过实例名.变量名来使用变量
  --这种情况下,变量名就是列名
  SELECT * INTO stu1 FROM student WHERE s_id = 1;
  dbms_output.put_line(stu1.s_name||','||stu1.s_age||','||stu1.s_class||','||stu1.s_sex);
END;

--表类型的使用
--语法:TYPE 表类型名 IS TABLE OF 表中保存的数据类型 INDEX BY BINARY_INTEGER;
DECLARE
  TYPE int_table IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
  ints int_table;
BEGIN
  ints(0) := 10;
  ints(-5) := -10;
  dbms_output.put_line(ints(0));
  dbms_output.put_line(ints(-5));
END;

--查询学号为1-3的学生的资料,输出来
DECLARE
--语法:TYPE 表类型名 IS TABLE OF 引用学生表的行类型 INDEX BY BINARY_INTEGER;
  TYPE stu_table IS TABLE OF student%ROWTYPE INDEX BY BINARY_INTEGER;
  stus stu_table;
BEGIN
  --多行数据赋值给表类型,要使用BULK COLLECT INTO
  SELECT * BULK COLLECT INTO stus FROM student WHERE s_id <= 3;
  dbms_output.put_line(stus(1).s_name);
  dbms_output.put_line(stus(2).s_name);
  dbms_output.put_line(stus(3).s_name);
END;


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值