PL/SQL语言

Oracle dbms_output vs utl_file 使用(一) dbms_output buffer的默认长度是20000字符,可以使用dbms_output.enable(buffer size)来调整缓冲区的大小。最小2000,最大1,000,000,null表示不限制缓存区大小(旧版的Oracle可能不支持)。设置dbms_output.enable(NULL)后输出长度10000和32767的字符串成功,输出32768的字符串失败。设置dbms_output.enable(2000)后输出长度2000的字符串成功,输出长度2001的字符串失败。 阅读详情
--普通类型的PL/SQL程序块
select *from emp

declare --定义部分(变量,常量(类型前加constant),游标)
 v_ename varchar2(20);
 v_date date;
 v_sal number(20);
begin   --执行部分(主要的sql语句和输出的信息)
 --into(把查询到的值赋给已声明的量) &+任意字符(用来取用户输入的值)
 select ename,hiredate,sal into v_ename,v_date,v_sal from emp where empno=&renyi;
 dbms_output.put_line('员工姓名:'||v_ename);--Oracle中的输出语句
 dbms_output.put_line('员工入职信息:'||to_char(v_date,'yyyy-mm-dd'));
 dbms_output.put_line('员工的工资:'||v_sal);
exception  --异常处理部分(没有查询到执行部分的信息时,执行异常处理中的话)
 when no_data_found then dbms_output.put_line('没有该员工');
end;--结束部分

--处理基本的几个普通类型的变量还有四种特殊的变量声明(%type,%rowtype,record,table)

--%type变量类型(一个表的列名不知道是什么类型时用)
declare
 v_ename emp.ename%type;
 v_date emp.hiredate%type;
begin
 select ename,hiredate into v_ename,v_date from emp where empno=7499;
 dbms_output.put_line('员工姓名'||v_ename);
 dbms_output.put_line('员工姓名'||to_char(v_date,'yyyy-mm-dd'));
exception
 when no_data_found then dbms_output.put_line('没有改员工');
end;

--%rowtype变量类型(一张表有很多列rowtype可以表示表中的一行记录)
select *from dept
declare
 v_dept_row dept%rowtype;
begin
 select * into v_dept_row from dept where deptno=&ff;
 dbms_output.put_line('员工编号'||v_dept_row.deptno);
 dbms_output.put_line('员工姓名'||v_dept_row.dname);
 dbms_output.put_line('员工上司'||v_dept_row.loc);
exception
 when no_data_found then dbms_output.put_line('没有该员工');
end;

--record变量类型
select *from emp
declare
 type emp_record_type is record --定义一个记录类型,包含一个员工的信息
 (
 ename emp.ename%type,
 sal number(20)
 );
 v_emp_type emp_record_type;  --定义记录类型变量
begin
 select ename,sal into v_emp_type from emp where empno=ⅆ
 dbms_output.put_line('员工姓名'||v_emp_type.ename);
 dbms_output.put_line('员工工资'||v_emp_type.sal);
exception
 when no_data_found then dbms_output.put_line('没有该员工信息');
end;

--table变量类型
select * from dept
declare
 --定义一个table数据类型        值得类型为dept%rowtype   键为有符号的整数
 type dept_table_type is table of dept%rowtype index by binary_integer;
 v_dept_table dept_table_type; --定义table类型变量
begin
 select * into v_dept_table(0) from dept where deptno=≪
 dbms_output.put_line('编号'||v_dept_table(0).deptno||'姓名'||v_dept_table(0).dname||'所在地'||v_dept_table(0).loc);
exception
 when no_data_found then dbms_output.put_line('没有该条信息');
end;


----------------------------------------流程控制---------------------------------------------------
 
--if语句(if 条件 then 输出语句;end if;)
declare
  shu number(10):=&e;
begin
  if shu>0 then dbms_output.put_line('它是大于0的');
   end if;
end;

--if else语句(if 条件 then 输出语句1; else 输入语句2; end if;)
declare
  shu number(10):=&e;
begin
  if shu=1 then dbms_output.put_line('1');
  else 
  dbms_output.put_line('不等于1');
  end if;
end;

--if selif语句(if 条件 then 输出语句1;elsif 条件 then 输出语句2;else 输出语句3;end if)
declare
  shu number(10):=&e;
begin
  if shu=0 then dbms_output.put_line('0');
  elsif shu=1 then dbms_output.put_line('1');
  elsif shu=2 then dbms_output.put_line('2');
  else dbms_output.put_line('不再这些范围');
  end if;
