当前位置: 首页 > news >正文

Oracle PL/SQL基础语法学习15:静态表达式

系列文章目录

Oracle PL/SQL基础语法学习12:短路求值
Oracle PL/SQL基础语法学习13:比较运算符
Oracle PL/SQL基础语法学习14:BOOLEAN表达式


文章目录

  • 系列文章目录
  • 前言
  • Oracle PL/SQL基础语法学习15:静态表达式
    • Static Expressions(静态表达式)介绍
      • 静态常量
    • 官方文档Static Constants(静态常量)代码例
      • 关于AUTHID DEFINER 和AUTHID CURRENT_USER
    • 参考连接
    • 总结

【免责声明】文章仅供学习交流,观点代表个人,与任何公司无关。
编辑|SQL和数据库技术(ID:SQLplusDB)


前言

PL/SQL是Oracle数据库中的一种嵌入式语言,其功能强大,可以进行存储过程和函数的编写,帮助开发者快速高效地处理数据库操作。

最好的学习是实践加上看官方文档。官方文档中的代码例更是精华和重点所在。
IT行业如此,编程如此,Oracle PL/SQL的学习更是如此。

本系列将以《Database PL/SQL Language Reference》的PL/SQL代码例为主线进行介绍。

Oracle PL/SQL基础语法学习15:静态表达式

Static Expressions(静态表达式)介绍

静态表达式是一个在PL/SQL语言中用于描述一个特定值的表达式。
这个表达式在编译时可以确定其值的表达式,即它不包括字符比较、变量或函数调用,在运行时是不可改变的,常常在PL/SQL中用于初始化变量、常量、参数等。
在PL/SQL中,静态表达式可以使用常量、字面量、枚举类型等,可以使用任意组合来描述目标值。

静态常量

在一个包规范中声明静态常量的语法是:

constant_name CONSTANT data_type := static_expression; 

静态表达式的类型必须与data_type相同(BOOLEAN或PLS_INTEGER)。
静态常量必须始终作为package_name.constant_name被引用,即使是在package_name包的主体中。

官方文档Static Constants(静态常量)代码例

CREATE PACKAGE my_debug ISdebug CONSTANT BOOLEAN := TRUE;trace CONSTANT BOOLEAN := TRUE;
END my_debug;
/CREATE PROCEDURE my_proc1 AUTHID DEFINER IS
BEGIN$IF my_debug.debug $THENDBMS_OUTPUT.put_line('Debugging ON');$ELSEDBMS_OUTPUT.put_line('Debugging OFF');$END
END my_proc1;
/CREATE PROCEDURE my_proc2 AUTHID DEFINER IS
BEGIN$IF my_debug.trace $THENDBMS_OUTPUT.put_line('Tracing ON');$ELSEDBMS_OUTPUT.put_line('Tracing OFF');$END
END my_proc2;
/

这段PL/SQL代码创建了一个名为my_debug的包,其中包含两个静态常量debug和trace,类型为BOOLEAN,并在其值上分别定义为TRUE,用于控制多个PL/SQL单元中的调试和跟踪。
接着创建了两个存储过程my_proc1和my_proc2,它们都具有AUTHID DEFINER权限,也就是使用它们的用户必须拥有它们的owner授予的权限。这两个存储过程中都使用了条件编译语句IF/THEN/ELSE/END,通过判断my_debug包中的debug和trace常量的值来输出相应的信息。IF指令用于测试编译时常量的值,如果值为TRUE,则执行THEN指定的代码块,否则执行$ELSE指定的代码块。这种条件编译语句通常用于开发和调试过程中,在编译时根据一些条件选择性地编译特定的代码块,以提高代码的可读性和效率。

过程my_proc1仅使用debug,而过程my_proc2仅使用trace,但两个过程都依赖于该包。但重新编译的代码可能并不会有所不同。例如,如果您只更改debug的值为FALSE,然后重新编译这两个过程,那么my_proc1的编译代码会改变,但my_proc2的编译代码不会改变。

关于AUTHID DEFINER 和AUTHID CURRENT_USER

