DB2中建立存储过程的详细参数和语法

作者&投稿:郯衬 (若有异议请与网页底部的电邮联系)
DB2存储过程中一些参数的明细解说~

IN 是输入参数
OUT 是输出参数

建议你看一看sqllib/samples/sqlproc目录下的 .db2文件,这里面全是一些例子,把这些看一遍你应该就明白了,不是很复杂

上面说的.db2文件也可能在下面这个目录中,根据版本或系统不同可能不一样
SQLLIB\samples\sqlpl

db2 => CREATE PROCEDURE HelloWorld2 ( \
db2 (cont.) => IN vUserName VARCHAR(10), \
db2 (cont.) => OUT vOutValue VARCHAR(10), \
db2 (cont.) => INOUT vInOutValue VARCHAR(10)) \
db2 (cont.) => LANGUAGE SQL \
db2 (cont.) => BEGIN \
db2 (cont.) => INSERT INTO test_helloworld \
db2 (cont.) => VALUES('Hello ' || vUserName || vInOutValue); \
db2 (cont.) => SET vOutValue = 'A'; \
db2 (cont.) => SET vInOutValue = 'B'; \
db2 (cont.) => END
DB20000I SQL 命令成功完成。


db2 => truncate table test_helloworld IMMEDIATE
DB20000I SQL 命令成功完成。


db2 => BEGIN \
db2 (cont.) => DECLARE p_outval VARCHAR(10); \
db2 (cont.) => DECLARE p_inoutval VARCHAR(10); \
db2 (cont.) => SET p_inoutval = '~Hi~'; \
db2 (cont.) => call HelloWorld2('Edward', p_outval, p_inoutval); \
db2 (cont.) => INSERT INTO test_helloworld VALUES('p_outval=' || p_outval); \
db2 (cont.) => INSERT INTO test_helloworld VALUES('p_inoutval=' || p_inoutval)
; \
db2 (cont.) => END
DB20000I SQL 命令成功完成。



db2 => select * from test_helloworld
DATA
--------------------
Hello Edward~Hi~
p_outval=A
p_inoutval=B
3 条记录已选择。

DECLARE CHOICE2 CURSOR WITH RETURN TO CALLER FOR --声明游标 CHOICE2
SELECT COMPANYID,DEPTID,SEQID,SUBMITTIME,SUBMITDATE,
B.GRADEDESC HYEAR,PRODUCTID,PRODUCTCODE,PRODUCTDESC,
A.GRADEID,PRICE,SFZDPY,LQUANT,MQUANT,MCQUANT,LCQUANT,
UQUANT,OTHQUANT1,OTHQUANT2,OTHQUANT3,OTHQUANT4,EMP1,EMP2,STATUS,A.REMARK,
DECIMAL(ABS(MCQUANT-MQUANT)/NULLIF(MQUANT,0)*100,10,2)TAG
FROM T_SUPPLY_PPB_HY A
LEFT JOIN T_SUPPLY_GRADATION B ON A.GRADEID=B.GRADEID
WHERE HYEAR=TO_CHAR(P_NF)||P_BN
ORDER BY B.GRADEID,PRODUCTCODE,A.PRICE;

--1.DECIMAL(P,S)十进制数,小数点位置由数字的精度(P)和小数位(S)确定。
-- 精度是数字的总位数,必须小于32。小数位是小数部分数字的位数且总是小于或等于精度值。
-- 如果未指定精度和小数位,则十进制值的缺省精度为5,缺省小数位为0。
--2.语法:NULLIF ( expression , expression )
-- expression:(常量、列名、函数、子查询或算术运算符、按位运算符以及字符串运算符的任意组)
-- 如果两个表达式不相等,NULLIF 返回第一个 expression 的值。如果相等,NULLIF 返回第一个 expression 类型的空值。如果两个表达式相等且结果表达式为 NULL,NULLIF 等价于 CASE 的搜索函数。

