问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

db2 存储过程 异常处理

发布网友 发布时间:2022-04-26 13:27

我来回答

4个回答

懂视网 时间:2022-04-09 20:01

执行存储过程后把两个sql语句得出的结果插入另一张结果表RKDM_DATA_VOID_CHK_REST。

 

建表语句:

CREATE TABLE RKDM_DATA_VOID_CHK_REST (
DATA_DT DATE,
ORDR_NUM INTEGER,
CHK_BIG_CLS VARCHAR(256),
DATA_PRTN VARCHAR(80),
SBJ VARCHAR(256),
ENT_EN VARCHAR(256),
ENT_CN VARCHAR(200),
FLD_EN VARCHAR(100),
FLD_CN VARCHAR(256),
FWD_CHK_SQL VARCHAR(500),
REV_CHK_SQL VARCHAR(500),
CD_TAB VARCHAR(100),
CD_FLD VARCHAR(100),
CHK_AIM VARCHAR(50),
CHK_COMNT VARCHAR(50),
FWD_CHK_RSLT VARCHAR(500),
REV_CHK_RSLT VARCHAR(500),
NULL_CNT INTEGER,
CD_VAL VARCHAR(50),
ERR_CNT INTEGER
)
;

COMMENT ON TABLE RKDM_DATA_VOID_CHK_REST IS ‘数据质量检查结果‘;

COMMENT ON RKDM_DATA_VOID_CHK_REST (
DATA_DT IS ‘数据日期‘,
ORDR_NUM IS ‘序号‘,
CHK_BIG_CLS IS ‘检查类型‘,
DATA_PRTN IS ‘数据分区‘,
SBJ IS ‘主题‘,
ENT_EN IS ‘实体英文名‘,
ENT_CN IS ‘实体中文名‘,
FLD_EN IS ‘字段英文名‘,
FLD_CN IS ‘字段中文名‘,
FWD_CHK_SQL IS ‘上游/正向检查SQL‘,
REV_CHK_SQL IS ‘下游/反向检查SQL‘,
CD_TAB IS ‘代码表‘,
CD_FLD IS ‘代码字段‘,
CHK_AIM IS ‘检查目的‘,
CHK_COMNT IS ‘检查说明‘,
FWD_CHK_RSLT IS ‘上游/正向检查结果‘,
REV_CHK_RSLT IS ‘下游/反向检查结果‘,
NULL_CNT IS ‘空值数‘,
CD_VAL IS ‘代码值‘,
ERR_CNT IS ‘异常条数‘ );


CREATE TABLE RKDM_DATA_VOID_RULE (
ORDR_NUM INTEGER,
CHK_BIG_CLS VARCHAR(256),
DATA_PRTN VARCHAR(80),
SBJ VARCHAR(256),
ENT_EN VARCHAR(256),
ENT_CN VARCHAR(200),
FLD_EN VARCHAR(100),
FLD_CN VARCHAR(256),
FWD_CHK_SQL VARCHAR(500),
REV_CHK_SQL VARCHAR(500),
CD_TAB VARCHAR(100),
CD_FLD VARCHAR(100),
CHK_AIM VARCHAR(500),
CHK_COMNT VARCHAR(500)
)
;

COMMENT ON TABLE RKDM_DATA_VOID_RULE IS ‘数据质量检查规则‘;

COMMENT ON RKDM_DATA_VOID_RULE (
ORDR_NUM IS ‘序号‘,
CHK_BIG_CLS IS ‘检查类型‘,
DATA_PRTN IS ‘数据分区‘,
SBJ IS ‘主题‘,
ENT_EN IS ‘实体英文名‘,
ENT_CN IS ‘实体中文名‘,
FLD_EN IS ‘字段英文名‘,
FLD_CN IS ‘字段中文名‘,
FWD_CHK_SQL IS ‘上游/正向检查SQL‘,
REV_CHK_SQL IS ‘下游/反向检查SQL‘,
CD_TAB IS ‘代码表‘,
CD_FLD IS ‘代码字段‘,
CHK_AIM IS ‘检查目的‘,
CHK_COMNT IS ‘检查说明‘ );

数据:

INSERT INTO RKDM_DATA_VOID_RULE
(Ordr_Num,Chk_Big_Cls,Data_Prtn,Sbj,Ent_EN,Ent_CN,FLD_EN,FLD_CN,Fwd_Chk_SQL,Rev_Chk_SQL,Chk_Aim)
VALUES (‘1‘,
‘关键指标检核_上下游比对‘,
‘零售‘,
‘参与主体‘,
‘TB_RZT_CUST_ACCT_STATS‘,
‘客户账户统计‘,
‘Dmnd_Dpst_Acct_Cnt‘,
‘活期存款账户数‘,
‘SELECT COUNT(1) FROM TEST_T_APP_2 WHERE B=‘‘2‘‘‘,
‘SELECT COUNT(1) FROM TEST_T_APP_3‘,
‘通过对客户账户统计表的活期存款账户数字段源和目标的检核,确认处理逻辑是否存在问题‘);

INSERT INTO RKDM_DATA_VOID_RULE
(Ordr_Num,Chk_Big_Cls,Data_Prtn,Sbj,Ent_EN,Ent_CN,FLD_EN,FLD_CN,Fwd_Chk_SQL,Rev_Chk_SQL,Chk_Aim)
VALUES (‘2‘,
‘关键指标检核_上下游比对‘,
‘零售‘,
‘参与主体‘,
‘TB_RZT_CUST_ACCT_STATS‘,
‘客户账户统计‘,
‘Mtg_Loan_Acct_Cnt‘,
‘按揭贷款账户数‘,
‘SELECT COUNT(1) FROM TEST_T_APP_2 WHERE B=‘‘1‘‘‘,
‘SELECT COUNT(1) FROM TEST_T_APP_3 WHERE B IS NOT NULL‘,
‘通过对客户账户统计表的按揭贷款账户数字段源和目标的检核,确认处理逻辑是否存在问题‘);

存储过程代码:

CREATE OR REPLACE PROCEDURE RKDM_KEY_INDX_CHK(
IN in_data_dt VARCHAR(10),
OUT out_succeed INTEGER
)
DYNAMIC RESULT SETS 1
/******************************************************************************
程序名称:RKDM_KEY_INDX_CHK
功能描述:关键指标测试_上下游比对
输入参数:in_data_dt 数据日期
输出参数:out_succeed 是否成功标志。1-失败 0-成功
作者:
版本号:V1.0.0.0
修改历史:
版本 更改日期 更新人 更新说明

******************************************************************************/
P1:BEGIN
/*************标准定义变量**************************************************/
DECLARE v_job_name VARCHAR(60) DEFAULT ‘CLEAN_DATA‘; --作业名称
DECLARE v_point VARCHAR(10); --记录点
DECLARE v_start_tm TIMESTAMP; --开始执行时间
DECLARE v_end_tm TIMESTAMP; --结束执行时间
DECLARE v_sql VARCHAR(20000); --执行SQL
DECLARE v_ex_sql_log VARCHAR(20000); --执行SQL
DECLARE v_run_result VARCHAR(20); --执行结果
DECLARE v_date VARCHAR(10); --数据日期
DECLARE v_msg VARCHAR(10); --错误信息
DECLARE SQLCODE INT DEFAULT 0; --显示定义数据库变量SQLCODE
DECLARE SQLSTATE CHAR(5) DEFAULT ‘0000‘; --显示定义数据库变量SQLSTATE
DECLARE v_etl_owner VARCHAR(20) DEFAULT ‘ETL‘; --本SP操作的用户

/**************定义常用日期变量**********************************************/
DECLARE V_T_YEAR VARCHAR(4); --本年
DECLARE V_T_MONTH VARCHAR(8); --本月
DECLARE V_T_DAY VARCHAR(8); --本日
DECLARE V_L_YEAR VARCHAR(4); --去年
DECLARE V_F_TX_DATE DATE; --标准日期
DECLARE V_F_C_DATE VARCHAR(10); --十位标准日期字符串格式
DECLARE V_LAST_DAY VARCHAR(8); --上一日
DECLARE V_NEXT_MON_START VARCHAR(8); --下月初
DECLARE V_MON_START VARCHAR(8); --本月初
DECLARE V_MON_END VARCHAR(8); --本月末
DECLARE V_LAST_MON_END VARCHAR(8); --上月末
DECLARE V_BEGIN_YEAR VARCHAR(8); --年初
DECLARE V_LAST_YEAR_END VARCHAR(8); --上年末
DECLARE V_LAST_YEAR_PERIOD VARCHAR(8); --去年同期
DECLARE V_QUARTER VARCHAR(8); --所在季度数 V_QUERTER
DECLARE V_BEGIN_QUARTER VARCHAR(8); --季初
DECLARE V_TH_LAST_MON_END VARCHAR(8); --上上上月末
DECLARE V_TH_LAST_YEAR_END VARCHAR(8); --上上上年末