AUTHID参数用于定义执行函数体时,使用哪个用户的权限。

AUTHID { CURRENT_USER|DEFINER}
  1. 当创建具有 AUTHID CURRENT_USER 权限的存储过程、函数或包时,其将在调用它的用户的权限上下文中运行。
    例:
CREATE OR REPLACE PROCEDURE TEST_AUTHID1 AUTHID CURRENT_USER IS
BEGINEXECUTE IMMEDIATE 'select * from table1';
END TEST_AUTHID1 ;
/

该代码创建了名为 TEST_AUTHID 的存储过程,该存储过程以当前用户的上下文权限来运行(即 AUTHID CURRENT_USER)。在存储过程的主体中,使用 EXECUTE IMMEDIATE 语句来执行了一个 SQL 查询,查询的是名为 table1 的表的所有数据。

由于存储过程是以当前用户的权限来运行的,因此只有当前用户具有足够的权限才能执行该查询。如果当前用户没有对表 table1 的访问权限,则该查询将失败并抛出异常。

  1. 当创建具有 AUTHID DEFINER 权限的存储过程、函数或包时,它将以其所属用户(创建者)的权限上下文中运行。

例:

CREATE OR REPLACE PROCEDURE TEST_AUTHID2 AUTHID DEFINER IS
BEGINEXECUTE IMMEDIATE 'select * from table1';
END TEST_AUTHID2 ;
/

该代码创建了名为 TEST_AUTHID2 的存储过程,该存储过程以定义者 AUTHID 的权限来运行。在存储过程的主体中,使用 EXECUTE IMMEDIATE 语句来执行了一个 SQL 查询,查询的是名为 table1 的表的所有数据。

由于该存储过程是以定义者的权限来运行的,即创建该存储过程的用户/角色/授权程序的权限上下文中运行。因此,只要该定义者具有访问表 table1 的权限,无论调用该存储过程的用户具有何种权限,该查询都会成功执行。
但是,如果定义者在创建存储过程时已经不存在或者权限被撤销,则该存储过程无法成功执行。

参考:
8.14 Invoker’s Rights and Definer’s Rights (AUTHID Property)
Definer’s Rights and Invoker’s Rights (AUTHID clause)

参考连接

Database PL/SQL Language Reference

总结

静态表达式是PL/SQL编程中一个重要的概念,它可以用于定义和初始化变量、参数和常量等。常量表达式、字面量表达式和枚举类型表达式是常用的静态表达式类型。AUTHID参数可以用于定义执行函数体时,使用哪个用户的权限。

相关文章:

Oracle PL/SQL基础语法学习15:静态表达式

系列文章目录 Oracle PL/SQL基础语法学习12:短路求值 Oracle PL/SQL基础语法学习13:比较运算符 Oracle PL/SQL基础语法学习14:BOOLEAN表达式 文章目录 系列文章目录前言Oracle PL/SQL基础语法学习15:静态表达式Static Expression…...

B-Tree (多路查找树)分析-20230503

B-Tree (多路查找树)学习-20230503 前言 B-树是一类多路查询树,它主要用于文件系统和某些数据库的索引,如果采用二叉平衡树访问文件里面的数据,最坏情况下,磁头可能需要进行O(h)次对磁盘的读写,其中h为树的高度&…...

OpenGL光照教程之 透光物

引言 我们目前使用的所有光照都来自于一个单独的光源,这是空间中的一个点。它的效果不错,但是在真实世界,我们有多种类型的光,它们每个表现都不同。一个光源把光投射到物体上,叫做投光。这个教程里我们讨论几种不同的投…...

如何使用hook?

目标&#xff1a;将posix函数hook住 一个简单的例子 &#xff08;连接mysql服务&#xff09;&#xff0c;连接成功则打印success mysql.c #include <mysql/mysql.h> #include <stdio.h> int main(){MYSQL* mysql mysql_init(NULL);if(!mysql){printf("my…...

双指针技巧秒杀七道链表题目

文档阅读 文档阅读 题目 141. 环形链表 https://leetcode.cn/problems/linked-list-cycle/ public class Solution {public boolean hasCycle(ListNode head) {ListNode fast head, slow head;while(fast ! null && fast.next ! null){fast fast.next.next;slo…...

