文档库 最新最全的文档下载
当前位置:文档库 › LINUX定时执行含有DB2存储过程的SHELL脚本

LINUX定时执行含有DB2存储过程的SHELL脚本

LINUX定时执行含有DB2存储过程的SHELL脚本
LINUX定时执行含有DB2存储过程的SHELL脚本

LINUX下定时执行含有DB2存储过程的SHELL脚本

最近项目要求将某些表中的数据转移到历史数据表中,并将成功转移后的数据在生产系统中删除,并且要求每天凌晨1:00定时执行脚本。这是我第一次写这样的脚本程序,现将整个编写过程或步骤记录如下,希望能对有类似需求的人所有帮助,由于本人也是刚接触DB2数据库和shell脚本,错误之处还请见谅。测试服务器的操作系统是Redhat,数据库产品:DB2(10.1版本),转移数据是在DB2存储过程中实现的,下面分几个步骤进行叙述。

一、编写DB2存储过程

1》编写存储过程

具体代码见表格1,将其中的代码形成一个sql文件,文件名为dataHandle.sql CREATE OR REPLACE PROCEDURE test_schema.dataHandle(in t_Id INT)--in表示输入参数

RESULT SETS 1 --返回结果为1个

LANGUAGE SQL

P1: BEGIN ATOMIC --ATOMIC为了使P1和END P1之间形成一个事务,要么同时成功,要么同时失败

declare tIdINT; --声明变量

set tId=t_Id; --赋值变量

IF tId> 0 THEN --判断

insert into TEST_SCHEMA.TEST_HISTORY(t_Id,t_name)

select t_Id,t_name

from TEST_SCHEMA.TM_ASM_FLTSCH where where t_Id=tId; --转移数据

delete from TEST_SCHEMA.TM_ASM_FLTSCH where t_Id=tId; --删除数据

END IF;

END P1

@ --@这里是必须的

表1

2》部署存储过程到指定数据库

a)连接数据库

切换到数据库用户下执行命令:db2 connect to Dbname

或者不切换用户执行命令:db2 connect to Dbname user Username using ******

b)部署1》中写好的存储过程

执行命令:db2 -td@ -vf dataHandle.sql

或者使用datastudio进行部署,具体流程如下:

最后点击Finish即可。

二、编写SHELL脚本

该脚本的代码见表2,主要功能是:将表test中90天之前的数据转移到test_history表中,并将表test中已被转移的数据删除掉,并对表test,test_history进行重组,使表中的索引及时生效。脚本文件名为cronTransData.sh,其中获取主键值时,是将符合查询条件的所有主键都输出到文件re.txt中,之后逐行读取该文件中的主键值,并在循环中逐个处理(循环调用存储过程)。

#!/bin/sh

#load db2 environment variables

. /home/db2inst1/.profile #加载DB2 数据的环境变量

startTime=`date +%s` #获取当前时间戳

#transfer data(90 days before) to history table

outDate=`date -d -90day +%Y-%m-%d` #获取当前日期90天之前的日期db2 connect to Dbname #连接数据库

#fetch the primary key values of transfered data into re.txt file.

db2 "select t_Id from test_schema.test where to_date<='$outDate'" > re.txt; #将90天之前的数据的主键值输出到文件re.txt中

db2 terminate #终止数据库连接,释放链接资源

#read re.txt file to fetch fltschId's value

cat re.txt|grep '[\s0-9\s]$'|while read tId #从上面的输出文件中提取只含数字和空格的行(只读取主键值)

do #循环执行

db2 connect to seat

#call store procefure to complete data transfer

db2 "call test_schema.dataHandle('$tId')" #调用上面部署成功的存储过程db2 terminate;

done

runstats on table test_schema.test and index all; #整理一下表

runstats on table test_schema.test_history and index all;

endTime=`date +%s` #运行结束时间

spendTime=$((endTime-startTime)) #整个过程消耗的时间

echo 'Spent total time:'$spendTime 's' #打印总消耗,时间单位为秒

表2

三、编写crontab定时脚本

编写定时脚本,脚本名为db2inst1,脚本中的内容为:

* 1 * * * . /opt/yourdir/cronTransData.sh>>/opt/yourdir/tranLog

在crontab脚本所在的目录下,执行crontab db2inst1(crontab脚本名),即可。

总结,上面的脚本稍作改动即可在AIX(unix)系统上运行,希望能帮助看到此文档的同学,我这里只是一个比较简单的定时脚本,抛砖引玉吧,后期还会进行丰富和更新。

存储过程的典型例子

