首页 > 数据库 >Oracle PL / SQL变量范围

Oracle PL / SQL变量范围

时间:2024-07-06 13:29:15浏览次数:17  
标签:OUTPUT SYS put SQL Oracle scope line my PL

变量范围指的是当另一个PL / SQL块可以看到声明的项目时。

在函数或过程的声明部分中声明的任何项只在同一函数或过程中可见。

在包主体的声明部分中声明的任何项只在同一包主体中的任何其他项内可见。

在包规范中声明的任何项目对于调用方法的所有者具有执行特权的任何其他存储函数,存储过程和包是可见的。

实施例2

以下代码是测试范围的程序包规范。

create or replace package SCOPE as 
    -- global variable declaration -- from  w w w . j  a  v a2 s .c  o m
    gv_scope varchar2(80) := 'I''m a global (or package spec) variable'; 
    
    -- a package function declaration 
    FUNCTION my_scope_is_global return varchar2; 

    -- a package procedure declaration 
    PROCEDURE my_scope_is_global; 

end SCOPE; 
/ 

以下代码是用于测试范围的包体。


create or replace package SCOPE as 
    -- global variable declaration -- www .j  a  va  2 s  .  c om
    gv_scope varchar2(80) := 'I''m a global (or package spec) variable'; 
    
    -- a package function declaration 
    FUNCTION my_scope_is_global return varchar2; 

    -- a package procedure declaration 
    PROCEDURE my_scope_is_global; 

end SCOPE; 
/ 

create or replace package body SCOPE as 
    -- an package body variable declaration 
    iv_scope varchar2(80) := 'a package body variable'; 
    
    -- package body function declaration 
    FUNCTION my_scope_is_instance return varchar2 is 
        v_answer_1 varchar2(3) := 'Yes'; 
    begin 
        SYS.DBMS_OUTPUT.put_line(chr(9)||'in function'); 
        SYS.DBMS_OUTPUT.put_line(chr(9)||gv_scope); 
        return v_answer_1; 
    end my_scope_is_instance; 

    -- package function declaration 
    FUNCTION my_scope_is_global 
    return varchar2 is 
        v_answer_2 varchar2(3) := 'Yes'; 
    begin 
        SYS.DBMS_OUTPUT.put_line(chr(9)||'procedure'); 
        SYS.DBMS_OUTPUT.put_line(chr(9)||iv_scope); 
        return v_answer_2; 
    end my_scope_is_global; 


    -- package body procedure declaration 
    PROCEDURE my_scope_is_instance is 
        v_answer_3 varchar2(3) := 'Yes'; 
    begin 
        SYS.DBMS_OUTPUT.put_line(chr(9)||'my_scope_is_instance'); 
        SYS.DBMS_OUTPUT.put_line(chr(9)||gv_scope); 
        SYS.DBMS_OUTPUT.put_line(v_answer_3); 
    end my_scope_is_instance; 


    -- package procedure declaration 
    PROCEDURE my_scope_is_global is 
        v_answer_4 varchar2(3) := 'Yes'; 
    begin 
        SYS.DBMS_OUTPUT.put_line(chr(9)||'my_scope_is_global'); 
        SYS.DBMS_OUTPUT.put_line(chr(9)||iv_scope); 
        SYS.DBMS_OUTPUT.put_line(v_answer_4); 
    end my_scope_is_global; 
end SCOPE; 
/ 

以下代码显示如何使用软件包SCOPE。

declare -- from  ww w  . j av  a 2  s . c  o  m
    v_scope varchar2(40) := 'a local variable'; 
    -- This is a local (or embedded) function 
    FUNCTION my_scope_is_local 
    return varchar2 is 
        v_answer_0 varchar2(3) := 'Yes'; 
    begin 
        return v_answer_0; 
    end my_scope_is_local; 

    -- This is a local (or embedded) procedure 
    PROCEDURE my_scope_is_local is 
        v_answer varchar2(3) := 'Yes'; 
    begin 
        SYS.DBMS_OUTPUT.put_line(v_answer); 
    end my_scope_is_local; 

begin 
    SYS.DBMS_OUTPUT.put_line(v_scope); 
    SYS.DBMS_OUTPUT.put_line('Can I access SCOPE'' global variable?'); 
    SYS.DBMS_OUTPUT.put_line(SCOPE.gv_scope); 
    SYS.DBMS_OUTPUT.put_line('Can I access SCOPE'' instance variable?'); 
    
    SYS.DBMS_OUTPUT.put_line(my_scope_is_local()); 
    SYS.DBMS_OUTPUT.put_line('Can I access SCOPE'' global function?'); 
    SYS.DBMS_OUTPUT.put_line(SCOPE.my_scope_is_global()); 
    SYS.DBMS_OUTPUT.put_line('Can I access SCOPE'' instance function?'); 
    
    SYS.DBMS_OUTPUT.put_line('Can I access my local procedure?'); 
    my_scope_is_local(); 
    SYS.DBMS_OUTPUT.put_line('Can I access SCOPE'' global procedure?'); 
    SCOPE.my_scope_is_global(); 
    SYS.DBMS_OUTPUT.put_line('Can I access SCOPE'' instance procedure?'); 
