From: | Pepe TD Vo <pepevo(at)yahoo(dot)com> |
---|---|
To: | Pgsql-admin <pgsql-admin(at)postgresql(dot)org> |
Subject: | %rowtype |
Date: | 2018-11-09 02:54:51 |
Message-ID: | 1769600488.1326361.1541732091653@mail.yahoo.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-admin |
Hello,
Would you please tell me what I did wrong here? I couldn't find the rowtype eliminate with a cursor in multi-tables selected.
CREATE OR REPLACE FUNCTION "CIDR_STAGING"."PR_MIG_STG_I864" ( v_Ret OUT int ) RETURNS integer as $$ declare c1 cursor is SELECT stg.Service_Center, stg.Receipt_Number, stg.Date_Entered, stg.Sequence_Number, stg.SSN, stg.A_Number, stg.Last_Name, stg.First_Name, stg.Middle_Name, stg.DOB, stg.Street_Mail, stg.City_Mail, stg.State_Mail, stg.Zip_Mail, stg.Province_Mail, stg.Postal_Code_Mail, stg.Country_Mail, stg.Street_Res, stg.City_Res, stg.State_Res, stg.Zip_Res, stg.Province_Res, stg.Postal_Code_Res, stg.Country_Res, stg.US_Citizen, stg.Basis, stg.Accompany, stg.mig_filename,stg.mig_insert_dt,stg.mig_modified_dt, prod.receipt_number as prod_receipt_number, prod.date_entered as prod_date_entered, prod.sequence_number as prod_sequence_number FROM cidr_staging.stg_i864 stg LEFT OUTER JOIN cidrdba.sc_i864 prod ON coalesce(stg.receipt_number,'NULL') = coalesce(prod.receipt_number,'NULL') AND coalesce(stg.date_entered,'NULL') = coalesce(prod.date_entered,'NULL') AND coalesce(stg.sequence_number,'NULL') = coalesce(prod.sequence_number,'NULL') ORDER by stg.mig_seq; rec1 c1%rowtype; v_rows int = 0; v_seq int =0; v_ErrorCode int; v_ErrorMsg varchar(512); v_Module varchar(32) = 'PR_MIG_STG_I864'; v_DDL varchar(10); v_Rec_Num cidr_staging.stg_i864.receipt_number%type; v_Dat_Ent cidr_staging.stg_i864.date_entered%type; v_Seq_Num cidr_staging.stg_i864.sequence_number%type;
begin
v_Ret := 0; for rec1 in c1
loop --dbms_output.put_line('Processing Receipt_Number ' || rec1.receipt_number); ---- -- If the PROD_RECEIPT_NUMBER is null, then the record does not exist in the Production table. ---- if rec1.prod_receipt_number is null then v_Rec_Num := rec1.receipt_number; v_Dat_Ent := rec1.date_entered; v_Seq_Num := rec1.sequence_number;
insert into cidrdba.sc_i864 values ( rec1.Service_Center, rec1.Receipt_Number, coalesce(rec1.Date_Entered,''), rec1.Sequence_Number, rec1.ssn, rec1.a_number, rec1.last_name, rec1.first_name, rec1.middle_name, rec1.dob, rec1.street_mail, rec1.city_mail, rec1.state_mail, rec1.zip_mail, rec1.Province_Mail, rec1.Postal_Code_Mail, rec1.Country_Mail, rec1.Street_Res, rec1.City_Res, rec1.State_Res, rec1.Zip_Res, rec1.Province_Res, rec1.Postal_Code_Res, rec1.Country_Res, rec1.US_Citizen, rec1.Basis, rec1.Accompany, rec1.mig_filename, rec1.mig_insert_dt, rec1.mig_modified_dt ); v_rows := sql%rowcount; if v_rows != 1 then v_Ret := 1; PERFORM pr_write_error_log( sys_context('userenv','session_user'), sys_context('userenv','host'), v_Module, 0, 'INSERT processed ' || v_rows ); end if; elsif coalesce(rec1.prod_receipt_number,'NULL') = coalesce(rec1.receipt_number,'NULL') and coalesce(rec1.prod_date_entered,'NULL') = coalesce(rec1.date_entered,'NULL') and coalesce(rec1.prod_sequence_number,'NULL') = coalesce(rec1.sequence_number,'NULL') then v_Rec_Num := rec1.receipt_number; v_Dat_Ent := rec1.date_entered; v_Seq_Num := rec1.sequence_number; update cidrdba.sc_i864 set SSN = rec1.SSN, A_Number = rec1.A_Number, Last_Name = rec1.Last_Name, First_Name = rec1.First_Name, Middle_Name = rec1.Middle_Name, DOB = rec1.DOB, Street_Mail = rec1.Street_Mail, City_Mail = rec1.City_Mail, State_Mail = rec1.State_Mail, Zip_Mail = rec1.Zip_Mail, Province_Mail = rec1.Province_Mail, Postal_Code_Mail = rec1.Postal_Code_Mail, Country_Mail = rec1.Country_Mail, Street_Res = rec1.Street_Res, City_Res = rec1.City_Res, State_Res = rec1.State_Res, Zip_Res = rec1.Zip_Res, Province_Res = rec1.Province_Res, Postal_Code_Res = rec1.Postal_Code_Res, Country_Res = rec1.Country_Res, US_Citizen = rec1.US_Citizen, Basis = rec1.Basis, Accompany = rec1.Accompany, mig_filename = rec1.mig_filename, mig_modified_dt = current_timestamp where coalesce(receipt_number,'NULL') = coalesce(rec1.receipt_number,'NULL') and coalesce(date_entered,'NULL') = coalesce(rec1.date_entered,'NULL') and coalesce(sequence_number,'NULL') = coalesce(rec1.sequence_number,'NULL'); v_rows := sql%rowcount; if v_rows != 1 then v_Ret := 1; pr_write_error_log( sys_context('userenv','session_user'), sys_context('userenv','host'), v_Module, 0, 'UPDATE processed ' || v_rows || ', expected 1' ); end if; else v_Ret := 1; PERFORM pr_write_error_log( sys_context('userenv','session_user'), sys_context('userenv','host'), v_Module, 0, 'FAILED to process: ' || rec1.Receipt_Number || ', ' || rec1.Date_Entered || ', ' || rec1.Sequence_Number ); end if; exit when v_Ret != 0 or SQLCODE != 0; end loop;
if v_Ret = 0 then v_Ret := SQLCODE; end if;
exception when others then v_ErrorCode := SQLCODE; v_ErrorMsg := SQLERRM;
if inserting then v_ddl := 'INSERT'; elsif updating then v_ddl := 'UPDATE'; else v_ddl := 'UNKNOWN'; end if;
PERFORM pr_write_error_log( sys_context('userenv','session_user'), sys_context('userenv','host'), v_Module, 0, v_ddl || ' encountered FALTAL ERROR: (' || v_ErrorCode || '): ' || v_ErrorMsg );
--dbms_output.put_line('FATAL ERROR while ' || v_ddl || ': Encountered (' || v_ErrorCode || ') : ' || v_ErrorMsg ); --dbms_output.put_line('FATAL ERROR: Record ' || nvl(v_Rec_Num,'null') || '~' || nvl(v_Dat_Ent,'null') || '~' || nvl(v_Seq_Num,'null') );end;$$ LANGUAGE plpgsql;
ERROR: relation "c1" does not existCONTEXT: compilation of PL/pgSQL function "PR_MIG_STG_I864" near line 17SQL state: 42P01 I found the %rowtype could declare of the table%rowtype,myrow tablename%ROWTYPE; but my oracle script had union tables, how can I declare it? I have tried declare rec1 stg%rowtype or prod%rowtype and/or the cidr_staging.stg_i864%rowtype... the error is still same, relation does not exist.
Any helps and explanation would be appreciated.
v/r,
Bach-Nga
No one in this world is pure and perfect. If you avoid people for their mistakes you will be alone. So judge less, love and forgive more.To call him a dog hardly seems to do him justice though in as much as he had four legs, a tail, and barked, I admit he was, to all outward appearances. But to those who knew him well, he was a perfect gentleman (Hermione Gingold)
**Live simply **Love generously **Care deeply **Speak kindly.*** Genuinely rich *** Faithful talent *** Sharing success
From | Date | Subject | |
---|---|---|---|
Next Message | Laurenz Albe | 2018-11-09 07:26:40 | Re: %rowtype |
Previous Message | Pepe TD Vo | 2018-11-08 20:13:55 | Re: execute a procedure from another procudure? |