可能有不少朋友使用SQL SERVER做开发也已经有段日子,但还没有或者很少在项目中使用存储过程,或许有些朋友认为根本没有必要使用存储过程等等。其实当你一个项目做完到了维护阶段时,就会发现存储过程给我们带来了好处了,修改方便,不能去改我们的应用程序,只需要改存储过程的内容,而且还可以使我们的程序速度得到提高。 QUOTE: SQL SERVER 联机丛书中的定义: 存储过程是保存起来的可以接受和返回用户提供的参数的 Transact-SQL 语句的集合。 可以创建一个过程供永久使用,或在一个会话中临时使用(局部临时过程),或在所有会话中临时使用(全局临时过程)。 也可以创建在 Microsoft SQL Server 启动时自动运行的存储过程。 要使用存储过程,首先我们必需熟悉一些基本的T-SQL语句,因为存储过程是由于一组T-SQL语句构成的,并且,我们需要了解一些关于函数、过程的概念,因为我们需要在应用程序中调用存储过程,就像我们调用应用程序的函数一样,不过调用的方法有些不同。 下面我们来看一下存储过程的建立和使用方法。 一、创建存储过程 和数据表一样,在使用之前我们需要创建存储过程,它的简明语法是: QUOTE: CREATE PROC 存储过程名称 [参数列表(多个以“,”分隔)] AS SQL 语句 例: QUOTE: CREATE PROC upGetUserName @intUserId INT, @ostrUserName NVARCHAR(20) OUTPUT -- 要输出的参数 AS BEGIN -- 将uName的值赋给 @ostrUserName 变量,即要输出的参数 SELECT @ostrUserName=uName FROM uUser WHERE uId=@intUserId END 其中 CREATE PROC 语句(完整语句为CREATE PROCEDURE)的意思就是告诉SQL SERVER,

经典shell 脚本实例

Linux shell 脚本实例 1. 写一个脚本,利用循环计算10的阶乘#!/bin/sh factorial=1 for a in `seq 1 10` do factorial=`expr $factorial \* $a` done echo "10! = $factorial" 2. 写一个脚本,执行后,打印一行提示“Please input a number:",要求用户输入数值,然后打印出该数值,然后再次要求用户输入数值。直到用户输入"end"停止。#!/bin/sh unset var while [ "$var" != "end" ] do echo -n "please input a number: " read var if [ "$var" = "end" ] then break fi echo "var is $var" done ////////////////////////////////////////// #!/bin/sh unset var while [ "$var" != "end" ] do echo -n "please input a number: " read var if [ "$var" = "end" ] then break fi echo "var is $var" done 3. 写一个脚本,利用循环和continue关键字,计算100以内能被3整除的数之和 4.一个函数,利用shift计算所有参数乘积,假设参数均为整数 #! /bin/sh result=1 while [ $# -gt 0 ] do result=`expr $result * $1` shift done echo $result 5.写一个脚本,可以根据参数文件名,以正确的参数调用tar来解压缩tar.gz或tar.bz2文件。#!/bin/shcase ${1##*.tar.} in bz2) tar jxvf $1 ;; gz) tar zxvf $1 ;; *) echo "wrong file type"esac6.写一个脚本以方便用户查询rpm的相关信息。这个脚本首先提示用户选择查询依据,比如文件名,包名,全部等。然后提示用户选择查询信息,比如包名,包里所包含的所有文件,包的信息等。然后询问是否继续查询,是则循环刚才的过程,否则退出。

DB2 SQLJ 存储过程开发宝典,第 2 部分_217_IT168文库

DB2 SQLJ 存储过程开发宝典,第 2 部分 简介: 在第 1 部分,我们已经介绍了 SQLJ 存储过程的基本知识,如何逐步完成开发和调试。现在,我们将总结说明在运行 SQLJ 存储过程时,经常遇到的错误,并对这些错误产生的原因进行分析,并给出相应的修正方法。此外,在开发过程中,有一些值得考虑或者需要进一步说明的问题,我们也将他们罗列出来,予以探讨。 引言 在第 1 部分,我们已经介绍了 SQLJ 存储过程的基本知识,如何逐步完成开发和调试。现在,我们将总结说明在运行 SQLJ 存储过程时,经常遇到的错误,并对这些错误产生的原因进行分析,并给出相应的修正方法。此外,在开发过程中,有一些值得考虑或者需要进一步说明的问题,我们也将他们罗列出来,予以探讨。 常见错误总结 由于程序代码本身、运行环境、参数配置等原因,SQLJ 存储过程在被调用时,可能会发生各种错误。对这些错误进行分析,明确其产生的原因,找到相应的应对措施,并加以归纳总结,对我们提高开发水平、保证产品质量和提高工作效率等方面具有重要的意义。这些信息对于 SQLJ 应用开发的初学者尤为重要,能够直接的帮助他们解决开发实际工作中遇到的问题,表 1 列出了常见的 SQLJ 存储过程运行错误,原因以及相应措施。 表 1. 常见错误 错误 原因 措施 SQL4306N Java 存储过程或用户定义的函数 名称(特定名称 特定名称)不能调用 Java 方法 方法,特征符为 字符串 DB2 通过 JAR 包名、类名、方法名和签名(Signature )无法找到创建存储过程时指定的被调用的方法。可能是引用的类不存在、jar 包没有安装、方法声明的参数列表与数据库期望的参数列表不匹配或者不是“public”实例方法 1.查看 Java 代码中的方法名和类名,检查存储过程 DDL 中 Java 方法名、类名和 jar 包名是否有误; 2.检查 jar/calss 文件是否在指定位置,如 sqllib/function 目录下; 3.检查存储过程 DDL 中的方法参数列表是否与 Java 代码匹配(使用 javap – s class_id 可以查看类中方法的签名),并且 Java 代码中该方法是 public 的。 SQL4304N Java 存储过程或用户定义的函数 名称(特定名称 特定名称)不能装入 Java 类 类,原因码为 原因码。 1. RC=1:在 CLASSPATH 上找不到该类。往往可能是我们在 DDL 发生了拼写错误; 2. RC=2:该类未实现必需的接口 COM.ibm.db2.app.StoredProc 或缺少 public 访问权标志。如果是 PARAMETER STYLE DB2GENERAL 的存储过程,那么要求被调用 Java 类是 public 的并继承了接口 COM.ibm.db2.app.StoredProc 。 1.检查 Java 代码中的类 / 方法名和存储过程 DDL 中 Java 类 / 方法名是否一致; 2.检查 jar/calss 文件是否在 CLASSPATH 中,如 sqllib/function 目录下; 3.检查是否 DDL 指定了 PARAMETER STYLE DB2GENERAL 而 Java 代码类是否是 public 并继承 接口 COM.ibm.db2.app.StoredProc 。 SQL4302N 过程或用户定义的函数 名称(特定名称 特定名称)由于异常 字符串 而 存储过程由于异常而异常终止。通常可能是查询返回是空的 数据集,或是 SQL 中使用“select into :hostvar”但是实际查 询返回多条数据,或 Java 运行中出现空指针异常等。 检查 db2diag.log 诊断日志,找到错误,修正 Java 代码。

