精华内容
下载资源
问答
  • 修改存储过程会重新编译吗
    2021-01-18 19:04:07

    在实际开发过程中,业务需求修改的情况时有发生,所以修改 MySQL 中的存储过程是不可避免的。

    MySQL 中通过 ALTER PROCEDURE 语句来修改存储过程。本节将详细讲解修改存储过程的方法。

    MySQL 中修改存储过程的语法格式如下:

    ALTER PROCEDURE 存储过程名 [ 特征 ... ]

    特征指定了存储过程的特性,可能的取值有:

    CONTAINS SQL 表示子程序包含 SQL 语句,但不包含读或写数据的语句。

    NO SQL 表示子程序中不包含 SQL 语句。

    READS SQL DATA 表示子程序中包含读数据的语句。

    MODIFIES SQL DATA 表示子程序中包含写数据的语句。

    SQL SECURITY { DEFINER |INVOKER } 指明谁有权限来执行。

    DEFINER 表示只有定义者自己才能够执行。

    INVOKER 表示调用者可以执行。

    COMMENT 'string' 表示注释信息。

    实例 1

    下面修改存储过程 showstuscore 的定义,将读写权限改为 MODIFIES SQL DATA,并指明调用者可以执行,代码如下:

    mysql> ALTER PROCEDURE showstuscore MODIFIES SQL DATA SQL SECURITY INVOKER;

    Query OK, 0 rows affected (0.01 sec)

    执行代码,并查看修改后的信息,运行结果如下:

    mysql> SHOW CREATE PROCEDURE showstuscore \G

    *************************** 1. row ***************************

    Procedure: showstuscore

    sql_mode: STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

    Create Procedure: CREATE DEFINER=`root`@`localhost` PROCEDURE `showstuscore`()

    MODIFIES SQL DATA

    SQL SECURITY INVOKER

    BEGIN

    SELECT id,name,score FROM studentinfo;

    END

    character_set_client: gbk

    collation_connection: gbk_chinese_ci

    Database Collation: latin1_swedish_ci

    1 row in set (0.00 sec)

    结果显示,存储过程修改成功。从运行结果可以看到,访问数据的权限已经变成了 MODIFIES SQL DATA,安全类型也变成了 INVOKE。

    提示:ALTER PROCEDURE 语句用于修改存储过程的某些特征。如果要修改存储过程的内容,可以先删除原存储过程,再以相同的命名创建新的存储过程;如果要修改存储过程的名称,可以先删除原存储过程,再以不同的命名创建新的存储过程。

    更多相关内容
  • Oracle 重新编译存储过程/函数等

    千次阅读 2021-05-07 06:59:31
    第一种 如果你使用 PL/SQL Developer工具左侧工具栏中选择“存储过程”-》选择已经失效的procedure-》右键-》选择重新编译 即可完成第二种 命令行版1.查找到无效对象select 'Alter '||object_type||' '||object_name...

    第一种  如果你使用 PL/SQL Developer工具

    左侧工具栏中选择“存储过程”-》选择已经失效的procedure-》右键-》选择重新编译 即可完成

    第二种  命令行版

    1.查找到无效对象

    select 'Alter '||object_type||' '||object_name||' compile;' from user_objects where status = 'INVALID';

    2.重新编译存储过程 pro_backup_call 执行下面脚本即可

    alter procedure pro_backup_call compile;

    用sql语句导出oracle中的存储过程和函数

    用sql语句导出oracle中的存储过程和函数: SET echo off ; SET heading off ; SET feedback off ; SPOOL 'C:/PRC.SQL' repl ...

    MySQL存储过程中的3种循环,存储过程的基本语法,ORACLE与MYSQL的存储过程/函数的使用区别,退出存储过程方法

    在MySQL存储过程的语句中有三个标准的循环方式:WHILE循环,LOOP循环以及REPEAT循环.还有一种非标准的循环方式:GOTO,不过这种循环方式最好别用,很容易引起程序的混乱,在这里就不错具体 ...

    转://oracle 重新编译用户无效对象

    select owner,object_name, replace(object_type,' ','') object_type,to_char(created,'yyyy-mm-dd') as c ...

    OTL调用存储过程/函数及注意事项

    OTL 是 Oracle, Odbc and DB2-CLI Template Library 的缩写,是一个 C++ 编译中操控关系数据库的模板库,它目前几乎支持所有的当前各种主流数据库. OTL  ...

    理解性能的奥秘——应用程序中慢,SSMS中快(2)——SQL Server如何编译存储过程

    本文属于系列 接上文:理解性能的奥秘--应用程序中慢,SSMS中快(1)--简介 本文介绍SQL Server如何编译存储过程并使用计划缓存 ...

    MySQL之实现Oracle中的rank()函数的功能

    假设表格为student, 数据如下:   我们要在MySQL中实现Oracle中的rank()函数功能,即组内排序,具体来说: 就是对student表中按照课程(course)对学生(name) ...

    oracle重新编译失效对像

    重新编译失效对像可执行utlrp.sql文件: SQL> @?/rdbms/admin/utlrp.sql TIMESTAMP --------------------------------- ...

    oracle中print_table存储过程实例介绍

    oracle中pro_print_table存储过程实例介绍 存储过程(Stored Procedure),就是一组用于完成特定数据库功能的SQL语句集,该SQL语句集经过编译后存储在数据库系统中.这 ...

    ORACLE 如何查看存储过程的定义

    ORACLE 如何查看存储过程的定义   相关的数据字典 USER_SOURCE 用户的存储过程.函数的源代码字典 DBA_SOURCE 整个系统所有用户的存储过程.函数的源代码字典 ALL_SOUR ...

    随机推荐

    用C#从数据库动态生成AdminLTE菜单的一种方法

    当前的应用设计风格趋于Flat扁平化,很多基于BootStrap实现了很多UI非常漂亮的管理界面(Bootstrap admin template). 此核心文件开源在Github:https://g ...

    【linux】文件隐藏属性

    这些隐藏的属性确实对于系统有很大的帮助的- 尤其是在系统安全 (Security) 上面,重要的紧呢!不过要先强调的是,底下的chattr指令只能在Ext2/Ext3的文件系统上面生效, 其他 ...

    关于hasOwnProperty()方法的应用

    展开全文
  • Oracle 中的存储过程在有些情况下会变成失效状态,...再就我的存储过程经常变成无效,至今原因都未查明。查询 dba_dependencies 视图可以看到存储过程所引用的对象,再就在 dba_objects 视图中可以看到对象的 cre...

    Oracle 中的存储过程在有些情况下会变成失效状态,在 PL/SQL Developer 中该存储过程的图标左上角显示一把小红叉叉。比如储过程所引用的对象失效,dblink 出问题啦都可能引起用到它的存储过程失效。再就我的存储过程经常会变成无效,至今原因都未查明。

    查询 dba_dependencies 视图可以看到存储过程所引用的对象,再就在 dba_objects 视图中可以看到对象的 created 和 last_ddl_time 时间。

    上面的那种无效的存储程,只要不是语法上有问题,重新编译一下又是可用的了。总不能每次发现时人工去编译的,所以要实现自动化,有以下两种方法(网上找到的所有的 在Oracle中重新编译所有无效的存储过程 代码排版都很混乱,所以主要是重新整理了):

    Oracle SQL *Plus 中 – 用 spool 生成脚本文件,然后 @ 调入执行,代码如下:

    spool ExecCompProc.sql

    select 'alter procedure '||object_name||' compile;' from all_objects

    where status = 'INVALID' and object_type = 'PROCEDURE' AND owner='UNMI';

    spool off

    @ExecCompProc.sql;

    写成一个存储过程 – 让这个存储过程在某个时机执行,比如  Job 中,代码如下:

    create or replace procedure compile_invalid_procedures(

    p_owner varchar2 -- 所有者名称,即 SCHEMA

    ) as

    --编译某个用户下的无效存储过程

    str_sql varchar2(200);

    begin

    for invalid_procedures in (select object_name from all_objects

    where status = 'INVALID' and object_type = 'PROCEDURE' and owner=upper(p_owner))

    loop

    str_sql := 'alter procedure ' ||invalid_procedures.object_name || ' compile';

    begin

    execute immediate str_sql;

    exception

    --When Others Then Null;

    when OTHERS Then

    dbms_output.put_line(sqlerrm);

    end;

    end loop;

    end;

    这里述及的是如何重新编译存储过程,依次推及到,重新编译 FUNCTION、PACKAGE、TYPE、TRIGGER 等,和重建 INDEX 等。

    所不同的就是查询 all_objects 时的  object_type 不一样,还有要执行的 alter 语句不一样。

    object_type 有哪些可用 select distinct object_type from all_objects 获取到;alter 的语句写法参考下面:

    alter function function_name compile;

    alter package package)name compile;

    alter type type_name compile;

    alter index index_name rebuild;

    补充

    1. 其实存储过程、函数等是 INVALID,只要内容无错误就不要紧,因为执行的时候会自动重新编译

    2. 在 SQL *Plus 或者 PL/SQL Developer 的 Command Windows 中用 show  errors  procedure  procedure_name

    或 show errors function function_name 可以查看到存储过程具体错误

    3. 可以用 Oracle 提供的工具:dbms_utility.compile_schema(schema varchar2, compile_all boolean default TRUE);

    来编译某个 Schema 下的所有 PROCEDURE、FUNCTION、PACKAGE 和 TRIGGER。比如执行 dbms_utility.compile_schema(‘Unmi’)。

    ---------------------

    作者:fengyuruhui123

    来源:CSDN

    原文:https://blog.csdn.net/fengyuruhui123/article/details/52161893

    版权声明:本文为博主原创文章,转载请附上博文链接!

    展开全文
  • 通常将Oracle存储过程编译为本地编译方式的测试记录. 测试用表: SQLgt; create table t1(rid number); Table created SQLgt; c通常将Oracle存储过程编译为本地编译方式的测试记录.测试用表:SQL> create table t1...

    通常将Oracle存储过程编译为本地编译方式的测试记录. 测试用表: SQLgt; create table t1(rid number); Table created SQLgt; c

    通常将Oracle存储过程编译为本地编译方式的测试记录.

    测试用表:

    SQL> create table t1(rid number);

    Table created

    SQL> create table t_n(rid number);

    Table created

    测试用的存储过程:

    create or replace procedure pro_xcl(p1 varchar2)

    is

    begin

    dbms_output.put_line(p1);

    insert into t1 select rownum as rr

    from dual connect by rownum < 1000000;

    commit;

    exception

    when others then

    dbms_output.put_line(sqlcode||' : '||substr(sqlerrm,200));

    end;

    测试:

    SQL> set serveroutput on

    SQL> set timing on

    --查看存储过程当前编译方式

    SQL> select plsql_code_type from all_plsql_object_settings where;

    PLSQL_CODE_TYPE

    --------------------------------------------------------------------------------

    INTERPRETED

    Executed in 0.14 seconds

    SQL> exec pro_xcl('11g INTERPRETED');

    11g INTERPRETED

    PL/SQL procedure successfully completed

    Executed in 4.68 seconds

    更改下,pro_xcl,将t1换成t_n表。

    测试本地编译方式出来的存储过程运行速度.

    -- 用本地编译方式编译存储过程pro_xcl

    SQL> alter procedure pro_xcl compile plsql_code_type=native;

    Procedure altered

    Executed in 0.062 seconds

    --查看存储过程当前编译方式,可看到,已变成本地编译方式了

    SQL> select plsql_code_type from all_plsql_object_settings where;

    PLSQL_CODE_TYPE

    --------------------------------------------------------------------------------

    NATIVE

    Executed in 0.063 seconds

    SQL> exec pro_xcl('11g NATIVE');

    11g NATIVE

    PL/SQL procedure successfully completed

    Executed in 4.087 seconds

    本地编译方式要快0.6秒,没有快到想象的夸张的地步。

    设置当前session程序编译方式默认为本地编译:

    alter session set plsql_code_type=native;

    设置数据库默认程序为本地编译方式:

    alter system set plsql_code_type=native;

    与PLSQL编译相关一些参数:

    SQL> show parameter plsql

    NAME TYPE VALUE

    ------------------------------------ ----------- ------------------------------

    plsql_ccflags string

    plsql_code_type string INTERPRETED

    plsql_debug boolean FALSE

    plsql_optimize_level integer 2

    plsql_v2_compatibility boolean FALSE

    plsql_warnings string DISABLE:ALL

    logo.gif, 本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉 本文系统来源:php中文网

    展开全文
  • 这里我用的是Plsql dev客户端,然后修改存储过程编译就卡死,我一直以为是客户端的问题,其实并不然,是因为sessionid什么玩意的被占用了。只需要执行几行命令就可以了。原因的话就是可能有人在执行存储过程,所以你...
  • 存储过程先科普一下存储过程,在项目开发过程可能遇到。存储过程(Stored Procedure)是在大型数据库系统中,一组为了完成特定...今天开发过程中,遇到之前写好的存储过程重新进行编译出现锁死的情况,于是我瞬间不...
  • 重新编译存储过程(sp_recompile)

    千次阅读 2020-07-16 19:36:19
    此前负责的部分项目使用的是sql server 数据库,现场导致经常遇到一个问题,一个存储过程语句拉出来运行数据正常,但执行存储过程发现数据有问题。坑了许久才想到需要重新编译存储。 特此备忘,防止掉坑。 exec sp_...
  • 在对存储过程进行test的时候,没有完全停止,就又在另外一个窗口,对它进行修改而且进行编译,出现了卡死现象。用PLSQL Developer 在session里,找到这条session的记录,然后kill后,再重新编译这个过程,还是卡死,...
  • 在写Oracle存储过程时候,是在以前已经写好的过程基础上修改的,想换个名字,由于疏忽没有改名字就编译了,编译完才意识到。这时同事在写Oracle存储过程时候,是在以前已经写好的过程基础上修改的,想换个名字,由于...
  • oracle存储过程不能编译问题处理 1.登陆sys用户,在pl/sql选择 tools->sessions,列出各个session的具体信息 2. 执行sql语句:select *from v$session t where t.ACTION like'%Test%';找到当前进行存储过程...
  • 1、存储过程编译不过去,挂住----https://blog.csdn.net/jycjyc/article/details/90214464 2、存储过程什么时候重新编译?----https://www.jianshu.com/p/819fec5748d8 3、oracle的存储过程语法(转)----...
  • Oracle 中的存储过程在有些情况下会变成失效状态,...再就我的存储过程经常变成无效,至今原因都未查明。查询 dba_dependencies 视图可以看到存储过程所引用的对象,再就在 dba_objects 视图中可以看到对象的 cre...
  • 创建存储过程 create or replace procedure ...如果存储过程包含的对象发生改变,可能使存储过程变得无效,这时,需要对存储过程进行重新编译,以使存储过程变得有效。 SQL>alter procedure procedure_name ...
  • 问题描述:这里我用的是Plsql dev客户端,然后修改存储过程编译就卡死,我一直以为是客户端的问题,其实并不然,是因为sessionid什么玩意的被占用了。只需要执行几行命令就可以了。原因的话就是可能有人在执行存储...
  • 编译存储过程卡住

    2022-09-01 11:35:31
    现场描述是修改表结构,增加了两个字段,然后需要编译存储过程。已经给说了不要再业务高峰做任何更改操作,所有操作要在测试环境测试,统一时间去做变更……编译慢,卡住后,用我之前给我语句没有发现锁表。查到要...
  • 执行速度快,存储过程经过编译之后比单独一条一条执行要快 #4. 减少网络传输,尤其是在高并发情况下这点优势大,存储过程直接就在数据库服务器上跑,所有的数据访问都在服务器内部进行,不需要传输数据到其它终端...
  • oracle 存储过程不能编译

    千次阅读 2018-08-20 09:45:38
    oracle 存储过程不能编译– (编译的同时正在访问所导致的) 1.SELECT * FROM VDBOBJECTCACHEWHEREname=′NCCMMEDICALUSERSTATS2′ANDLOCKS!=′0′;2.selectSIDfromVDBOBJECTCACHEWHEREname=′NCCMMEDICALUSERSTATS...
  • 存储过程包含一组复杂的SQL语句,使生成存储过程的执行计划的代价有些高。因此通常重用存储过程的执行...1、产生存储过程重新编译的要素 为提高SQL性能,不仅仅是只注意SQL语句写法问题,也不仅是意味者提高硬件要...
  • Oracle中编写存储过程,做了个小功能,但是编译通过有警告,然后执行报错,这是为什么???--转账系统create table CardTable(CardID varchar2(20 byte),--账户卡号C_Money number(12,2)--账户存款)--创建转账...
  • 在“数据库导航”窗口找到需要执行的存储过程,点击右键,选择“Compile Procedure”,编译成功后,在选择“执行存储过程”。 然后在弹出编辑器窗口,按control+return(Ctrl+Enter),或点击编辑器窗口左侧的...
  • 它第一次编译后,只要没有修改,处处都可以直接调用且不用重新编译,用户通过指定存储过程的名字和参数(若该存储过程存在参数)来执行它。 二、存储过程的特点 1:能够完成复杂的判断和运算; 2:可编程性强,且使用...
  • oracle 创建,删除存储过程,参数传递,创建,删除存储函数,存储过程和函数的查看,包,系统包 认识存储过程和函数 存储过程和函数也是一种PL/SQL块,是存入数据库的PL/SQL块。但存储过程和函数不同于已经介绍过的PL/SQL...
  • 文章目录符号表示创建存储过程执行存储过程查看存储过程修改存储过程删除存储过程例子 存储过程是一种数据库对象,是为了实现某个特定任务,将一组预编译的SQL语句以一个存储单元的形式存储在服务器上,供用户调用。...
  • 数据库专业人员可以随时对存储过程进行修改,但对应用程序源代码却毫无影响,从而极大的提高了程序的可移 植性。 4、更强的安全性 1)系统管理员可以对执行的某一个存储过程进行权限限制,避免非授权用户对数据的...
  • 随笔:工作之余写的一个小方法,方便忘了的时候查看第一种 如果你使用 PL/SQL Developer工具 左侧工具栏中选择“存储过程”-》选择已经失效的procedure-》右键-》选择重新编译 即可完成第二种 命令行版1.查找到无效...
  • 存储过程优缺点分析

    2020-12-15 13:34:47
    执行计划(存储过程在首次运行时将被编译,这将产生一个执行计划-- 实际上是 Microsoft SQL Server为在存储过程中获取由 T-SQL 指定的结果而必须采取的步骤的记录。)缓存改善性能。 但sql server新版本,执行计划...
  • 我的上一个银行项目中,我接到编写ORACLE存储过程的任务,我是程序员,脑袋里只有一些如何使用CALLABLE接口调用存储过程的经验,一时不知如何下手,我查阅了一些资料,通过实践发现编写ORACLE存储过程是非常不容易的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 392,785
精华内容 157,114
热门标签
关键字:

修改存储过程会重新编译吗