oracle 存储过程 变量的声明和赋值的3种方式
1.声明变量的3种方式
按照数据类型的声明方式进行区分
方式一:直接声明数据类型
格式:变量名 数据类型(大小)
V_START_DATE VARCHAR2(19);
v_num number;
说明:
设置为字符串类型时,需要指定大小,否则报错;
变量的声明必须在"begin"关键字之前进行。
--错误用法
BEGIN
v_sql varchar2(100) := 'SELECT ORGSEQ FROM BASE_ORG_INFO where orgcode=to_char(410621101233)';
方式二:使用%TYPE声明
格式:变量名 表名.字段名%TYPE
含义:该变量的数据类型与指定表的指定字段的数据类型一致
V_ORGSEQ BASE_ORG_INFO.ORGSEQ%TYPE;
方式三:使用%ROWTYPE声明
格式:变量名 表名%ROWTYPE
含义:该变量的数据类型与指定表的指定行记录(所有字段)的数据类型一致
--VIRTUAL_CARD表整行数据
V_ROW_VIRTUAL_CARD VIRTUAL_CARD%ROWTYPE;
小结:
在存储过程中,声明变量时,不需要使用关键字"DECLARE";
变量不区分大小写;
变量在使用前必须声明。
2.变量赋值的3种方式
方式一:直接赋值,使用":="
使用条件:适用于声明变量的前2种方式。
V_ORGID := '110';
说明:
变量后面跟不能直接是sql语句,sql不会执行,可以参考方式三。
--错误用法
V_ORGSEQ := SELECT ORGSEQ INTO V_ORGSEQ FROM BASE_ORG_INFO;
--正确用法
V_ORGSEQ := 'SELECT ORGSEQ INTO V_ORGSEQ FROM BASE_ORG_INFO';
变量的声明和赋值可以一块进行。
--正确用法
v_sql varchar2(100) := 'SELECT ORGSEQ FROM BASE_ORG_INFO where orgcode=to_char(410621101233)';
BEGIN
/* 具体业务 */
END;
方式二:select 表字段 into 变量 from 表
变形一:查询指定表的一个指定字段
使用条件:适用于声明变量的前2种方式可以使用
--根据医疗机构ID查询对应的父机构的机构序列
SELECT ORGSEQ INTO V_ORGSEQ FROM BASE_ORG_INFO
WHERE ORGID =
(SELECT PARENTORGID FROM BASE_ORG_INFO WHERE ORGID = V_ORGID);
变形二:查询指定表的所有字段
使用条件:只适用于声明变量的第3种方式
--将id=5120的VIRTUAL_CARD表数据赋值给变量V_ROW_VIRTUAL_CARD
SELECT * INTO V_ROW_VIRTUAL_CARD FROM VIRTUAL_CARD T where t.id = 5120;
说明:
查询结果只能返回一条记录;
查询的表字段必须是该表的所有字段。
错误举例:
--错误举例一:查询的是所有表记录
SELECT * INTO V_ROW_VIRTUAL_CARD FROM VIRTUAL_CARD T;
--错误举例二:查询的是该表的多个字段
SELECT t.id,t.name INTO V_ROW_VIRTUAL_CARD FROM VIRTUAL_CARD T;
方式三:execute immediate sql语句字符串 into 变量
declare/* 存储过程,不需要声明 */
v_sql varchar2(100);
V_ORGSEQ varchar2(100);
begin
v_sql := 'SELECT ORGSEQ FROM BASE_ORG_INFO where orgcode=to_char(410621101233)';
--V_ORGSEQ赋值
execute immediate v_sql INTO V_ORGSEQ;
--打印结果
DBMS_OUTPUT.put_line(V_ORGSEQ);
END;
3.变量的调用
一般来说,变量只有这3种使用场景:赋值、逻辑判断、算术运算;
说明:不能用作查询列
--错误调用
select V_ORGSEQ from dual;
使用%ROWTYPE声明的变量如何调用?
利用"变量名.表字段"的方式可以取到该表中指定行(返回行)的指定列(任意列)所代表的数据。
--V_ROW_VIRTUAL_CARD赋值
SELECT * INTO V_ROW_VIRTUAL_CARD FROM VIRTUAL_CARD T where t.id = 5120;
--调用
DBMS_OUTPUT.put_line(V_ROW_VIRTUAL_CARD.ID);
oracle 存储过程 变量的声明和赋值的3种方式的更多相关文章
- ORACLE 存储过程中保存用户自定义异常信息的一种方式
1.创建错误日志表: create table REP_LOGS ( log_s_no NUMBER not null, log_date DATE default sysdate not null, ...
- PL/SQL编程基础(二):变量的声明、赋值、(赋值、连接、关系、逻辑)运算符
变量的声明.赋值.运算符 1.声明并使用变量 变量可以在声明时赋值,也可以先定义后赋值: 使用%TYPE与%ROWTYPE可以根据已有类型定义变量. PL/SQL是一种强类型的编程语言,所有的变量都必 ...
- Oracle中函数/过程返回结果集的几种方式
原文 Oracle中函数/过程返回结果集的几种方式 Oracle中函数/过程返回结果集的几种方式: 以函数return为例,存储过程只需改为out参数即可,在oracle 10g测试通过. ...
- 对于String对象,可以使用"="赋值,也可以使用"new"关键字赋值,两种方式有什么区别?
当你看见这个标题的时候,你可能会下意识的去想一下,这两种方式到底有什么样的区别呢? 且看下面的demo,自然便区分开了 /** * */ package com.b510.test; /** * Pr ...
- pl sql 变量的声明和赋值
链接地址:http://www.cnblogs.com/zhengcheng/p/4168670.html 一.什么是PL-SQL PL-SQL是结合了Oracle过程语言和结构化查询语言(SQL)的 ...
- Robot Framework--07 变量的声明、赋值及其使用
转自:http://blog.csdn.net/tulituqi/article/details/7984642 一.变量的声明 1.变量标识符 每个变量都可以用 变量标识符{变量名} 来进行 ...
- avaScript中变量的声明和赋值
变量是指程序中一个已经命名的存储单元,它的主要作用就是为数据操作提供存放信息的容器.变量是相对常量而言的.常量是一个不会改变的固定值,而变量的值可能会随着程序的执行而改变.变量有两个基本特征,即变量名 ...
- Java数组声明与拷贝的几种方式
Java数组声明的三种方式 第一种(声明并初始化): 数据类型[] 数组名={值,值,...}; 例:int[] a = {1,2,3,4,5,6,7,8}; ...
- DLL声明导出函数的两种方式
DLL中导出函数的声明有两种方式:一种为在函数声明中加上__declspec(dllexport):另外一种方式是采用模块定义(.def) 文件声明,.def文件为链接器提供了有关被链接程序的导出.属 ...
随机推荐
- php上传中文文件文件名乱码问题
php上传文件是最最基础的一个技术点,但是深入进去也有不少问题需要解决,这不,上传中文文件后,文件名变成了乱码. 下面是问题代码,很简单: 1.问题代码 html部分: <html> &l ...
- cordova安卓手机<a href="tel:xxx"></a>无法进入拨号界面问题
在使用cordova开发跨平台APP时,可能会用到点击某个按钮进入拨号界面的问题,HTML中的a标签提供了这个功能,但在部分安卓手机中却没有作用,点击没有反应,解决的方法如下:(在config.xml ...
- [转][Android] ListView中getView的原理+如何在ListView中放置多个item
ListView 和 Adapter 的基础 工作原理: ListView 针对List中每个item,要求 adapter “给我一个视图” (getView). 一个新的视图被返回并显示 如果 ...
- Druid 配置_StatFilter
Druid内置提供一个StatFilter,用于统计监控信息. 1. 别名配置 StatFilter的别名是stat,这个别名映射配置信息保存在druid-xxx.jar!/META-INF/drui ...
- Java Http 设置代理
1.今天在Eclipse下面编译一个Http客户端时,发现可以连接局域网,连接不上外部网络,突然想起所用PC是通过代理访问网络的,设置代理后程序可以正常访问网络了: Properties props ...
- 双sonar的cache问题
- JAVA Selenium PHONCOMJS 获取js动态生成完整网页
首先需要在maven的pom.xml中包含以下依赖 <dependency> <groupId>com.github.detro</groupId> <art ...
- split-array-largest-sum(参考了discuss)
注意,第一种用法,涉及到一些Java的知识.就是采用Object作为HashMap的key的时候,需要重载这个Class的 equals 和 hashCode 这两个方法.其中equals需要判断一下 ...
- jQuery中读取json文件
json文件是一种轻量级的数据交互格式.一般在jquery中使用getJSON()方法读取. $.getJSON(url,[data],[callback]) url:加载的页面地址 data: 可选 ...
- MyEclipse中Ctrl+Shift+F快捷键格式化代码时不换行
摘自: http://iteye.blog.163.com/blog/static/18630809620121166622410/ MyEclipse中Ctrl+Shift+F快捷键格式化代码时不换 ...