SET SCHEMA DB2INST1;
SET CURRENT PATH = "SYSIBM","SYSFUN","SYSPROC","DB2INST1";
设置 模式和函数
CREATE PROCEDURE CRFM.P_CRFM_PPB_CGB_YCSSC --在服务器上注册一个存储过程 CRFM 模式下的 P_CRFM_PPB_CGB_YCSSC 过程
(IN P_NF INTEGER, --输入参数 大型整数 精度10位 (OUT:输出参数 ,INOUT:作为输入输出参数 )
IN P_BN VARCHAR(6), --输入参数 变长字符串 长度为6
IN P_NF1 INTEGER, --输入参数 大型整数 精度10位
IN P_BN1 VARCHAR(6), --输入参数 变长字符串 长度为6
IN P_NF2 INTEGER, --输入参数 大型整数 精度10位
IN P_BN2 VARCHAR(6), --输入参数 变长字符串 长度为6
IN P_RESULTLB VARCHAR(100) --输入参数 变长字符串 长度为100
)
SPECIFIC CRFM.SQL070915145755000 --唯一的特定名称(别名),可以用存储过程名代替,这个特定名称用于DROP存储过程,或者给存储过程添加注释用,但不能调用存储过程。
DYNAMIC RESULT SETS 1 --指定存储过程返回结果的最大数量
LANGUAGE SQL --语句接口约定为 DB2SQL
NOT DETERMINISTIC --表示存储过程是动态(DETERMINISTIC)或者非动态(NOT DETERMINISTIC)的。动态的返回的值是不确定的。非动态的存储过程每次执行返回。
CALLED ON NULL INPUT --表示可以调用存储过程而不管任何的输入参数是否为NULL,并且,任何的OUT或者INOUT参数可以返回一个NULL或者非空值。检验参数是否为NULL是在过程中进行的。
MODIFIES SQL DATA --确定允许例程访问 SQL 的目标级别。表示存储过程可以执行任何 SQL 语句。可以对数据库中的数据进行增加、删除和修改。READS SQL DATA: 表示存储过程可以执行中,可读取SQL,但不可修改 SQL 数据。CONTAINS SQL: 表示存储过程可以执行中,既不可读取 SQL 数据,也不可修改 SQL 数据。
INHERIT SPECIAL REGISTERS --表示继承专用寄存器
BEGIN ATOMIC --事务会自动回滚,BEGIN NOT ATOMIC 表示事务不会自动回滚

MySQL教程4 MySQL8运算符、函数、存储过程及新增数据类型 17.之创建带有IN和OUT参数的存储过程 学习猿地