end;

select * from tab_aaa
--if语句操作数据库
declare
 v_aaa tab_aaa%rowtype;
begin
 v_aaa.tid:=&e;
 select * into v_aaa from tab_aaa where tid=v_aaa.tid;
 dbms_output.put_line('更新前成绩'||v_aaa.tcj);
 if v_aaa.tcj =70 then 
 update tab_aaa set tcj=tcj+20 where tid=v_aaa.tid;
 else
 if v_aaa.tcj =50 then 
 update tab_aaa set tcj=tcj+20 where tid=v_aaa.tid;
 else
 update tab_aaa set tcj=tcj+30 where tid=v_aaa.tid;
 end if;
 end if;
end;

--case语句(和java,switch语句很像)
declare
shu varchar2(10):=ⅆ
begin
  case shu 
    when 0 then dbms_output.put_line('0');
    when 1 then dbms_output.put_line('1');
    when 2 then dbms_output.put_line('2');
end case;
exception
  --case语句异常case_not_fount(语句中的选项与用户输入的数据不匹配)
  when case_not_found then dbms_output.put_line('没有改信息');
end;

--循环控制
--loop循环(loop 条件 exit )
declare
  shu number(10):=&e;
begin
  loop
    if shu>2 then exit; --当shu>2的时候跳出循环
  end if;
  dbms_output.put_line('niaho1'||shu);
  shu:=shu+1;
  end loop;
end; 


select * from tab_aaa
--loop循环添加数据库中表的数据
declare
  type v_aaa_type is table
  of tab_aaa%rowtype
  index by binary_integer;
  shu number(5):=0;
  v_aaa_table v_aaa_type;
begin
 
  v_aaa_table(0).tid:=4;
  v_aaa_table(0).tname:='a';
  v_aaa_table(0).tcj:=88;
  v_aaa_table(1).tid:=5;
  v_aaa_table(1).tname:='a';
  v_aaa_table(1).tcj:=78;
  v_aaa_table(2).tid:=5;
  v_aaa_table(2).tname:='a';
  v_aaa_table(2).tcj:=78;
  loop
    if shu>2 then exit;  --当shu>2的时候跳出循环
  end if;
  insert into tab_aaa values(v_aaa_table(shu).tid,v_aaa_table(shu).tname,v_aaa_table(shu).tcj);
  shu:=shu+1;
  end loop;
end;

--while循环
declare
  v_shu number(10):=&e;
begin
  while v_shu<=2 loop
    dbms_output.put_line('你好'||v_shu);
  v_shu:=v_shu+1;
  end loop;
end;

select *from tab_aaa
--while循环
declare
  type v_aaa_type is table
  of tab_aaa%rowtype
  index by binary_integer;
  shu number(5):=0;
  v_aaa_table v_aaa_type;
begin
  v_aaa_table(0).tid:=4;
  v_aaa_table(0).tname:='a';
  v_aaa_table(0).tcj:=88;
  v_aaa_table(1).tid:=5;
  v_aaa_table(1).tname:='a';
  v_aaa_table(1).tcj:=78;
  v_aaa_table(2).tid:=5;
  v_aaa_table(2).tname:='a';
  v_aaa_table(2).tcj:=78;
  while
     shu<=2 loop
  insert into tab_aaa values(v_aaa_table(shu).tid,v_aaa_table(shu).tname,v_aaa_table(shu).tcj);
  shu:=shu+1;
  end loop;
end;

--for循环

declare
   a number(30):=&ea;
begin
   for i in 1 .. a loop
       sys.dbms_output.put_line('bbb' || i);
   end loop;
   commit;
end;

select *from tab_aaa
--for循环操作数据库(reverse)
declare
  type v_aaa_type is table
  of tab_aaa%rowtype
  index by binary_integer;
  shu number(5):=0;
  v_aaa_table v_aaa_type;
begin
  v_aaa_table(0).tid:=4;
  v_aaa_table(0).tname:='a';
  v_aaa_table(0).tcj:=88;
  v_aaa_table(1).tid:=5;
  v_aaa_table(1).tname:='a';
  v_aaa_table(1).tcj:=78;
  v_aaa_table(2).tid:=5;
  v_aaa_table(2).tname:='a';
  v_aaa_table(2).tcj:=78;
  for shu in 0..v_aaa_table.count-1 loop
  insert into tab_aaa values(v_aaa_table(shu).tid,v_aaa_table(shu).tname,v_aaa_table(shu).tcj);
  end loop;
