Oracle存储过程干货(一):存储过程基础

/ SQLplus中,设置 set serveroutput on 才能显示输出结果 /

—匿名的PLSQL(存储过程)块,不存储在数据库中

beginnull;
end;
/
begindbms_output.put('hi ');    /*put是不换行的输出*/dbms_output.put_line('hello world');   /*put_line是换行的输出*/
end;
/

—命名的存储过程,存储在数据库中

create or replace procedure hello_procedure as 
beginnull;
end hello_procedure;
/

—存储过程里面可以直接执行DML

create table test (id number,name varchar(20));
begininsert into test values(1,'zmh');commit;
end;
/
begininsert into test values(2,'qyt');commit;
end;
/

—存储过程中不能直接执行select,如果要执行select,必须跟上into字句

beginselect * from test;
end;
/

PLS-00428: 在此 SELECT 语句中缺少 INTO 子句

这个地方,我的理解是在存储过程中执行select语句,需要先把数据赋值到事先声明好的变量中,然后通过变量输出出来,一个列需要对应一个变量。

declare
v_name varchar2(20);
beginselect name into v_name from test where id=1;dbms_output.put_line(v_name);
end;
/

—select…into 只能赋值一行,不能赋值多行,如果赋值了不存在的行也会报错(但可以处理)
意思就是存储过程中,select只能查一行,如下就会报错,提示超出请求行数:

declare
v_name varchar2(20);
begin select name into v_name from test;dbms_output.put_line(v_name);
end;
/

ORA-01422: 实际返回的行数超出请求的行数

因此需要对select语句加where条件:where rownum<=1或者where id=1。

下面是赋值了不存在的行的报错,及解决办法:

declare
v_name varchar2(20);
beginselect name into v_name from test where id=3;dbms_output.put_line(v_name);
end;
/

ORA-01403: 未找到任何数据

解决的小技巧是,写一个union,实际情况union空,将返回的值通过max函数筛选:

declare
v_name varchar2(20);
beginselect max(name) into v_name from (select name from test where id=3unionselect null from dual);dbms_output.put_line(v_name);
end;
/

—select…into 多个列
虽然select into不能多个行,但是可以多个列:

declare
v_id number;
v_name varchar2(20);
beginselect id,name into v_id,v_name from test where id=1;dbms_output.put_line(v_id||','||v_name);
end;
/

—存储过程里面不能直接执行DDL,如果要执行DDL,可以使用动态SQL(execute immediate)

beginalter table test add(tel varchar2(12));
end;
/

PLS-00103: 出现符号 "ALTER"在需要下列之一时…

解决办法;

beginexecute immediate 'alter table test add(tel varchar2(12))';
end;
/

—动态SQL里面不仅可以DDL,DML和select…into都可以

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

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

相关文章

phthon脚本练习案例

记录一下phthon脚本练习案例&#xff0c;方便学习phthon知识点 案例1 需求&#xff0c;统计当前根目录代码行数知识点&#xff0c;os time参考&#xff0c;Python 实用脚本 案例2 需求&#xff0c;扫描当前目录和所有子目录并显示大小知识点&#xff0c;os sys参考&#xff…

在Windows 10和11中打开事件查看器的11种方法,总有一种适合你

Windows事件查看器是一个功能强大的工具,可以记录电脑从启动到关机的所有过程。你可以使用它查看有关应用程序错误、不同系统服务生成的警告的详细信息,以及有关驱动程序和服务状态的信息。这就是为什么当你需要识别或解决计算机或设备上的问题时,Windows 11和Windows 10事件…

【金九银十】,架构师花费近一年时间整理出来的安卓核心知识

面试经历 主要是根据回忆总结的&#xff08;会有遗漏点&#xff09;。 1. 腾讯&#xff08;QQ音乐&#xff09; 腾讯面试涉及到的范围也很广&#xff0c;甚至问到了C、Kotlin Flutter &#xff0c;也具有一定挑战性的&#xff0c;以下包括腾讯腾讯安卓客户端三面&#xff0c…

国创证券|降准对股市的影响,利好哪些板块?

降准是指央行下调金融机构存款准备金率&#xff0c;是一种宽松的钱银政策&#xff0c;会添加社会上的流动资金&#xff0c;然后推动股市上涨&#xff0c;对股市来说是一种利好&#xff0c;其间利好以下板块&#xff1a; 1、利好房地产板块 央行降准会进步银行可贷资金&#x…

每日一题-链表的中间结点

&#x1f308;个人主页: 会编辑的果子君 &#x1f4ab;个人格言:“成为自己未来的主人~” 上面是解题题目&#xff1a; 解题思路&#xff1a;快慢指针法--慢指针一次指向下一个&#xff0c;快指针一次指向下两个 解答过程&#xff1a; /*** Definition for singly-linked…

Linux学习-指针与数组

目录 数组和指针的关系 数组指针&#xff1a; 数组和指针的关系代码 指针数组 指针和二维数组的关系 数组传参 数组和指针的关系 一维数组和指针的关系&#xff1a; int a[5] {1,43,5,3,2,}; 数组的数组名a是指向数组第一个元素a[0]的指针常量&#xff1b; a &a…

使用java构建一个哈夫曼树

使用java构建一个哈夫曼树 1. 定义节点类&#xff0c;表示哈夫曼树中的一个节点 代码&#xff1a; class Node implements Comparable<Node> {char ch; // 字符int freq; // 频率Node left, right; // 左右子节点// 节点构造函数public Node(char ch, int freq, Node …