谁用过NAVICAT存储过程
我在NAVICAT下创建存储过程,代码如下:create procedure pro_list1 (in $list_rid bigint(11))begin select a.eid, a.title as content,c.title as kit,(select group_concat(distinct a2.name)from creator_locals as a2 join creator_contents as b2 on a2.eid = b2.creator_eid and a2....

怎么写存储过程,向数据库中批量插入数据?
用循环语句生成字段值insert SQL 如下:create procedure InsertTest as begin declare @i int declare @s varchar(20)set @i=1 while @i<=100 begin select @s=cast(@i AS varchar(20))insert into test (A,B,C,D) VALUES ('a'+@s,'b'+@s,'ccccc','ddddd')SET @i=@i+1 end ...

如何在excel中执行sql存储过程
D1 = Range("B2").Text D2 = Range("B3").Text If IsDate(D1) And IsDate(D2) Then rs.Open "sp_djcount '" & D1 & "','" & D2 & "'", strcn, 3, 1 '存储过程 rs.Open "Select * From 表 ", strcn, 3, 1 'sql语句 Range("A5").CopyFromRecordset rs Ms...

用oracle存储过程将三张表的数据查出插入另三张表
BEGIN DELETE FROM A1;DELETE FROM B1;DELETE FROM C1;INSERT INTO A1 SELECT * FROM A;INSERT INTO B1 SELECT * FROM B;INSERT INTO C1 SELECT * FROM C;INSERT INTO A2 SELECT * FROM A;INSERT INTO B2 SELECT * FROM B;INSERT INTO C2 SELECT * FROM C;COMMIT;END;人后在job中5分钟...

写一个存储过程,在每天规定的时间点执行,此脚本需完成三次数据查询和...
这个大致的框架是可以的,就是这样的一个思路,但是如果A表有主键的,注意是不是会出现唯一约束的问题,定时就是在oracle 里有job 调整一下时间就可以了

MSSQL 2008 中怎样用存储过程把一个表里的数据批量复制到另一个表...
---将userinfo表里的数据copy到userinfoCopy表中 declare @UserId int,@UserName nvarchar(50)DECLARE UserArray CURSOR FOR SELECT * FROM [userInfo] with(nolock)OPEN UserArray FETCH NEXT FROM UserArray INTO @UserId,@UserName WHILE @@FETCH_STATUS=0 BEGIN INSERT INTO [userInfoCopy]([Id]...

oracle中如何在存储过程里创建视图
首先需要授权 sqlplus \/ as sysdba grant create view to your_user;然后创建表和存储过程 drop table table1;create table TABLE1( user_id VARCHAR2(10), user_name VARCHAR2(10), user_mail VARCHAR2(10), user_mobile VARCHAR2(10), user_telephone VARCHAR2(10));CREA...

Mssql 如何实现像 Excel 如:B1=A2-A2 B2=A3-A2...以此类推;不管A什 ...
在C1输入公式:=a1+$b$1即可。

oracle数据库update存储过程
update a set a3=xx where a1 in (select distinct b2 from b where b3 < add_months(sysdate,1))

db2存储过程中调用sysproc.admin_cmd('reorg table xx.tb ')时报错...
帮一下包试试?db2 terminate db2 CONNECT TO dbname user USERID using PASSWORD db2 BIND path\\db2schema.bnd BLOCKING ALL GRANT PUBLIC SQLERROR CONTINUE db2 BIND path\\@db2ubind.lst BLOCKING ALL GRANT PUBLIC ACTION ADD db2 BIND path\\@db2cli.lst BLOCKING ALL GRANT PUBLIC ACTION ...

泾阳县13080034990: DB2中建立存储过程的详细参数和语法
竹有促肝: DECLARE CHOICE2 CURSOR WITH RETURN TO CALLER FOR --声明游标 CHOICE2 SELECT COMPANYID,DEPTID,SEQID,SUBMITTIME,SUBMITDATE, B.GRADEDESC HYEAR,PRODUCTID,PRODUCTCODE,PRODUCTDESC, A....

泾阳县13080034990: 如何在DB2中执行存储过程 -
竹有促肝: 1、db2 create database 数据库名 <-- 创建数据库 2、db2 connect to 数据库名 user 用户名 using 用户密码 <-- 连接数据库 3、db2 -tvf otpdb_v3_db2.sql <-- 为新建数据库建立表结构 4、db2 -td@ -f 存储过程文件绝对路径 <-- 导入存储过程,无错...

泾阳县13080034990: DB2存储过程中一些参数的明细解说 -
竹有促肝: IN 是输入参数 OUT 是输出参数 建议你看一看sqllib/samples/sqlproc目录下的 .db2文件,这里面全是一些例子,把这些看一遍你应该就明白了,不是很复杂 上面说的.db2文件也可能在下面这个目录中,根据版本或系统不同可能不一样 SQLLIB\samples\sqlpl

泾阳县13080034990: DB2怎样创建存储过程 -
竹有促肝: 这个是可以的,我在aix机子上用的代码如下:db2 connect to etl user etl using etl db2 –td@ -vf createsqlproc.sql 你可以看看你的脚本是否有问题,如果数据库中该存储过程不存在可以直接这样写:db2 –tvf createsqlproc.sql 还有,就是你的权限,看看你是否有权限!

泾阳县13080034990: db2的存储过程中怎么写建表语句 -
竹有促肝: 您好,很高兴为您解答.CREATE PROCEDURE db2admin.CREATE_DATABASE() SPECIFIC db2admin.CREATE_DATABASE LANGUAGE SQL BEGINdeclare sSql varchar(1000) ;set sSql = 'CREATE TABLE A (ID BIGINT NOT NULL)';prepare s1 from sSql;execute s1; END 如若满意,请点击右侧【采纳答案】,如若还有问题,请点击【追问】 希望我的回答对您有所帮助,望采纳! ~ O(∩_∩)O~

泾阳县13080034990: 在linux下如何使用命令创建DB2的实例哦.....db2icrt –u 后面的参数硬是不懂. -
竹有促肝: 1. 创建一个用户,比如用户名是 db2inst1 用户的home路径是 /home/db2inst12. 再创建一个用户,比如用户名是db2fence 用户的home路径是 /home/db2fence3. 用 root 用户,cd /db2_install_path/instances/ 执行 ./db2icrt -u db2fence db2inst14. 如果db2icrt 没有报错,su - db2inst1 然后 db2start

泾阳县13080034990: 谁能给一个DB2 插入大量数据的存储过程!要具体代码啊!跪求.急用啊!!!! -
竹有促肝: 代码没有也没时间帮你写,但是可以给一些指点给你.在DB2中插入数据一般LOAD最快,其次是IMPORT,最后是INSERT.因为PROCEDURE中不能使用LOAD和IMPORT语句,所以在这里我只谈INSERT. 在INSERT的时候要考虑加快速度,你可以此表的日志功能取消,并且INSERT的时候不要一条一条记录去插入,可以一次同时插入几条或者几百条数据.

泾阳县13080034990: sqlserver怎么创建存储过程 -
竹有促肝:第一步:点击数据库下的“可编程性”,选择“存储过程”,点击鼠标右键,选择“新建存储过程” 第二步:在create PROCEDURE 后 输入存储过程的名字,紧跟着的就是定义存储过程的参数,接下来就可以去编写自己所需要组...

泾阳县13080034990: DB2中的存储过程问题
竹有促肝: 如果只是查询的话,应该不会出现死锁的现象.一般的话,假如你想锁定一个表或者某条记录,而这个表或者记录当前被其他用户锁定,就要等待,直到别人解锁之后你才能锁表或者记录.

泾阳县13080034990: 如何创建存储过程 (SQL Server Management Studio) -
竹有促肝: 本主题介绍如何使用 SQL Server Management Studio 中的对象资源管理器创建 Transact-SQL 存储过程,并提供一个在 AdventureWorks2008R2 数据库中创建简单存储过程...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网