end;

--事务(commit:提交,savepoint:保存点,rollback:回滚)

begin
  inset into emp(emp,ename) values(11,'asd');
  inset into emp(emp,ename) values(12,'asd');
  savepoint a;
  inset into emp(emp,ename) values(13,'asd');
  rollback to a;
  inset into emp(emp,ename) values(14,'asd');
  commit;
end;

----------------------------------------PL/SQL程序异常-------------------------------------------

/*
    access_into_null:    试图访问一个初始化的对象
    case_not_found:      case语句中的选项与用户输入的数据不匹配
    cursor_already_open: 试图打开一个已打开的游标
    dup_val_on_index:    试图打开一个唯一性的约束
    invalid_cursor       试图打开一个无效的图标
    invalid_number:      试图对非数字的值进行数据操作
    login_denied:        无效的用户名或口令(密码)
    no_data_fount:       查询未找到数据
    not_logged_on:       还未链接就试图数据库操作
    program_erroe:       内部错误
*/


declare 
 v_emp emp.ename%type;
begin
  for i in 1..5 loop
    select ename into v_emp from (select ename,rownum r from emp order by empno) where r=i;
    dbms_output.put_line(v_emp);
   end loop;
end;
PL/SQL语言的区块链 区块链是一种分布式的数据库技术,核心是通过一种共识机制,使得网络中所有的节点可以对数据进行共同管理。区块链的特殊之处在于其数据的不可篡改性、透明性和去中心化特性。PL/SQL(Procedural Language/Structured Query Language)是Oracle数据库的一种过程化编程语言,它集成了SQL的强大数据操作能力,并增加了过程化编程的特性。 阅读详情

相关推荐

PL/SQL语言的网络编程

PL/SQL(Procedural Language/Structured Query Language)是Oracle公司推出的一种过程化语言,它扩展了SQL语言,使得用户可以在数据库中编写复杂的逻辑。PL/SQL结合了SQL的强大查询能力和过程化编程的灵活性,从而可以用于实现更复杂的应用场景,如数据验证、业务逻辑处理、批量数据处理等。声明部分:用于声明变量、常量、游标等;执行部分:包含实际的操作逻辑,如SQL语句、控制结构等;异常处理部分:用于处理运行时可能出现的异常情况。

2401_90032025的博客 1096

dbms_output.put_line的用法(Oracle)转载

注:使用get_line时不能用put_line输出,因为put_line之后会将buffer清空。(当然在serveroutput off的情况下put_line是不影响buffer的)。原文链接:https://blog.youkuaiyun.com/weixin_57165154/article/details/124093366。在serveroutput on的情况下,用来使dbms_output生效(默认即打开)将内容写到内存,等到put_line时一起输出,new_line的时候也可以输出。

weixin_47268204的博客 1187

PL/SQL语言的算法

PL/SQL作为一种功能强大的过程化编程语言,为我们提供了灵活的工具来实现各种复杂的算法。通过合理的算法设计与优化,PL/SQL不仅能够提高数据处理效率,还能为企业带来更佳的数据管理体验。在未来的发展中,PL/SQL将继续在数据库领域扮演着重要的角色。掌握PL/SQL的算法应用,对于提升数据库管理和开发能力具有重要意义。

2501_90485581的博客 371

Oracle SQL Developer使用dbms_output.put_line显示输出

Oracle的日志输出

PhilsphyPrgram的博客 5591

PL/SQL语言的语法糖

PL/SQL语言中的语法糖极大地方便了开发者的编程,使得原本复杂的操作变得更加简单易用。通过合理运用这些语法糖,开发者不仅能够编写出更加清晰明了的代码,还能在提高开发效率的同时,有效地减少错误产生的机会。然而,尽管语法糖带来了诸多便利,开发者仍需保持对底层逻辑的理解,以便在复杂场景下做出合理的设计决策。在今后的开发过程中,合理运用PL/SQL中的语法糖,将会为我们带来更高效率、更高质量的代码,助力我们在数据库编程这条道路上越走越远。

2401_90031998的博客 1214

PL/SQL语言的人工智能

随着信息技术的飞速发展,人工智能(AI)已经逐渐渗透到了各个行业。在这个过程中,数据库管理系统也在不断演变,尤其是与数据处理和分析相关的PL/SQL语言。PL/SQL(Procedural Language/SQL)是Oracle公司开发的一个过程性扩展,用于增强标准SQL的功能。它不仅支持复杂的计算和数据操作,还可以与人工智能算法相结合,使得数据处理更加高效和智能化。本文将探讨PL/SQL在人工智能领域中的应用,分析其优势,通过实例展示其在实际项目中的作用,并展望未来的发展方向。