JRebel and XRebel 插件在IDEA中的安装、激活和使用

1、JRebel安装 1、打开idea->setting->plugins->Marketplace 2、搜索插件JRebel and XRebel&#xff0c;点击安装&#xff0c;然后重启idea 如果左侧出现JRebel & XRebel代表已安装 3.离线安装JRebel 根据自己安装的idea版本进行下载电影的jrebel https://plugi…

如何检测ssh暴力破解

Shell Shell是一种用来与操作系统交互的命令行界面(CLI)。它允许用户通过输入命令来控制计算机并执行各种操作。 在Linux和Unix系统中,常用的Shell有bash、csh、ksh等。在Windows系统中,常用的Shell有cmd和PowerShell。 早期的互联网,直接通过Shell通信都是明文通信,一旦…

Flutter 设置每帧绘制结束调用的回调函数

前言 Flutter是一个开源的UI软件开发工具包&#xff0c;由Google开发&#xff0c;用于创建跨平台的移动应用程序。Flutter框架通过每帧渲染画面的方式&#xff0c;提供了流畅的用户体验和高性能的应用。在开发过程中&#xff0c;我们经常遇到需要在渲染完成一帧后执行某些特定…

1.Zookeeper理论基础

1.Zookeeper的基本概念 是一个分布式应用协调框架 &#xff0c;java编写的。客户端 /服务端 的架构模式。CP设计(一致性&#xff0c;分区容错) 它主要是用来解决分布式应用中经常遇到的一些数据管理问题&#xff0c;如&#xff1a;服务注册服务、状态同步服务、集群管理、分布…

ALV Grid 函数

ALV Grid 函数的输出有两个&#xff1a;REUSE_ALV_GRID_DISPLAY 和 REUSE_ALV_GRID_DISPLAY_LVC 两者的操作大同小异&#xff0c;只是后者能更好的和ALV容器结合使用&#xff0c;前后则不能&#xff1b;而在输入参数属性的结构上也有些差异。 本篇文章主要讲解下ALV函数中输入…

WordPress建站入门教程:忘记数据库名称、用户名和密码了怎么办?

有时候我们需要进入phpMyAdmin管理一些数据库&#xff0c;但是登录phpMyAdmin时却需要我们输入数据库的用户名和密码&#xff0c;但是我们不记得了应该怎么办呢&#xff1f; 其实&#xff0c;我们只需要进入WordPress网站根目录找到并打开wp-config.php文件&#xff0c;就可以…

vue2数据响应式原理解析

vue2与vue3区别浅析&#xff1a;vue2和vue3区别 浅析-CSDN博客 vue是mvvm框架&#xff0c;即“模型—视图—视图模型”&#xff0c;数据模式还是javascript对象&#xff0c;通过模型中应用程序数据和业务逻辑影响到视图的改变&#xff0c;视图(用户的操作)的改变会影响到底层数…

Git 进阶 高级用法,重要命令记录

本篇文章用于记录Git高级用法&#xff0c;新手可以看我的另一篇文章&#xff1a;Git基础教学。 Git git fetch 是git pull 的细分步骤&#xff0c;git pull 包含了git fetch git pull origin master 上述命令其实相当于git fetch git merge 在实际使用中&#xff0c;git fetc…

如何使用ArcGIS Pro进行坡度分析

坡度分析是地理信息系统中一种常见的空间分析方法&#xff0c;用于计算地表或地形的坡度&#xff0c;这里为大家介绍一下如何使用ArcGIS Pro进行坡度分析&#xff0c;希望能对你有所帮助。 数据来源 教程所使用的数据是从水经微图中下载的DEM数据&#xff0c;除了DEM数据&…

uniapp报错:request:fail abort statusCode:-1 Chain validation failed

uniapp报错信息记录 场景: 半年没碰过的app&#xff0c;今个儿突然无法登录了。 打开控制台&#xff0c;报错信息如下 {msg: request:fail abort statusCode:-1 Chain validation failed}奇怪的是用 apifox 调用相关的接口&#xff0c;可以正常运行&#xff0c;app却不行。 好…

防坑指南!说说Six Sigma咨询公司排名的那些事

在企业管理领域&#xff0c;六西格玛&#xff08;Six Sigma&#xff09;已成为一种流行的质量管理方法。然而&#xff0c;面对众多的Six Sigma咨询公司&#xff0c;如何选择一家真正专业、有实力的合作伙伴&#xff0c;成为了许多企业面临的难题。本文&#xff0c;天行健咨询将…

高级语言讲义2019计专(仅高级语言部分)

1.编写函数&#xff0c;对给定的整数数组a&#xff08;数组长度和元素个数均为N&#xff09;进行判定&#xff1a;是否存在某个整数a[i]&#xff08;0<i<N&#xff09;&#xff0c;等于在其之前的所有整数的和 #include <stdio.h> #include <stdbool.h>bool…

编写 Ansible Playbooks

简介 简而言之&#xff0c;服务器配置管理&#xff08;也被广泛称为 IT 自动化&#xff09;是将基础设施管理转化为代码库的解决方案&#xff0c;描述了部署服务器所需的所有流程&#xff0c;并将其转化为一组可以进行版本控制和轻松重复使用的配置脚本。它可以极大地提高任何…