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文件为链接器提供了有关被链接程序的导出.属 ...
随机推荐
- SCOJ 4427: Miss Zhao's Graph dp
4427: Miss Zhao's Graph 题目连接: http://acm.scu.edu.cn/soj/problem.action?id=4427 Description Mr Jiang ...
- Codeforces Round #305 (Div. 1) A. Mike and Frog 暴力
A. Mike and Frog Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/contest/547/pr ...
- PAT甲级1107. Social Clusters
PAT甲级1107. Social Clusters 题意: 当在社交网络上注册时,您总是被要求指定您的爱好,以便找到一些具有相同兴趣的潜在朋友.一个"社会群体"是一群拥有一些共同 ...
- MySQL单表恢复方法
正休息的时候一个电话将我的睡意完全打散,“开发童鞋写update SQL的时候忘了加where条件了”,相信每一个DBA同学听到这个消息的时候都有骂街的冲动吧.万幸只是单表写花了,而不是哪位大神在DB ...
- Vue学习记录-初探Vue
写在开头 2017年,部门项目太多,而且出现了一个现象,即:希望既要有APP,也能够直接扫码使用,也能放到微信公众号里面. 从技术角度来说,APP我们可以选择原生开发,也可以选择ReactNative ...
- H2数据库使用 详解
H2最完整的资料下载地址: http://download.csdn.net/detail/yixiaoping/5956595 H2数据库使用 H2数据库介绍 常用的开源数据库:H2,Derby ...
- HDU 1171 Big Event in HDU (多重背包变形)
Big Event in HDU Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- 为什么少有人在Windows电脑上安OS X?
问:为什么许多人在Mac上安装Windows,却很少有人在PC上安装OS X呢?(注:通常,我们定义运行Windows的电脑为PC,而Mac的操作系统则为OS X) 答:iPhone的真正流行让更多的 ...
- Linux/UNIX线程(2)
线程(2) 线程同步 当多个控制线程共享同样内存时,须要确保每一个线程看到一致的数据视图.假设每一个线程使用的变量都是其它线程不会读取或改动的,那么就不在一致性问题. 当两个或多个线程试图在同一时间改 ...
- qt 中文乱码 处理QByteArray类型里含中文的数据
qt解析tcp通信传来的xml时,中文有乱码 解决方法: 头文件加入 #include <QTextCodec> QByteArray tmpQBA = m_pSocket->rea ...