/**************自定义变量***************************************************/
DECLARE V_DATA_COUNT_PRE INTEGER;
DECLARE DATA_DT VARCHAR(8); --数据日期
DECLARE ETL_DT VARCHAR(8); --ETL处理日期(当前日期)
DECLARE ADD_DT VARCHAR(8); --增量日期
DECLARE MAXDATE VARCHAR(8); --最大日期
DECLARE ILLDATE VARCHAR(8); --错误日期
DECLARE NULLDATE VARCHAR(8); --空日期
DECLARE NULLSTRING VARCHAR(1); --空字符串
DECLARE NULLNUMBER VARCHAR(1); --空数值
DECLARE NULLTIME TIME; --空时间
DECLARE NULLTIMESTAMP TIMESTAMP; --空时间戳

DECLARE v_sql_del VARCHAR(20000); --执行SQL
DECLARE v_sql_fwd VARCHAR(20000); --执行SQL
DECLARE v_sql_rev VARCHAR(20000); --执行SQL
DECLARE v_sql_insert VARCHAR(30000); --执行SQL
DECLARE VAL_FWD VARCHAR(10);
DECLARE VAL_REV VARCHAR(10);
DECLARE RS_STMT_FWD STATEMENT;
DECLARE RS_STMT_REV STATEMENT;
DECLARE RS_C_FWD CURSOR FOR RS_STMT_FWD;
DECLARE RS_C_REV CURSOR FOR RS_STMT_REV;

/**************异常处理******************************************************/
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
GET DIAGNOSTICS EXCEPTION 1 v_msg = MESSAGE_TEXT;
SET out_succeed = 1;
SET v_run_result = ‘执行失败‘;
SET v_msg = ‘SQLCODE:‘||rtrim(CHAR(SQLCODE))||‘.SQLSTATE:‘||SQLSTATE||‘‘||v_msg;
SET v_end_tm = current timestamp;
ROLLBACK;
END;

/**************标准变量处理**************************************************/
SET v_start_tm = current timestamp;
SET v_date = in_data_dt;
SET out_succeed = 0;
SET v_run_result = ‘执行成功‘;
SET v_job_name = ‘CLEAN_DATA‘;

--自定义参数赋值
VALUES in_data_dt INTO DATA_DT;
VALUES to_char(current date,‘YYYYMMDD‘) INTO ETL_DT;
VALUES in_data_dt INTO ADD_DT;
VALUES ‘89991231‘ INTO MAXDATE;
VALUES ‘00010102‘ INTO ILLDATE;
VALUES ‘00010101‘ INTO NULLDATE;
VALUES ‘‘ INTO NULLSTRING;
VALUES 0 INTO NULLNUMBER;
VALUES ‘00:00:00‘ INTO NULLTIME;
VALUES ‘0001-01-01 00:00:00.000000‘ INTO NULLTIMESTAMP;

