精华内容
下载资源
问答
  • DB2存储过程命令解析

    千次阅读 2017-09-21 14:44:33
    如果产生了SQLEXCEPTION异常,并且没有为这个异常定义异常处理器,那么存储过程就会失败,系统会将控制 流返回调用者。 5)条件处理器 SQL-procedure-statement  (1)可以是单纯SQL (2)可以是用BEGIN...END来...
    1.Handler 学习 异常
    http://blog.csdn.net/byxdaz/article/details/1377554
    1)语法:
    DECLARE handler-type Handler for Condition SQL-procedure-statement;
    如:DECLARE EXIT HANDLER FOR SQLEXCEPTION ...或 DECLARE CONTINUE HANDLER FOR NOT FOUND ...
    2)解释:
    当DB2触发一个满足定义的条件时(发生异常情况时),就会将控制权交给条件处理器(Condition Handler),
    条件处理器根据指定的处理类型(HANDLER Type) 来执行指定的SQL-procedure-statement
    3)处理类型(handler-type):CUNTINUE、EXIT、UNDO
    CUNTINUE:表示,当抛出异常后,由对应的异常处理器解决异常,工作流会继续执行抛出异常语
    句的下一个语句
    EXIT:表示,当抛出异常后,相应的异常处理器解决该异常,工作流会直接到程序的末尾。
    UNDO:表示,当抛出异常后,对应的异常处理器解决此异常情况,工作流直接到达程序的末尾并且
    撤销所有已实现的操作,或者回滚所有已执行的语句。
    4) Condition 异常处理器可以处理基于特定SQLSTATE值的自定义异常,或者处理系统预定义异常
    系统预定义的3种异常:
    (1)NOT FOUND SQLCODE为100或SQLSTATE以'02'开头的所有错误。这个异常通常在SELECT没有返回行的时候出现。
    (2)SQLEXCEPTION SQLCODE为负数情况
    (3)SQLWARNING 导致警告异常或者导致正100以上的SQLCODE值的异常。
    如果产生了NOT FOUND 或者SQLWARNING异常,并且没有为这个异常定义异常处理器,系统就会忽略这个异常,
    并且将控制流转向下一个语句。
    如果产生了SQLEXCEPTION异常,并且没有为这个异常定义异常处理器,那么存储过程就会失败,系统会将控制
    流返回调用者。
    5)条件处理器 SQL-procedure-statement
         (1)可以是单纯SQL     (2)可以是用BEGIN...END来定义语句块
    如果是语句块(2),需要定义2个本地变量或参数接收 SQLCODE 和 SQLSTATE,不接收直接丢失
    DECLARE EXIT HANDLER FOR SQLEXCEPTION
    BEGIN
            SET R_CODE=SQLCODE;--
            SET O_ERR_NO=1;--
            ROLLBACK;--
            INSERT INTO TST_PROC_LOG(SEQ,LOGID,PROC_NAME,PROC_STATE,TIME,BUG_SQLCODE) VALUES(nextval
            for SEQ_TST_PROC_LOG,LOGID,PROC_NAME,'0',CURRENT TIMESTAMP,CHAR(R_CODE));
            COMMIT;--
    END;--
    2.DB2 Merge 可以将一个表中的数据合并到另一个表中,在合并的同时可以进行插入、删除、更新等操作
    ----------******----------
    MERGE INTO TST_SEC_APP_COUNT T1 USING TST_SALE_CODE T2 ON T1.SALE_PK = T2.SALE_PK
    WHEN MATCHED (and ...) THEN UPDATE SET T1.ORGID = T2.ORGID
    --(1)说明有问题抛异常
    --WHEN MATCHED AND EM.SALARY>MA.SALARY THEN SIGNAL SQLSTATE '70001' SET
    --MESSAGE_TEXT = 'EM.SALARY>MA.SALARY'
    --(2)删除满足条件的数据 WHEN MATCHED AND EM.SALARY>MA.SALARY THEN DELETE
    WHEN NOT MATCHED THEN INSERT VALUES (T2.MANAGERID,T2.NAME,T2.SALARY);
    ----------******----------
    解释:合并表 TST_SEC_APP_COUNT 和表 TST_SALE_CODE 关联字段ON T1.SALE_PK = T2.SALE_PK
    如果两表字段关联存在数据,修改表T1字段 T1.ORGID = T2.ORGID
    如果两表字段关联不存在数据,则添加T1表 T2的数据
    3.数据表删除(删除大量数据)
    ALTER TABLE <TABLE_NAME> ACTIVATE NOT LOGGED INITIALLY WITH EMPTY TABLE;
    如:ALTER TABLE TEMP_SEC_APP_COUNT_F ACTIVATE NOT LOGGED INITIALLY WITH EMPTY TABLE;
    --不加 WITH EMPTY TABLE 执行删除操作时不记录日志,提交后约束解除。
    SET STMT = 'ALTER TABLE TST_SEC_APP_COUNT activate not logged initially ';
    EXECUTE IMMEDIATE STMT;--;
    delete from TST_SEC_APP_COUNT A where exists (select 1 from TMP_COME_DATE1 where COME_DATE = A.COME_DATE);
    COMMIT;--
    4.DB2 Load:数据的装入(Load)
    SET LOAD_COMMAND='LOAD FROM D:\FCC\biz_input\MIS_CAD_MPMY_'||CURRENT_DAY||'.txt OF DEL REPLACE INTO TEMP_SEC_APP_COUNT NONRECOVERABLE';
    CALL SYSPROC.DB2LOAD(1,'',LOAD_COMMAND,SQLCODE,'','','','','','','','','','','');COMMIT;
    1)LOAD FROM * OF *:固定关键字
    2)filename:要装载到数据库的文件名,如果大于1个,可以使用逗号分隔开如:"/tmp/1.dat","/tmp/2.dat"
    3)filetype:要装载数据文件的类型,大家用到比较多的应该是DEL,一般有4种,IXF,DEL,ASC,CURSOR
    ASC表示不分界的ASCII数据,数据的划分由位置决定。DEL表示分界的ASCII数据,每行的数据长度可变。
    分界的数据可以使用多种修饰符,主要的两种是 COLDEL 和 CHARDEL;COLDEL 决定列和列之间如何分界,
    CHARDEL 决定字符串数据如何分界
    4)INSERT / REPLACE INTO PROD.TABLE
    5)NONRECOVERABLE = NOLOGGING
    如果使用这个选项,在装载操作之后表空间并不处于备份未完成状态,在装载操作期间不必复制装载的数据。
    参考文档:http://blog.csdn.net/dlodj/article/details/7023093
    ☆☆☆ 导出数据样例(以 | 分割): ☆☆☆
    EXPORT TO D:\FCC\biz_input\TESTSSSS_20170906.txt OF DEL MODIFIED BY CODEPAGE=1208(UTF-8编码格式) COLDEL0X7C(以|进行数据分割) SELECT * FROM TBL_STAFF_LOGIN_AUTHORITY WITH UR
    ☆☆☆ 导入数据样例 ☆☆☆
    DB2 LOAD CLIENT(如果是远程导入,需要加) FROM D:\gy\20170923\TEMP_ABOUT_RECIPIENT.TXT OF DEL REPLACE INTO TEMP_ABOUT_RECIPIENT NONRECOVERABLE
    5.数据库导出指令 DB2LOOK
    db2cmd
    db2 connect to SMIS user db2admin using Pass@word
    DB2LOOK -d [database] -u [user] -e -o [url]
    DB2LOOK -d tfmrpt2 -u WALID -e -o db2look.sql
    --数据库 tfmrpt2 由用户 WALID 创建的所有表和联合对象的DDL语句db2look输出被发送到名为
    --db2look.sql 的文件中
    -- -e 提取数据库对象的DDL语句,如表、索引、触发器、函数过程等
    -- -o 将输出结果写入一个文件,如果没有指定选项,将输出结果写入标准输出设备
    --db2look -d SMIS -e -l -o db2look_smis_20170911.ddl
    DB2LOOK -d SMIS -e -a -o db2look_smis_20170910.ddl
    -- -l 为用户定义的表空间、数据库分区组合缓冲池生成DDL语句。
    参考文档:http://www.jb51.net/article/31909.htm
    --ftp导出 ddl 文件步骤
    1).在20服务器对应的数据上,先创建用户,然后从20服务器上拉到本地
    ->smisuser/2wsx3edc
    ->ls
    ->mkdir wjb
    ->ls
    ->cd wjb
    ->db2 list db directory
    ->db2 connect to SMIS_DB
    ->db2look -d SMIS_DB -a -e -o db2look_smisdb_20170523.ddl
    2).使用ftp服务,把文件从20服务器上拉倒本地
    cmd 然后
    ->ftp 182.180.125.20
    //连接 182.180.125.20 用户名:smisuser 密码:2wsx3edc
    ->ls -lrt
    ->cd wjb
    ->ls -lr
    ->bin
    ->get db2look_smisdb_20170522.ddl
    6.reorg runstats
    CALL SYSPROC.ADMIN_CMD('REORG TABLE DB2ADMIN.TEMP_SEC_APP_COUNT');--
    CALL SYSPROC.ADMIN_CMD('RUNSTATS ON TABLE DB2ADMIN.TEMP_SEC_APP_COUNT and indexes all');
    reorg table 通过重构行来消除"碎片"数据并压缩信息,对表进行重组。
    runstats on table 收集表的统计信息。
    reorgchk on table all 确定是否需要对表进行重组,对于对所有表自动执行 runstats 很有用
    reorg 和 runstats 都是单个表优化,初始化的命令,处于Reorg Pending状态的表有可能会阻碍后续操作。
    在对表数据进行许多更改之后,逻辑上连续的数据可能会位于不连续的物理数据页上,在许多插入操作创建
    了溢出记录时尤其如此。按这种方式组织数据时,数据库管理器必须执行其他读操作才能访问顺序数据。
    另外,在删除大量行后,也需要执行其他的读操作。表重组操作会整理数据碎片来减少浪费的空间,并对行
    进行重新排序以合并溢出记录,从而加快数据访问速度并最终提高查询性能。还可以指定根据特定索引来
    重新排序数据以便查询时通过最少次数据读取操作就可以访问数据。
    对表增删改字段语句执行完修改后都要执行上面两个语句:
    --REORG TABLE SMISUSER.TBL_EMG_EQMINF;
    --RUNSTATS ON TABLE SMISUSER.TBL_EMG_EQMINF WITH DISTRIBUTION AND DETAILED INDEXES ALL;
    --增加字段
    ALTER TABLE TBL_EMG_EQMINF ADD COLUMN USER_ID CHARACTER(10);
    --修改字段
    1)修改字段类型,限制有:
    varchar 可以修改为char 也可以改变长度,但能长不能短。 integer可以修改为varchar ,但varchar 的长度
    要大于integer
    ALTER TABLE TEMP_RPT_FH_INTO_PIECES ALTER IS_PIN_MARK SET DATA TYPE VARCHAR(128);
    2)字段修改为不为空
    ALTER TABLE <table_name> ALTER COLUMN <column_name> SET NOT NULL;
    3)将已有的字段修改为自增长,但前提是该字段是整形且字段不能为空。
    Alter table <table name> alter column <column name> set generated always as identity(
     start with 1,increment by 1);
    4)对已有字段重命名
    ALTER TABLE <table name> RENAME  column <column name> TO <new column name>;
    5)修改已有字段的默认值
    ALTER TABLE <table name> ALTER  column <column name>  { SET DEFAULT value | DROP DEFAULT };
    --删除字段
    ALTER table <table name> DROP column <column name>;
    对表添加注释:COMMENT ON
    COMMENT ON TABLE "DB2ADMIN"."TEMP_STAFF_NUM_ORG" IS '主任组内人数';
    COMMENT ON "DB2ADMIN"."TEMP_STAFF_NUM_ORG"(
        "HEAD_ID" IS '主任id', "PERSON_STAFF_NUM" IS '组内人数' );
    7.调用存储过程
    call DB2ADMIN.PROC_GET_REPORT_AFTER_MONTH_TEST006(?,?);
    --out类型用'?',in直接赋值
    展开全文
  • SQL Server 存储过程-命令、语法

    千次阅读 2013-08-23 10:06:09
    Transact-SQL中的存储过程,非常类似于Java语言中的方法,它可以重复调用。当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句。这样就可以提高存储过程的性能。 Ø 存储过程的...

    Transact-SQL中的存储过程,非常类似于Java语言中的方法,它可以重复调用。当存储过程执行一次后,可以将语句缓存中,这样下次执行的时候直接使用缓存中的语句。这样就可以提高存储过程的性能。

    Ø 存储过程的概念

        存储过程Procedure是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行。

        存储过程中可以包含逻辑控制语句和数据操纵语句,它可以接受参数、输出参数、返回单个或多个结果集以及返回值。

        由于存储过程在创建时即在数据库服务器上进行了编译并存储在数据库中,所以存储过程运行要比单个的SQL语句块要快。同时由于在调用时只需用提供存储过程名和必要的参数信息,所以在一定程度上也可以减少网络流量、简单网络负担。

     

        1、 存储过程的优点

            A、 存储过程允许标准组件式编程

            存储过程创建后可以在程序中被多次调用执行,而不必重新编写该存储过程的SQL语句。而且数据库专业人员可以随时对存储过程进行修改,但对应用程序源代码却毫无影响,从而极大的提高了程序的可移植性。

            B、 存储过程能够实现较快的执行速度

            如果某一操作包含大量的T-SQL语句代码,分别被多次执行,那么存储过程要比批处理的执行速度快得多。因为存储过程是预编译的,在首次运行一个存储过程时,查询优化器对其进行分析、优化,并给出最终被存在系统表中的存储计划。而批处理的T-SQL语句每次运行都需要预编译和优化,所以速度就要慢一些。

            C、 存储过程减轻网络流量

            对于同一个针对数据库对象的操作,如果这一操作所涉及到的T-SQL语句被组织成一存储过程,那么当在客户机上调用该存储过程时,网络中传递的只是该调用语句,否则将会是多条SQL语句。从而减轻了网络流量,降低了网络负载。

            D、 存储过程可被作为一种安全机制来充分利用

            系统管理员可以对执行的某一个存储过程进行权限限制,从而能够实现对某些数据访问的限制,避免非授权用户对数据的访问,保证数据的安全。

     

    Ø 系统存储过程

        系统存储过程是系统创建的存储过程,目的在于能够方便的从系统表中查询信息或完成与更新数据库表相关的管理任务或其他的系统管理任务。系统存储过程主要存储在master数据库中,以“sp”下划线开头的存储过程。尽管这些系统存储过程在master数据库中,但我们在其他数据库还是可以调用系统存储过程。有一些系统存储过程会在创建新的数据库的时候被自动创建在当前数据库中。

        常用系统存储过程有:

    exec sp_databases; --查看数据库
    exec sp_tables;        --查看表
    exec sp_columns student;--查看列
    exec sp_helpIndex student;--查看索引
    exec sp_helpConstraint student;--约束
    exec sp_stored_procedures;
    exec sp_helptext 'sp_stored_procedures';--查看存储过程创建、定义语句
    exec sp_rename student, stuInfo;--修改表、索引、列的名称
    exec sp_renamedb myTempDB, myDB;--更改数据库名称
    exec sp_defaultdb 'master', 'myDB';--更改登录名的默认数据库
    exec sp_helpdb;--数据库帮助,查询数据库信息
    exec sp_helpdb master;

        系统存储过程示例:
    --表重命名
    exec sp_rename 'stu', 'stud';
    select * from stud;
    --列重命名
    exec sp_rename 'stud.name', 'sName', 'column';
    exec sp_help 'stud';
    --重命名索引
    exec sp_rename N'student.idx_cid', N'idx_cidd', N'index';
    exec sp_help 'student';
    
    --查询所有存储过程
    select * from sys.objects where type = 'P';
    select * from sys.objects where type_desc like '%pro%' and name like 'sp%';

     

    Ø 用户自定义存储过程

       1、 创建语法

    create proc | procedure pro_name
        [{@参数数据类型} [=默认值] [output],
         {@参数数据类型} [=默认值] [output],
         ....
        ]
    as
        SQL_statements

     

       2、 创建不带参数存储过程

    --创建存储过程
    if (exists (select * from sys.objects where name = 'proc_get_student'))
        drop proc proc_get_student
    go
    create proc proc_get_student
    as
        select * from student;
    
    --调用、执行存储过程
    exec proc_get_student;

       3、 修改存储过程

    --修改存储过程
    alter proc proc_get_student
    as
    select * from student;

       4、 带参存储过程

    --带参存储过程
    if (object_id('proc_find_stu', 'P') is not null)
        drop proc proc_find_stu
    go
    create proc proc_find_stu(@startId int, @endId int)
    as
        select * from student where id between @startId and @endId
    go
    
    exec proc_find_stu 2, 4;

       5、 带通配符参数存储过程

    --带通配符参数存储过程
    if (object_id('proc_findStudentByName', 'P') is not null)
        drop proc proc_findStudentByName
    go
    create proc proc_findStudentByName(@name varchar(20) = '%j%', @nextName varchar(20) = '%')
    as
        select * from student where name like @name and name like @nextName;
    go
    
    exec proc_findStudentByName;
    exec proc_findStudentByName '%o%', 't%';

       6、 带输出参数存储过程

    if (object_id('proc_getStudentRecord', 'P') is not null)
        drop proc proc_getStudentRecord
    go
    create proc proc_getStudentRecord(
        @id int, --默认输入参数
        @name varchar(20) out, --输出参数
        @age varchar(20) output--输入输出参数
    )
    as
        select @name = name, @age = age  from student where id = @id and sex = @age;
    go
    
    -- 
    declare @id int,
            @name varchar(20),
            @temp varchar(20);
    set @id = 7; 
    set @temp = 1;
    exec proc_getStudentRecord @id, @name out, @temp output;
    select @name, @temp;
    print @name + '#' + @temp;


       7、 不缓存存储过程

    --WITH RECOMPILE 不缓存
    if (object_id('proc_temp', 'P') is not null)
        drop proc proc_temp
    go
    create proc proc_temp
    with recompile
    as
        select * from student;
    go
    
    exec proc_temp;

       8、 加密存储过程

    --加密WITH ENCRYPTION 
    if (object_id('proc_temp_encryption', 'P') is not null)
        drop proc proc_temp_encryption
    go
    create proc proc_temp_encryption
    with encryption
    as
        select * from student;
    go
    
    exec proc_temp_encryption;
    exec sp_helptext 'proc_temp';
    exec sp_helptext 'proc_temp_encryption';

       9、 带游标参数存储过程

    if (object_id('proc_cursor', 'P') is not null)
        drop proc proc_cursor
    go
    create proc proc_cursor
        @cur cursor varying output
    as
        set @cur = cursor forward_only static for
        select id, name, age from student;
        open @cur;
    go
    --调用
    declare @exec_cur cursor;
    declare @id int,
            @name varchar(20),
            @age int;
    exec proc_cursor @cur = @exec_cur output;--调用存储过程
    fetch next from @exec_cur into @id, @name, @age;
    while (@@fetch_status = 0)
    begin
        fetch next from @exec_cur into @id, @name, @age;
        print 'id: ' + convert(varchar, @id) + ', name: ' + @name + ', age: ' + convert(char, @age);
    end
    close @exec_cur;
    deallocate @exec_cur;--删除游标


       10、 分页存储过程

    ---存储过程、row_number完成分页
    if (object_id('pro_page', 'P') is not null)
        drop proc proc_cursor
    go
    create proc pro_page
        @startIndex int,
        @endIndex int
    as
        select count(*) from product
    ;    
        select * from (
            select row_number() over(order by pid) as rowId, * from product 
        ) temp
        where temp.rowId between @startIndex and @endIndex
    go
    --drop proc pro_page
    exec pro_page 1, 4
    --
    --分页存储过程
    if (object_id('pro_page', 'P') is not null)
        drop proc pro_stu
    go
    create procedure pro_stu(
        @pageIndex int,
        @pageSize int
    )
    as
        declare @startRow int, @endRow int
        set @startRow = (@pageIndex - 1) * @pageSize +1
        set @endRow = @startRow + @pageSize -1
        select * from (
            select *, row_number() over (order by id asc) as number from student 
        ) t
        where t.number between @startRow and @endRow;
    
    exec pro_stu 2, 2;
    


    Ø Raiserror

    Raiserror返回用户定义的错误信息,可以指定严重级别,设置系统变量记录所发生的错误。

       语法如下:

    Raiserror({msg_id | msg_str | @local_variable}
      {, severity, state}
      [,argument[,…n]]
      [with option[,…n]]
    )

       # msg_id:在sysmessages系统表中指定的用户定义错误信息

       # msg_str:用户定义的信息,信息最大长度在2047个字符。

       # severity:用户定义与该消息关联的严重级别。当使用msg_id引发使用sp_addmessage创建的用户定义消息时,raiserror上指定严重性将覆盖sp_addmessage中定义的严重性。

        任何用户可以指定0-18直接的严重级别。只有sysadmin固定服务器角色常用或具有alter trace权限的用户才能指定19-25直接的严重级别。19-25之间的安全级别需要使用with log选项。

       # state:介于1至127直接的任何整数。State默认值是1。

    raiserror('is error', 16, 1);
    select * from sys.messages;
    --使用sysmessages中定义的消息
    raiserror(33003, 16, 1);
    raiserror(33006, 16, 1);
    
    
    引用自:http://www.cnblogs.com/hoojo/archive/2011/07/19/2110862.html
    展开全文
  • MySQL 修改存储过程

    千次阅读 2020-03-14 09:37:32
    MySQL 中通过 ALTER PROCEDURE 语句来修改存储过程。 MySQL 中修改存储过程的语法格式如下: ALTER PROCEDURE 存储过程名 [ 特征 ... ] 特征指定了存储过程的特性,可能的取值有: CONTAINS SQL 表示子程序包含 SQL...

    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' 表示注释信息。
    

    修改存储过程 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 语句用于修改存储过程的某些特征。如果要修改存储过程的内容,可以先删除原存储过程,再以相同的命名创建新的存储过程;如果要修改存储过程的名称,可以先删除原存储过程,再以不同的命名创建新的存储过程。

    展开全文
  • MySQL修改存储过程

    万次阅读 2017-07-28 23:37:24
    在实际开发中,业务需求修改的情况时有发生,这样,不可避免的需要修改存储过程的特征,MySQL中,使用ALTER语句修改存储过程的特性语法格式 ALTER {PROCEDURE | FUNCTION} sp_name [characteristic……]参数说明Sp_...

    在实际开发中,业务需求修改的情况时有发生,这样,不可避免的需要修改存储过程的特征
    MySQL中,使用ALTER语句修改存储过程的特性

    语法格式
    ALTER {PROCEDURE | FUNCTION} sp_name [characteristic……]

    参数说明

    Sp_name,表示存储过程或函数的名称
    characteristic,表示要修改存储过程的哪个部分
    Characteristic的取值如下
    CONTAINS SQL,表示子程序包含SQL语句,但是,不包含读或写数据的语句
    NO SQL,表示子程序中,不包含SQL语句
    READS SQL DATA,表示子程序中,包含读数据的语句
    MODIFIES DATA,表示子程序中,包含写数据的语句
    SQL SECURITY {DEFINER | INVOKER},指明谁有权限来执行
    DEFINER,表示只有定义者,自己才能够执行
    INVOKER,表示调用者可以执行
    COMMENT’string’,表示注释信息

    修改存储过程CountProc1的定义
    将读写权限,改为MODIFIES SQL DATA,并指明调用者可以执行

    这里写图片描述

    查看修改后的信息

    这里写图片描述

    目前,MySQL还不提供对已存在的存储过程的代码修改
    如果,一定要修改存储过程的diam,必须,先将存储过程删除之后,在重新编写代码,或者创建一个新的存储过程

    展开全文
  • SQLServer之修改存储过程

    千次阅读 2018-11-02 10:53:24
    修改存储过程注意事项 只能修改先前在 SQL ...ALTER PROCEDURE 不会更改权限,也不影响相关的存储过程或触发器。 但是,当修改存储过程时,QUOTED_IDENTIFIER 和 ANSI_NULLS 的当前会话设置包含在该存储过程中...
  • 前两天学习了如果通过navicat去实现存储过程的创建与使用,实际操作中可能会要求纯命令方式去创建整个存储过程。下面以实际例子创建存储过程与调用存储过程。 2、需求与准备 需求:通过windows cmd创建查询test表...
  • SqlServer2005存储过程执行BCP命令

    千次阅读 2011-07-01 10:47:00
    最近由于项目需要,加上自己之前所接触对存储过程的认识。所以整理一下,便于以后查看。首先在SqlServer2005中建立mydb库,然后建立people表。表结构如图所示: 需求:要求每天对固定盘符下的文件中的数据导入到库...
  • 执行与修改存储过程

    万次阅读 2018-06-22 17:39:51
    1.执行存储过程 要运行某个存储过程,只要简单地通过名字就可以引用它。如果对存储过程的调用不是批处理中的第一条语句,则需要使用EXECUTE关键字。下面是执行存储过程的语法格式。[[EXEC[UTE]]] {[@return_status...
  • 如果需要更改存储过程中的语句或参数,可以删除和重新创建该存储过程,也可以用单个步骤更改该存储过程。删除和重新创建存储过程时,所有与该存储过程相关联的权限都将丢失。更改存储过程时,过程或参数定义会更改,...
  • timesten常用命令和内置存储过程

    千次阅读 2009-01-02 07:03:00
    timesten自带大量的命令和内置存储过程,通过它们可以做很多事情。下面是经常会用到的一些命令和存存储过程的解释和用法。1.ttAdmin(命令)功能:指定内存加载策略指定replication agent策略启动或停止cache agent如...
  • TimesTen的一些内置的命令存储过程

    千次阅读 2011-07-01 16:14:00
    TimesTen的一些内置的命令存储过程timesten自带大量的命令和内置存储过程,通过它们可以做很多事情。下面是经常会用到的一些命令和存存储过程的解释和用法。1.ttAdmin(命令)功能:指定内存加载策略指定...
  • 在实际开发过程中,业务需求修改的情况时有发生,所以修改 MySQL 中的存储过程是不可避免的。 MySQL 中通过 ALTER PROCEDURE 语句来修改存储过程。本节将详细讲解修改存储过程的方法。 MySQL 中修改存储过程的语法...
  • mysql存储过程的创建,删除,调用及其他常用命令 一.创建存储过程 1.基本语法:create procedure sp_name() begin ……… end 例:create procedure zp() BEGIN   SELECT * from a;  END 2.参数...
  • sql 存储过程

    千次阅读 2018-11-11 21:16:54
    修改和删除存储过程 四、存储过程的种类 一、存储过程概念 1.概念 存储过程是存放在数据库服务器上的预先定义与编译好的T-SQL语句集合,是一个独立的数据库对象。 2.特点 实现了模块化编程。 存储过程具有对...
  • MySQL修改、删除存储过程和函数

    千次阅读 2019-09-02 16:49:04
    使用alter语句可以修改存储过程或函数的特性。 alter {procedure | function } sp_name {characteristic ...} 其中,sp_name参数表示存储过程或函数的名称,characteristic参数指定存储函数的特性,可能取的取值有...
  • 存储过程

    千次阅读 2019-10-04 13:10:29
    存储过程 MYSQL语句组成的脚本。是数据库中保存的一系列SQL命令的集合。可以在存储过程中使用变量、条件判断、流程控制等。不是解释执行(解释器把命令转化成电脑能听懂的二进制0和1),而是编译执行。 优点:提高...
  • 1、存储过程的概念 存储过程是一组为了完成特定功能的SQL语句集,存储在数据库中,经过第一次调用编译后,再次调用不需要编译。用户通过指定存储过程的名字并给出参数 (如果该存储过程带有参数) 来执行它 , 存储...
  • Bash中执行存储过程或普通的SQL命令

    千次阅读 2012-03-18 18:24:04
    演示: 在bash中执行一个存储过程和一个普通的SQL语句 0. 前提条件: 数据库:Oracle10g 表:oracle自带的emp表,默认有数据如下: 1. 在bash中执行oracle存储过程 首先,在oracle中建立一个存储过程...
  • 存储过程是由流控制和SQL语句书写的过程,这个过程经编译和优化 后存储在数据库服务器中,使用时只要调用即可。在ORACLE中,若干个 有联系的过程可以组合在一起构成程序包。 使用存储过程有以下的优点: * ...
  • oracle 存储过程中调用truncate命令

    千次阅读 2019-01-05 17:03:05
    过程更改。 SQL> insert into t 2 select * from all_objects 3 where rownum; 已创建20行。 SQL> commit; 提交完成。 SQL> select owner,object_name,object_type,status from dba_objects 2 where object_...
  • Mysql存储过程

    千次阅读 2018-12-02 09:05:20
    Mysql存储过程 一. 过程化sql  过程块sql主要有两种类型,几命名块和匿名块。匿名块每次执行时都要编译,而且不能存储到存储过程中,也不能在其他过程化sql块中调用,过程和函数时命名块,他们在编译时保存在...
  • Oracle存储过程介绍

    千次阅读 2017-03-30 22:58:10
    存储过程(Stored Procedure )是一组为了完成特定功能的SQL 语句集,经编译后存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。存储过程是数据库中的一个重要对象,任何...
  • oracle 存储过程

    千次阅读 2014-01-21 13:59:42
    创建和删除存储过程   创建存储过程,需要有CREATE PROCEDURE或CREATE ANY PROCEDURE的系统权限。该权限可由系统管理员授予。创建一个存储过程的基本语句如下: CREATE [OR REPLACE] PROCEDURE 存储过程名[(参数...
  • mysql存储过程了解

    2016-04-26 16:37:34
    存储过程: 类似于函数,就是将一些sql语句封装起来 在封装的语句体里,可以使用if/else,case,while等控制结构,可以进行SQL编程 常用命令: 查看现有存储过程:show procedure status 删除存储过程:drop...
  • PostgreSQL 11 新特性之存储过程

    千次阅读 2018-10-30 16:31:31
    PostgreSQL 11 增加了一个新的模式对象:存储过程(Stored Procedure)。存储过程和函数(Function)类似,...使用 CREATE\ALTER\DROP PROCEDURE 命令创建\修改\删除存储过程,使用 CALL 命令调用存储过程。支持存储...
  • mysql 存储过程

    2014-02-27 14:52:55
    (1)MySQL存储过程是在“命令提示符”下创建的,所以首先应该打开“命令提示符”窗口。 (2)进入“命令提示符”窗口后,首先应该登录MySQL数据库服务器,在“命令提示符”下输入如下命令: mysql –u用户名 –...
  • MySQL存储过程

    2016-08-26 11:34:01
    MySQL命令执行流程当成功输入SQL命令以后,MySQL引擎会首先对输入的命令进行语法分析,语法正确的话将编译成MySQL引擎可以识别的命令,最后开始执行,...存储过程省略了语法分析和编译的过程,可以实现MySQL命令执行
  • 数据库存储过程

    万次阅读 2017-01-04 09:24:51
    存储过程的概念】   存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集。经编译后存储在数据库中。 存储过程是数据库中的一个重要对象,用户通过指定存储过程的名字并给出参数(如果该...
  • 转自:... SqlServer存储过程的声明方式: ...Create proc存储过程名称 ...T-sql命令 ...SqlServer存储过程分为无参数存储过程和有参数存储过程 1)没有参数的存储过程 调用存储过程 Ex

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 460,198
精华内容 184,079
关键字:

修改存储过程的命令