C#调用存储过程简单完整例子讲解

C#调用存储过程简单完整例子https://www.wendangku.net/doc/872702640.html,/itblog/article/details/752869 创建存储过程 Create Proc dbo.存储过程名 存储过程参数 AS 执行语句 RETURN 执行存储过程 GO DECLARE @iRet INT, @PKDisp VARCHAR(20) SET @iRet = '1' Select @iRet = CASE WHEN @PKDisp = '一' THEN 1 WHEN @PKDisp = '二' THEN 2 WHEN @PKDisp = '三' THEN 3 WHEN @PKDisp = '四' THEN 4 WHEN @PKDisp = '五' THEN 5 ELSE 100 END DECLARE @i INT SET @i = 1 WHILE @i<10 BEGIN set @i=@i+1 PRINT @i END DECLARE @d INT set @d = 1 IF @d = 1 BEGIN -- 打印 PRINT '正确' END ELSE BEGIN PRINT '错误' END

CREATE PROC P_TEST @Name VARCHAR(20), @Rowcount INT OUTPUT AS BEGIN SELECT * FROM T_Customer WHERE NAME=@Name SET @Rowcount=@@ROWCOUNT END GO ---------------------------------------------------------------------------------------- --存储过程调用如下: ---------------------------------------------------------------------------------------- DECLARE @i INT EXEC P_TEST 'A',@i OUTPUT SELECT @i --结果 /* Name Address Tel ---------- ---------- -------------------- A Address Telphone (所影响的行数为 1 行) ----------- 1 (所影响的行数为 1 行) */ ---------------------------------------------------------------------------------------- --DotNet 部分(C#) --WebConfig 文件: ---------------------------------------------------------------------------------------- ......

DB2存储过程快速入门.

1.1 SQL过程的结构 命名规则: 1、清洗过程名称命名: PROC_业务主题_目标表(PROC_JY_KJYRLJB 交易主题的卡交易日类聚表) 2、函数名称命名: PROC_业务主题_函数名(PROC_JY_GETYWZL 交易主题取得卡业务种类函数) 3、变量命名: VAR_变量描述(VAR_YWZL 业务种类变量) 4、游标命名: CUR_游标描述(CUR_KJYB 对卡交易表进行游标处理) 语法: CREATE PROCEDURE 过程名称 (参数列表 DYNAMIC RESULT SETS 结果集数量 是否允许SQL LANGUAGE SQL BEGIN SQL 过程体

END 范例“资产负债.sql ”中 第1行:Create Procedure admin.BalanceSheetDayly定义了过程名称 参数列表为Out ProcState varchar(100 其定义SQL 过程从客户应用获取,或返回客户应用的0个或多个参数,参数列表使用逗号侵害各个参数 参数类型有三种: l IN 从客户应用检索值。其不能够在SQL 过程体中修改 l OUT 向客户应用返回值 l INOUT 从客户应用检索值,并返回值 省略了结果集数量的定义,default 为0。即表示不返回结果集。 省略了是否允许SQL 的说明。其值指出了存储过程是否会使用SQL 语句,如果使用,其类型如何: l NO SQL 不能够执行任何SQL 语句 l COTAINS SQL 可以执行不会读取SQL 数据,也不会修改SQL 数据的SQL 语句 l READS SQL DATA 可以包含不会修改SQL 数据的SQL 语句 l MODIFIES SQL DATA 可以执行任何SQL 语句,除了不能够在存储过程中支持的语句以外。

Shell脚本编程详解-吐血共享

第12章 Shell 脚本编程 ● Shell 命令行的运行 ● 编写、修改权限和执行Shell 程序的步骤 ● 在Shell 程序中使用参数和变量 ● 表达式比较、循环结构语句和条件结构语句 ● 在Shell 程序中使用函数和调用其他Shell 程序 12-1 Shell 命令行书写规则 ◆ Shell 命令行的书写规则 对Shell 命令行基本功能的理解有助于编写更好的Shell 程序,在执行Shell 命令时多个命令可以在一个命令行上运行,但此时要使用分号(;)分隔命令,例如: [root@localhost root]# ls a* -l;free;df 长Shell 命令行可以使用反斜线字符(\)在命令行上扩充,例如: [root@localhost root]# echo “ this is \ >long command ” This is long command 注意: “>”符号是自动产生的,而不是输入的。 12-2 编写/修改权限及执行Shell 程序的步骤 ◆ 编写Shell 程序 ◆ 执行Shell 程序 Shell 程序有很多类似C 语言和其他程序设计语言的特征,但是又没有程序语言那样复杂。Shell 程序是指放在一个文件中的一系列Linux 命令和实用程序。在执行的时候,通过Linux 操作系统一个接一个地解释和执行每条命令。首先,来编写第一个Shell 程序,从中学习Shell 程序的编写、修改权限、执行过程。

12-2-1 编辑Shell程序 编辑一个内容如下的源程序,保存文件名为date,可将其存放在目录/bin下。 [root@localhost bin]#vi date #! /bin/sh echo “Mr.$USER,Today is:” echo &date “+%B%d%A” echo “Wish you a lucky day !” 注意: #! /bin/sh通知采用Bash解释。如果在echo语句中执行Shell命令date,则需要在date 命令前加符号“&”,其中%B%d%A为输入格式控制符。 12-2-2 建立可执行程序 编辑完该文件之后不能立即执行该文件,需给文件设置可执行程序权限。使用如下命令。[root@localhost bin]#chmod +x date 12-2-3 执行Shell程序 执行Shell程序有下面三种方法: 方法一: [root@localhost bin]#./ date Mr.root,Today is: 二月 06 星期二 Wish you a lucky day ! 方法二: 另一种执行date的方法就是把它作为一个参数传递给Shell命令: [root@localhost bin]# Bash date Mr.root,Today is: 二月 06 星期二 Wish you a lucky day ! 方法三: 为了在任何目录都可以编译和执行Shell所编写的程序,即把/bin的这个目录添加到整个环境变量中。 具体操作如下: [root@localhost root]#export PATH=/bin:$PATH [root@localhost bin]# date Mr.root,Today is: 二月 06 星期二 Wish you a lucky day !

DB2存储过程使用动态游标的例子

本文将为您介绍一个DB2存储过程使用动态游标的例子,如果您对动态游标的使用感兴趣的话,不妨一看,对您学习DB2的使用会有所帮助。 CREATE PROCEDURE data_wtptest( IN in_taskid_timestamp varchar(30), OUT o_err_no int, OUT o_err_msg varchar(1024)) LANGUAGE SQL P1: BEGIN ATOMIC --声明开始 --临时变量出错变量 DECLARE SQLCODE integer default 0; DECLARE SQLStmt varchar(1024) default ''; DECLARE r_code integer default 0; DECLARE state varchar(1024) default 'AAA';--记录程序当前所作工作 DECLARE at_end int DEFAULT 0; DECLARE t_destnetid int default 0; DECLARE t_recvid varchar(30) default ''; DECLARE SP_Name varchar(50) default 'data_wtptest'; --声明放游标的值 --声明动态游标存储变量 DECLARE stmt1 STATEMENT; DECLARE c1 CURSOR FOR stmt1; --声明出错处理 DECLARE EXIT HANDLER FOR SQLEXCEPTION begin set r_code=SQLCODE; set o_err_no=1; set o_err_msg='处理['||state||']出错,'||'错误代码SQLCODE:['||CHAR(r_code) || '].'; insert into fcc_sp_log(object,name,value) values(SP_Name,in_taskid_timestamp,o_err_msg); end; DECLARE continue HANDLER for not found begin

oracle存储过程讲解及实例

存储过程 1 CREATE OR REPLACE PROCEDURE 存储过程名 2 IS 3 BEGIN 4 NULL; 5 END; 行1: CREATE OR REPLACE PROCEDURE 是一个SQL语句通知Oracle数据库去创建一个叫做skeleton存储过程, 如果存在就覆盖它; 行2: IS关键词表明后面将跟随一个PL/SQL体。 行3: BEGIN关键词表明PL/SQL体的开始。 行4: NULL PL/SQL语句表明什么事都不做,这句不能删去,因为PL/SQL体中至少需要有一句; 行5: END关键词表明PL/SQL体的结束

存储过程创建语法: create or replace procedure 存储过程名(param1 in type,param2 out type) as 变量1 类型(值范围); --vs_msg VARCHAR2(4000); 变量2 类型(值范围); Begin Select count(*) into 变量1 from 表A where列名 =param1; If (判断条件) then Select 列名into 变量2 from 表A where列名 =param1; Dbms_output。Put_line(‘打印信息’); Elsif (判断条件) then Dbms_output。Put_line(‘打印信息’); Else Raise 异常名(NO_DATA_FOUND); End if; Exception When others then Rollback;

End; 注意事项: 1,存储过程参数不带取值范围,in表示传入,out表示输出 类型可以使用任意Oracle中的合法类型。 2,变量带取值范围,后面接分号 3,在判断语句前最好先用count(*)函数判断是否存在该条操作记录 4,用select 。。。into。。。给变量赋值 5,在代码中抛异常用 raise+异常名 CREATE OR REPLACE PROCEDURE存储过程名 ( --定义参数 is_ym IN CHAR(6) ,

db2回滚处理问题

db2回滚处理问题 DB2处理器对于存储过程来说,有着不可替代的作用。在DB2中,SQL存储过程可以利用DB2处理器(Condition Handler)来处理存储过程运行过程中的SQL错误(SQLERROR)、SQL警告(SQLWARNING)和没有数据(NOT FOUND)三种常见情况以及你自己定义的触发,你可以使用包括退出(EXIT)、继续(CONTINUE)和撤销(UNDO)在内的三种处理器。 在SQL存储过程运行过程中,如果出现了SQLERROR、SQLWARNING和NOT FOUND 三种情况,SQL存储过程将会自动将执行SQL语句后的SQLCODE和SQLSTATE存储在你事先定义好的变量SQLCODE和SQLSTATE中,并触发你在存储过程中定义的处理器。 在SQL存储过程处理错误,您需要做如下两步:声明SQLCODE和SQLSTATE 变量、定义处理器。在SQL存储过程中,您通过下列语句声明SQLCODE和SQLSTATE 变量: DECLARE SQLCODE INTEGER DEFAULT 0; DECLARE SQLSTATE CHAR(5) DEFAULT ‘00000’; 当存储过程执行时,DB2会自动将该SQL语句的返回码付给这两个变量,你可以在调试程序的时候,将这两个值插入到调试表中,或者利用处理器将这两个值返回给调用者。这样可以方便SQL存储过程的调试。注意:当你在SQL存储过程中存取SQLCODE和SQLSTATE时,DB2会自动将SQLCODE和SQLSTATE置为零。 可以通过下列语句定义DB2处理器: DECLARE handler-type HANDLER FOR condition SQL-procedure-statement 其中handler-type可以是如下几种: CONTINUE:SQL存储过程在执行完处理器中的SQL语句后,继续执行出错SQL 语句后边的SQL语句。 EXIT: SQL存储过程在执行完处理器中的SQL语句后,退出存储过程的执行。 UNDO:这种处理器仅限于原子动作(ATOMIC)复合SQL语句,SQL存储过程将会回滚包含该处理器的复合SQL语句,并在执行完该处理器中的SQL语句后,继续执行原子动作(ATOMIC)复合SQL语句后面的SQL语句。 包括如下三种常见情况: SQLEXCEPTION:在SQL执行过程中返回任何负值。 SQLWARNING:在SQL执行过程中出现警告(SQLWARN0为‘W’),或者是任何不是+100的正的SQL返回值,相应的SQLSTATE以‘01’开始。 NOT FOUND:SQL返回值为+100或者SQLSTATE以‘02’开始。 当然你也可以使用DECLARE语句为特定的SQLSATE定义你自己的。

SQL存储过程实例

题目1 1、学校图书馆借书信息管理系统建立三个表: 学生信息表:student 图书表:book 借书信息表:borrow 请编写SQL语句完成以下的功能: 1)查询“计算机”专业学生在“2007-12-15”至“2008-1-8”时间段内借书的学生编号、 学生名称、图书编号、图书名称、借出日期;参考查询结果如下图所示: 2)查询所有借过图书的学生编号、学生名称、专业;参考查询结果如下图所示:

3)查询借过作者为“安意如”的图书的学生姓名、图书名称、借出日期、归还日期; 参考查询结果如下图所示: 4)查询目前借书但未归还图书的学生名称及未还图书数量;参考查询结果如下图所 示: 附加:建表语句:

标准答案:

题目2 程序员工资表:ProWage 创建一个存储过程,对程序员的工资进行分析,月薪1500到10000不等,如果有百分之五十的人薪水不到2000元,给所有人加薪,每次加100,再进行分析,直到有一半以上的人大于2000元为止,存储过程执行完后,最终加了多少钱? 例如:如果有百分之五十的人薪水不到2000,给所有人加薪,每次加100元,直到有一半以上的人工资大于2000元,调用存储过程后的结果如图:

请编写T-SQL来实现如下功能: 1)创建存储过程,查询是否有一半程序员的工资在2200、3000、3500、4000、5000或6000 元之上,如果不到分别每次给每个程序员加薪100元,至之一半程序员的工资达到2200,3000,3500,4000,5000或6000元。 2)创建存储过程,查询程序员平均工资在4500元,如果不到则每个程序员每次加200元, 至到所有程序员平均工资达到4500元。 建表语句

LinuxShell脚本教程(一):Shell入门

LinuxShell脚本教程(一):Shell入门 LinuxShell脚本教程(一):Shell入门 在这里我们介绍的是Bashshell(BourneAgainShell),它是目前大多数GUN/Linux系统默认的shell环境。书中所有的实验都是在Ubuntu14.04LTS环境下完成的。 在ubuntu14.04LTS系统中,已经默认安装了一个Terminal,我们可以通过多种方法打开终端。这里介绍两种: 方法一:通过系统自带的检索系统,我们可以轻松找到终端(Terminal),单击即可打开。检索系统可以通过快速启动栏右上角的按钮启动。 方法二:为了之后可以方便的打开终端,建议将终端固定在快速启动栏。操作方法为:通过方法一打开终端后,快速启动栏会出现一个终端的图表,在图表上单击鼠标右键,选择“固定在启动栏”即可将终端固定在快速启动栏。 默认情况下,终端提示符为:username@hostname或者 root@hostname#。代表普通用户,#代表root用户。 例如:我在打开终端后,提示符为:wxb@ubuntu:~$。 root是linux系统中权限最高的用户,能力大风险也大,因此不介意使用root用户作为登陆系统的.默认用户。 通常情况下,对于个人版linux操作系统,系统上会存在两个用户,即用户自己以及root用户。对于使用者来说,时有需要切换用户,以执行一些普通用户不能执行的操作,此处提供两种方法切换用户。 方法一:临时切换。顾名思义,这种切换方法仅仅是临时的,当指令执行完成后,就会切换到原来的用户。切换指令为:sudocommand,sudo是superuserdo的简写。