--自定义日期参数赋值
VALUES substr(in_data_dt,1,4) INTO V_T_YEAR; --本年
VALUES substr(in_data_dt,5,2) INTO V_T_MONTH; --本月
VALUES substr(in_data_dt,7,2) INTO V_T_DAY; --本日
VALUES substr(in_data_dt,1,4)-1 INTO V_L_YEAR; --去年
VALUES to_date(in_data_dt,‘yyyy-mm-dd‘) INTO V_F_TX_DATE; --标准日期
VALUES to_char(to_date(in_data_dt,‘yyyy-mm-dd‘),‘yyyy-mm-dd‘) INTO V_F_C_DATE; --十位标准日期字符串格式
VALUES to_char(to_date(in_data_dt,‘yyyymmdd‘)-1 day,‘yyyymmdd‘) INTO V_LAST_DAY; --上一日
--VALUES to_char(last_day(to_date(in_data_dt,‘yyyymmdd‘))+1 day,‘yyyymmdd‘) INTO V_NEXT_MON_START; --下月初
VALUES V_T_YEAR||V_T_MONTH||‘01‘ INTO V_MON_START; --本月初
--VALUES to_char(last_day(to_date(in_data_dt,‘yyyymmdd‘),‘yyyymmdd‘),‘yyyymmdd‘) INTO V_MON_END; --本月末
VALUES to_char(to_date(V_MON_START,‘yyyymmdd‘)-1 day,‘yyyymmdd‘) INTO V_LAST_MON_END; --上月末
VALUES to_char(to_date(V_T_YEAR||‘-01-01‘,‘yyyymmdd‘),‘yyyymmdd‘) INTO V_BEGIN_YEAR; --年初
VALUES to_char(to_date(V_BEGIN_YEAR,‘yyyymmdd‘)-1 day,‘yyyymmdd‘) INTO V_LAST_YEAR_END; --上年末
VALUES to_char(to_date(in_data_dt,‘yyyymmdd‘)-12 month,‘yyyymmdd‘) INTO V_LAST_YEAR_PERIOD; --去年同期
VALUES CASE WHEN V_T_MONTH IN (‘01‘,‘02‘,‘03‘) THEN ‘1‘
WHEN V_T_MONTH IN (‘04‘,‘05‘,‘06‘) THEN ‘2‘
WHEN V_T_MONTH IN (‘07‘,‘08‘,‘09‘) THEN ‘3‘
WHEN V_T_MONTH IN (‘10‘,‘11‘,‘12‘) THEN ‘4‘
END INTO V_QUARTER; --所在季度
VALUES CASE V_QUARTER
WHEN ‘1‘ THEN V_T_YEAR||‘0101‘
WHEN ‘2‘ THEN V_T_YEAR||‘0401‘
WHEN ‘3‘ THEN V_T_YEAR||‘0701‘
WHEN ‘4‘ THEN V_T_YEAR||‘1001‘
END INTO V_BEGIN_QUARTER; --季初
VALUES to_char(last_day(to_date(in_data_dt,‘yyyymmdd‘)-3 month),‘yyyymmdd‘) INTO V_TH_LAST_MON_END; --上上上月末
VALUES to_char(year(to_date(in_data_dt,‘yyyymmdd‘)-3 year)||‘-01-01‘,‘yyyymmdd‘) INTO V_TH_LAST_YEAR_END; --上上上年末

/**************脚本主要逻辑**************************************************/

--防重跑,先删除数据
SET v_sql_del=‘DELETE FROM RKDM_DATA_VOID_CHK_REST WHERE DATA_DT=‘‘‘||v_date||‘‘‘ AND Chk_Big_Cls=‘‘关键指标检核_上下游比对‘‘‘;
PREPARE DEL_STMT FROM v_sql_del;
EXECUTE DEL_STMT;

--循环检查规则
FOR RS_LOOP AS
SELECT Ordr_Num as Ordr_Num,
Chk_Big_Cls as Chk_Big_Cls,
Data_Prtn as Data_Prtn,
Sbj as Sbj,
Ent_EN as Ent_EN,
Ent_CN as Ent_CN,
FLD_EN as FLD_EN,
FLD_CN as FLD_CN,
Fwd_Chk_SQL as Fwd_Chk_SQL,
Rev_Chk_SQL as Rev_Chk_SQL,
Chk_Aim as Chk_Aim
FROM RKDM_DATA_VOID_RULE WHERE Chk_Big_Cls=‘关键指标检核_上下游比对‘
DO
SET v_sql_fwd=RS_LOOP.Fwd_Chk_SQL;
SET v_sql_rev=RS_LOOP.Rev_Chk_SQL;
PREPARE RS_STMT_FWD FROM v_sql_fwd;
OPEN RS_C_FWD;
PREPARE RS_STMT_REV FROM v_sql_rev;
OPEN RS_C_REV;
FETCH RS_C_FWD INTO VAL_FWD;
FETCH RS_C_REV INTO VAL_REV;
CLOSE RS_C_FWD;
CLOSE RS_C_REV;

