Thread: [GENERAL] Oracle database into PostgreSQL using Ora2PG tool.
Hi All,I am migrating Oracle database into PostgreSQL using Ora2PG tool.So, I am facing one issue with trigger after generating script output of Oracle database.Oracle :CREATE OR REPLACE TRIGGER UPDATE_JOB_HISTORYAFTER UPDATE OF JOB_ID, DEPARTMENT_ID ON EMPLOYEESFOR EACH ROWBEGINadd_job_history(:old.employee_id, :old.hire_date, sysdate, :old.job_id, :old.department_id);END;/The script generated by Ora2PG tool.DROP TRIGGER IF EXISTS update_job_history ON employees CASCADE;CREATE OR REPLACE FUNCTION trigger_fct_update_job_history() RETURNS trigger AS $BODY$ BEGINadd_job_history(OLD.employee_id, OLD.hire_date, LOCALTIMESTAMP, OLD.job_id, OLD.department_id);RETURN NEW;END$BODY$LANGUAGE 'plpgsql';CREATE TRIGGER update_job_historyAFTER UPDATE ON employees FOR EACH ROWEXECUTE PROCEDURE trigger_fct_update_job_history(); when I try to run the above-generated script it will show below error.ERROR: syntax error at or near "add_job_history"LINE 4: add_job_history(OLD.employee_id, OLD.hire_date, LOCALTIMES... ^NOTICE: relation "employees" does not exist, skipping
Please Suggest or help to resolve it.-Pawan
(Offlist: phone)It's saying the table isn't there. Is it? Is it maybe spelled "EMPLOYEES" (all caps) instead? You need double quotes if so.A
--Andrew SullivanPlease excuse my clumbsy thums.Hi All,I am migrating Oracle database into PostgreSQL using Ora2PG tool.So, I am facing one issue with trigger after generating script output of Oracle database.Oracle :CREATE OR REPLACE TRIGGER UPDATE_JOB_HISTORYAFTER UPDATE OF JOB_ID, DEPARTMENT_ID ON EMPLOYEESFOR EACH ROWBEGINadd_job_history(:old.employee_id, :old.hire_date, sysdate, :old.job_id, :old.department_id);END;/The script generated by Ora2PG tool.DROP TRIGGER IF EXISTS update_job_history ON employees CASCADE;CREATE OR REPLACE FUNCTION trigger_fct_update_job_history() RETURNS trigger AS $BODY$ BEGINadd_job_history(OLD.employee_id, OLD.hire_date, LOCALTIMESTAMP, OLD.job_id, OLD.department_id);RETURN NEW;END$BODY$LANGUAGE 'plpgsql';CREATE TRIGGER update_job_historyAFTER UPDATE ON employees FOR EACH ROWEXECUTE PROCEDURE trigger_fct_update_job_history(); when I try to run the above-generated script it will show below error.ERROR: syntax error at or near "add_job_history"LINE 4: add_job_history(OLD.employee_id, OLD.hire_date, LOCALTIMES... ^NOTICE: relation "employees" does not exist, skippingPlease Suggest or help to resolve it.-Pawan
Hi2017-06-02 10:16 GMT+02:00 PAWAN SHARMA <er.pawanshr0963@gmail.com>:Hi All,I am migrating Oracle database into PostgreSQL using Ora2PG tool.So, I am facing one issue with trigger after generating script output of Oracle database.Oracle :CREATE OR REPLACE TRIGGER UPDATE_JOB_HISTORYAFTER UPDATE OF JOB_ID, DEPARTMENT_ID ON EMPLOYEESFOR EACH ROWBEGINadd_job_history(:old.employee_id, :old.hire_date, sysdate, :old.job_id, :old.department_id);END;/The script generated by Ora2PG tool.DROP TRIGGER IF EXISTS update_job_history ON employees CASCADE;CREATE OR REPLACE FUNCTION trigger_fct_update_job_history() RETURNS trigger AS $BODY$ BEGINadd_job_history(OLD.employee_id, OLD.hire_date, LOCALTIMESTAMP, OLD.job_id, OLD.department_id);RETURN NEW;END$BODY$LANGUAGE 'plpgsql';CREATE TRIGGER update_job_historyAFTER UPDATE ON employees FOR EACH ROWEXECUTE PROCEDURE trigger_fct_update_job_history(); when I try to run the above-generated script it will show below error.ERROR: syntax error at or near "add_job_history"LINE 4: add_job_history(OLD.employee_id, OLD.hire_date, LOCALTIMES... ^NOTICE: relation "employees" does not exist, skippingmaybe you have too old version of ora2pg. Master ora2pg is able to emulate procedure call by SELECT command.RegardsPavelPlease Suggest or help to resolve it.-Pawan
Hi Pavel,On Fri, Jun 2, 2017 at 2:13 PM, Pavel Stehule <pavel.stehule@gmail.com> wrote:Hi2017-06-02 10:16 GMT+02:00 PAWAN SHARMA <er.pawanshr0963@gmail.com>:Hi All,I am migrating Oracle database into PostgreSQL using Ora2PG tool.So, I am facing one issue with trigger after generating script output of Oracle database.Oracle :CREATE OR REPLACE TRIGGER UPDATE_JOB_HISTORYAFTER UPDATE OF JOB_ID, DEPARTMENT_ID ON EMPLOYEESFOR EACH ROWBEGINadd_job_history(:old.employee_id, :old.hire_date, sysdate, :old.job_id, :old.department_id);END;/The script generated by Ora2PG tool.DROP TRIGGER IF EXISTS update_job_history ON employees CASCADE;CREATE OR REPLACE FUNCTION trigger_fct_update_job_history() RETURNS trigger AS $BODY$ BEGINadd_job_history(OLD.employee_id, OLD.hire_date, LOCALTIMESTAMP, OLD.job_id, OLD.department_id);RETURN NEW;END$BODY$LANGUAGE 'plpgsql';CREATE TRIGGER update_job_historyAFTER UPDATE ON employees FOR EACH ROWEXECUTE PROCEDURE trigger_fct_update_job_history(); when I try to run the above-generated script it will show below error.ERROR: syntax error at or near "add_job_history"LINE 4: add_job_history(OLD.employee_id, OLD.hire_date, LOCALTIMES... ^NOTICE: relation "employees" does not exist, skippingmaybe you have too old version of ora2pg. Master ora2pg is able to emulate procedure call by SELECT command.RegardsPavelPlease Suggest or help to resolve it.-PawanThanks for the response, I am using.c:\ora2pg>ora2pg -c ora2pg.conf -vOra2Pg v18.1
On 2 June 2017 at 04:16, PAWAN SHARMA <er.pawanshr0963@gmail.com> wrote: > Hi All, > > I am migrating Oracle database into PostgreSQL using Ora2PG tool. > > So, I am facing one issue with trigger after generating script output of > Oracle database. > > Oracle : > > CREATE OR REPLACE TRIGGER UPDATE_JOB_HISTORY > AFTER UPDATE OF JOB_ID, DEPARTMENT_ID ON EMPLOYEES > FOR EACH ROW > BEGIN > add_job_history(:old.employee_id, :old.hire_date, sysdate, > :old.job_id, :old.department_id); > END; > / > > The script generated by Ora2PG tool. > > DROP TRIGGER IF EXISTS update_job_history ON employees CASCADE; > CREATE OR REPLACE FUNCTION trigger_fct_update_job_history() RETURNS trigger > AS $BODY$ > BEGIN > add_job_history(OLD.employee_id, OLD.hire_date, LOCALTIMESTAMP, > OLD.job_id, OLD.department_id); > RETURN NEW; > END > $BODY$ > LANGUAGE 'plpgsql'; The examples here https://www.postgresql.org/docs/9.5/static/sql-createfunction.html have a semi colon after 'END', is that the syntax error? > CREATE TRIGGER update_job_history > AFTER UPDATE ON employees FOR EACH ROW > EXECUTE PROCEDURE trigger_fct_update_job_history(); > > > when I try to run the above-generated script it will show below error. > > ERROR: syntax error at or near "add_job_history" > LINE 4: add_job_history(OLD.employee_id, OLD.hire_date, LOCALTIMES... > ^ > NOTICE: relation "employees" does not exist, skipping Since this is a NOTICE maybe it's a red herring? the results of a CREATE IF NOT EXISTS or similar? -- Neil Anderson neil@postgrescompare.com https://www.postgrescompare.com
From: pgsql-general-owner@postgresql.org [mailto:pgsql-general-owner@postgresql.org] On Behalf Of PAWAN SHARMA
Sent: Friday, June 02, 2017 4:17 AM
To: pgsql-general@postgresql.org
Subject: [GENERAL] Oracle database into PostgreSQL using Ora2PG tool.
Attention: This email was sent from someone outside of Perceptron. Always exercise caution when opening attachments or clicking links from unknown senders or when receiving unexpected emails.
Hi All,
I am migrating Oracle database into PostgreSQL using Ora2PG tool.
So, I am facing one issue with trigger after generating script output of Oracle database.
Oracle :
CREATE OR REPLACE TRIGGER UPDATE_JOB_HISTORY
AFTER UPDATE OF JOB_ID, DEPARTMENT_ID ON EMPLOYEES
FOR EACH ROW
BEGIN
add_job_history(:old.employee_id, :old.hire_date, sysdate,
:old.job_id, :old.department_id);
END;
/
The script generated by Ora2PG tool.
DROP TRIGGER IF EXISTS update_job_history ON employees CASCADE;
CREATE OR REPLACE FUNCTION trigger_fct_update_job_history() RETURNS trigger AS $BODY$
BEGIN
add_job_history(OLD.employee_id, OLD.hire_date, LOCALTIMESTAMP,
OLD.job_id, OLD.department_id);
RETURN NEW;
END
$BODY$
LANGUAGE 'plpgsql';
CREATE TRIGGER update_job_history
AFTER UPDATE ON employees FOR EACH ROW
EXECUTE PROCEDURE trigger_fct_update_job_history();
when I try to run the above-generated script it will show below error.
ERROR: syntax error at or near "add_job_history"
LINE 4: add_job_history(OLD.employee_id, OLD.hire_date, LOCALTIMES...
^
NOTICE: relation "employees" does not exist, skipping
Please Suggest or help to resolve it.
-Pawan
When you call a function inside PlSQL code and don’t care about returned value, then you do: PERFORM function_name(…).
Otherwise you do: SELECT function_name(…) INTO your_variable;
So:
DROP TRIGGER IF EXISTS update_job_history ON employees CASCADE;
CREATE OR REPLACE FUNCTION trigger_fct_update_job_history() RETURNS trigger AS $BODY$
BEGIN
PERFORM add_job_history(OLD.employee_id, OLD.hire_date, LOCALTIMESTAMP,
OLD.job_id, OLD.department_id);
RETURN NEW;
END
$BODY$
LANGUAGE 'plpgsql';
Regards,
Igor Neyman
From: pgsql-general-owner@postgresql.org [mailto:pgsql-general-owner@postgresql.org] On Behalf Of Igor Neyman
Sent: Friday, June 02, 2017 9:45 AM
To: PAWAN SHARMA <er.pawanshr0963@gmail.com>; pgsql-general@postgresql.org
Subject: Re: [GENERAL] Oracle database into PostgreSQL using Ora2PG tool.
Attention: This email was sent from someone outside of Perceptron. Always exercise caution when opening attachments or clicking links from unknown senders or when receiving unexpected emails.
From: pgsql-general-owner@postgresql.org [mailto:pgsql-general-owner@postgresql.org] On Behalf Of PAWAN SHARMA
Sent: Friday, June 02, 2017 4:17 AM
To: pgsql-general@postgresql.org
Subject: [GENERAL] Oracle database into PostgreSQL using Ora2PG tool.
Attention: This email was sent from someone outside of Perceptron. Always exercise caution when opening attachments or clicking links from unknown senders or when receiving unexpected emails.
Hi All,
I am migrating Oracle database into PostgreSQL using Ora2PG tool.
So, I am facing one issue with trigger after generating script output of Oracle database.
Oracle :
CREATE OR REPLACE TRIGGER UPDATE_JOB_HISTORY
AFTER UPDATE OF JOB_ID, DEPARTMENT_ID ON EMPLOYEES
FOR EACH ROW
BEGIN
add_job_history(:old.employee_id, :old.hire_date, sysdate,
:old.job_id, :old.department_id);
END;
/
The script generated by Ora2PG tool.
DROP TRIGGER IF EXISTS update_job_history ON employees CASCADE;
CREATE OR REPLACE FUNCTION trigger_fct_update_job_history() RETURNS trigger AS $BODY$
BEGIN
add_job_history(OLD.employee_id, OLD.hire_date, LOCALTIMESTAMP,
OLD.job_id, OLD.department_id);
RETURN NEW;
END
$BODY$
LANGUAGE 'plpgsql';
CREATE TRIGGER update_job_history
AFTER UPDATE ON employees FOR EACH ROW
EXECUTE PROCEDURE trigger_fct_update_job_history();
when I try to run the above-generated script it will show below error.
ERROR: syntax error at or near "add_job_history"
LINE 4: add_job_history(OLD.employee_id, OLD.hire_date, LOCALTIMES...
^
NOTICE: relation "employees" does not exist, skipping
Please Suggest or help to resolve it.
-Pawan
When you call a function inside PlSQL code and don’t care about returned value, then you do: PERFORM function_name(…).
Otherwise you do: SELECT function_name(…) INTO your_variable;
So:
DROP TRIGGER IF EXISTS update_job_history ON employees CASCADE;
CREATE OR REPLACE FUNCTION trigger_fct_update_job_history() RETURNS trigger AS $BODY$
BEGIN
PERFORM add_job_history(OLD.employee_id, OLD.hire_date, LOCALTIMESTAMP,
OLD.job_id, OLD.department_id);
RETURN NEW;
END
$BODY$
LANGUAGE 'plpgsql';
Regards,
Igor Neyman
P.S. Also you are missing semicolon (END;):
DROP TRIGGER IF EXISTS update_job_history ON employees CASCADE;
CREATE OR REPLACE FUNCTION trigger_fct_update_job_history() RETURNS trigger AS $BODY$
BEGIN
PERFORM add_job_history(OLD.employee_id, OLD.hire_date, LOCALTIMESTAMP,
OLD.job_id, OLD.department_id);
RETURN NEW;
END;
$BODY$
LANGUAGE 'plpgsql';
On 2 June 2017 at 11:57, stevenchang1213 <stevenchang1213@gmail.com> wrote: > > > tell me where this function add_job_history() is? > Actually, I don't think you can count on ora2pg to transform your pl/sql > code to plpgsql or other (un)trusted procedural language code. It's not that > simple! I wonder, does plpgsql compilation check for existence of the add_job_history function or is that a runtime check? > you can type "\df add_job_history" in psql session to check it's existence > if it belongs to public schema or access it using fully qualified name > scheme. > > > Steven >
Attachment
I wonder, does plpgsql compilation check for existence of the add_job_history function or is that a runtime check? ____________________________________________________________________ At runtime.
I wonder, does plpgsql compilation check for existence of the add_job_history function or is that a runtime check?
____________________________________________________________ ________
At runtime.
DROP TRIGGER IF EXISTS update_job_history ON employees CASCADE;
CREATE OR REPLACE FUNCTION trigger_fct_update_job_
BEGIN
PERFORM add_job_history(OLD.employee_ OLD.job_id, OLD.department_id); RETURN NEW; END $BODY$ LANGUAGE 'plpgsql';