mysql中编写匿名块_Oracle数据库之Oracle_PL/SQL(1) 匿名块

本文主要向大家介绍了Oracle数据库之Oracle_PL/SQL(1) 匿名块,通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助。

1. PL/SQL 简介

PL/SQL是一种比较复杂的程序设计语言, 用于从各种环境中访问Oracle数据库。

为什么使用PL/SQL?

Orade是一种关系型数据库, 用来访问关系型数据库的语言是 “结构化査询语言”SQL。

SQL是一种第四代语言,只描述做什么,不描述如何做。

一代语言:01

二代语言:汇编

三代语言:过程(条件判断、循环)

四代语言:sql  DELETE FROM emp where major='MANAGER';

第四代语言相对简单,提供了较少的命令,它将用户与底层的基本数据结构和算法隔离开来。

但缺少第三代语言对过程(条件判断、循环)的处理。

PL/SQL(Procedural Language/SQL)过程性SQL语言,通过增加了过程性控制结构有效的

扩充了SQL的功能。

2. PL/SQL基础

2.1 PL/SQL块

PL/SQL中的基本単位是“块” (block)。

所有的 PL/SQL程序都是由块构成的,

这些块可以顺序出现,也可以相互进行嵌套。

分类:

匿名块:没有名字,只能被执行一次。

函数:

存储过程:

包:

触发器:

匿名块语法:

declare

声明部分;

begin

执行部分;

exception

异常处理部分;

end;

第一个例子:

begin

null;

--dbms_output.put_line('hello');

end;

2.2 词法单位

词法单位是一个字符序列,包括:

大写和小写的字母,A~Z和a~z

数字,0~9

非显示的空字符,空格、回车、Tab键

数学符号,+ - * / > < =

间隔符号,() [] ? % # ! ;

这些符号可以在PLSQL中使用,

PLSQL中不区分大小写(引号内的字符串除外)。

2.2.1 标识符

标识符是用来给PLSQL对象(变量、游标、类型、函数、存储过程、包、触发器等)命名的。

必须以字母开头,包括字母、数字、_、#、$,其余字符则是非法的。

标识符最长30个字符。

变量命名: v_***

参数命名: p_***

函数命名: func_***

过程命名: proc_***

包命名:   pkg_***

触发器命名: tri_***

保留字:被oracle已使用的标识符称为保留字,不能使用保留字作为标识符。

标引标识符:双引号内的标识符称为标引标识符,标引标识符是区分大小写的。

2.2.2 分界符

算数运算符:+ - * /

逻辑运算符:= > < >= <= != <>

注释符:--   /*  */

字符串连接符:||

赋值符: :=

2.2.3 文字

文字是一个不能成为标识符的字符、数字、布尔值。

例如:'ABC',23,true,false,null

2.2.4 注释

注释增强了程序的可读性、使程序更容易被理解。

注释在编译时会被编译器忽略。

单行注释:--

多行注释:/*  */

2.3 变量声明

变量是一些内存单元,可以在变量中存储数据。

变量在块的声明部分被定义。

每个变量都有一个特定的类型及长度。

2.3.1 声明语法

变量名  类型(长度) [not null] [:=默认值];

举例:

declare

v_number number:=45;

begin

dbms_output.put_line(v_number);

end;

字符串长度限制在范围 (1...32767)

declare

v_char   varchar2(20);

begin

v_char:='abcde';

dbms_output.put_line(v_char);

end;

declare

v_date   date;

begin

v_date:=sysdate;

dbms_output.put_line(v_date);

end;

The VARCHAR datatype is currently synonymous with the VARCHAR2 datatype.

Oracle recommends that you use VARCHAR2 rather than VARCHAR.

In the future, VARCHAR might be defined as a separate datatype used

for variable-length character strings compared with different comparison semantics.

2.3.2 变量初始化

如果定义变量时没有给初始化值,默认被赋值为null。

declare

v_char   varchar2(20);

begin

dbms_output.put_line(v_char);

end;

如果声明时指定了not null,那么变量就必须被初始化。

declare

v_char   varchar2(20) not null;

begin

dbms_output.put_line(v_char);

end;

如果声明时指定了constant,那么变量就必须被初始化,且不能被修改。

declare

v_char constant varchar2(20):='PLSQL';

begin

dbms_output.put_line(v_char);

end;

declare

v_char constant varchar2(20):='PLSQL';

begin

v_char:='abcde';

dbms_output.put_line(v_char);

end;

在声明中可以用default来替换赋值符号:=

declare

v_char   varchar2(20) default 'abcd';

begin

v_char:='abcde';

dbms_output.put_line(v_char);

end;

在声明中,每一行只能声明一个变量。

declare

v_char,v_char2   varchar2(20);

begin

v_char:='abcde';

dbms_output.put_line(v_char);

end;

declare

v_char   varchar2(20);

v_char2  varchar2(20);