SET v_sql_insert=‘INSERT INTO RKDM_DATA_VOID_CHK_REST(DATA_DT,Chk_Big_Cls,Ordr_Num,Data_Prtn,Sbj,Ent_EN,Ent_CN,FLD_EN,FLD_CN,Fwd_Chk_SQL,Rev_Chk_SQL,Fwd_Chk_Rslt,Rev_Chk_Rslt,Chk_Aim)VALUES(‘‘‘||v_date||‘‘‘,‘‘‘||RS_LOOP.Chk_Big_Cls||‘‘‘,‘‘‘||RS_LOOP.Ordr_Num||‘‘‘,‘‘‘||RS_LOOP.Data_Prtn||‘‘‘,‘‘‘||RS_LOOP.Sbj||‘‘‘,‘‘‘||RS_LOOP.Ent_EN||‘‘‘,‘‘‘||RS_LOOP.Ent_CN||‘‘‘,‘‘‘||RS_LOOP.FLD_EN||‘‘‘,‘‘‘||RS_LOOP.FLD_CN||‘‘‘,‘‘‘||RS_LOOP.Fwd_Chk_SQL||‘‘‘,‘‘‘||RS_LOOP.Rev_Chk_SQL||‘‘‘,‘‘‘||VAL_FWD||‘‘‘,‘‘‘||VAL_REV||‘‘‘,‘‘‘||RS_LOOP.Chk_Aim||‘‘‘)‘;
PREPARE RS_STMT_INST FROM v_sql_insert;
EXECUTE RS_STMT_INST;
END FOR;

END P1

 问题:使用ibm data studio 调试发现所有的变量都能正常取出来但是整合到v_sql_insert变量中时就会被截断,v_sql_insert这个变量值出来的不是完整的语句。

尝试的方法:1.最后不使用v_sql_insert这个动态sql ,直接这么写:INSERT INTO RKDM_DATA_VOID_CHK_REST(DATA_DT,Chk_Big_Cls,Ordr_Num,Data_Prtn,Sbj,Ent_EN,Ent_CN,FLD_EN,FLD_CN,Fwd_Chk_SQL,Rev_Chk_SQL,Fwd_Chk_Rslt,Rev_Chk_Rslt,Chk_Aim)VALUES(v_date,RS_LOOP.Chk_Big_Cls,RS_LOOP.Ordr_Num,RS_LOOP.Data_Prtn,RS_LOOP.Sbj,RS_LOOP.Ent_EN,RS_LOOP.Ent_CN,RS_LOOP.FLD_EN,RS_LOOP.FLD_CN,RS_LOOP.Fwd_Chk_SQL,RS_LOOP.Rev_Chk_SQL,VAL_FWD,VAL_REV,RS_LOOP.Chk_Aim)这样做是没有问题。

2.建立页比较大的系统临时表空间。

3.修改v_sql_insert这个变量声明的数据类型大小。

 

 

db2存储过程动态sql被截断

标签:back   成功   cee   0.00   err   int   主题   tab   val   

热心网友 时间:2022-04-09 17:09

存储过程异常的处理:
DECLARE handler-type HANDLER FOR condition handler-action
  
异常处理器类型(handler-type)有以下几种:
  CONTINUE 在处理器操作完成之后,会继续执行产生这个异常语句之后的下一条语句。
  EXIT 在处理器操作完成之后,存储过程会终止,并将控制返回给调用者。
  UNDO 在处理器操作执行之前,DB2会回滚存储过程中执行的SQL操作。在处理器操作完成之后,存储过程会终止,并将控制返回给调用者。
  异常处理器可以处理基于特定SQLSTATE值的定制异常,或者处理预定义异常的类。预定义的3种异常如下所示:
  NOT FOUND 标识导致SQLCODE值为+100或者SQLSATE值为02000的异常。这个异常通常在SELECT没有返回行的时候出现。
  SQLEXCEPTIOIN 标识导致SQLCODE值为负的异常。
  SQLWARNING 标识导致警告异常或者导致+100以外的SQLCODE正值的异常。
  如果产生了NOT FOUND 或者SQLWARNING异常,并且没有为这个异常定义异常处理器,那么就会忽略这个异常,并且将控制流转向下一个语句。如果产生了SQLEXCEPTION异常,并且没有为这个异常定义异常处理器,那么存储过程就会失败,并且会将控制流返回调用者。
  以下示例声明了两个异常处理器。 EXIT处理器会在出现SQLEXCEPTION 或者SQLWARNING异常的时候被调用。EXIT处理器会在终止SQL程序之前,将名为stmt的变量设为"ABORTED",并且将控制流返回给调用者。UNDO处理器会将控制流返回给调用者之前,回滚存储过程体中已经完成的SQL操作。
 
 清单3:异常处理器示例
  DECLARE EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING SET stmt = 'ABORTED';
  DECLARE UNDO HANDLER FOR NOT FOUND;
  如果预定义异常集不能满足需求,就可以为特定的SQLSTATE值声明定制异常,然后再为这个定制异常声明处理器。语法如下:
  