DB2存储过程简单例子

DB2存储过程简单例子 客户在进行短信服务这个业务申请时,需要填写一些基本信息,然后根据这些信息判断这个用户是否已经存在于业务系统中。因为网上服务和业务系统两个项目物理隔离,而且网上数据库保存的客户信息不全,所以判断需要把数据交换到业务系统,在业务系统中判断。 解决方式是通过存储过程,以前也了解过存储过程,但没使用到项目中。不过经过一番努力最后还是完成了,期间遇到了一些困难,特写此文让对DB2存储过程还不熟悉的童鞋避免一些无谓的错误。 DROP PROCEDURE "PLName" @ CREATE PROCEDURE "PLName"(--存储过程名字 IN IN_ID BIGINT , --以下全是输入参数 IN IN_ENTNAME VARCHAR(200) , IN IN_REGNO VARCHAR(50), IN IN_PASSWORD VARCHAR(20), IN IN_LEREP VARCHAR(300), IN IN_CERTYPE CHARACTER(1), IN IN_CERNO VARCHAR(50), IN IN_LINKMAN VARCHAR(50), IN IN_SEX CHARACTER(1), IN IN_MOBTEL VARCHAR(30), IN IN_REQDATE TIMESTAMP, IN IN_REMITEM VARCHAR(300), IN IN_STATE CHARACTER(1), IN IN_TIMESTAMP TIMESTAMP ) BEGIN declare V_RESULT BIGINT; --声明变量 DELETE FROM TableNameA WHERE ID = IN_ID;