在“裸奔”时代保护我们的隐私:网络攻击、数据泄露与隐私侵犯的应对策略与工具

摘要&#xff1a;随着信息技术的普及和发展&#xff0c;个人隐私和数据安全问题日益受到威胁。本文将讨论如何有效应对网络攻击、数据泄露和隐私侵犯&#xff0c;并提供一系列实用的技巧和工具&#xff0c;以帮助我们在“裸奔”时代更好地保护数据安全和隐私。 当今社会&#…...

如何写出高质量代码

你是否曾经为自己写的代码而感到懊恼&#xff1f;你是否想过如何才能写出高质量代码&#xff1f;那就不要错过这个话题&#xff01;在这里&#xff0c;我们可以讨论什么是高质量代码&#xff0c;如何写出高质量代码等问题。无论你是初学者还是资深开发人员&#xff0c;都可以在…...

[oeasy]python0048_注释_comment_设置默认编码格式

注释Comment 回忆上次内容 使用了版本控制 git 制作备份进行回滚 尝试了 嵌套的控制结构 层层 控制 不过 除非 到不得以尽量不要 太多层次的嵌套 这样 从顶到底含义 明确而且 还扁平 扁平 也能 含义明确 还可以 做点什么&#xff1f; 让程序含义 更加明确呢&#xff1f;&…...

C++中的queue与priority_queue

文章目录 queuequeue的介绍queue的使用 priority_queuepriority_queue介绍priority_queue使用 queue queue的介绍 队列是一种容器适配器&#xff0c;专门用于上下文先进先出的操作中。队列的特性是先进先出&#xff0c;从容器的一端插入&#xff0c;另一端提取元素。   队列…...

电脑发挥极致,畅游永恒之塔sf

随着22寸显示器的普及&#xff0c;玩永恒之塔势必会对显示卡造成了很大负担。不要说效果全开&#xff0c;就连简洁的玩&#xff0c;都成了问题&#xff0c;那是不是就要重金把才买的显示卡又要拿掉呢&#xff1f; 最出众的解决办法&#xff0c;是超频。 主要就具有以下条件最佳…...

ChatGPT :十几个国内免费可用 ChatGPT 网页版

前言 ChatGPT&#xff08;全名&#xff1a;Chat Generative Pre-trained Transformer&#xff09;&#xff0c;美国OpenAI 研发的聊天机器人程序 &#xff0c;于2022年11月30日发布 。ChatGPT是人工智能技术驱动的自然语言处理工具&#xff0c;它能够通过理解和学习人类的语言…...

5 分钟教你如何免费用上 GPT-4

今天要分享的就是普通用户&#xff0c;没有 OpenAI 账号&#xff0c;不需要写代码&#xff0c;你依然可以免费体验 GPT-4&#xff0c;当然&#xff0c;会有一些缺点&#xff0c;本篇文章将会手把手教你怎么用上免费版的 GPT-4 以及它的一些限制。 第一步&#xff1a;打开 Stea…...

安卓手机搭建智能语音客服/通话播音/聊天播音乐技术实现

声明&#xff0c;此项技术需要root支持&#xff0c;如果因为刷机导致手机变砖或其他不可预料的后果请自行解决。 场景 我有一个朋友他是做业务的&#xff0c;主要还是做电销&#xff0c;其实电销相对于以前纪念没那么好做了&#xff08;我自己觉得主要是互联网冲击&#xff0c…...

【学习笔记】PKUSC2023 不知道咋记

挺快乐的。到 P K U PKU PKU感受了一下北大校园&#xff0c;其实并没有想像中那么令人惊艳&#xff0c;但是看到了许多亲切的学长以及他们的热心陪伴&#xff08;虽然有的我甚至不认识&#xff09;&#xff0c;感觉心里还是挺暖的。 如果不算上 D 2 T 1 D2T1 D2T1被平衡树板子…...

Packet Tracer - 配置基于区域的策略防火墙 (ZPF)

