Monthly Archive: November, 2016

SQL Server之存储过程(PROCEDURE )

什么是存储过程呢?

存储过程就是作为可执行对象存放在数据库中的一个或多个SQL命令。
通俗来讲:存储过程其实就是能完成一定操作的一组SQL语句。

那为什么要用存储过程呢?

  1. 存储过程只在创造时进行编译,以后每次执行存储过程都不需再重新编译,而一般SQL语句每执行一次就编译一次,所以使用存储过程可提高数据库执行速度。
  2. 当对数据库进行复杂操作时,可将此复杂操作用存储过程封装起来与数据库提供的事务处理结合一起使用。
  3. 存储过程可以重复使用,可减少数据库开发人员的工作量。
  4. 安全性高,可设定只有某些用户才具有对指定存储过程的使用权。
--------------创建存储过程-----------------
CREATE PROC [ EDURE ] procedure_name [ ; number ]
    [ { @parameter data_type }
        [ VARYING ] [ = default ] [ OUTPUT ]
    ] [ ,...n ]
[ WITH
    { RECOMPILE | ENCRYPTION | RECOMPILE , ENCRYPTION } ]
[ FOR REPLICATION ]
AS sql_statement [ ...n ]
 
--------------调用存储过程-----------------
EXECUTE Procedure_name '' --存储过程如果有参数,后面加参数格式为:@参数名=value,也可直接为参数值value
 
--------------删除存储过程-----------------
drop procedure procedure_name    --在存储过程中能调用另外一个存储过程,而不能删除另外一个存储过程
 
-- 参数解释
-- procedure_name :存储过程的名称,在前面加#为局部临时存储过程,加##为全局临时存储过程。
 
-- number:是可选的整数,用来对同名的过程分组,以便用一条 DROP PROCEDURE 语句即可将同组的过程一起除去。例如,名为 orders 的应用程序使用的过程可以命名为 orderproc;1、orderproc;2 等。DROP PROCEDURE orderproc -- 语句将除去整个组。如果名称中包含定界标识符,则数字不应包含在标识符中,只应在 procedure_name 前后使用适当的定界符。 
 
-- @parameter: 存储过程的参数。可以有一个或多个。用户必须在执行过程时提供每个所声明参数的值(除非定义了该参数的默认值)。存储过程最多可以有 2.100 个参数。 
-- 使用 @ 符号作为第一个字符来指定参数名称。参数名称必须符合标识符的规则。每个过程的参数仅用于该过程本身;相同的参数名称可以用在其它过程中。默认情况下,参数只能代替常量,而不能用于代替表名、列名或其它数据库对象的名称。有关更多信息,请参见 EXECUTE。 
 
-- data_type:参数的数据类型。所有数据类型(包括 text、ntext 和 image)均可以用作存储过程的参数。不过,cursor 数据类型只能用于 OUTPUT 参数。如果指定的数据类型为 cursor,也必须同时指定 VARYING 和 OUTPUT 关键字。有关 SQL Server -- 提供的数据类型及其语法的更多信息,请参见数据类型。 
-- 说明 对于可以是 cursor 数据类型的输出参数,没有最大数目的限制。 
 
-- VARYING: 指定作为输出参数支持的结果集(由存储过程动态构造,内容可以变化)。仅适用于游标参数。 
 
-- default: 参数的默认值。如果定义了默认值,不必指定该参数的值即可执行过程。默认值必须是常量或 NULL。如果过程将对该参数使用 LIKE 关键字,那么默认值中可以包含通配符(%、_、[] 和 [^])。
 
-- OUTPUT :表明参数是返回参数。该选项的值可以返回给 EXEC[UTE]。使用 OUTPUT 参数可将信息返回给调用过程。Text、ntext 和 image 参数可用作 OUTPUT 参数。使用 OUTPUT 关键字的输出参数可以是游标占位符。 
 
-- RECOMPILE: 表明 SQL Server 不会缓存该过程的计划,该过程将在运行时重新编译。在使用非典型值或临时值而不希望覆盖缓存在内存中的执行计划时,请使用 RECOMPILE 选项。
 
-- ENCRYPTION: 表示 SQL Server 加密 syscomments 表中包含 CREATE PROCEDURE 语句文本的条目。使用 ENCRYPTION 可防止将过程作为 SQL Server 复制的一部分发布。 说明 在升级过程中,SQL Server 利用存储在 syscomments 中的加密注释来重新创建加密过程。 
 
-- FOR REPLICATION :指定不能在订阅服务器上执行为复制创建的存储过程。.使用 FOR REPLICATION 选项创建的存储过程可用作存储过程筛选,且只能在复制过程中执行。本选项不能和 WITH RECOMPILE 选项一起使用。 
 
-- AS :指定过程要执行的操作。
 
-- sql_statement :过程中要包含的任意数目和类型的 Transact-SQL 语句。但有一些限制。

无参数存储过程

CREATE PROCEDURE testproc
-- WITH ENCRYPTION, RECOMPILE, EXECUTE AS CALLER|SELF|OWNER| 'user_name'
AS
    SELECT TOP 10 * FROM NC..bd_deptdoc
GO

Read more

Java 正则表达式

什么是正则表达式?

正则表达式的定义:这是一种字符串的语法规则,是一种可以用于模式匹配和替换的规则,主要用于文本和字符串的处理(匹配,查找,替换,判断字符串)。一个正则表达式是由普通的字符(a~z)以及特殊字符(元字符)组成的文字模式,用以描述在查找文字主体时待匹配的一个或多个字符串。下面我们会介绍一些常用的元字符