DB2存储过程学习总结

Db2 存储过程学习总结 ●在命令窗口执行存储过程,可以方便看出存储过程在哪一行出现错误,方便修改。 ●db2 存储过程常用语句格式 ----定义 DECLARE CC VARCHAR(4000); DECLARE SQLSTR VARCHAR(4000); DECLARE st STATEMENT; DECLARE CUR CURSOR WITH RETURN TO CLIENT FOR CC; ----执行动态SQL不返回 PREPARE st FROM SQLSTR; EXECUTE st; ----执行动态SQL返回 PREPARE CC FROM SQLSTR; OPEN CUR; ----判断是否为空,使用值替代 COALESCE(判断对象,替代值)

----定义临时表 DECLARE GLOBAL TEMPORARY TABLE SESSION.TempResultTable ( Organization int, OrganizationName varchar(100), AnimalTypeName varchar(20), ProcessType int, OperatorName varchar(100), OperateCount int ) WITH REPLACE -- 如果存在此临时表,则替换 NOT LOGGED; DB2 9.x临时表使用总结 1). DB2的临时表需要用命令Declare Temporary Table来创建,并且需要创建在用户临时表空间上; 2). DB2在数据库创建时,缺省并不创建用户临时表空间,如果需要使用临时表,则需要用户在创建临时表之前创建用户临时表空间; 3). 临时表的模式为SESSION,SESSION即基于会话的,且在会话之间是隔离的。当会话结束时,临时表的数据被删除,临时表被隐式卸下。对临时表的定义不会在SYSCAT.TABLES中出现 .; 4). 缺省情况下,在Commit命令执行时,DB2临时表中的所有记录将被删除; 这可以通过创建临时表时指定不同的参数来控制; 5). 运行ROLLBACK命令时,用户临时表将被删除; 下面是DB2临时表定义的一个示例: DECLARE GLOBAL TEMPORARY TABLE results ( RECID VARCHAR(32) , --id XXLY VARCHAR(100), --信息来源 LXDH VARCHAR(32 ), --信息来源联系电话 FKRQ DATE --反馈时间 ) ON COMMIT PRESERVE ROWS WITH REPLACE NOT LOGGED; ----字符串函数

