精华内容
下载资源
问答
  • Oracle之创建存储过程SQL语句

    千次阅读 2020-05-19 17:23:26
    1、创建存储过程。 create or replace procedure myprocedure(sid in number) as exam number; begin select * from score where sid=score.userid; dbms_output.put_line(exam); if exam>60 then dbms_o

    一、某学生成绩大于60分,输出good;某学生成绩小于60分输出oh no。(在输出中查看信息)

    ~需要一张成绩表单,包含成绩信息和学生学号。
    1、创建存储过程。

    create or replace procedure myprocedure(sid in number)
    as
    exam number;
    begin
    select * from score where sid=score.userid;
    dbms_output.put_line(exam);
    if exam>60 then
    dbms_output.put_line('good');
    else
    dbms_output.put_line('oh no');
    end if;
    end myprocedure;
    

    2、调用该存储过程,括号内为学生学号。

    begin
    myprocedure(1007);
    end;
    

    二、若全班平均成绩大于等于60分,输出good;若平均成绩小于60分,每位同学成绩在原来基础上+5分(做循环),直到输出为good,停止循环。

    ~需要一张成绩表单,包含所有学生成绩。
    1、创建存储过程。

    create or replace procedure system.scr_pro
    as
    avgscnum number;
    begin
      select avg(scnum) into avgscnum from system.score;
      while avgscnum<60 loop
        select avg(scnum) into avgscnum from system.score;
      dbms_output.put_line(avgscnum);
      if avgscnum>=60 then
        dbms_output.put_line('good');
      else
        update system.score set scnum=scnum+5;
      end if;
     end loop;
    end scr_pro;
    

    2、调用该存储过程。

    begin
      system.scr_pro;
    end;
    

    ~注:
    1、空格、分号在英文状态下输入;
    2、千万不要忘记,该写分号时,一定不能忘(自己就吃了亏);
    3、敲代码,练习自己的逻辑思维。

    展开全文
  • 基本语法记的不扎实,总是忘...一、创建存储过程   create or replace procedure proc_insert(departno in number) is begin declare cursor cur_insert is select * from emp where deptno = departno; ...

    基本语法记的不扎实,总是忘,这里做个总结,以后查询起来方便。

     

    一、创建存储过程

     

    create or replace procedure proc_insert(departno in number) is
    begin
      declare 
        cursor cur_insert is select * from emp where deptno = departno;
        rec emp%rowtype;
      begin
        open cur_insert;
        loop
          fetch cur_insert into rec;
          exit when cur_insert%notfound;
          --dbms_output.put_line('empno=' || rec.empno);
          insert into emp_new values (rec.EMPNO,rec.ENAME,rec.JOB,rec.MGR,rec.HIREDATE,rec.SAL,rec.COMM,rec.DEPTNO);
          commit;
        end loop;
        exception
        when others then
          rollback;
      end;
    end proc_insert;

     

    网上看到一个例子,连错误处理都有,保存下来,以备后查。

    --创建存储过程
    CREATE OR REPLACE PROCEDURE xxxxxxxxxxx_p
    (
       --参数IN表示输入参数,
        --OUT表示输入参数,类型可以使用任意Oracle中的合法类型。
       is_ym  IN CHAR
    )
    AS
    --定义变量
    vs_msg   VARCHAR2(4000);   --错误信息变量
    vs_ym_beg  CHAR(6);      --起始月份
    vs_ym_end  CHAR(6);      --终止月份
    vs_ym_sn_beg CHAR(6);     --同期起始月份
    vs_ym_sn_end CHAR(6);     --同期终止月份
    
    --定义游标(简单的说就是一个可以遍历的结果集)
    CURSOR cur_1 IS
      SELECT area_code,CMCODE,SUM(rmb_amt)/10000 rmb_amt_sn,SUM(usd_amt)/10000 usd_amt_sn
      FROM BGD_AREA_CM_M_BASE_T
        WHERE ym >= vs_ym_sn_beg
           AND ym <= vs_ym_sn_end
       GROUP BY area_code,CMCODE;
    
    BEGIN
    --用输入参数给变量赋初值,用到了Oralce的SUBSTR TO_CHAR ADD_MONTHS TO_DATE 等很常用的函数。
    vs_ym_beg := SUBSTR(is_ym,1,6);
    vs_ym_end := SUBSTR(is_ym,7,6);
    vs_ym_sn_beg := TO_CHAR(ADD_MONTHS(TO_DATE(vs_ym_beg,'yyyymm'), -12),'yyyymm');
    vs_ym_sn_end := TO_CHAR(ADD_MONTHS(TO_DATE(vs_ym_end,'yyyymm'), -12),'yyyymm');
    --先删除表中特定条件的数据。
    DELETE FROM xxxxxxxxxxx_T WHERE ym = is_ym;
      --然后用内置的DBMS_OUTPUT对象的put_line方法打印出影响的记录行数,其中用到一个系统变量SQL%rowcount
    DBMS_OUTPUT.put_line('del上月记录='||SQL%rowcount||'条');
    
    INSERT INTO xxxxxxxxxxx_T(area_code,ym,CMCODE,rmb_amt,usd_amt)
    SELECT area_code,is_ym,CMCODE,SUM(rmb_amt)/10000,SUM(usd_amt)/10000
    FROM BGD_AREA_CM_M_BASE_T
      WHERE ym >= vs_ym_beg
      AND ym <= vs_ym_end
    GROUP BY area_code,CMCODE;
    
    DBMS_OUTPUT.put_line('ins当月记录='||SQL%rowcount||'条');
    --遍历游标处理后更新到表。遍历游标有几种方法,用for语句是其中比较直观的一种。
    FOR rec IN cur_1 LOOP
      UPDATE xxxxxxxxxxx_T
      SET rmb_amt_sn = rec.rmb_amt_sn,usd_amt_sn = rec.usd_amt_sn
       WHERE area_code = rec.area_code
       AND CMCODE = rec.CMCODE
       AND ym = is_ym;
    END LOOP;
    
    COMMIT;
    --错误处理部分。OTHERS表示除了声明外的任意错误。SQLERRM是系统内置变量保存了当前错误的详细信息。
    EXCEPTION
       WHEN OTHERS THEN
          vs_msg := 'ERROR IN xxxxxxxxxxx_p('||is_ym||'):'||SUBSTR(SQLERRM,1,500);
       ROLLBACK;
       --把当前错误记录进日志表。
       INSERT INTO LOG_INFO(proc_name,error_info,op_date)
       VALUES('xxxxxxxxxxx_p',vs_msg,SYSDATE);
       COMMIT;
       RETURN;
    END; 
    
    

     

    展开全文
  • 在SQLyog上使用SQL语句创建存储过程

    千次阅读 2018-11-29 13:46:23
    首先来写一条简单的创建存储过程语句,将教师表中中符合条件的教师数量进行统计返回到num中,代码如下: CREATE PROCEDURE teacherSum(IN sex varchar(4), IN depart varchar(10), OUT num INT) BEGIN SELECT ...

    首先来写一条简单的创建存储过程的语句,将教师表中中符合条件的教师数量进行统计返回到num中,代码如下:
    CREATE PROCEDURE teacherSum(IN sex varchar(4), IN depart varchar(10), OUT num INT)
    BEGIN
    SELECT COUNT(0) INTO num FROM teachers t WHERE t.SEX = sex and t.depart = depart;
    END;
    Navicat中运行
    在Navicat中我们会发现这段代码运行没有问题,但是在SQLyog中,就会报错,这是需要将代码改为,如图:
    在这里插入图片描述
    这样就可以了,不需要通过界面去手动点击创建。

    展开全文
  • SQL Server 存储过程和触发器sql语句练习
    --1.查找18岁以上姓张的年龄最大的前20%
    select top 20 percent * from stu
    where 年龄>18 and 姓名 like '张_'
    go
    
    
    --2.创建存储过程,在stu表中性别那一列插入“男”或“女”时,在表中记录的是“1”或“0”
    create procedure stu_insert  @num int,@name char(5),@sex char(6)
    as 
    	if @sex='男'
    	insert into stu values(@num,@name,1,null)
    	else
    	if @sex='女'
    	insert into stu values(@num,@name,0,null)
    go
    
    exec stu_insert 7,'赵四',男
    go
    
    --3.创建存储过程,输入学号,输出性别(显示的是“男”或“女”)
    create proc stu_out @num int,@sex char(6) output
    as
    	declare @se bit
    	set @se=(select 性别 from stu where 学号=@num)
    	if @se=1
    	set @sex='男'
    	else if @se=0
    	set @sex='女' 
    go
    
    declare @sex char(6)
    exec stu_out 2 ,@sex output
    select @sex;
    go
    
    --新建一个表,在表中创建一个触发器,每次插入操作时,变量@str值会显示。
    create table table1(a int)
    go
    
    create trigger table1_insert on table1 after insert
    as
    	declare @str char(50)
    	set @str='trigger is working'
    	print @str
    go
    
    insert into table1 values(1)
    select * from table1
    
    --instead of触发器触发时只执行触发器内部的sql语句,而不执行激活该触发器的sql语句。
    create table table2(a int)
    go
    
    create trigger table2_insert on table2 instead of insert
    as
    	print 'instead of trigger is working'
    go
    
    insert into table2 values(1)
    select * from table2
    
    select * from cjb
    select * from kcb
    select * from xsb
    go
    
    --创建触发器,当向成绩表中插入一个学生的成绩时,将学生表中该学生的总学分加上添加的课程分数
    create trigger cjb_insert on cjb after insert
    as
    	declare @num char(6),@kc_num char(3),@xf int
    	select @num=学号,@kc_num=课程号 from inserted
    	select @xf=学分 from kcb where 课程号=@kc_num
    	update xsb set 总学分=总学分+@xf where 学号=@num
    	print '修改成功'
    go
    

    注意事项:

    1、理解存储过程中的输入参数和输出参数。

    2、定义参数的类型

    展开全文
  • -- tb_employeeinfo0~9 begin declare i int;tmpcount int;tbname varchar2(50);strsql varchar2(1000); begin i:=0; while i<... tbname := 'tb_employeeinfo'||to_char(i);... select count(1) into tmpcount ...
  • SQL语句创建存储过程,并执行

    万次阅读 2015-12-29 17:21:00
    创建一个存储过程 里面有个输出参数output create proc multi @num1 int, @num2 int=10 output --output的功能类似于C#中的out修饰参数 as set @num2=@num2*@num1 print @num2 二.执行存储过程 exec multi 5,5...
  • 存储过程SQL语句对比

    千次阅读 2017-03-10 10:11:57
    SQL语句创建过程时进行分析和编译。 存储过程是预编译的,在首次运行一个存储过程时,查询优化器对其进行分析、优化,并给出最终被存在系统表中的存储计划,这样,在执行过程时便可节省此开销。 2、降低网络开销 ...
  • 存储过程SQL语句的区别

    千次阅读 2020-02-18 21:15:37
    存储过程(Stroed Proceduer)是在大型数据库系统中,一组为了完成特定功能的SQL语句集,经编译后,存储在数据库中。用户通过指定存储过程的名字并给出参数(如果该存储过程有参数)来执行它。再运行存储过程前,...
  • DB2查看存储过程SQL语句的执行情况 动态SQL可以用snapshot查看,存储过程SQL语句的执行情况用event monitor查看。但是event monitor没有记录SQL语句,而是记录了package id和S...
  • 为什么存储过程sql语句效率高?

    千次阅读 2017-08-10 20:45:18
    存储过程经过预编译处理 而SQL查询没有 ...如果是只执行一次的话,存储过程不一定比SQL语句效率高.因为存储过程有个预先编译的过程.就是.启动服务器后或者第一次执行后(可以设置).就可以把存储过程加载到高速缓存中,这样
  • 今天写存储过程,遇到一个问题,具体如下:需求是要统计一张报表,这张表的列不固定,因此在存储过程里做插入语句的时候,就用到了sql语句拼接再执行。这里拼接的insert语句是set @sql= 'insert into ##tn(prj) ...
  • SQL存储过程SQL语句拼接

    千次阅读 2013-03-19 10:11:42
    SQL存储过程SQL语句拼接 转载自http://blog.sina.com.cn/s/blog_a525ba0201016klz.html   当作例子,看懂。    set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go -- ============================...
  • 剑指Offer——常用SQL语句存储过程和函数常用SQL语句1.在MySQL数据库建立多对多的数据表关系2.授权、取消授权grant、revokegrant select, insert, update, delete on testdb.* to common_user@’%’; revoke all ...
  • 公司DBA不允许创建存储过程中有拼接SQL语句的行为,请问,该怎么解决?说是这样做有风险,说我非要用的话,可以签一份风险协议,出了问题我负责之类的。请问:各位在多条件查询这种情况下,存储过程都是怎么写的?...
  • SQL创建存储过程

    千次阅读 2008-11-18 16:06:00
    您可以使用 Transact-SQL 语句 CREATE PROCEDURE 来创建存储过程创建存储过程前,请考虑下列事项: CREATE PROCEDURE 语句不能与其他 SQL 语句在单个批处理中组合使用。要创建过程,您必须具有数据库的 CREATE ...
  • sql server 创建存储过程

    万次阅读 多人点赞 2018-03-01 13:52:52
    右键单击“存储过程”,再单击“新建存储过程”将会创建存储过程模板:让我困惑的 &lt;Procedure_Name, sysname, ProcedureName&gt; 有什么用?搜遍全网 也没答案。。。。上图其实是一个存储过程...
  • SQL Server 创建存储过程

    千次阅读 2019-04-01 14:21:20
    存储过程
  • SQL数据库语句创建及管理存储过程

    千次阅读 2020-07-27 19:06:18
    1.创建一个无参存储过程pr_stuscore,查询以下信息:学号、姓名、性别、课程名称、考试成绩。 CREATE PROC pr_stuscore AS SELECT student.s_id,sname,ssex,cname,grade from student,course,grade WHERE student ...
  • Oracle采用存储过程执行sql语句,将查询到的数据导出到EXCEL中
  • 存储过程中执行动态Sql语句

    万次阅读 2018-08-26 18:50:28
    存储过程中执行动态Sql语句  MSSQL为我们提供了两种动态执行SQL语句的命令,分别是EXEC和sp_executesql;通常,sp_executesql则更具有优势,它提供了输入输出接口,而EXEC没有。还有一个最大的好处就是利用sp_...
  • 创建一个名为 Query_student 的存储过程,该存储过程的功能是根据学号查询学生表中某一学生的学号、姓名、性别及出生日期。 create proc Query_student @snum varchar(10) as select snum,sname,ssex,2020-sage as ...
  • T-SQL 语句(五) —— 存储过程

    千次阅读 2017-02-12 04:42:44
    T-SQL 语句(五) —— 存储过程一、存储过程简介1、存储过程:一组预先写好的能实现某种功能的T-SQL 程序,指定一个程序名后编译后并将其存在SQL Server 中,以后要实现该功能可调用这个程序来完成。 2、存储过程...
  • --创建一个存储过程 create proc multi @num1 int, @num2 int=10 output --output的功能类似于C#中的out修饰参数 as set @num2=@num2*@num1 if @num2 > 40 --如果num2 > 0,则输出,否则,不输出 print @num...
  • Mysql存储过程动态拼接sql语句

    千次阅读 2018-04-19 17:22:28
    刚接触存储过程,现在的需求是这样的:有一个表需要我更新其中的某些字段,但是表里面的字段太多了,而且下次再更新也不确定是哪些字段要批量更新,所以就需要动态创建一个update语句来完成这个工作。 存储过程无疑...
  • 常用sql语句
  • SQL语句存储过程实例详解(面试宝典)

    万次阅读 2016-03-16 17:57:06
    本文用3个题目,从建立数据库到创建存储过程,详细讲解数据库的功能。这个问题面试的时候也是经常会用到的,比如写sql语句。 题目1 学校图书馆借书信息管理系统建立三个表: 学生信息表:student ...
  • SQLServer之创建存储过程

    万次阅读 2018-11-01 11:18:45
    创建存储过程注意事项 在 SQL Server、 Azure SQL Database、Azure SQL 数据仓库和并行数据库中创建 Transact-SQL 或公共语言运行时 (CLR) 存储过程,存储过程与其他编程语言中的过程类似。 可以在当前数据库...
  • MSSQL存储过程中执行动态Sql语句

    千次阅读 2012-08-02 14:09:05
    转载 存储过程中执行动态Sql语句  MSSQL为我们提供了两种动态执行SQL语句的命令,分别是EXEC和sp_executesql;通常,sp_executesql则更具有优势,它提供了输入输出接口,而EXEC没有。还有一个最大的好处就是利用sp...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 391,759
精华内容 156,703
关键字:

创建存储过程的sql语句