正则表达式的元字符

元字符的定义:元字符:元字符使得正则表达式具有处理能力,指的是那些在正则表达式中具有特殊意义的专用字符,可以规定其前导字符在目标对象中的出现模式

元字符 在正则表达式中的写法 意义
. . 任何一个字符
\d \\d 0-9之间的任意一个数字
\D \\D 任何一个非数字字符
\s \\s 空格类字符'\t','\n'等等
\S \\S 非空格类字符
\w \\w 可用于标识符的字符,不包括美元符
\W \\W 不能可用于标识符的字符
\p{Lower} \\p[Lower] 小写字母[a~z]
\p{Upper} \\p{Upper} 大写字母[A~Z]
\p{ASCII} \\p{ACSII} ASCII字符
\p{Alpha} \\p{Alpha} 字母
\p{digit} \\p{digit} 数字字符[0~9]
\p{Alnum} \\p{Alnum} 字母或数字
\p{Punct} \\p{Punct} 标点符号
\p{graph} \\p{graph} 可视字符,\p{Alnum},\p{Punct}
\p{Print} \\p{Print} 可打印字符
\p{Blank} \\p{Blank} 空格或制表符
\p{Cntrl} \\p{Cntrl} 控制字符[\x00~\x1F\x7F]

Read more

Android 开发环境搭建

平台 Android Studio 软件包
Windows android-studio-bundle-145.3360264-windows.exe 包含 Android SDK (推荐)
android-studio-ide-145.3360264-windows.exe 无 Android SDK
android-studio-ide-145.3360264-windows.zip 无 Android SDK,无安装程序
Mac OS X android-studio-ide-145.3360264-mac.dmg
Linux android-studio-ide-145.3360264-linux.zip
平台 SDK 工具包
Windows installer_r24.4.1-windows.exe
android-sdk_r24.4.1-windows.zip 无安装程序
Mac OS X android-sdk_r24.4.1-macosx.zip
Linux android-sdk_r24.4.1-linux.tgz

Android SDK在线更新镜像服务器

  1. 中国科学院开源协会镜像站地址:
    • IPV4/IPV6: mirrors.opencas.cn 端口:80
    • IPV4/IPV6: mirrors.opencas.org 端口:80
    • IPV4/IPV6: mirrors.opencas.ac.cn 端口:80
  2. 上海GDG镜像服务器地址:
    • sdk.gdgshanghai.com 端口:8000
  3. 北京化工大学镜像服务器地址:
    • IPv4: ubuntu.buct.edu.cn/ 端口:80
    • IPv4: ubuntu.buct.cn/ 端口:80
    • IPv6: ubuntu.buct6.edu.cn/ 端口:80
  4. 大连东软信息学院镜像服务器地址:
    • mirrors.neusoft.edu.cn 端口:80

使用方法:

  1. 启动 Android SDK Manager ,打开主界面,依次选择『Tools』『Options...』,弹出『Android SDK Manager - Settings』窗口;
  2. 『Android SDK Manager - Settings』窗口中,在『HTTP Proxy Server』『HTTP Proxy Port』输入框内填入上面镜像服务器地址(不包含http://,如下图)和端口,并且选中『Force https://... sources to be fetched using http://...』复选框。设置完成后单击『Close』按钮关闭『Android SDK Manager - Settings』窗口返回到主界面;
  3. 依次选择『Packages』『Reload』

Tomcat 设置默认访问项目

方法一:(最简单直接的方法)

删除原 webapps/ROOT 目录下的所有文件,将应用下的所有文件和文件夹复制到ROOT文件夹下。

方法二:

删除原 webapps/ROOT 目录下的所有文件,修改文件“conf/server.xml”,在Host节点下增加如下Context的内容配置:

<Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true"
    xmlValidation="false" xmlNamespaceAware="false">
    ......
    <Context path="" docBase="C:/apache-tomcat-6.0.32/myapps/bc.war"></Context>
</Host>

注意:

  • path 的值设置为空;
  • 应用不要放到tomcat的webapps目录下(如上述配置是放到自定义的文件夹myapps内的),否则访问时路径很有问题;
  • docBase指定到绝对路径。
    如此设置后重启tomcat,如果docBase指向的是war文件,会自动将war解压到 webapps/ROOT 目录;如果docBase指向的是应用已解压好的目录,如 docBase="C:/apache-tomcat-6.0.32/myapps/bc",tomcat不会生成webapps/ROOT目录(这种情况下之前可以不用删除webapps/ROOT目录,但webapps/ROOT目录内的内容是无法访问的),访问时将直接使用docBase指定的目录。

方法三:

与方法二类似,但不是修改全局配置文件“conf/server.xml”,而是在“conf/Catalina/localhost”目录下增加新的文件"ROOT.xml"(注意大小写哦),文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<Context path="" docBase="C:/apache-tomcat-6.0.32/myapps/bc.war"></Context>

Oracle 12519 错误解决方法

ORA-12519, TNS:no appropriate service handler found(没有合适的服务处理器)
这里信息表明,数据库当前的连接数已超过了设置的数据库处理的最大上限

查看当前数据连接

select value,  -- 最大连接数
(select count(*) from v$process)  -- 当前连接数
from v$parameter where name = 'processes'

修改最大连接数

alter system set processes = 500 scope = spfile;

查看当前那些用户在使用数据库

SELECT osuser, a.username,cpu_time/executions/1000000||'s', sql_fulltext,machine from v$session a, v$sqlarea b;

修改最大连接数需要重启数据库才能生效!