Im Zusammenführungscode stecken geblieben. Ab sofort kann die Postgresql-Version nicht aktualisiert werden.
FEHLER: Syntaxfehler bei oder in der Nähe von "FROM"
ZEILE 3: VON
CREATE OR REPLACE PROCEDURE abc.spr_customer_upd_updation(
cust_no text,
bill_comp text,
v_clone_grp text)
LANGUAGE 'plpgsql'
AS $BODY$
DECLARE
strsql TEXT;strsql_main CHARACTER VARYING(1000);
strsql_main_Clone CHARACTER VARYING(1000);
strsql_sel CHARACTER VARYING(3000);
strsql_select CHARACTER VARYING(20);
strsql_select2 CHARACTER VARYING(80);
strsql_set TEXT;
cust_ff_update_cur CURSOR FOR
SELECT
iuc_webm_inv_cols, iuc_table_name, iuc_query, iuc_inv_col_desc
FROM abb.invoice_upd_bco_col_mapping AS mc, abb.invoice_upd_column_master AS clm
WHERE mc.ium_upd_cols = clm.iuc_id AND ium_bco_no = bill_comp AND clm.iuc_table_name = 'CUSTOMER';CUST_FF_UPD_CUR_RECORD RECORD;BEGIN
/* strsql_main := CONCAT_WS('', 'MERGE INTO CUSTOMER C
USING
(
SELECT <>
FROM CUSTOMER_UPD_WORKING cuw
WHERE cuw.CUW_BILLING_COMP = ''', bill_comp, ''' and
cuw.CUW_CUST_NO = ''', cust_no, '''
) CUST_DATA
ON (C.CUST_NO_717 = CUST_DATA.CUW_CUST_NO)
WHEN MATCHED THEN
UPDATE SET '); */
strsql_main := CONCAT_WS('','
UPDATE abb.CUSTOMER C SET FROM
(SELECT <<SELECTCOL>>
FROM abb.CUSTOMER_UPD_WORKING cuw WHERE cuw.CUW_BILLING_COMP = ''', bill_comp, ''' and
cuw.CUW_CUST_NO = ''', cust_no, '''
) AS CUST_DATA WHERE C.CUST_NO_717 = CUST_DATA.CUW_CUST_NO');
/* strsql_main_Clone := CONCAT_WS('', 'MERGE INTO CUSTOMER C
USING
(
SELECT <>
FROM CUSTOMER_UPD_WORKING cuw
INNER JOIN CUSTOMER cust
ON cust.Cust_Clone_Group_717 = ''', v_clone_grp, '''
WHERE cuw.CUW_BILLING_COMP = ''', bill_comp, ''' and
cuw.CUW_CUST_NO = ''', cust_no, '''
) CUST_DATA
ON (C.CUST_NO_717 = CUST_DATA.CUST_NO_717)
WHEN MATCHED THEN
UPDATE SET '); */
strsql_main_Clone := CONCAT_WS('', '
UPDATE abb.CUSTOMER C SET FROM (
SELECT <<SELECTCOL>> FROM abb.CUSTOMER_UPD_WORKING cuw
INNER JOIN abb.CUSTOMER cust ON cust.Cust_Clone_Group_717 = ''', v_clone_grp, '''
WHERE cuw.CUW_BILLING_COMP = ''', bill_comp, ''' and cuw.CUW_CUST_NO = ''', cust_no, ''' ) CUST_DATA
WHERE C.CUST_NO_717 = CUST_DATA.CUST_NO_717');
RAISE NOTICE 'strsql_main_Clone%',strsql_main_Clone;
strsql_select := 'CUW_CUST_NO,';
strsql_select2 := 'CUW_CUST_NO, cust.CUST_NO_717, cust.Cust_Clone_Group_717,';
strsql_sel := '';
strsql_set := '';
OPEN cust_ff_update_cur;
LOOP
FETCH cust_ff_update_cur INTO CUST_FF_UPD_CUR_RECORD;
EXIT WHEN NOT FOUND;
strsql_sel := CONCAT_WS('', strsql_sel, cust_ff_upd_cur_record.iuc_webm_inv_cols, ',');
strsql_set := (CONCAT_WS('', strsql_set, cust_ff_upd_cur_record.iuc_query, ','))::TEXT;
END LOOP;
CLOSE cust_ff_update_cur;
IF strsql_set IS NOT NULL THEN
SELECT
substring(strsql_sel, 1, LENGTH(strsql_sel) - 1)
INTO STRICT strsql_sel;
SELECT
substring(strsql_set, 1, LENGTH(strsql_set::TEXT) - 1)
INTO STRICT strsql_set;
IF v_clone_grp IS NULL THEN
strsql := (CONCAT_WS('', strsql_main, strsql_set))::TEXT;
SELECT
replace(strsql::TEXT, '<<SELECTCOL>>'::TEXT,
coalesce(CONCAT_WS('', strsql_select, strsql_sel)::TEXT, ''))
INTO STRICT strsql;
strsql := (CONCAT_WS('', strsql, ' , Timestamp = CURRENT_TIMESTAMP::TIMESTAMP(0) '))::TEXT;EXECUTE strsql;
RAISE NOTICE 'strsql%,SELECTCOL%',strsql,SELECTCOL;ELSE
strsql := (CONCAT_WS('', strsql_main_Clone, strsql_set))::TEXT;
SELECT
replace(strsql::TEXT, '<<SELECTCOL>>'::TEXT,
coalesce(CONCAT_WS('', strsql_select2, strsql_sel)::TEXT, ''))
INTO STRICT strsql;
strsql := (CONCAT_WS('', strsql, ' , Timestamp = CURRENT_TIMESTAMP::TIMESTAMP(0) '))::TEXT;
EXECUTE strsql;
ENDIF;
ENDIF;
END;
$BODY$;
Das sieht schon besser aus, als der erste Versuch. Aber trotzdem, warum postest Du auskommentierten Code?
Wenn Du den Code etwas aufräumst und Zeilenumbrüche einfügst, wo ein Semicolon steht, dann wird es noch besser lesbar.
Vielleicht kommt der Compiler dann auch besser mit dem Code zurecht. Versuch’s mal!
Besonders dort, wo der Syntaxfehler kommt.
Falls Du auf dem Weg nicht weiter kommst, nimmst Du jedes einzelne Statement aus der Prozedur und versuchst es stand-alone auszuführen, Parameter und Variablen musst Du natürlich sinnvoll ersetzen. Es muss kein sinnvolles Ergebnis herauskommen, aber jedes Statement sollte für sich genommen ausführbar sein. Pass auf, dass Du mit den Updates nichts kaputt schreibst.
1 „Gefällt mir“