精华内容
下载资源
问答
  • 内容或简介:/**调用数据库里的一个函数一个函数本质上一个返回一个结果的存储过程,这个例子示范了怎么调用有in、out和in/out参数的函数***********************************/CallableStatement cs;try {// 调用一...

    内容或简介:

    /**

    调用数据库里的一个函数

    一个函数本质上一个返回一个结果的存储过程,这个例子示范了怎么调用有in、out和in/out参数的函数

    ***********************************/

    CallableStatement cs;

    try {

    // 调用一个没有参数的函数; 函数返回 a VARCHAR

    // 预处理callable语句

    cs = connection.prepareCall("{? = call myfunc}");

    // 注册返回值类型

    cs.registerOutParameter(1, i);

    // Execute and retrieve the returned value

    cs.execute();

    String retValue = cs.getString(1);

    // 调用有一个in参数的函数; the function returns a VARCHAR

    cs = connection.prepareCall("{? = call myfuncin(?)}");

    // Register the type of the return value

    cs.registerOutParameter(1, Types.VARCHAR);

    // Set the value for the IN parameter

    cs.setString(2, "a string");

    // Execute and retrieve the returned value

    cs.execute();

    retValue = cs.getString(1);

    // 调用有一个out参数的函数; the function returns a VARCHAR

    cs = connection.prepareCall("{? = call myfuncout(?)}");

    // Register the types of the return value and OUT parameter

    cs.registerOutParameter(1, Types.VARCHAR);

    cs.registerOutParameter(2, Types.VARCHAR);

    // Execute and retrieve the returned values

    cs.execute();

    retValue = cs.getString(1);           // return value

    String outParam = cs.getString(2);    // OUT parameter

    // 调用有一个in/out参数的函数; the function returns a VARCHAR

    cs = connection.prepareCall("{? = call myfuncinout(?)}");

    // Register the types of the return value and OUT parameter

    cs.registerOutParameter(1, Types.VARCHAR);

    cs.registerOutParameter(2, Types.VARCHAR);

    // Set the value for the IN/OUT parameter

    cs.setString(2, "a string");

    // Execute and retrieve the returned values

    cs.execute();

    retValue = cs.getString(1);           // return value

    outParam = cs.getString(2);           // IN/OUT parameter

    } catch (SQLException e) {

    }

    展开全文
  • 如果是在函数或者触发器里,可以建个测试表,如果是表值函数则可以定义一个表变量。如果一定要print,那么这样吧:delcare @number intdeclare @course nvarchar(30) --for exampleselect @number=number,@c...

    使用PRINT一般是写程序时观察中间结果,对于你说的这种情况,可以直接用SELECT输出结果,在存储过程里也可以这样。如果是在函数或者触发器里,可以建个测试表,如果是表值函数则可以定义一个表变量。

    如果一定要print,那么这样吧:

    delcare @number int

    declare @course nvarchar(30) --for example

    select @number=number,@course=course from choice where studentnumber = '20100001'

    print @number

    print @course

    这是楼上的朋友的劳动成果,望勿见怪

    如果一定要PRINT全部的,那么用游标吧:

    declare @info varchar(200)

    declare @curs cursor

    set @curs=cursor scroll dynamic

    for

    select 'number='+convert(varchar(20),number)+'; course='+convert(varchar(20),course) from choice where sex='F'

    open @curs

    fetch next from @curs into @info

    while(@@fetch_status=0)

    begin

    print @info

    fetch next from @curs into @info

    end

    取消

    评论

    展开全文
  • 在做Web项目性能测试过程,肯定要对数据库SQL语句执行情况实施监控,以便给开发提供准确的性能优化意见。目前Mysql数据库可以说是使用最广泛的数据库了,接下来咱们谈一下怎么使用Mysql数据库提供的慢查询日志来...

    在做Web项目性能测试过程中,肯定要对数据库SQL语句执行情况实施监控,以便给开发提供准确的性能优化意见。目前Mysql数据库可以说是使用最广泛的数据库了,接下来咱们谈一下怎么使用Mysql数据库提供的慢查询日志来监控SQL语句执行情况。

    Mysql5.0以上的版本可以支持将执行比较慢的SQL语句记录下来,并且有SQL语句执行的详细信息,其中就包括执行的时间。

    以下说明一下慢查询日志的使用步骤:

    步骤一:在mysql命令行执行show variables like 'long%'; 确认查询出来的long_query_time的值

    87337c12fbd9be4f7a88ee0c1649377c.png

    这个long_query_time是用来定义慢于多少秒的才算“慢查询”,注意单位是秒,然后咱们可以设置long_query_time的值;我通过执行sql指令set long_query_time=1来设置了long_query_time的值为1, 也就是执行时间超过1秒的都算慢查询,如下:

    f4f85010d102ae34b5f39a2164d36432.png

    步骤二:在mysql命令行执行show variables like 'slow%';确认查询出来的slow_query_log的值和slow_query_log_file的值

    c83dde17a40fd49ed1645a487bec7e3b.png

    其中slow_query_log表示是否打开慢查询日志记录 ,如果其值为OFF就需要设置成ON,这样慢查询日志才会记录信息,否则慢查询日志不会记录信息,默认其值为OFF;执行set global slow_query_log ='ON';可以将其值设置为ON;如下图:

    7c7e05b73dd29c4a4e8ed9364a288223.png

    另外数据库变量slow_query_log_file 的值是慢查询日志保存的位置,是一个文件的路径,这个就是咱们的慢查询日志的位置了,方便咱们很快的找到慢查询日志。

    当然咱们在/etc/my.cnf(以Linux系统为例) 配置文件里面也可以很方便的设置上面MYSQL全局变量的初始值。例如:

    long_query_time=1

    slow_query_log_file=/tmp/slow.log

    接下来咱们就可以正常的使用慢查询日志对SQL语句进行监控了。

    展开全文
  • SQL语句在执行的时候是先编译再执行,在大型数据库中为了提高效率,将为了完成特定功能的SQL语句集进行编译优化后, 存储在数据库服务器,用户通过指定存储过程的名字来调用执行。 编译:将某一种程序设计语言写...

    SQL语句在执行的时候是先编译再执行,在大型数据库中为了提高效率,将为了完成特定功能的SQL语句集进行编译优化后,

    存储在数据库服务器中,用户通过指定存储过程的名字来调用执行。

    编译:将某一种程序设计语言写的程序翻译成等价的另一种语言的程序的程序, 称之为编译程序(compiler) .

     

    存储过程是干什么的??? 有什么优势 oracle怎么写存储过程 oracle的存储过程是不是能写在数据库里啊,还是写在文件中读取啊

     

    数据过程就是预编译的SQL与逻辑控制总和,能加快数据访问速度,一次执行,多次调用,性能上优于每次编译SQL语句,尤其处理复杂查询业务有较强性能的提升,oracle写存储过程如:create or replace procedure (参数) as/is 参数 begin null; end;oracle的存储过程是写在数据库中,在程序代码中进行调用,java中用连接prepareCall(存储过程名)进行调用

     

    一、存储过程与函数的区别:

      1.一般来说,存储过程实现的功能要复杂一点,而函数的实现的功能针对性比较强。

      2.对于存储过程来说可以返回参数(output),而函数只能返回值或者表对象。

      3.存储过程一般是作为一个独立的部分来执行,而函数可以作为查询语句的一个部分来调用,

            由于函数可以返回一个表对象,因此它可以在查询语句中位于FROM关键字的后面。

          4.函数可以嵌入在sql中使用,可以在select中调用,存储过程则不行。

          5. 执行速度更快比函数更快 – 在数据库中保存的存储过程语句都是编译过的

    二、存储过程的优点:

      1.执行速度更快 – 在数据库中保存的存储过程语句都是编译过的

      2.允许模块化程序设计 – 类似方法的复用

      3.提高系统安全性 – 防止SQL注入

      4.减少网络流通量 – 只要传输存储过程的名称

     

     

     

    三、定义存储过程语法,"["   里面的内容表示可选项

      create proc 存储过程名

      @参数1        数据类型 [=默认值] [output],

      @参数2        数据类型 [=默认值] [output],

      ...

      as

      SQL语句

     

    四、简单的一个例子

      定义存储过程:

      create proc usp_StudentByGenderAge

      @gender nvarchar(10) [='男'],

      @age int [=30]

      as

      select * from MyStudent where FGender=@gender and FAge=@age

     

      执行存储过程:

      Situation One(调用默认的参数):

      exec usp_StudentByGenderAge

      Situation Two(调用自己指定的参数):

      exec usp_StudentByGenderAge '女',50

      或者指定变量名        exec usp_StudentByGenderAge @age=50,@gender='女'

     

     

    存储过程示例:为指定的职工在原工资的基础上长10%的工资

     

    CREATE OR REPLACE PROCEDURE cuiyaonan2000(存储过程名)  

    (  
        参数1  IN  NUMBER,  
        参数2  IN  NUMBER,  
        参数3  OUT  Number  //如上是in表示你传递给存储过程的参数,out表示存储过程返回给你的参数.可以有多个

    /*

    为指定的职工在原工资的基础上长10%的工资,并打印工资前和工资后的工资

    */

    SQL> create or replace procedure raiseSalary(empid in number)                 //给存储过程传入参数

        as                                                                       //这里用IS 还是用AS 随个人习惯,没有什么区别 

        pSal emp.sal%type;--保存员工当前 工资

        begin

    --查询该员工的工资

        select sal into pSal from emp where empno=empid;

    --给该员工涨工资

        update emp set sal = sal*1.1 where empno=empid;

    --打印涨工资前后的工资

        dbms_output.put_line('员工号:' || empid || '涨工资前

       ' || psal || '涨工资后' || psal*1.1);

        end;

     

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

    Java代码  

    create or replace procedure cuiyaonan2000(a in number,b out number)IS  
        first1 char;  
        second2 number(1);  
        third3 number := 123;  
        begin  
            NULL;   
        EXCEPTION  
            WHEN NO_DATA_FOUND THEN  
                dbms_output.put_line('数据未找到错误');  
            when others then   
                dbms_output.put_line('未知错误');  
        END;  
    end cuiyaonan2000;  
    //如上 := 是给变量赋值的 传统意义上的 等号   
    //如上exception when 就是 拦截异常 跟Try catch 一样  
    //No_data_found 是异常名 others指所有异常  
    // dbms_output.put_line 是数据库方法 如同system.out.println  
    ------------------------------------------------------------------
    二.    流程控制语句  
         IF流程语句:
     
    Java代码  
       create or replace procedure cuiyaonan2000(a in number,b out number)IS  
        first1 char;  
        second2 number(1);  
        third3 number := 123;  
        begin  
            if a > 0 then  
                    begin  
                        dbms_output.put_line(a);  
                    b:= 123;  
                        dbms_output.put_line(a);  
                end;  
                end if;  
                if third3 > 0 then  
                    begin  
                        dbms_output.put_line(third3);  
                        third3 := third3 +1;  
                        dbms_output.put_line(third3);  
                    end;  
                end if;  
    Exception  
                    WHEN NO_DATA_FOUND THEN  
                    dbms_output.put_line('数据未找到错误');  
    when others then   
                    dbms_output.put_line('未知错误');  
        end cuiyaonan2000;  
        //如上的传入参数a 不能再赋值,否则报错  
        //b 用来接收 cuiyaonan2000存储过程返回的结果.少参数调用报错  
     
             FOR流程语句
    Java代码  
    create or replace procedure cuiyaonan2000(a in number,b out number)IS  
                Cursor cursor is select name from test_table_user;  
            begin  
            FOR temp IN cursor LOOP  
                    dbms_output.put_line(temp.name);  
            END LOOP;  
        exception  
                WHEN NO_DATA_FOUND THEN  
                        dbms_output.put_line('数据未找到错误');  
                when others then   
                        dbms_output.put_line('未知错误');  
            end cuiyaonan2000;  
        //如上 cursor 是游标 跟jdbc的游标差不多 指向一条记录.然后用循环来遍历所有查到的记录.
        这里for temp in 后必须是记录集合   
     
       WHILE流程语句
    Java代码  
    create or replace procedure cuiyaonan2000(a in number,b out number)IS  
                    c number :=1;  
                begin       
                    while c < 10 LOOP   
                        begin      
                                c:= c + 1;  
                                dbms_output.put_line(c);  
      
                        end;   
                    end LOOP;  
                exception  
                    WHEN NO_DATA_FOUND THEN  
                            dbms_output.put_line('数据未找到错误');  
                        WHEN others then   
                            dbms_output.put_line('未知错误');  
            end cuiyaonan2000; 
     

    --存储过程调用

    --方法一

    SQL> set serveroutput on

    SQL> exec raisesalary(7369);

     

    员工号:7369涨工资前

    800涨工资后880

     

    方法二

        set serveroutput on

    begin

     raisesalary(7369);

    end;

    /

     

     

     

           存储函数

          函数(Function)为一命名的存储程序,可带参数,并返回一计算值。函数和过程的结构类似,但必须有一个RETURN子句,用于返回函数值。函数说明要指定函数名、结果值的类型,以及参数类型等。

     

         建立存储函数的语法:

     

    CREATE [OR REPLACE] FUNCTION函数名(参数列表)

     RETURN 函数值类型

    AS

    PLSQL子程序体;

     

     

          示例:查询某职工的年收入。

        /*

        查询某职工的总收入

        */

        create or replace function queryEmpSalary(empid in number)

        return number

       as

        pSal number; --定义变量保存员工的工资

        pComm number; --定义变量保存员工的奖金

       begin

       select sal,comm into psal,pcomm from emp where empno = empid;

       return psal*12+nvl(pcomm,0);

       end;

     

           函数的调用

     declare

        v_sal number;

        begin

        v_sal:=queryEmpSalary(7934);

        dbms_output.put_line('salary is:'|| v_sal);

        end;

     

    salary is:15600

     

     

     

    SQL> begin

        dbms_output.put_line('salary is:'|| queryEmpSalary(7934));

        end;

        /

     

    salary is:15600

     

     

     

           触发器

           数据库触发器是一个与表相关联的、存储的PL/SQL程序。每当一个特定的数据操作语句(Insert,update,delete)在指定的表上发出时,Oracle自动地执行触发器中定义的语句序列。

     

           触发器的类型

             语句级触发器

            在指定的操作语句操作之前或之后执行一次,不管这条语句影响了多少行。

     

             行级触发器(FOR EACH ROW)

            触发语句作用的每一条记录都被触发。在行级触发器中使用old和new伪记录变量,识别值的状态。

     

          创建触发器

    CREATE  [or REPLACE] TRIGGER 触发器名

       {BEFORE | AFTER}

       {DELETE | INSERT | UPDATE [OF列名]}

       ON  表名

       [FOR EACH ROW [WHEN(条件) ] ]

       PLSQL 块

     

           示例1:限制非工作时间向数据库插入数据

    SQL> create or replace

        trigger securityEmp

        before insert on emp

        declare

        begin

        if to_char(sysdate,'day')in('星期四','星期六','星期日')

        or to_number(to_char(sysdate,'hh24'))not between 8 and 18 then

        raise_application_error(-20001,'不能在非工作时间插入数据。');

        end if;

       end;

     

     

          触发语句与伪记录变量的值

    触发语句

    :old

    :new

    Insert

    所有字段都是空(null)

    将要插入的数据

    Update

    更新以前该行的值

    更新后的值

    delete

    删除以前该行的值

    所有字段都是空(null)

     

          示例2:确认数据(检查emp表中sal的修改值不低于原值)

    SQL> create or replace trigger checkSal

        before update of sal on emp

        for each row

        declare

        begin

        if :new.sal<:old.sal then

        raise_application_error(-20001,'更新后的薪水比更新前小');

        end if;

        end;

       /

     

    Trigger created

    运行后结果:

    SQL> update emp set sal=260 where empno=7499;

     

    update emp set sal=260 where empno=7499

     

    ORA-20001: 更新后的薪水比更新前小

    ORA-06512: 在 "SCOTT.CHECKSAL", line 4

    ORA-04088: 触发器 'SCOTT.CHECKSAL'执行过程中出错

     

           触发器总结

          触发器可用于

    •         数据确认 

    •         实施复杂的安全性检查

    •         做审计,跟踪表上所做的数据操作等

     

    转载于:https://www.cnblogs.com/thomasbc/p/6652111.html

    展开全文
  • SQL语句需要先编译然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。存储过程是可...
  • 但是对于调用数据库中的特定的表如何在listbox上逐行显示还是不知道怎么做。。。 其实已经查了博客园和CSDN等等了,但是没有讲的很清楚的。 唯一一个博客园给了代码,按照他的方法调试了下发现没声明两个...
  • 存储过程是一个预编译的SQL语句,优点是允许模块化的设计,就是说只需创建一次,以后在程序就可以调用多次。如果某次操作需要执行多次SQL,使用存储过程比单纯SQL语句执行要快。可以用一个“execute 存储过程名 ...
  • textbox属于姓名 然后 按按钮之后相当于把数据提交,提交的数据应该由一个函数接收,接收之后调用函数里的SQL语句进行查询操作,找个教程看看吧public class SQLHelper{private SqlConnection conn = null;...
  • 这些接口可以让使用者通过传递参数的方式直接调用,本文会以案例的形式进行简要的介绍。其次,盘古平台除了通过上述封装好的数据接口来查询数据之外,还支持使用者直接编写SQL语句,通过查询具体的数据表,来查询...
  • SQL语句需要先编译然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。存储过程是可...
  • SQL语句需要先编译然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。存储过程是可...
  • 存储函数是由SQL语句和过程式语句所组成的代码片段,它可以被应用程序和其他SQL语句调用,在MySQL可以通过CREATE FUNCTION语句来创建存储函数 存储函数就是返回单个值的特殊类型的存储程序,接下来将在文章中为...
  • 先来看官方解释:百度百科:存储过程是在大型数据库系统,一组为了完成特定功能的SQL语句集,存储在数据库中,一次编译永久有效,可通过调用语句进行复用。维基百科:存储过程又称存储程序,是在数据库存取复杂...
  • 2.功能实现更加灵活存储过程可以应用条件判断和游标等语句,有很强的灵活性,可以直接调用数据库的一些内置函数,完成复杂的判断和较复杂的运算。3.减少网络传输复杂的业务逻辑需要多条 SQL 语句,当客户机...
  • 2.功能实现更加灵活存储过程可以应用条件判断和游标等语句,有很强的灵活性,可以直接调用数据库的一些内置函数,完成复杂的判断和较复杂的运算。3.减少网络传输复杂的业务逻辑需要多条 SQL 语句,当客户机...
  • 什么是存储过程存储过程是一组可编程的函数,是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。关键词:可编程,特定功能,调用创建存储...
  • 怎么查询,怎样写sql在sql 语句中判断不能用 == ,要用 = 就行了 ,赋值 用 := 函数 和 储存过程的相同点 和不同点:函数的创建:函数只能在指定数据库中用。 和存储方法一样delimiter $$create function 函数...
  • 调用语句 语句 语句 语句 语句 打印语句 存储模块的异常处理 异常变量的说明 异常的抛出 异常处理器 异常处理用法举例 存储模块的语句 游标 动态 游标变量 返回查询结果集 语句应用举例 客户端存储...
  • 今天在写一个sql脚本时遇到...但要注意函数定义的函数名最好不要大写,navcat sql编辑器定义了一个名为getId的函数,下面怎么引用都报错,后来改成getid就好了,并且用getid()或getId()都可以正常调用函数。...
  • 存储过程:由PL/SQL语句书写的过程,这个过程经编译和优化后存储在数据库服务器,使用时只要调用即可。 动态参数与主变量的区别:动态参数的输入不是编译时完成绑定。而是通过 (prepare)语句准备主变量和执行...
  • 常见函数-mysql

    2020-12-12 14:19:20
    概念:类似于java的方法,将一组逻辑语句封装在方法体,对外暴露方法名 好处:1、隐藏了实现细节 2、提高代码的重用性 调用:select 函数名(实参列表) 【from 表】; 特点: ①叫什么(函数名) ②干什么(函数...
  • MySQL语句性能优化

    千次阅读 2018-03-18 16:34:27
    怎么定位慢查询---------------------数据库索引的优化、索引原理SQL语句调优数据库读写分离--MyChar---------------------分组 having存储过程、触发器、函数存储过程:写了一块sql语句,类似Java方法,只需调用...
  • 一个好用的数据库

    2008-05-14 08:36:06
    <br>三、实例练习 <br>下面就通过上面的例子一起来看一下这个类到底怎么样,为了方便,我建了一个简单的access数据库test.mdb,在这个数据库中也只有一张表emp,它有三个字段。在下面的工程的InitInstance ()...
  • 内容主要集中在大多数企业常见的问题之上,如安装和升级到oracle database 11g数据库软件、创建数据库、导出和导入数据、数据库的备份与恢复、性能调优,等等。  本书还提供了dba完成本职工作必备的基本的uniix...
  • 先来看官方解释:百度百科:存储过程是在大型数据库系统,一组为了完成特定功能的SQL语句集,存储在数据库中,一次编译永久有效,可通过调用语句进行复用。维基百科:存储过程又称存储程序,是在数据库存取复杂...
  • 3.4.2 Oracle数据库中的存储层次体系 87 3.4.3 字典管理和本地管理的表空间 90 3.5 临时文件 92 3.6 控制文件 94 3.7 重做日志文件 94 3.7.1 在线重做日志 95 3.7.2 归档重做日志 97 3.8 密码文件 99 3.9 ...
  • main() #调用函数 print("爬取完毕!")</code></pre> 运行之后,打印了250遍sql语句,如下。怎么搞?崩溃了,卡在这两天了! <p>sql = '''  ...
  • Spring怎么实现事务?

    千次阅读 2020-06-22 22:43:14
    事务通常由高级数据库操纵语言或编程语言(如SQL,C++或Java)书写的用户程序的执行所引起,并用形如begin transaction和end transaction语句(或函数调用)来界定。事务由事务开始(begin transaction)和事务结束...
  • 3.4.2 Oracle数据库中的存储层次体系 87 3.4.3 字典管理和本地管理的表空间 91 3.5 临时文件 93 3.6 控制文件 95 3.7 重做日志文件 95 3.7.1 在线重做日志 96 3.7.2 归档重做日志 98 3.8 密码文件 100 3.9 ...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 181
精华内容 72
关键字:

数据库语句中怎么调用函数