清单4:定制异常处理器
  DECLARE unique-name CONDITION FOR SQLSATE 'sqlstate'
  处理器可以由单独的存储过程语句定义,也可以使用由BEGIN…END块界定的复合语句定义。注意在执行符合语句的时候,SQLSATE和SQLCODE的值会被改变,如果需要保留异常前的SQLSATE和SQLCODE,就需要在执行复合语句的第一个语句把SQLSATE和SQLCODE赋予本地变量或参数。
  通常,会为存储过程定义一个执行状态的输出参数(例如:poGenStatus)。
declare sqlcode integer default 0;
begin
declare continue handler for sqlexception set ret = sqlcode;
declare continue handler for sqlwarning set ret = sqlcode;
declare continue handler for not found set ret = sqlcode;
end ; --异常的声明

--异常的处理
if sqlcode< 0 or sqlcode= 100 then
set O_RetCod = RetCode;
set O_RetMsg = 'CLN02:产品实例关联客户过程出错!';
insert into LOG.OPER_LOG_TAB(PROC_NAME,OBJ_TAB,REGION_COD,OPER_COUNT,ERR_CODE,DATA_TIME,OPER_TIME)
values('P_DW_CLEAN','GLOBAL TEMP',0,0,retcode,CHAR(last_3_mon_time),current TIMESTAMP);
return;
else
set RetCode = 0;
end if;

热心网友 时间:2022-04-09 18:27

TRUNCATE TABLE output_debug IMMEDIATE@
BEGIN
  -- 错误标志
  DECLARE error_flag INT;
  
 -- DB2 中,如果需要使用 sqlcode ,那么必须先 DECLARE 以后,才能使用。
  DECLARE sqlcode  INT;

  -- 定义错误处理
  -- 如果发生错误,继续处理
  -- 但是把标志位设置为 sqlcode
  DECLARE CONTINUE HANDLER
  FOR
  SQLEXCEPTION SET error_flag=sqlcode;

  -- 错误标志,首先设置为正常.
  SET error_flag = 0;

  -- 先更新.
  UPDATE test_main SET value = 'Test1' WHERE id = 1;

  -- 插入一行主键重复数据.
  INSERT INTO test_main VALUES(1, 'PK');
  INSERT INTO output_debug VALUES('执行结果:'|| TO_CHAR(error_flag));
END
@



db2 => select * from test_main WHERE id = 1@
ID          VALUE
----------- ----------
          1 Test1
  1 条记录已选择。


db2 => select * from output_debug@
DATA
-----------------------------------
执行结果:-803
  1 条记录已选择。

热心网友 时间:2022-04-09 20:02