MySQL存储过程实例教程2

MySQL存储过程详解 1.存储过程简介 我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它。 一个存储过程是一个可编程的函数,它在数据库中创建并保存。它可以有SQL语句和一些特殊的控制结构组成。当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。数据库中的存储过程可以看做是对编程中面向对象方法的模拟。它允许控制数据的访问方式。 存储过程通常有以下优点: (1).存储过程增强了SQL语言的功能和灵活性。存储过程可以用流控制语句编写,有很强的灵活性,可以完成复杂的判断和较复杂的运算。 (2).存储过程允许标准组件是编程。存储过程被创建后,可以在程序中被多次调用,而不必重新编写该存储过程的SQL语句。而且数据库专业人员可以随时对存储过程进行修改,对应用程序源代码毫无影响。 (3).存储过程能实现较快的执行速度。如果某一操作包含大量的Transaction-SQL代码或分别被多次执行,那么存储过程要比批处理的执行速度快很多。因为存储过程是预编译的。在首次运行一个存储过程时查询,优化器对其进行分析优化,并且给出最终被存储在系统表中的执行计划。而批处理的Transaction-SQL语句在每次运行时都要进行编译和优化,速度相对要慢一些。 (4).存储过程能过减少网络流量。针对同一个数据库对象的操作(如查询、修改),如果这一操作所涉及的Transaction-SQL语句被组织程存储过程,那么当在客户计算机上调用该存储过程时,网络中传送的只是该调用语句,从而大大增加了网络流量并降低了网络负载。 (5).存储过程可被作为一种安全机制来充分利用。系统管理员通过执行某一存储过程的权限进行限制,能够实现对相应的数据的访问权限的限制,避免了非授权用户对数据的访问,保证了数据的安全。 2.关于MySQL的存储过程 存储过程是数据库存储的一个重要的功能,但是MySQL在5.0以前并不支持存储过程,这使得MySQL在应用上大打折扣。好在MySQL 5.0终于开始已经支持存储过程,这样即可以大大提高数据库的处理速度,同时也可以提高数据库编程的灵活性。 3.MySQL存储过程的创建 (1). 格式

linux Shell(脚本)编程入门 实例讲解详解

linux Shell(脚本)编程入门实例讲解详解 为什么要进行shell编程 在Linux系统中,虽然有各种各样的图形化接口工具,但是sell仍然是一个非常灵活的工具。Shell不仅仅是命令的收集,而且是一门非常棒的编程语言。您可以通过使用shell使大量的任务自动化,shell特别擅长系统管理任务,尤其适合那些易用性、可维护性和便携性比效率更重要的任务。 下面,让我们一起来看看shell是如何工作的: 建立一个脚本 Linux中有好多中不同的shell,但是通常我们使用bash (bourne again shell) 进行shell编程,因为bash是免费的并且很容易使用。所以在本文中笔者所提供的脚本都是使用bash(但是在大多数情况下,这些脚本同样可以在bash 的大姐,bourne shell中运行)。 如同其他语言一样,通过我们使用任意一种文字编辑器,比如nedit、kedit、emacs、vi等来编写我们的shell程序。程序必须以下面的行开始(必须方在文件的第一行): 符号#!用来告诉系统它后面的参数是用来执行该文件的程序。在这个例子中我们使用/bin/sh来执行程序。当编辑好脚本时,如果要执行该脚本,还必须使其可执行。 要使脚本可执行: 然后,您可以通过输入: ./filename 来执行您的脚本。 注释 在进行shell编程时,以#开头的句子表示注释,直到这一行的结束。我们真诚地建议您在程序中使用注释。如果您使用了注释,那么即使相当长的时间内没有使用该脚本,您也能在很短的时间内明白该脚本的作用及工作原理。 变量 在其他编程语言中您必须使用变量。在shell编程中,所有的变量都由字符串组成,并且您不需要对变量进行声明。要赋值给一个变量,您可以这样写:

存储过程实例精选

整理者为我 实例1:只返回单一记录集的存储过程。 银行存款表(bankMoney)的内容如下 要求1:查询表bankMoney的内容的存储过程 create procedure sp_query_bankMoney as select * from bankMoney go exec sp_query_bankMoney 注* 在使用过程中只需要把中的SQL语句替换为存储过程名,就可以了很方便吧! 实例2(向存储过程中传递参数): 加入一笔记录到表bankMoney,并查询此表中userID= Zhangsan的所有存款的总金额。 Create proc insert_bank @param1 char(10),@param2 varchar(20),@param3 varchar(20),@param4 int,@param5 int output with encryption ---------加密 as insert bankMoney (id,userID,sex,Money)

