首页 > 数据库技术 > 详细

plsql基础

时间:2019-12-09 23:29:59      阅读:104      评论:0      收藏:0      [点我收藏+]

pl/sql

Procedual language/structured query

language(程序语言/结构化查询语言)

sql语言只是访问,操作数据库的语言,而并不是一种程序设计语言,因此不能用于程序开发
pl/sql是oracle在标准sql语言上进行过程性扩展后形成的程序设计语言

plsql匿名代码块结构

declare
? --声明部分,主要包含变量的声名,类型的定义等

begin
? --plsql代码,主要包含流程控制语句,增删改查语句

exception
? --异常处理代码,当程序出现错误时执行这一部分

end;

注释

declare
? --单行注释,两个中划线后面的内容为注释
begin
? /*多行注释
??? 我是注释
??? **,我也是注释
? */
end;

变量和常量

  • 变量
    • 内容可变,一般以v_开头
  • 常量
    • 内容不能变更,声明时用constant关键字,可以用c开头

变量的定义

变量名 数据类型[:=默认值];

常量的定义

常量名 constant 数据类型:=初始值;

变量名,常量名,存储过程名,函数名,触发器名等,都叫做标识符

  • 标识符的命名规范
    • 可以有数字,字母,下划线,$等,只能以字母开头,长度不超过30个字符
    • 不能使用oracle中的关键字作为标识符的名字
declare
? v_str1 varchar2(20);? --声明字符串变量
? v_str2 varchar200(20):='abc';?? --声明变量时设置初始值
? PI constant number(15,14):=3.1415926;  --声明常量
begin
? v_str1:='abc';? --将变量的值设置为'abc'
? dbms_output.put_line(v_str1||v_str2||PI);? --输出到屏幕
end;

输出屏幕abcabc3.1415926

特殊的数据类型

1,%type类型

  • type类型
    • 将数据库表中的某个字符的类型,作为一个类型
  • 语法
    • 变量名 表名.列名%type
? /*empno的类型是number(4),v_empno的类型就是number(4),相当于v_empno 
number(4);*/

? v_empno emp.empno%type;

2,record类型

record类型:是记录类型,它可以存放多个值

使用时需要先声名一个记录类型(定义一个类型),根据定义的类型去声名变量

type 类型名 is record(
   属性名 数据类型 [not null] [:=默认值],
   属性名 数据类型,
   属性名 数据类型,
   ..
   属性名 数据类型
);

记录类型变量的声名:

变量名 记录类型名;

记录类型的使用:

不能直接使用变量名等于一个普通的数据.

变量名.属性名:=值; --记录类型的赋值(给记录类型的属性赋值)
变量名.属性名; --取一个记录变量的属性值 

例子

declare
? --声明一个记录类型,有两个属性,一个数字类型,一个字符串类型
? type my_type is record(
??? n number(4):=1,
??? str varchar2(20)
? );
? 
? --声明一个记录类型变量
? v_rec my_type;
  
begin

? --打印记录类型默认的n属性的值
? dbms_output.put_line(v_rec.n);

? --修改记录类型的属性值
? v_rec.n:=9;
? v_rec.str:='abc';

? --打印n和str的值
? dbms_output.put_line(v_rec.n||' - '||v_rec.str);
end;

3,%rowtype类型

  • %rowtype类型:
    • 它是%type类型和record类型的结合,表示声名一个记录类型,它属性和某个表中的列相同(包含属性名和列名的相同,以及数据类型也相同)

声明

变量名 表名%rowtype;

使用

变量名.属性名

例子

declare
  /*声明一个dept表的%rowtype 类型的变量
? 它相当于如下代码
? type dept_type is record(
??? deptno dept.deptno%type,
??? dname dept.dname%type,
??? loc dept.loc%type
? );*/
? v_dept dept%rowtype;

begin

? --给v_dept的各个属性赋值
? v_dept.DEPTNO:=10;
? v_dept.DNAME:='CLERK';
? v_dept.LOC:='qingdao';

? --打印v_dept的属性值
? dbms_output.put_line(v_dept.deptno||' - '||
?????????????????????? v_dept.DNAME||' - '||
?????????????????????? v_dept.LOC);
end;

plsql基础

原文:https://www.cnblogs.com/inmeditation/p/12013593.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!