创建SQL存储过程(CREATE PROCEDURE (SQL) statement )
CREATE PROCEDURE procere-name(IN | OUT | INOUT parameter-name data-type,...) ) ---存储过程可以设定输入参数和输出参数LANGUAGE SQL ----DB2可以用多种语言编写存储过程,这里用的是纯SQLBEGIN ---开始DECLARE vID smallint; ---定义变量 和Oracle一样 DECLARE 变量名 变量的数据类型;FOR V AS SELECT BRND_CD FROM TMP_BRND_CD ---for循环 tmp_brnd_cd预先创建好DO ---循环体开始SET vID=BRND_CD; ---对vID赋值,db2可以用set赋值,也可以用values赋值,这里可以写成values(BRND_CD) into vIDINSERT INTO WWM_FORINSERT_TEST VALUES(vID); ---往wwm_forinsert_test 插入数据END FOR; -----循环体结束END @ -----存储过程结束参数语法说明
1、procere-name: 存储过程的名字,在同一个数据库的同一模式下,不能存在存储过程名相同参数数目相同的存储过程,即使参数的类型不同也不行。
2、(IN | OUT | INOUT parameter-name data-type,...) :传入参数 IN:输入参数OUT:输出参数INOUT:作为输入输出参数 parameter-name:参数名字,在此存储过程中唯一的标识符。data-type:参数类型,可以接收SQL类型和创建的表。不支持LONG VARCHAR, LONG VARGRAPHIC, DATALINK, REFERENCE和用户自定义类型。
3、SPECIFIC specific-name:唯一的特定名称(别名),可以用存储过程名代替,这个特定名称用于dorp存储过程,或者给存储过程添加注视用,但不能调用存储过程。如果不指定,则数据库会自动生成一个yymmddhhmmsshhn时间戳的名字。推荐给出别名。
4、DYNAMIC RESULT SETS integer:指定存储过程返回结果的最大数量。存储过程中虽然没有return语句,但是却能返回结果集。
5、CONTAINS SQL, READS SQL DATA, MODIFIES SQL DATA: 指定存储过程中的SQL访问级别 CONTAINS SQL: 表示存储过程可以执行中,既不可读取 SQL 数据,也不可修改 SQL 数据。 READS SQL DATA: 表示存储过程可以执行中,可读取SQL,但不可修改 SQL 数据。 MODIFIES SQL DATA: 表示存储过程可以执行任何 SQL 语句。可以对数据库中的数据进行增加、删除和修改。
6、DETERMINISTIC or NOT DETERMINISTIC:表示存储过程是动态或者非动态的。动态的返回的值是不确定的。非动态的存储过程每次执行返回的值是相同的。
7、CALLED ON NULL INPUT:表示可以调用存储过程而不管任何的输入参数是否为NULL,并且,任何的OUT或者INOUT参数可以返回一个NULL或者非空值。检验参数是否为NULL是在过程中进行的。
8、INHERIT SPECIAL REGISTERS:表示继承专用寄存器。
9、OLD SAVEPOINT LEVEL or NEW SAVEPOINT LEVEL:建立存储点。OLD SAVEPOINT LEVEL是默认的存储点。
10、LANGUAGE SQL:指定程序的主体用的是SQL语言。
11、EXTERNAL ACTION or NO EXTERNAL ACTION:表示存储过程是否执行一些改变理数据库状态的活动,而不通过数据库管理器管。默认是 EXTERNAL ACTION。如果指定为NO EXTERNAL ACTION ,则数据库会确定最最佳优化方案。
12、PARAMETER CCSID:指定所有输出字符串数据的编码,默认为UNICODE编码数据库为PARAMETER CCSID UNICODE ,其他的数据库默认为PARAMETER CCSID 3 ASCII。
13、SQL-procere-body:存储过程的主体

请采纳。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
结核病是什么样的疾病? 曹丕17岁得了肺痨,明知自己命不长久,还要强争王位,是不是很自私呢?_百... 古代小说常出现的病名 急求一篇"生活小窍门"(500字)的作文 至今最有什么小妙招 健康的戒烟方法 笔记本电池锁死是什么原因引起的? 黑龙江债权转让合同纠纷该怎样取证 安徽债权转让合同纠纷应该怎么样取证 房产官司律师费多少 DB2中哪里建存储过程 db2创建存储过程报错 如何拍摄玉兰花 db2存储过程变量问题 在DB2中创建一个简单的SQL存储过程,用程序如何调用这个存储过程? DB2 存储过程 用Dbvisualizer工具写DB2存储过程 db2 用 toad 创建存储过程 报错 DB2 如何创建存储过程 如何查看db2中创建成功的存储过程 在db2的命令行如何创建存储过程和函数 db2 创建存储过程 如何筛选出excel中重复数据 知乎 如何执行db2存储过程 DB2怎样创建存储过程 有谁知道工行的灰名单是干什么用的 灰名单账户非柜面渠道禁做是什么意思 社会保障卡进入灰名单 为什么我被列入湖北移动灰名单了? 进了网贷灰名单还能在银行贷款买房吗? 请问杭州法喜寺的玉兰花到底有几百年的历史? 2021颐和园玉兰花开了吗 颐和园玉兰花观赏时间 荷花,迎春花,玉兰花,杜鹃花,哪个不是春天开的花? 连云港的民俗风情有哪些? 成都最好的玉兰花在哪里呢,适合摄影 唐山赏玉兰花的地方 仿照18.《广玉兰》写一种花 (小学六年级课文) 海清四次入围白玉兰视后,最后拿到奖了吗? DNS指的是什么? 内网dns是什么? 之前在抖音上买衣服进淘宝上买,可是淘宝换了账号,就抖音上还是以前是... DNS是指什么? 抖音春节活动绑到我另一个账号了,请问有办法切到这个账号吗?两张手机卡,两个不同账号告诉我只能参一个 在抖音上面买了东西退货需要淘宝账号吗? 局域网内DNS服务器有什么作用? 匡威官网的run a half size large converse是哪个国家产的! 匡威帆布鞋在英国卖多少钱? 欧洲匡威价格中国匡威价钱为什么差这么多 CONVERSE Special service