begin

v_char:='abcde';

dbms_output.put_line(v_char);

end;

2.4 PL/SQL类型

2.4.1 使用%TYPE

变量可以用来存储表中的数据,

变量应该和表中的列具有相同的数据类型。

declare

v_ename   varchar2(4);

begin

select ename into v_ename from emp where empno=7788;

dbms_output.put_line(v_ename);

end;

declare

v_ename   emp.ename%type;

begin

select ename into v_ename from emp where empno=7788;

dbms_output.put_line(v_ename);

end;

2.4.2 使用%ROWTYPE

declare

v_emp   emp%rowtype;

begin

select * into v_emp from emp where empno=7788;

dbms_output.put_line(v_emp.ename);

end;

2.4.3变量作用域和可见性

变量的作用域是可以访问该变量的程序部分。

对于PLSQL变量,作用域就是从变量声明开始直到该块的结束。

变量超出作用域后,系统自动回收变量的内存空间。

2.5表达式和运算符

2.5.1赋值

变量:=表达式;

出现在:=左边的称为左值,出现在:=右边的称为右值。

左值必须是指向实际的存储单元,即右值被写入的内存位置。

所有的左值都是变量。

declare

v_number number;

begin

v_number:=5*2;

dbms_output.put_line(v_number);

end;

每行语句只能对一个变量赋值。

declare

v_number number;

v_number2 number;

begin

v_number:=v_number2:=5*2;

dbms_output.put_line(v_number);

end;

2.5.2 表达式

PLSQL表达式是右值。

表达式单独作为一个语句使用是无效的。

表达式只能是语句的一部分。

declare

v_number number;

begin

5*2;

dbms_output.put_line(v_number);

end;

本文由职坐标整理并发布,希望对同学们学习Oracle有所帮助,更多内容请关注职坐标数据库Oracle数据库频道!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/397097.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安装了多个Oracle11g的客户端,哪个客户端的tnsnames.ora会起作用?

如果我们由于需要安装了多个Oracle的client&#xff0c;哪个客户端的tnsnames.ora会起作用呢&#xff1f; 答案是&#xff1a; 在安装好clinent端后&#xff0c;安装程序会把client的bin目录放到path里面&#xff0c;path中在前面的client会被首先搜索&#xff0c;其中的tnsnam…

电脑显示连接了网络但是不能上网_为什么电脑插上网线显示已连接却上不了网...

尝试断一下网&#xff0c;或者重启一下系统看一下是否解决&#xff1b;也可能是开启了网络代理&#xff0c;可以重置一下浏览器或者网络设置&#xff1b;还可以使用安全管家软件&#xff0c;扫描一下网络设置。以下是详细介绍&#xff1a;1、有时候系统显示已经连接其实并没有真…

Atcoder ARC101 E 树dp

https://arc101.contest.atcoder.jp/tasks/arc101_c 题解是也是dp&#xff0c;好像是容斥做的&#xff0c;但是看不懂&#xff0c;而且也好像没讲怎么变n^2&#xff0c;看了写大佬的代码&#xff0c;自己理解了一下 #include <bits/stdc.h> #include <ext/pb_ds/assoc…

compress命令--Linux命令应用大词典729个命令解读

内容来源于人民邮电出版社《Linux命令应用大词典》讲述729个命令&#xff0c;1935个例子学习Linux系统的参考书、案头书&#xff0c;遇到不懂的命令或命令选项一查即可争取每天都发布内容本文出自 “airfish2000” 博客&#xff0c;更多命令查看博客&#xff1a;http://airfish…

javaweb学习总结(三十九)——数据库连接池

javaweb学习总结(三十九)——数据库连接池 数据库连接池的实现及原理 JNDI 在 J2EE 中的角色转载于:https://www.cnblogs.com/daishuguang/p/5041845.html

python getopterror_python3 getopt用法

python channel_builder.py -s /Users/graypn/ -d /Users/graypn/Documents -m 7 --outreport/xx.html参数也分长格式和短格式短格式&#xff1a;-s长格式&#xff1a;--sourceopts, args getopt.getopt(sys.argv[1:], "hs:d:m:v:p:c:",["help", "sr…

excel删除空行_Excel里99.9%的人都踩过的坑,早看早避开!

本文作者丨可可&#xff08;小 E 背后的小仙女&#xff09;本文由「秋叶 Excel」原创发布如需转载&#xff0c;请在公众号发送关键词「转载」查看说明2019 年上班第一天感觉怎么样呢&#xff1f;望着满屏幕铺天盖地的表格&#xff0c;我只能摸摸自己还没下去的小肚子&#xff0…

CentOS 6.5 Zabbix-agent3.2 安装 1.0版