2501_90356487的博客 592

oracle select输出dbms,PLSQL 中如何使用 dbms_output 输出结果

1.情景展示在plsql中如何使用dbms_output输出执行结果?如上图所示,运行后报错:ora-009222.原因分析set serveroutput on 语句的作用是:打开Oracle自带的输出方法dbms_output,在执行以后,使用dbms_output方法可以输出信息。但是,它是sqlplus语句,不是sql语句,所以不能在sql window中使用,该命令不是写在pl/sql中...

weixin_29593445的博客 5485

海康VisionMaster使用学习笔记7-Group模块

光标需放在[]中选择循环索引,循环索引用于实现依次检测10个匹配框的顶点,若不订阅,模块会循环检测同一个匹配框。可以看到绿色是它的边缘点.为方便查看顶点,将边缘点设置为不可见。循环使能打开,开始值设为0,循环结束值设为快速匹配的匹配个数。回到上一层,点击Group工具的设置图标,圆拟合的点设置为Group工具输出的点集。图像输入源选择Group的图像输入源。区域选择Group的快速匹配的匹配框。添加订阅到Group内部的顶点检测。对匹配框区域进行顶点检测。用于定位匹配框中的顶点。添加快速匹配的匹配框。

风凌的博客 4173

oracle 源代码输出,oracle-如何将DBMS_OUTPUT.PUT_LINE的输出重定向到文件?

oracle-如何将DBMS_OUTPUT.PUT_LINE的输出重定向到文件?我需要在pl / sql中进行调试以计算过程次数,我想使用:SELECT systimestamp FROM dual INTO time_db;DBMS_OUTPUT.PUT_LINE('time before procedure ' || time_db);但我不知道输出将到达何处,以及如何将其重定向到包含我要收集...

weixin_39715997的博客 1301

深入解析ViT中的RoPE旋转位置编码:原理、实现与视觉应用

本文深入解析了ViT中的RoPE旋转位置编码原理、实现及其在视觉任务中的应用。RoPE通过旋转变换巧妙地将相对位置信息融入注意力计算,解决了传统绝对位置编码外推性差的问题,在图像分类、目标检测及生成任务中展现出更优的泛化能力和灵活性。

alice7model的博客 704

时序分析28 - 时序预测 格兰杰因果关系(中) python实践1

时序分析28 - 时序预测 - 格兰杰因果关系(中) Python 实践 1 上一篇文章我们介绍了格兰杰因果关系的基本概念、背景以及相关统计检验法。本篇文章我们使用Python编程实践一下。 实践1:股票价格数据之间的格兰杰因果关系 问题:苹果公司今天的股价是否可以用来预测明天的特斯拉的股价? 数据:来自雅虎财经 import matplotlib.pyplot as plt import seaborn as sns import numpy as np import pandas as pd 读入数据

weixin_43171270的博客 8836

PL/SQL语言的函数实现

下面是对前面计算平方函数的改进,增加了异常处理逻辑。```plsqlISBEGINRAISE_APPLICATION_ERROR(-20001, '输入值不能为空');-- 自定义错误END IF;EXCEPTION-- 如果有其他异常,返回NULL```PL/SQL函数为我们在Oracle数据库中处理复杂逻辑提供了极大的便利。通过合理使用函数,可以有效提升代码的可读性和复用性。

2501_91310338的博客 832

Starlink第三代终端与第二代终端的差异分析

SpaceX星链第三代终端实现显著升级,硬件售价维持599美元不变但性能全面提升。相比第二代产品,第三代终端取消自动调节电机改为手动定向,防水防尘等级提升至IP67,天线面积扩大46%,支持235台设备连接(提升87%),下载速度可达1Gbps(提升4倍),延迟降至20ms以下。新增3个千兆接口和WiFi6支持,同时推出199美元单独路由器选项。这些改进使第三代终端在保持价格优势的同时,更好地满足户外、移动和商业场景需求,标志着SpaceX卫星互联网服务从亏损销售转向盈利模式的重要转折。

通信行业老兵、物联网从业者,做一个有趣的普通人。 3028

PL/SQL语言的学习路线