Packet Tracer - 配置基于区域的策略防火墙 (ZPF) 拓扑图 地址分配表 设备 接口 IP 地址 子网掩码 默认网关 交换机端口 R1 G0/1 192.168.1.1 255.255.255.0 不适用 S1 F0/5 S0/0/0 (DCE) 10.1.1.1 255.255.255.252 不适用 不适用 R2 S0/0/0 10.1.1.2 255…...

全方位揭秘!大数据从0到1的完美落地之运行流程和分片机制

一个完整的MapReduce程序在分布式运行时有三类实例进程&#xff1a; MRAppMaster: 负责整个程序的过程调度及状态协调MapTask: 负责Map阶段的整个数据处理流程ReduceTask: 负责Reduce阶段的整个数据处理流程 当一个作业提交后(mr程序启动)&#xff0c;大概流程如下&#xff1…...

后端程序员的前端必备【Vue】 - 07 ES6新语法

ES6新语法 1 let定义变量2 const定义常量3 模板字符串4 方法默认值5 箭头函数6 解构6.1 对象解构6.2 数组解构6.2 使用解构实现变量交换 7 Spread Operator8 模块化编程 1 let定义变量 使用let定义变量能更加精准的确定变量的作用域 //for(var i 0 ; i < 10 ; i){} for(let…...

AI落地:程序员如何用AI?

对于程序员来说&#xff0c;真正能提高效率、可落地的AI应用场景都有哪些&#xff1f; 目前已经能切实落地&#xff0c;融入我日常工作生活的有以下几个场景&#xff1a; 开发工作&#xff1a;自然语言生成代码&#xff0c;自动补全代码 日常工作学习&#xff1a;写作、翻译、…...

掌握优化+创新模式,轻松提升APP广告eCPM

​无论是市场占有率高的综合性应用程序(App)&#xff0c;还是透过特定目的所设计的专业化应用程序(App)&#xff0c;内部嵌入广告已成为其主要的盈利方式。 而优化和创新作为提升广告收益的两大关键词。通过不断的数据分析和优化&#xff0c;结合对用户需求的深刻理解去优化和…...

在docker上安装运行Python文件

目录 一、在docker中安装python 1.1 输入镜像拉取命令 1.2 查看镜像 1.3 运行 1.4 查看是否成功 1.5 查看python版本 二、运行py文件 2.1准备运行所需文件 2.2 准备文件夹 2.3 大概是这幅模样 2.4 打包上传到服务器上 2.5 构建镜像示例 2.6 查看镜像 2.7 优化镜像的…...

第19节 Node.js Express 框架

Express 是一个为Node.js设计的web开发框架&#xff0c;它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用&#xff0c;和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

Oracle查询表空间大小

1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我&#xff0c;后续持续新增专题博文&#xff0c;谢谢&#xff01;&#xff01;&#xff01;】 上一篇我们讲了&#xff1a; 这一篇我们开始讲&#xff1a; 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下&#xff1a; 一、场景操作步骤 操作步…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

【AI学习】三、AI算法中的向量

在人工智能&#xff08;AI&#xff09;算法中&#xff0c;向量&#xff08;Vector&#xff09;是一种将现实世界中的数据&#xff08;如图像、文本、音频等&#xff09;转化为计算机可处理的数值型特征表示的工具。它是连接人类认知&#xff08;如语义、视觉特征&#xff09;与…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

&#x1f680; C extern 关键字深度解析&#xff1a;跨文件编程的终极指南 &#x1f4c5; 更新时间&#xff1a;2025年6月5日 &#x1f3f7;️ 标签&#xff1a;C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言&#x1f525;一、extern 是什么&#xff1f;&…...

高防服务器能够抵御哪些网络攻击呢?

高防服务器作为一种有着高度防御能力的服务器&#xff0c;可以帮助网站应对分布式拒绝服务攻击&#xff0c;有效识别和清理一些恶意的网络流量&#xff0c;为用户提供安全且稳定的网络环境&#xff0c;那么&#xff0c;高防服务器一般都可以抵御哪些网络攻击呢&#xff1f;下面…...