end; 
/ 

 CSDN:程序猿 寄语:
1、作为一个真正的程序员,首先应该尊重编程,热爱你所写下的程序,他是你的伙伴,而不是工具。
2、程序员可以让步,却不可以退缩,可以羞涩,却不可以软弱,总之,程序员必须是勇敢的。
3、编程是一种单调的生活,因此程序员比普通人需要更多的关怀,更多的友情。
4、程序不是年轻的专利,但是,他属于年轻。
5、没有情调,不懂浪漫,也许这是程序员的一面,但拥有朴实无华的爱是他们的另一面。
6、一个好汉三个帮,程序员同样如此。

标签:OUTPUT,SYS,put,SQL,Oracle,scope,line,my,PL
From: https://blog.csdn.net/licun110/article/details/140091508

相关文章

  • uniapp报错 TypeError: Cannot read properties of undefined (reading ‘replace‘)
      欢迎关注我......
  • SQL语句优化
    SQL语句优化插入数据优化批量插入注:通过测试,若插入一千万条数据,不使用批量插入,每条一个insert需要耗费时间10分钟左右,但若是通过批量插入耗费时间为十几秒左右,由此可见使用批量插入可以极大的提高性能,同时减少多次访问数据库对数据库造成的压力。注:若在springboot或sprin......
  • Java面试八股之MySQL存储引擎都有哪些
    MySQL存储引擎都有哪些MySQL提供了多种存储引擎,每种引擎都有其独特的特性和用途。以下是一些常用的MySQL存储引擎:InnoDB默认存储引擎(自MySQL5.5版本起)。支持事务(ACID属性)、行级锁定和外键约束。使用B+树作为索引结构。适合需要高并发的事务处理和高可靠性的场景。MyISA......
  • python 进阶教程--matplotlib
    matplotlib3.1安装配置3.2Matplotlib快速入门3.3图形绘制线图散点图条形图饼图3.4风格样式使用内置样式创建自定义样式临时使用样式3.1安装配置Matplotlib是一个用于创建高质量图表的Python绘图库。在开始使用Matplotlib之前,需要先安装它。以下是安装......
  • sqlserver数据库MDF文件修复
    针对SQLServer数据库的MDF文件修复,这是一个相对复杂的过程,具体方法取决于文件的损坏程度、是否有备份以及数据库的状态。以下是一些常见的修复方法:使用备份恢复这是最直接且最可靠的方法。如果你有数据库的备份,并且备份是在MDF文件损坏之前创建的,那么你可以通过还原备份来恢......
  • MySQL 命名使用规范
    在数据库设计和开发过程中,命名规范是确保数据库结构清晰、易于维护和扩展的关键因素之一。良好的命名规范可以提高代码的可读性、可维护性和团队协作效率。本文将详细介绍MySQL数据库的命名使用规范,包括数据库、表、列、索引、约束、存储过程、函数、视图和触发器等方面的命名......
  • Matplotlib基本绘图
    Matplotlib基本绘图1.折线图(1)基本绘图plt.plot(x,y)importmatplotlib.pyplotaspltx=[1,2,3,4]y=[12,11,14,13]plt.plot(x,y)plt.show()(2)定义样式A.线条样式a.线条颜色plt.plot(x,y,color=颜色)importmatplotlib.pyplotaspltx=[1,2,3......
  • Mysql 索引
     在MySQL中,索引是一种数据结构,它能够帮助快速查找和检索表中的记录,从而提高查询性能。索引在数据库中类似于书籍的目录,可以快速定位到所需的内容。下面是关于MySQL索引的详细介绍,包括其概念、类型、如何使用以及如何在建表时指定索引。什么是索引索引是存储在数据库中的一......
  • Mysql 8.4 安装(Centos7.9)
    前置准备root环境下执行#关闭selinuxvi/etc/selinux/config#SELINUX=enforcing=>SELINUX=disabled#开通防火墙3306/tcpfirewall-cmd--permanent--add-port=3306/tcp下载链接获取https://dev.mysql.com/downloads/file/?id=529414下载&安装下载mkdir-p......
  • Webpack: 使用 SplitChunks提升应用性能
    概述Webpack默认会将尽可能多的模块代码打包在一起,优点是能减少最终页面的HTTP请求数,但缺点也很明显:页面初始代码包过大,影响首屏渲染性能;无法有效应用浏览器缓存,特别对于NPM包这类变动较少的代码,业务代码哪怕改了一行都会导致NPM包缓存失效。为此,Webpack提供了S......