根據此過程光標將顯示兩行,但是當我執行此查詢時,它顯示錯誤:光標「無名門戶」不存在 在圖像表錯誤:光標「<無名門戶>」不存在
CREATE TABLE image
(
id numeric(9,0) NOT NULL,
nm_code character varying(100) NOT NULL,
synonym text NOT NULL,
CONSTRAINT synonym_id PRIMARY KEY (id)
)
INSERT INTO image(
id, nm_code, synonym)
VALUES (01,'13160101','CAR TYRE');
INSERT INTO image(
id, nm_code, synonym)
VALUES (01,'10000101','CAR TYRE');
舊的主表
CREATE TABLE legacymaster
(
legacy_code character varying(20),
source_data text,
)
insert into legacymaster (legacy_code,source_data) values ('123','WITH CAR TYRE FROM AUDI 2000')
mm_nounmodmaster表結構
CREATE TABLE mm_nounmodmaster
(
nm_code character varying(18) NOT NULL,
noun character varying(35),
modifier1 character varying(35) NOT NULL,
modifier2 character varying(35),
modifier3 character varying(35),
nm_type character(1) NOT NULL,
nm_abbr character varying(200),
nm_description character varying(80) NOT NULL,
is_template character(1) DEFAULT 'N'::bpchar,
)
INSERT INTO mm_nounmodmaster(nm_code, noun, modifier1, modifier2, modifier3, nm_type, nm_abbr,
nm_description,is_template)
VALUES ("10000101","ABRASIVE","--","--","","F","--","ABRASIVE",'Y')
INSERT INTO mm_nounmodmaster(nm_code, noun, modifier1, modifier2, modifier3, nm_type, nm_abbr,
nm_description,is_template)
VALUES ("13160101","TYRE","AUTOMOBILE","--","","F","TYR,AUTO","TYRE,AUTOMOBILE",'Y')
INSERT INTO mm_nounmodmaster(nm_code, noun, modifier1, modifier2, modifier3, nm_type, nm_abbr,
nm_description,is_template)
VALUES ("10020101","ACTUATOR","ELECTRICAL","--","--","F","ACTR,ELE","ACTUATOR,ELECTRICAL",'Y')
在名詞modmaster表中插入三條記錄,但在圖像表中的同義詞包含'car tire'只有兩個nm_codes。所以,當我執行此功能光標將執行除了最後一排nounmodmaster兩行,因爲它不與圖像匹配表
CREATE OR REPLACE FUNCTION func_source_based_nounmod(legacy_code_in character varying)
RETURNS refcursor AS
$BODY$
declare
source text;
nmcode character varying(50);
v_parent_Rec1 record;
v_parent_Rec2 record;
item_desc character varying(50);
noun_t character varying(50);
mod1 character varying(50);
CUR REFCURSOR;
begin
--select source_data into source from legacymaster where source_data=legacy_code_in;
raise notice '1';
for v_parent_Rec1 in(SELECT id,nm_code,synonym FROM image)loop
raise notice '2';
--if exists (select source_data from legacymaster where legacy_code=legacy_code_in) then
raise notice '3';
IF exists (select source_data from legacymaster where legacy_code=legacy_code_in and source_data ilike '%'||v_parent_Rec1.synonym||'%') THEN
raise notice '4';
FOR v_parent_Rec2 IN(SELECT DISTINCT AA.NM_CODE, NM_TYPE,
(CASE WHEN NM_ABBR IS NOT NULL THEN NM_ABBR ELSE '--' END) as NM_ABBR,
NM_DESCRIPTION, NM_CATEGORY,
(CASE WHEN image.NM_CODE IS NOT NULL THEN 'ACTIVE' ELSE 'INACTIVE' END) as STATUS,
(CASE WHEN NOUN IS NOT NULL AND NOUN <> '--' AND trim(both ' ' from NOUN) <> '' THEN NOUN ELSE '' END) ||
(CASE WHEN MODIFIER1 IS NOT NULL AND MODIFIER1 <> '--' AND TRIM(BOTH ' ' FROM MODIFIER1) <> '' THEN ',' || MODIFIER1 ELSE '' END) ||
(CASE WHEN MODIFIER2 IS NOT NULL AND MODIFIER2 <> '--' AND TRIM(BOTH ' ' FROM MODIFIER2) <> '' THEN ',' || MODIFIER2 ELSE '' END) ||
(CASE WHEN MODIFIER3 IS NOT NULL AND MODIFIER3 <> '--' AND TRIM(BOTH ' ' FROM MODIFIER3) <> '' THEN ',' || MODIFIER3 ELSE '' END) AS NOUNMOD,
is_template, Count(image.nm_code) AS CountOfnm_code from mm_nounmodmaster aa
inner join image on image.nm_code=aa.nm_code
where image.synonym =v_parent_Rec1.synonym and image.nm_code=v_parent_Rec1.nm_code group by aa.nm_code,image.nm_code)LOOP
--raise notice '%',v_parent_Rec2.noun;
--raise notice '%',v_parent_Rec2.modifier1;
END LOOP;
ITEM_DESC:=v_parent_Rec1.nm_code;
raise notice '%',ITEM_DESC;
raise notice '%',v_parent_Rec2.nm_code;
raise notice '%',v_parent_Rec2.NM_TYPE;
raise notice '%',v_parent_Rec2.NM_ABBR;
raise notice '%',v_parent_Rec2.NM_DESCRIPTION;
raise notice '%',v_parent_Rec2.NM_CATEGORY;
raise notice '%',v_parent_Rec2.NOUNMOD;
raise notice '%',v_parent_Rec2.CountOfnm_code;
--end if;
OPEN CUR FOR
SELECT DISTINCT v_parent_Rec2.nm_code,v_parent_Rec2.NM_TYPE,v_parent_Rec2.NM_ABBR,v_parent_Rec2.NM_DESCRIPTION,v_parent_Rec2.NM_CATEGORY,v_parent_Rec2.NOUNMOD,v_parent_Rec2.CountOfnm_code;
close cur;
end if;
end loop;
raise notice '5';
RETURN CUR;
end;
$BODY$
通過傳遞Legacy_code_in參數,它是在legacymaster表,如果源數據字符串包含「汽車胎'。然後它會顯示兩行圖像表
我需要
目前還不清楚它試圖做什麼代碼,我們不能運行它,因爲我們沒有引用表的定義。您爲沒有表的查詢打開遊標,然後關閉它,然後返回它。咦?該如何工作?當你調用函數時,你會得到錯誤嗎?你怎麼稱呼它? –
我傳遞遺留的code_in,它是在傳統的主表中的傳統主表 如果源數據字符串包含'汽車輪胎',那麼它將顯示兩行,爲什麼因爲在圖像表中兩行包含'汽車輪胎'字符串使用遊標是可能的。 – Gobinath
我在這裏看不到'CREATE TABLE'語句或'SELECT'語句。 –