精华内容
下载资源
问答
  • SQLdeclare用法

    万次阅读 2018-04-11 17:35:20
    平时写SQL查询、存储过程都是凭着感觉来,没有探究过SQL的具体语法,一直都是按c#那一套往SQL上模仿,前几天项目碰到一个问题引起了我对declare定义变量的作用域的兴趣。大家都知道c#的局部变量,在if如果...
    

    平时写SQL查询、存储过程都是凭着感觉来,没有探究过SQL的具体语法,一直都是按c#那一套往SQL上模仿,前几天项目中碰到一个问题引起了我对declare定义变量的作用域的兴趣。

    大家都知道c#中的局部变量,在if中如果我们定义一个变量的话他的作用到if结束为止,if外是不识别这个变量的,else里都不能使用,简单的写一下。

    if (true)
    {
          Int32 i = 1;
          Console.WriteLine(i);
    }

    这个i的作用域就是if里面,如果我们在if外面用这个变量

     

     

    if (true)
    {
        Int32 i = 1;
        Console.WriteLine(i);
    }
    Console.WriteLine(i);

     

    那第二条输出语句会报错

    The name 'i' does not exist in the current context

    说明已经出了i的作用域了。

    那么我们要是在sql写这么一段代码会是什么情况呢?首先写在if内 

    IF 1=1
    BEGIN
        DECLARE @test VARCHAR
        SET @test='1'   
        PRINT 'in if:'+@test
    END

      运行看结果输出in if:1这是可以预想的结果。那我们在if外面使用变量@test试试。

      

     

     

    复制代码
    IF 1=1
    BEGIN
       DECLARE @test VARCHAR
       SET @test='1'   
       PRINT 'in if:'+@test
    END
    PRINT 'out if:'+@test
    复制代码

     

    这样会是什么结果呢,不知道大家怎么想的,以我的大脑顺势就想到这应该报错啊,出了变量的作用域了。实际结果不仅没报错而且@test的值还在。

     in if:1

     out if:1

    看见这个结果当时我很郁闷,SQL太出人意料了。

    在SQL SERVER 2005的帮助文档里关于declare的帮助里发现这么一句话,备注的第三行“局部变量的作用域是其被声明时所在批处理”

    Msdn的地址:http://msdn.microsoft.com/zh-cn/library/ms188927.aspx

    这行字在这么一大篇中还真挺不引人瞩目。

    现在我们知道原来declare变量的作用域是所在的批处理,if阻断不了它的作用域,那上面我们的代码if内外的代码都在一个批处理中,所以@test都是可用的且if里面设置的值还在。

    下面我改造一下代码,SQL中是以GO语句来区分批处理的

     

    复制代码
    IF 1=1
    BEGIN
       DECLARE @test VARCHAR
       SET @test='1'   
       PRINT 'in if:'+@test
    END
    GO
    PRINT 'out if:'+@test
    复制代码

     

     

    这下对了,检查语法后SQL报错“必须声明标量变量"@test"”

     

    注:GO就是用于一个sql语句的结束 比如说一个批处理语句是这样的 select *from ,b select *from a 在后一个select后面加上一个GO这样可以一次执行两条sql 语句

    展开全文
  • SQL中declare用法

    2012-01-05 13:15:41
    strSQL.Append("declare @rodno varchar(50) "); strSQL.Append("set @rodno = @GetRod "); strSQL.Append("SELECT 'aaa' AS Type,a.rodNO as RodNO,a.starttime AS Starttime,b.endtime AS Endtime "); ...
  • mysql中declare语句用法详解

    千次阅读 2012-03-09 16:18:29
    mysqlDECLARE语句是在复合语句声明变量的指令。 (1)Example with two DECLARE statements 两个DECLARE语句的实例 CREATE PROCEDURE p8 () BEGIN DECLARE a INT; DECLARE b INT; SET a = 5; SET b = 5;...

    mysql中的DECLARE语句是在复合语句中声明变量的指令。 
    (1)Example with two DECLARE statements 
    两个DECLARE语句的实例 
    CREATE PROCEDURE p8 () 
    BEGIN 
    DECLARE a INT; 
    DECLARE b INT; 
    SET a = 5; 
    SET b = 5; 
    INSERT INTO t VALUES (a); 
    SELECT s1 * a FROM t WHERE s1 >= b; 
    END; // /* I won't CALL this */ 
    在过程中定义的变量并不是真正的定义,你只是在BEGIN/END块内定义了而已(译注:也就是形参)。注意这些变量和会话变量不一样,不能使用修饰符@你必须清楚的在BEGIN/END块中声明变量和它们的类型。变量一旦声明,你就能在任何能使用会话变量、文字、列名的地方使用。 
    (2)Example with no DEFAULT clause and SET statement 
    没有默认子句和设定语句的例子 
    CREATE PROCEDURE p9 () 
    BEGIN 
    DECLARE a INT /* there is no DEFAULT clause */; 
    DECLARE b INT /* there is no DEFAULT clause */; 
    SET a = 5; /* there is a SET statement */ 
    SET b = 5; /* there is a SET statement */ 
    INSERT INTO t VALUES (a); 
    SELECT s1 * a FROM t WHERE s1 >= b; 
    END; // /* I won't CALL this */ 
    有很多初始化变量的方法。如果没有默认的子句,那么变量的初始值为NULL。你可以在任何时候使用SET语句给变量赋值。 
    (3)Example with DEFAULT clause 
    含有DEFAULT子句的例子 
    CREATE PROCEDURE p10 () 
    BEGIN 
    DECLARE a, b INT DEFAULT 5; 
    INSERT INTO t VALUES (a); 
    SELECT s1 * a FROM t WHERE s1 >= b; 
    END; // 
    我们在这里做了一些改变,但是结果还是一样的。在这里使用了DEFAULT子句来设定初始值,这就不需要把DECLARE和SET语句的实现分开了。  
    (4)Example of CALL 
    调用的例子 
    mysql> CALL p10() // 
    +--------+ 
    | s1 * a | 
    +--------+ 
    | 25 | 
    | 25 | 
    +--------+ 
    2 rows in set (0.00 sec) 
    Query OK, 0 rows affected (0.00 sec) 
    结果显示了过程能正常工作 
    (5) Scope 
    作用域 
    CREATE PROCEDURE p11 () 
    BEGIN 
    DECLARE x1 CHAR(5) DEFAULT 'outer'; 
    BEGIN 
    DECLARE x1 CHAR(5) DEFAULT 'inner'; 
    SELECT x1; 
    END; 
    SELECT x1; 
    END; // 
    现在我们来讨论一下作用域的问题。例子中有嵌套的BEGIN/END块,当然这是合法的。同时包含两个变量,名字都是x1,这样也是合法的。内部的变量在其作用域内享有更高的优先权。当执行到END语句时,内部变量消失,此时已经在其作用域外,变量不再可见了,因此在存储过程外再也不能找到这个声明了的变量,但是你可以通过OUT参数或者将其值指派 给会话变量来保存其值。  
    调用作用域例子的过程: 
    mysql> CALL p11()// 
    +-------+ 
    | x1 | 
    +-------+ 
    | inner | 
    +-------+ 
    +-------+ 
    | x1 | 
    +-------+ 
    | outer | 
    +-------+ 
    我们看到的结果时第一个SELECT语句检索到最内层的变量,第二个检索到第二层的变量

    展开全文
  • Oracle中declare如何使用

    2021-05-14 14:04:01
    Oracle中declare使用方法 首先我们需要了解declare遵循下面的实现结构 declare --声明 begin --开始 end; --结束 了解之后,我们就可以在这个结构添加语句实现小功能 例如:输出今天的日期 declare --声明 date...

    Oracle中declare如何使用


    首先我们需要了解declare遵循下面的实现结构

    declare --声明
    begin --开始
    end; --结束
    了解之后,我们就可以在这个结构中添加语句实现小功能
    例如:输出今天的日期

    declare --声明
    datevalue varchar2(20);--定义变量
    begin --开始
    select to_char(trunc(sysdate),'yyyy-mm-dd') into datevalue from dual; --给自己定义的变量赋值
    dbms_output.put_line('当前日期为:'||datevalue );--打印
    end;--结束
    

    选中语句,运行就可以得到当前日期
    在这里插入图片描述

    展开全文
  • 从’abbccc’返回’ccc’,charindex函数用法(charindex(查找的字符串,被查找的字符串,开始查找的位置),例如查找’abbccc’第一个’c’出现的位置,charindex(‘c’,’abbccc’,1)) declare @str1 ...
  • declare命令用法

    2017-12-04 13:56:00
    只需要掌握declare -i 就可以了 本文转自 Super康 51CTO博客,原文链接:http://blog.51cto.com/zhengkangkang/1855822,如需转载请自行联系原作者 ...

    wKioL1fk0CbAeGCSAAIo6jSheCY052.png-wh_50

    只需要掌握declare -i 就可以了



    本文转自 Super康 51CTO博客,原文链接:http://blog.51cto.com/zhengkangkang/1855822,如需转载请自行联系原作者

    展开全文
  • 方便删除数据库中所有的数据表,清空数据库,有些有约束,不能直接delete,需要先删除库的约束,代码如下: --删除所有约束DECLARE c1 cursor for select 'alter table ['+ object_name(parent_obj) + '] drop ...
  • oracledeclare

    万次阅读 2011-10-09 11:12:34
    使用declare或begin关键字开头的叫匿名块,每次使用均需要进行编译,不能存储在数据库中且不能被其他PL/SQL调用。而你所谓的存储过程,存储函数,触发器等叫命名块,一经编译后面就可直接调用,且可以存储在数据库中...
  • 数据库使用过程由于程序方面的问题有时候会碰到重复数据,重复数据导致了数据库部分设置不能正确设置…… 方法declare @max integer,@id integer declare cur_rows cursor local for select 主字段,count(*) ...
  • 数据库事务嵌套用法

    2012-11-05 15:43:00
    对于存储过程调用其他存储过程时会使用很多事务,即每个存储过程中都存在事务!但是如果某一个存储过程出现回滚时,会报出“无法回滚Tran1,找不到该名称的事务或保存点。”解决此问题的方法是每个子存储过程中都...
  • sql server数据库中raiserror函数的用法1

    千次阅读 2016-03-06 18:52:53
    sql server数据库中raiserror的作用就和asp.net的throw new Exception一样,用于抛出一个异常或错误。这个错误可以被程序捕捉到。 raiserror的常用格式如下: raiserror('错误的描述',错误的严重级别代码,错误的...
  • Oracle中declare的用例

    2020-11-12 19:00:48
    场景:如果一场考试有100个科目,每个科目的成绩存放在以"t_科目代码_1_pyjd"格式命名的表里面。 若想获取每个科目的阅卷进度(ksstzt不...第三部分的c.kmdm是从游标取值,into是给第一部分的变量赋值,dbms_output
  • 数据库中游标的使用

    千次阅读 2013-09-19 12:00:31
    数据库中游标的使用 1游标和游标的优点    在数据库中,游标是一个十分重要的概念。游标提供了一种对从表检索出的数据进行操作的灵活手段,就本质而言,游标实际上是一种能从包括多条数据记录的结果集中每次...
  • 删除数据库中重复数据的几个方法数据库使用过程由于程序方面的问题有时候会碰到重复数据,重复数据导致了数据库部分设置不能正确设置…… 方法declare @max integer,@id integerdeclare cur_rows cursor local...
  • PB内置OEACLE数据库接口的使用方法

    千次阅读 2006-09-28 11:14:00
    PB内置OEACLE数据库接口的使用方法 马长明 PowerBuilder(PB)和Oracle分别是前端开发工具和RDBMS的主流产品。PB提供了两种与Oracle连接的接口:PowerSoft内置的数据库接口(Native Database Interface)和ODBC接口。...
  • 涉及到将数据从一个数据库的表导入到另一个数据库中,下面总结一下学习的方法:1. 使用DTS这是SQL Server2000自带的一个强大的数据导出工具,在2005变成了SSIS。因为安装环境的问题,不能使用。只能采用后面的方法...
  • USE MASTER GO DECLARE @dbname SYSNAME SET @dbname = 'databasename' --这个是要删除的数据库库名 DECLARE @s NVARCHAR(1000) DECLARE tb CURSOR LOCAL FOR SELECT s = 'kill ' + CAST(spid AS VARCHAR) FRO...
  • DECLARE在SQL用法及相关等等

    千次阅读 2011-11-22 10:19:24
    :arrow: 允许用户创建游标, 用于在...游标变量可使用此语句声明,并可用于其他与游标相关的语句。除非在声明提供值,否则声明之后所有变量将初始化为 NULL。 Transact-SQL 语法约定 语法 DECLARE { ...
  • 语句用法很简单,只需要把下面这句话 USE 后面的汉字替换为你想清除空表的数据库名称即可。 use 你要清理的数据库名称 declare My_Cursor cursor for select a.name from sysobjects as a inner join sysindexes as ...
  • MySQL declare语句用法介绍

    万次阅读 2014-08-18 17:13:49
    MySQL declare语句是在复合语句声明变量的指令。 (1)Example with two DECLARE statements  两个DECLARE语句的实例 CREATE PROCEDURE p8 () BEGIN DECLARE a INT; DECLARE b INT; SET a = 5;...
  • 换工作了,以后主要和SqlServer打交道了,仿佛回到了大学,不知道学校的饭还是那么好吃又便宜吗?北京的饭好贵;不知道门口哪家板面的生意是不是还是那么红火,好想再...使用对象:类、接口、变量、方法 protect..
  • 1. 在不同数据库中会用到游标,有的写法直接到“关闭游标”就结束了,有的需要“释放游标”,请问大神们在什么情况下需要释放游标,请结合具体的oracle、mysql和...2. 可以提供一下在不同数据库中具体使用的例子 。
  • 数据库使用过程由于程序方面的问题有时候会碰到重复数据,重复数据导致了数据库部分设置不能正确设置…… 方法declare @max integer,@id integer declare cur_rows c...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 71,237
精华内容 28,494
关键字:

数据库中declare的用法