1.关闭防火墙service iptables stop2.更换源、安装zabbix-agentrpm -ivh http://repo.zabbix.com/zabbix/3.2/rhel/6/x86_64/zabbix-release-3.2-1.el6.noarch.rpmyum install -y zabbix-agent3.修改配置文件vim /etc/zabbix/zabbix_agentd.confServer192.168.8.228 ser…

centos下利用httpd搭建http服务器方法

centos下利用httpd搭建http服务器方法 1. 解决的问题 在开发测试过程中&#xff0c;分析图片任务需要将图片保存在服务器端&#xff0c;通过url来访问和下载该图片&#xff0c;这就需要使用一台图片服务器&#xff0c;但常常遇到图片服务器匮乏的情况&#xff0c;为了解决该问题…

[转]Java7中的ForkJoin并发框架初探(上)——需求背景和设计原理

详见&#xff1a; http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp83 这篇我们来简要了解一下JavaSE7中提供的一个新特性 —— Fork Join 框架。 0. 处理器发展和需求背景 回想一下并发开发的初衷&#xff0c;其实可以说是有两点&#xff0c;或者说可以从两个方面…

安装oculus运行时出现问题_U盘安装windows10出现的问题解决方法

安装windows10 出现的问题之前安装windows10都没什么问题&#xff0c;今天安装windows10出现了好多问题&#xff0c;记录一下。我这个教程我觉得是最好的安装教程安装windows10教程问题1. 我们无法创建新的分区&#xff0c;找不到现有分区&#xff08;或者因为MBR分区表问题&am…

JavaFx导出文件

导出文件格式可选 protected void handExportDateAction(ActionEvent event) {// ShowDialog.showConfirmDialog(FXRobotHelper.getStages().get(0),// "是否导出数据到txt&#xff1f;", "信息");FileChooser fileChooser new FileChooser();FileChooser…

python选择排序从大到小_Python实现选择排序

一、选择排序简介选择排序(Selection sort)是一种简单直观的排序算法。选择排序首先从待排序列表中找到最小(大)的元素&#xff0c;存放到元素列表的起始位置(与起始位置进行交换)&#xff0c;作为已排序序列&#xff0c;第一轮排序完成。然后&#xff0c;继续从未排序序列中找…

【Ubuntu14】Nginx+PHP5+Mysql记录

这次因为工作原因&#xff0c;需要在Linux下进行开发。推荐的环境是Ubuntu14NginxPHPMysql。环境搭建好之后&#xff0c;装上GIT&#xff0c;装上IDE&#xff0c;觉得Mysql命令界面麻烦又装了个Navicat。总体用下来感觉很带感。 【虚拟机与镜像文件】 这里我采用的虚拟机是VMwa…

java句柄数过高怎么解决_主播个人及企业利润高,个税或企业所得税怎么解决...

网络直播在2020年尤为火热&#xff0c;男女老少都纷纷投入其中&#xff0c;究其原因还是其行业表现出来的“利润高”等。也确实有部分人取得了一定的成效&#xff0c;也催生了不少的直播平台、经纪公司的出现。 那么这些主播个人或者企业利润高&#xff0c;个税或企业所得…

杂项-Java:JBoss

ylbtech-杂项-Java&#xff1a;JBoss是一个基于J2EE的开放源代码的应用服务器。 JBoss代码遵循LGPL许可&#xff0c;可以在任何商业应用中免费使用。JBoss是一个管理EJB的容器和服务器&#xff0c;支持EJB 1.1、EJB 2.0和EJB3的规范。但JBoss核心服务不包括支持servlet/JSP的WE…

任务调度及远端管理(基于Quartz.net)

这篇文章我们来了解一些项目中的一个很重要的功能&#xff1a;任务调度 可能有些同学还不了解这个&#xff0c;其实简单点说任务调度与数据库中的Job是很相似的东西 只不过是运行的物理位置与管理方式有点不一样&#xff0c;从功能上来说我觉得还是差不多的&#xff0c; 存储过…

2015/12/15--Document对象

<html> <head> <script type "text/javascript"> //使用document.write()输出流写文本 document.write("hello,world!"); //使用document.write()输出流写HTML document.write("<h1>welcome to my world!</h1>")…

C# 子类实例化基类 基类使用不了子类的方法_C#高级编程面试考题

一、简答题1.简述C#中的所有访问修饰符及访问权限private(私有的)给类&#xff0c;及所有类成员使用所有类成员的默认访问修饰符可访问范围当前类自身public(公开的)给类&#xff0c;及所有类成员使用可访问范围当前类自身所有的子类同一程序集其他类通过实例化也可以访问其他程…

协程(Coroutine)与多线程,多进程

执行多个任务可以使用多线程或多进程。 多进程中&#xff0c;同一个变量&#xff0c;各自有一份拷贝存在于每个进程中&#xff0c;互不影响 多线程中&#xff0c;所有变量都由所有线程共享。而线程间的切换是系统进行调度&#xff0c;无法控制&#xff0c;所以可能 一个进程中的…