我们具有以下逻辑来创建测试表标志列。
create table "EDI"."TEST" (
"SHIP_ID" VARCHAR(30) NOT NULL,
"SHIP_EVNT_CD" VARCHAR(2),
"AF_FLG" VARCHAR(1) generated always as
(case ship_id WHEN (SELECT ship_id FROM EDI.TEST WHERE ship_evnt_cd = 'AF')
then 1 else 0 end));
目标是为与具有该ship_evnt_cd的ship_id匹配的每条记录设置标志。
我们遇到一个自然错误
用“ SELECT”定义的检查约束或生成的列无效。SQLCODE = -548,SQLSTATE = 42621
我们已经在线查找了该邮件,但表示要重新定义该语句,然后重试。似乎SELECT不起作用,但是我们设法更早地创建了它,但是不得不删除表,然后我们失去了逻辑。
我们也尝试更改案子,但没有成功。
(case WHEN ship_id = (SELECT ship_id FROM EDI.TEST WHERE ship_evnt_cd = 'AF')
then 1 else 0 end));
(case WHEN ship_id IN (SELECT ship_id FROM EDI.TEST WHERE ship_evnt_cd = 'AF')
then 1 else 0 end));
我们认为可能缺少任何内容,也许有任何从句,但都卡在这里。
答案 0 :(得分:1)
使用视图。
CREATE TABLE EDI.TEST_TAB (
SHIP_ID VARCHAR(30) NOT NULL
, SHIP_EVNT_CD CHAR(2) NOT NULL
, PRIMARY KEY(SHIP_ID, SHIP_EVNT_CD)
)
;
CREATE OR REPLACE VIEW EDI.TEST AS
SELECT T.*
, CASE WHEN SHIP_ID IN (SELECT SHIP_ID FROM EDI.TEST_TAB WHERE SHIP_EVNT_CD = 'AF')
THEN 1 ELSE 0 END AS AF_FLG
FROM
EDI.TEST_TAB T
;
生成的列不能使用子查询 https://www.ibm.com/support/knowledgecenter/en/SSEPGG_11.1.0/com.ibm.db2.luw.sql.ref.doc/doc/r0000927.html
AS(生成表达式) 指定列的定义基于表达式。 [剪] generation-expression 不能包含以下任何内容(SQLSTATE 42621):
Subqueries XMLQUERY or XMLEXISTS expressions Column functions Dereference operations or DEREF functions User-defined or built-in functions that are non-deterministic User-defined functions that use the EXTERNAL ACTION option User-defined functions that are not defined with NO SQL Host variables or parameter markers Special registers and built-in functions that depend on the value of a special register Global variables References to columns defined later in the column list References to other generated columns References to columns of type XML
答案 1 :(得分:0)
这是我们所想到的,并且可以成功测试,尽管宁愿不使用...
Reset
然后是触发器
create table EDI.TEST (
"SHIP_ID" VARCHAR(30) NOT NULL,
"SHIP_EVNT_CD" VARCHAR(2),
"AF_FLG" VARCHAR(1) DEFAULT 0
);
现在我需要对其他3列执行此操作,所以我想知道是否可以通过不同的WHEN语句(例如,巨大的CASE WHEN)使用相同的触发器进行多列更新,但是,题外话...