精华内容
下载资源
问答
  • 1、打开sqlserver,点击“数据库-可编程性-存储过程”,右键存储过程,点击“新建存储过程” 2、如下图所示,初始状态如下: 3、修改并编写自己的存储过程 ...5、调用存储过程 exec wjh_test 100002 ...

    1、打开sqlserver,点击“数据库-可编程性-存储过程”,右键存储过程,点击“新建存储过程”

    2、如下图所示,初始状态如下:

    3、修改并编写自己的存储过程

    4、编写完成后,运行,刷新存储过程,可以看到自己写的存储过程了

    5、调用存储过程

    exec wjh_test 100002

    展开全文
  • 1、创建存储过程has_Permission: create or replace procedure has_Permission(contentId in varchar2,contentType in number,privilege in number,userId in number,returnCode out number) is maxPrivilege ...

    1、创建存储过程has_Permission:

    create or replace procedure has_Permission(contentId in varchar2,contentType in number,privilege in number,userId in number,returnCode out number)
    is
    maxPrivilege number default -1; --最大权限级别
    dirId varchar2(50);--文件的目录ID
    stdType number;--标准图/标准工具/标准模块 类型
    begin
    
       --查找用户最大的权限数据--
    
       --如果是 预审库文件
        if contentType =1 then
           select max(f.dir_id) into dirId from SJ_PRE_FILE f where f.id = contentId;
           select max(d.privilege) into maxPrivilege from sj_dac d,sys_user_role ur
           where d.owner_id = ur.role_id
           and d.owner_type = 3
           and ur.user_id = userId
           and (
               (d.content_type= 2 and d.content_id in (select j.id from SJ_PRE_CATEGORY j start with j.id = dirId connect by prior j.parent_id = j.id))
               or
               (d.content_type= contentType and d.content_id = contentId)
           );
        end if;
    
       --如果是 预审库目录
        if contentType =2 then
           select max(d.privilege) into maxPrivilege from sj_dac d,sys_user_role ur
           where d.owner_id = ur.role_id
           and d.owner_type = 3
           and ur.user_id = userId
           and d.content_type= contentType
           and d.content_id in (select j.id from SJ_PRE_CATEGORY j start with j.id = contentId connect by prior j.parent_id = j.id);
        end if;
    
        --如果是 成果库文件
        if contentType =3 then
           select max(f.dir_id) into dirId from SJ_LIB_FILE f where f.id = contentId;
           select max(d.privilege) into maxPrivilege from sj_dac d,sys_user_role ur
           where d.owner_id = ur.role_id
           and d.owner_type = 3
           and ur.user_id = userId
           and (
                (d.content_type = 4 and d.content_id in (select j.id from SJ_LIB_CATEGORY j start with j.id = dirId connect by prior j.parent_id = j.id))
                or
                (d.content_type = contentType and d.content_id = contentId )
           );
        end if;
    
        --如果是 成果库目录
        if contentType =4 then
           select max(d.privilege) into maxPrivilege from sj_dac d,sys_user_role ur
           where d.owner_id = ur.role_id
           and d.owner_type = 3
           and ur.user_id = userId
           and d.content_type= contentType
           and d.content_id in (select j.id from SJ_LIB_CATEGORY j start with j.id = contentId connect by prior j.parent_id = j.id);
        end if;
    
        --如果是 标准库目录
        if contentType =6 then
           select max(d.privilege) into maxPrivilege from sj_dac d,sys_user_role ur
           where d.owner_id = ur.role_id
           and d.owner_type = 3
           and ur.user_id = userId
           and d.content_type= contentType
           and d.content_id in (select j.id from sj_std_type j start with j.id = contentId connect by prior j.parent_id = j.id);
        end if;
    
        --如果是 标准图
        if contentType =7 then
           select max(chart.type) into stdType from SJ_STD_CHART chart where chart.id = contentId;
           select max(d.privilege) into maxPrivilege from sj_dac d,sys_user_role ur
           where d.owner_id = ur.role_id
           and d.owner_type = 3
           and ur.user_id = userId
           and
           (
              (d.content_type= 6 and d.content_id in (select j.id from sj_std_type j start with j.id = stdType connect by prior j.parent_id = j.id))
              or
              (d.content_type= contentType and d.content_id = contentId)
           );
        end if;
    
        --如果是 标准工具
        if contentType =8 then
           select max(tools.type) into stdType from SJ_STD_TOOLS tools where tools.id = contentId;
           select max(d.privilege) into maxPrivilege from sj_dac d,sys_user_role ur
           where d.owner_id = ur.role_id
           and d.owner_type = 3
           and ur.user_id = userId
           and
           (
              (d.content_type= 6 and d.content_id in (select j.id from sj_std_type j start with j.id = stdType connect by prior j.parent_id = j.id))
              or
              (d.content_type= contentType and d.content_id = contentId)
           );
        end if;
    
        --如果是 标准模块
        if contentType =9 then
           select max(module.type) into stdType from SJ_STD_MODULE module where module.id = contentId;
           select max(d.privilege) into maxPrivilege from sj_dac d,sys_user_role ur
           where d.owner_id = ur.role_id
           and d.owner_type = 3
           and ur.user_id = userId
           and
           (
              (d.content_type= 6 and d.content_id in (select j.id from sj_std_type j start with j.id = stdType connect by prior j.parent_id = j.id))
              or
              (d.content_type= contentType and d.content_id = contentId)
           );
        end if;
    
       --判断用户是否存在指定的权限(1:存在,0:不存在)
       if maxPrivilege >= privilege then
          returnCode := 1;
       end if;
       if maxPrivilege < privilege then
          returnCode := 0;
       end if;
    
    end has_Permission;
    


    2、调用存储过程:

    DECLARE
      returncode number;
    begin
      -- Call the procedure
      has_permission('6567',2,1,19791,returncode);
     
      dbms_output.put_line('returncode=' || returncode);
    end;



    展开全文
  • 创建存储过程 ...sp_name为存储过程的名称; proc_parameter为指定存储过程的参数,有以下格式: [IN|OUT|INOUT]param_name type 其中,IN表示输入参数,OUT表示输出参数,INOUT表示既可以输入也可以输出;param_n

    创建存储过程
    创建过程调用

    创建存储过程

    CREATE PROCEDURE sp_name([proc_parameter])[characteristics ...] routine_body
    

    CREATE PROCEDURE 为用来创建存储函数的关键字;sp_name为存储过程的名称;

    proc_parameter为指定存储过程的参数,有以下格式:
    [IN|OUT|INOUT]param_name type
    其中,IN表示输入参数,OUT表示输出参数,INOUT表示既可以输入也可以输出;param_name表示参数名称;type表示参数的类型,该类型可以是MYSQL数据库的任意类型。

    characteristics指定存储过程的特性,有以下取值:

    • LANGUAGE SQL:说明routine_body部分是由SQL语句组成的。
    • [NOT] DETERMINISTIC:指明存储过程执行的结果是否正确。DETERMINISTIC表示结果是确定的。每次执行存储过程时,相同的输入会得到相同的输出。NOT DETERMINISTIC表示结果是不确定的,相同的输入可能得到不同的输出。如果没有指定任意一个值,默认为NOT DETERMINISTIC。
    • { CONTAINS SQL | NO SQL |READS SQL DATA | MODIFIES|SQL DATA }:指明子程序使用SQL语句的限制。CONTAINS SQL表明子程序包含SQL语句,但是不包含读写数据的语句;NO SQL表明子程序不包含SQL语句;READS SQL DATA说明子程序包含读数据的语句;MODIFIES SQL DATA表明子程序包含写数据的语句。默认情况下,系统会指定为CONTAINS SQL。
    • SQL SECURITY { DEFINER | INVOKER }:指明谁有权限来执行。DEFINER表示只有定义者才能执行。INVOKER表示拥有权限的调用者可以执行。默认情况下,系统指定为DEFINER。
    • COMMENT ‘string’:注释信息,可以用来描述存储过程或函数。
      routine_body是SQL代码的内容,可以用BEGIN…END来表示SQL代码的开始和结束。

    示例:

    CREATE TABLE `emp` (
      `id` int NOT NULL AUTO_INCREMENT,
      `name` varchar(10) NOT NULL DEFAULT (_utf8mb4''),
      `age` int NOT NULL,
      `phone` char(11) DEFAULT (_utf8mb4''),
      PRIMARY KEY (`id`),
      KEY `fk_emp_dep` (`dep_id`),
    ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
    
    
    
    CREATE DEFINER=`root`@`%` PROCEDURE `test`(OUT `param` int)
    BEGIN
    	SELECT 1;
    END
    
    CREATE DEFINER=`root`@`%` PROCEDURE `test2`(OUT `param` int)
    BEGIN
    	SELECT COUNT(*) FROM emp;
    END
    
    CREATE DEFINER=`root`@`%` PROCEDURE `test_3`(IN `NAME` VARCHAR(10), OUT `param` int)
    BEGIN
    	SELECT COUNT(*) FROM emp where name=NAME;
    END
    

    调用存储过程

    call test();
    
    call test_2();
    
    call test_3();
    
    展开全文
  • 存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。存储过程思想上很简单,就是数据库 SQL 语言层面的代码封装与重用。优点存储过程...

    MySQL 5.0 版本开始支持存储过程。

    存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。

    存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。

    存储过程思想上很简单,就是数据库 SQL 语言层面的代码封装与重用。

    优点

    存储过程可封装,并隐藏复杂的商业逻辑。

    存储过程可以回传值,并可以接受参数。

    存储过程无法使用 SELECT 指令来运行,因为它是子程序,与查看表,数据表或用户定义函数不同。

    存储过程可以用在数据检验,强制实行商业逻辑等。

    缺点

    存储过程,往往定制化于特定的数据库上,因为支持的编程语言不同。当切换到其他厂商的数据库系统时,需要重写原有的存储过程。

    存储过程的性能调校与撰写,受限于各种数据库系统。

    存储过程的创建和调用

    创建存储过程

    CREATE

    [DEFINER = { user | CURRENT_USER }]

    PROCEDURE sp_name ([proc_parameter[,...]])

    [characteristic ...] routine_body

    proc_parameter:

    [ IN | OUT | INOUT ] param_name type

    characteristic:

    COMMENT 'string'

    | LANGUAGE SQL

    | [NOT] DETERMINISTIC

    | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }

    | SQL SECURITY { DEFINER | INVOKER }

    routine_body:

    Valid SQL routine statement

    [begin_label:] BEGIN

    [statement_list]

    ……

    END [end_label]

    MYSQL 存储过程中的关键语法

    1.声明语句结束符,可以自定义:

    DELIMITER $$

    DELIMITER //

    2.声明存储过程:

    CREATE PROCEDURE demo_in_parameter(IN p_in int)

    3.存储过程开始和结束符号:

    BEGIN .... END

    4.变量赋值:

    SET @p_in=1

    5.变量定义:

    DECLARE l_int int unsigned default 4000000;

    6.创建mysql存储过程、存储函数:

    create procedure 存储过程名(参数)

    7.存储过程体:

    create function 存储函数名(参数)

    实例

    1.创建数据库,备份数据表用于示例操作:

    mysql> create database db1;

    mysql> use db1;

    mysql> create table PLAYERS as select * from TENNIS.PLAYERS;

    mysql> create table MATCHES as select * from TENNIS.MATCHES;

    2.下面是存储过程的例子,删除给定球员参加的所有比赛:

    mysql> delimiter $$#将语句的结束符号从分号;临时改为两个$$(可以是自定义)

    mysql> CREATE PROCEDURE delete_matches(IN p_playerno INTEGER)

    -> BEGIN

    -> DELETE FROM MATCHES

    -> WHERE playerno = p_playerno;

    -> END$$

    Query OK, 0 rows affected (0.01 sec)

    mysql> delimiter;#将语句的结束符号恢复为分号

    解析:默认情况下,存储过程和默认数据库相关联,如果想指定存储过程创建在某个特定的数据库下,那么在过程名前面加数据库名做前缀。 在定义过程时,使用 DELIMITER $$ 命令将语句的结束符号从分号 ; 临时改为两个 $$,使得过程体中使用的分号被直接传递到服务器,而不会被客户端(如mysql)解释。

    调用存储过程:

    call sp_name[(传参)];

    mysql> select * from MATCHES;

    +---------+--------+----------+-----+------+

    | MATCHNO | TEAMNO | PLAYERNO | WON | LOST |

    +---------+--------+----------+-----+------+

    | 1 | 1 | 6 | 3 | 1 |

    | 7 | 1 | 57 | 3 | 0 |

    | 8 | 1 | 8 | 0 | 3 |

    | 9 | 2 | 27 | 3 | 2 |

    | 11 | 2 | 112 | 2 | 3 |

    +---------+--------+----------+-----+------+

    5 rows in set (0.00 sec)

    mysql> call delete_matches(57);

    Query OK, 1 row affected (0.03 sec)

    mysql> select * from MATCHES;

    +---------+--------+----------+-----+------+

    | MATCHNO | TEAMNO | PLAYERNO | WON | LOST |

    +---------+--------+----------+-----+------+

    | 1 | 1 | 6 | 3 | 1 |

    | 8 | 1 | 8 | 0 | 3 |

    | 9 | 2 | 27 | 3 | 2 |

    | 11 | 2 | 112 | 2 | 3 |

    +---------+--------+----------+-----+------+

    4 rows in set (0.00 sec)

    解析:在存储过程中设置了需要传参的变量p_playerno,调用存储过程的时候,通过传参将57赋值给p_playerno,然后进行存储过程里的SQL操作。

    存储过程体

    存储过程体包含了在过程调用时必须执行的语句,例如:dml、ddl语句,if-then-else和while-do语句、声明变量的declare语句等

    过程体格式:以begin开始,以end结束(可嵌套)

    BEGIN

    BEGIN

    BEGIN

    statements;

    END

    END

    END

    注意:每个嵌套块及其中的每条语句,必须以分号结束,表示过程体结束的begin-end块(又叫做复合语句compound statement),则不需要分号。

    为语句块贴标签:

    [begin_label:] BEGIN

    [statement_list]

    END [end_label]

    例如:

    label1: BEGIN

    label2: BEGIN

    label3: BEGIN

    statements;

    END label3 ;

    END label2;

    END label1

    标签有两个作用:

    1、增强代码的可读性

    2、在某些语句(例如:leave和iterate语句),需要用到标签

    展开全文
  • --创建转账存储过程CREATE OR REPLACE PROCEDURE testPro( inId bank.bid%TYPE, updateMoney bank.bmoney%TYPE, outId bank.bid%TYPE)ASmyValue NUMBER(10,2);BEGIN UPDATE bank SET bmoney=bmoney-...
  • Oracle中存储过程的创建和调用 文章分类:数据库 1.Oracle中创建存储过程的格式如下:create [or replace] procedure &lt;过程名&gt;&lt;参数1&gt;, [方式1] ,&lt;数据类型1&gt...
  • 存储过程是一个预编译SQL语句,优点是允许模块化设计,就是说只需创建一次,以后在程序中就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。可以用一个“execute 存储过程名 ...
  • Mysql存储过程弱爆了,很多莫名其妙规则。下面这个创建代码,任何地方不匹配都报错,包括空格!DELIMITER // create procedure authappkey(in p1 varchar(32), in p2 varchar(32), in p3 varchar(32), in p4 ...
  • 一 oracle创建有返回值函数并调用函数 1 创建调用只有输入参数函数 create or replace function fun_test_1(param1 in number,param2 in number) return number as begin if param1>param2 then return ...
  • 子程序包括存储过程和函数。子程序包括:1、声明部分:声明部分包括类型、游标、常量、变量、异常嵌套子程序声明。这些项都是局部,在退出后就不复存在。2、可执行部分:可执行部分包括赋值、控制执行过程以及...
  • ALTER proc [dbo].[bb]  @startIndex nvarchar(20)='%1%' as begin  select * from base_worker where worker_name like @startIndex //连接字符串 String DBConnStr;  DataSet MyDataSet=new DataSet();
  • 表名字:wawa 表结构: ID UserName UserAge UserNumber 1 hello 0 100 2 world 1 101 3 vvin 2 102 4 ggth 3 ...创建存储过程: create or repla
  • 因为工作中涉及到了参数模式的存储过程,所以就说这一块吧,不过我到现在也没搞明白,带参不带参有啥具体区别,还望大家相互帮助,可以留言讨论。 首先创建一个需要传入表名的存储过程,代码如下 create or re
  • --创建一个存储过程sel,查询m_message_list表所有记录 --create procedure sel() select * from m_message_list; --调用sel查询 call sel(); --循环插值 drop procedure if exists autoinsert; crea...
  • 存储过程的创建调用

    千次阅读 2020-05-21 13:54:47
    存储过程的含义 主要事例 **含义:**存储过程是一个预编译的SQL语句,优点是允许模块化的设计,成功创建后可多次调用。...1:不带参数的存储过程的创建和调用 –创建存储查询数据 create proc cp_select_book.
  • 1、简单存储过程的创建和调用 //存储过程test1 create PROCEDURE test1() begin//开始 select * from cst_customer;//中间要做的操作 end//结束 //存储过程的调用 Call test1() 2、创建带参数的存储过程 create ...
  • 一、什么是存储过程 存储过程(Stored Procedure):一组可编程的函数,是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过制定存储过程的名字并给定参数(如果需要)...二、存储过程的创建和调用
  • 一、存储过程的创建和调用 1、声明存储过程: CREATE PROCEDURE demo(IN a int) 2、存储过程开始和结束符号: BEGIN … END 3、变量赋值: SET @a=1 4、调用存储过程: call procedure_name[(传参)]; 5、下面...
  • 创建和调用存储过程这里就不写了,给一个觉得不错文章地址:https://www..com/chinafine/articles/1776094.html主要总结下遇到个几个问题:1、在业务代码执行时,赋值给一个变量,需要使用:=,而不是=;...
  • 基于Oracle数据库存储过程的创建调用1.PLSQL编程1.1 概念目的什么是PL/SQL?PL/SQL(Procedure Language/SQL)PLSQL是oracle对sql语言的过程化扩展(类似于Basic)指在SQL命令语言中增加了过程处理语句(如分支、循环...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,891
精华内容 1,956
关键字:

存储过程的创建和调用