oracle

简介:

1 %TYPE说明

为了使一个变量的数据类型与另一个已经定义了的变量(尤其是表的某一列)的数据类型相一致,Oracle提供了%TYPE定义方式。当被参照的那个变量的数据类型改变了之后,这个新定义的变量的数据类型会自动跟随其改变,容易保持一致,也不用修改PL/SQL程序了。当不能确切地知道被参照的那个变量的数据类型时,就只能采用这种方法定义变量的数据类型。

2 %ROWTYPE说明

如果一个表有较多的列,使用%ROWTYPE来定义一个表示表中一行记录的变量,比分别使用%TYPE来定义表示表中各个列的变量要简洁得多,并且不容易遗漏、出错。这样会增加程序的可维护性。

为了使一个变量的数据类型与一个表中记录的各个列的数据类型相对应、一致,Oracle提供%ROWTYPE定义方式。当表的某些列的数据类型改变了之后,这个新定义的变量的数据类型会自动跟随其改变,容易保持一致,也不用修改PL/SQL程序了。当不能确切地知道被参照的那个表的结构及其数据类型时,就只能采用这种方法定义变量的数据类型。

一行记录可以保存从一个表或游标中查询到的整个数据行的各列数据。一行记录的各个列与表中一行的各个列有相同的名称和数据类型。
举例说明

3.1 数据准备

SQL>
SQL> CREATE TABLE SF_ORG
2 (
3 ORG_ID INT NOT NULL, --组织机构主键ID
4 ORG_NAME VARCHAR2(50),--组织机构名称
5 PARENT_ID INT--组织机构的父级
6 )
7 /
Table created

SQL>
SQL> INSERT INTO SF_ORG(ORG_ID, ORG_NAME, PARENT_ID) VALUES(1, '一级部门1',0);
1 row inserted

SQL>
SQL> INSERT INTO SF_ORG(ORG_ID, ORG_NAME, PARENT_ID) VALUES(2, '二级部门2',1);
1 row inserted
SQL> INSERT INTO SF_ORG(ORG_ID, ORG_NAME, PARENT_ID) VALUES(3, '二级部门3',1);
1 row inserted
SQL> INSERT INTO SF_ORG(ORG_ID, ORG_NAME, PARENT_ID) VALUES(4, '二级部门4',1);
1 row inserted

3.2 %TYPE

声明两个与SF_ORG表中的PARENT_ID和ORG_NAME列的数据类型相同的变量,然后用替换变量&ORG_ID接受输入的组织机构编码,查询并显示该组织机构的名称、上级部门ID。注意,在使用由%TYPE定义的变量时要用“.”运算符指定表名限定词。

执行结果如下图所示:

SQL>
SQL> DECLARE
2 V_ORG_NAME SF_ORG.ORG_NAME%TYPE; --与ORG_NAME类型相同
3 V_PARENT_ID SF_ORG.PARENT_ID%TYPE;--与PARENT_ID类型相同
4 BEGIN
5 SELECT ORG_NAME,PARENT_ID INTO V_ORG_NAME,V_PARENT_ID
6 FROM SF_ORG SO
7 WHERE SO.ORG_ID=&ORG_ID;
8 DBMS_OUTPUT.PUT_LINE('部门名称:' || V_ORG_NAME);
9 DBMS_OUTPUT.PUT_LINE('上级部门编码:' || TO_CHAR(V_PARENT_ID));
10 END;
11 /
部门名称:一级部门1
上级部门编码:0
PL/SQL procedure successfully completed

1.1.3.3 %ROWTYPE

声明一个与SF_ORG表中各个列的列名、数据类型都相同的行记录变量V_SF_ORG_REC,然后用替换变量&ORG_ID接受输入的组织机构编码,查询并显示该组织机构的名称、上级部门ID。注意,在使用由%ROWTYPE定义的变量时要用“.”运算符指定记录变量名限定词。

执行结果如下图所示

SQL>
SQL> DECLARE
2 V_SF_ORG_REC SF_ORG%ROWTYPE; --与SF_ORG表中的各个列相同
3 BEGIN
4 SELECT * INTO V_SF_ORG_REC
5 FROM SF_ORG SO
6 WHERE SO.ORG_ID=&ORG_ID;
7 DBMS_OUTPUT.PUT_LINE('部门ID:' || TO_CHAR(V_SF_ORG_REC.ORG_ID));
8 DBMS_OUTPUT.PUT_LINE('部门名称:' || V_SF_ORG_REC.ORG_NAME);
9 DBMS_OUTPUT.PUT_LINE('上级部门编码:' || TO_CHAR(V_SF_ORG_REC.PARENT_ID));
10 END;
11 /
部门ID:1
部门名称:一级部门1
上级部门编码:0
PL/SQL procedure successfully completed

相关文章
|
JavaScript API
vue 模板引用
vue 模板引用
|
存储 算法 Linux
VDO卷的配置
在CentOS 7环境下,VDO通过重删和压缩技术节省磁盘空间,使1T磁盘可存储1.5T数据,降低成本。创建VDO步骤包括:添加64GB新硬盘,安装vdo和kmod-kvdo软件,使用`vdo create`命令创建VDO卷,如`vdo create --name=myvdo --device=/dev/sdb --vdoLogicalSize=200G`。之后,可通过`vdo list`、`vdo status`和`vdostats`检查状态和空间使用。最后,格式化VDO卷,创建挂载点并挂载,完成设置。
141 0
|
新零售 区块链
以太坊如何估计估算计算gas?
以太坊如何估计估算计算gas?Etherscan上transaction info中有个gas used by txn,结果跟remix给的结果以及geth中getTransactionReceipt的gasUsed给的结果都会是一致的,可以直接用geth或是remix模拟估算gas cost。
1575 0
|
监控 API C++
利用API NtQueryInformationThread和I_QueryTagInformation实现对Windows日志监控的绕过
本文讲的是利用API NtQueryInformationThread和I_QueryTagInformation实现对Windows日志监控的绕过,在上篇文章《渗透技巧——Windows日志的删除与绕过》中提到一个绕过Windows日志监控的思路:使用API NtQueryInformationT...
2081 0
|
6天前
|
云安全 人工智能 安全
|
4天前
|
安全
2025 阿里云中企出海峰会|安全合规分论坛,6月24日深圳见!
聚焦出海安全合规,分论坛限时报名中!
1102 0
|
15天前
|
数据采集 自然语言处理 搜索推荐
基于Qwen3的Embedding和Rerank模型系列,开源!
近年来,随着大规模预训练语言模型(LLM)的飞速发展,文本嵌入(Embedding)和重排序(Reranking)技术在搜索引擎、问答系统、推荐系统等多个领域的重要性愈发凸显。
1162 93
|
14天前
|
人工智能 前端开发 Devops
通义灵码带你玩转开发者常用的MCP(合辑,持续更新中)
今天我们精选了与开发者息息相关和比较热门的MCP 服务,总结了这些技术服务在实际开发的最佳实践,涵盖了从前端开发、后端开发、DevOps、测试、运维等关键环节,及非研发领域中的热度较高的MCP服务。我们通过直播、图文等形式带你了解和学习!
1068 5