在掌握了SQL语法后,接下来的重点就是学习PL/SQL。PL/SQL与SQL的主要区别在于,PL/SQL是一种过程式语言,能够将多个SQL语句组合成程序块,以实现复杂的业务逻辑。PL/SQL是一门强大的编程语言,掌握它能够为数据库开发带来巨大的便利。从基础的SQL知识到PL/SQL的具体使用,再到不断深入的过程与函数、游标、包的学习,最终应用于实际项目中,每一步都至关重要。学习PL/SQL的过程需要不断的实践和积累,通过建设项目、组织团队合作以及参与开源项目等方式,不断提升自己的技能水平。

2501_90300675的博客 1924

深度解析大语言模型中的词向量

​ 在学习完语言模型中的编码器与解码器知识后,让我们继续深入学习大语言模型中一个非常关键的技术:词向量表示,以及如何通过Transformer模型实现对next token的预测。 ​

产品老A,8年互联网大厂AIPM,专注探索新型人机交互 3282

NVIDIA Jetson之远程控制软件NoMachine安装使用

参考:https://www.bilibili.com/video/BV1cg4y1i776?t=12 0 背景

ZONGXP的博客 1万+

PL/SQL语言的调试工具

PL/SQL(Procedural Language/Structured Query Language)是Oracle数据库的一种过程语言。它结合了SQL的强大数据处理能力和程序设计语言的控制结构,可以用于编写存储过程、触发器、包等。通过PL/SQL,开发者可以实现复杂的业务逻辑,使得数据库操作更加高效且易于维护。

2501_91339158的博客 540

实战案例七:Claude Code 构建完整的 Web 应用

前面的案例大多是单一功能的演示,本章将展示如何使用 Claude Code 从零开始构建一个完整的 Web 应用,涵盖需求分析、架构设计、编码实现、测试部署的全流程。

gaoxiang_120的专栏 581

PL/SQL语言的测试

然而,在开发过程中,如何有效地测试PL/SQL代码,以确保其正确性和性能,是一个不容忽视的重要课题。随着技术的不断发展,自动化测试将成为提升PL/SQL测试效率的重要工具,开发人员应不断学习和掌握新的测试技术,以应对复杂的数据库开发挑战。:PL/SQL代码的性能可能受到多种因素的影响,如SQL查询的效率、PL/SQL模块的设计等。:通过有效的测试,可以及时发现并修复代码中的错误,确保系统的稳定性和可用性。:通过自动化测试,可以快速验证代码的正确性,减少人工测试的时间,提高开发效率。

2501_91275948的博客 1028

嵌入式工程师成长之路(10)——项目举例

送给大学毕业后找不到奋斗方向的你(每周不定时更新)

云轩阁 5万+

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

PL/SQL语言的异步编程

PL/SQL(Procedural Language/Structured Query Language)是Oracle数据库专用的过程式编程语言。它结合了SQL的强大数据处理能力与过程化编程的逻辑控制,支持变量、条件判断和循环结构等特性,使得开发者可以更灵活地进行数据库编程。模块化:允许将代码组织成可重用的程序单元(如过程、函数和包)。数据操作:可以直接对数据库中的数据进行处理,支持多种数据类型和复杂的数据结构。错误处理:提供了异常处理机制,可以有效捕捉和处理运行时错误。

2501_90932969的博客 721

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

PL/SQL语言的跨平台开发

PL/SQL(Procedural Language/SQL)是Oracle公司为其数据库系统开发的一种过程化编程语言。PL/SQL不仅可以执行SQL语句,还支持变量声明、控制结构、异常处理等特性,使开发者能够以更灵活和高效的方式处理数据库操作。

2501_91314680的博客 528

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

PL/SQL语言的压力测试

PL/SQL是Oracle公司开发的一种过程式语言,结合了SQL的强大查询能力和过程式语言的控制结构。它支持变量声明、条件判断、循环控制和异常处理等特性,使得数据库操作更为高效和灵活。通过PL/SQL,开发者可以编写一系列复杂的业务逻辑,将多条SQL语句封装在一个过程或函数中,以减少网络传输次数,提高执行效率。压力测试是一种通过模拟大量用户并发访问系统来评估其性能和稳定性的方法。在数据库系统中,压力测试的目标主要是确定系统在极端条件下的表现,包括响应时间、负载能力、资源利用率等指标。

2501_90990416的博客 1658
上一篇: Oracle常见函数
下一篇: Oracle开发子程序和包
与黑夜为伍
博客等级 码龄7年 19粉丝 80原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值