Values(@param1,@param2,@param3, @param4) select @param5=sum(Money) from bankMoney where userID='Zhangsan' go 在SQL Server查询分析器中执行该存储过程的方法是: declare @total_price int exec insert_bank '004','Zhangsan','男',100,@total_price output print '总余额为'+convert(varchar,@total_price) go 在这里再啰嗦一下存储过程的3种传回值(方便正在看这个例子的朋友不用再去查看语法内容): 1.以Return传回整数 2.以output格式传回参数 3.Recordset 传回值的区别: output和return都可在批次程式中用变量接收,而recordset则传回到执行批次的客户端中。 实例3:使用带有复杂 SELECT 语句的简单过程 下面的存储过程从四个表的联接中返回所有作者(提供了姓名)、出版的书籍以及出版社。该存储过程不使用任何参数。 USE pubs IF EXISTS (SELECT name FROM sysobjects WHERE name = 'au_info_all' AND type = 'P') DROP PROCEDURE au_info_all GO

存储过程编写规范【DB2-SQL】

文档编号:ETL-11-T-2008 DB2 SQL及存储过程编写规范 当前版本:V1.0 版本日期:2009年08月15日

文件信息 修订记录 文件审核/审批 此文件需如下审核 文档分发 此文档将分发至如下个人或机构

1引言 1.1 目的 本标准是针对IBM DB2数据库SQL编写设计而起草的开发规范;同时,也作为各项目ETL组评审ETL任务开发质量的标准之一。 本标准将作为项目规范开发系列之一,并且需要在项目实施工作中不断改进和完善,保障规范能够真正的提高质量和效率。 引言 1.2 总则 整个系统中ETL开发的编码,包括基于封装的程序包中的代码,在对象的命名和使用、程序的注释和排版,都应当注重规范 在编码的过程中,应时刻牢记优化的重要性,对重要程序块或程序包需要注明其逻辑结构。在必要的时候,还应进行代码评审 本规范适用各IBM DB2数据库和项目ETL开发的程序包 应用于系统基于数据库的ETL模块开发并对应用集市相关开发提供参考与指导1.3 预期读者 项目管理人员 软件设计人员 软件编程人员 质量控制人员 软件维护人员

1.4 术语和定义 描述术语 本文档采用以下的术语描述: 规范:编程时强制必须遵守的原则标准:量化的规范。 说明:对此规则或建议进行必要的说明和解释。 示例:对此规则或建议给出适当的例子。 编码术语 编码(Coding) 关键字(Keyword) 函数(Function) 存储过程(Procedure) 变量(Variable) 游标(Cursor) ETL(Extraction、Translation、Loading) 2编码规范 2.1 命名规范 对象命名不能超过30个英文字母,前缀和单词之间用下划线分隔,尽量不采用汉语拼音,使用英文单词或公认单词缩写,单词缩写可通过去掉“元音” 形成。 所有数据库对象(表、视图、存储过程)、关键字和系统函数、数据类型大写;自定义变量、游标小写。 命名的组成只能使用26个英文字母、下划线或阿拉伯数字,不能使用汉字。 名称具有复数意义时,使用名词的正确的复数形式 当一个SQL 语句中涉及到多个表时,始终使用表名别名来限定字段名。这使其他人阅读起来更清楚,避免了含义模糊的引用。 一般情况下,列名称不应包含表名或者表名的任何形式,列名不允许使用统

存储过程的实例

存储过程如同一门程序设计语言,同样包含了数据类型、流程控制、输入和输出和它自己的函数库。 --------------------基本语法-------------------- 一.创建存储过程 create procedure sp_name() begin ......... end 二.调用存储过程 1.基本语法:call sp_name() 注意:存储过程名称后面必须加括号,哪怕该存储过程没有参数传递 三.删除存储过程 1.基本语法: drop procedure sp_name// 2.注意事项 (1)不能在一个存储过程中删除另一个存储过程,只能调用另一个存储过程 四.其他常用命令 1.show procedure status 显示数据库中所有存储的存储过程基本信息,包括所属数据库,存储过程名称,创建时间等2.show create procedure sp_name 显示某一个mysql存储过程的详细信息 --------------------数据类型及运算符-------------------- 一、基本数据类型: 略 二、变量: 自定义变量:DECLARE a INT ; SET a=100; 可用以下语句代替:DECLARE a INT DEFAULT 100; 变量分为用户变量和系统变量,系统变量又分为会话和全局级变量 用户变量:用户变量名一般以@开头,滥用用户变量会导致程序难以理解及管理 1、在mysql客户端使用用户变量 mysql> SELECT 'Hello World' into @x; mysql> SELECT @x; mysql> SET @y='Goodbye Cruel World'; mysql> select @y; mysql> SET @z=1+2+3; mysql> select @z; 2、在存储过程中使用用户变量 mysql> CREATE PROCEDURE GreetWorld( ) SELECT CONCAT(@greeting,' World'); mysql> SET @greeting='Hello'; mysql> CALL GreetWorld( );

相关文档