From: Dinesh Pandey [mailto:[EMAIL PROTECTED]
Sent: Thursday, March 31, 2005 2:45 PM
To: pgsql-bugs@postgresql.org
Subject: Help
Importance: High
Hi,
I have installed
PostgreSQL 8.0.1 on Solaris 9.
I am porting my
database from Oracle 9i to PostgreSQL. I am using PL/pgSQL
language.
In Oracle we can
get error message from "SQLERRM" keyword and inserting it into table.
How can I get
error message/code in PostgreSQL after an EXCEPTION or RAISE EXCEPTION
occurs in EXCEPTION block??
Pls help me or
send me some example.
Thanks
Dinesh
Pandey
CREATE OR REPLACE FUNCTION
DOES_NODE_HAVE_RULE
(IN_SENTRYID_ID IN NUMBER
,IN_NODE_ID IN NUMBER
,IN_DEVICEID IN NUMBER
,IN_ACTION IN VARCHAR2
)
RETURN BOOLEAN
IS
(IN_SENTRYID_ID IN NUMBER
,IN_NODE_ID IN NUMBER
,IN_DEVICEID IN NUMBER
,IN_ACTION IN VARCHAR2
)
RETURN BOOLEAN
IS
does NUMBER(2) := 0;
mesg VARCHAR2(500) := 'Does rule exist failed for sentry: '||in_sentryid_id||', node: '||in_node_id||'.';
c_context VARCHAR2(50) := 'DOES NODE HAVE RULE';
c_program VARCHAR2(100) := 'RULE_CONTROL.DOES_NODE_HAVE_RULE';
v_sql VARCHAR2(1000);
BEGIN
v_sql := 'SELECT COUNT(*) FROM
PORTAL_'||in_action||'_NODE_RULE WHERE sentryid_id =
'||in_sentryid_id||
' AND node_id = '||in_node_id||' AND device_id ='||in_deviceid;
' AND node_id = '||in_node_id||' AND device_id ='||in_deviceid;
EXECUTE IMMEDIATE v_sql INTO does;
IF does > 0 THEN
RETURN TRUE;
ELSIF does = 0 THEN
RETURN FALSE;
END IF;
IF does > 0 THEN
RETURN TRUE;
ELSIF does = 0 THEN
RETURN FALSE;
END IF;
EXCEPTION
WHEN OTHERS THEN
DATAMAN.log_error(c_program, c_context, 1, 'PACKAGE', 'OTHERS: '||mesg, SQLERRM);
RAISE_APPLICATION_ERROR(-20000,SUBSTR(SQLERRM,1,250));
WHEN OTHERS THEN
DATAMAN.log_error(c_program, c_context, 1, 'PACKAGE', 'OTHERS: '||mesg, SQLERRM);
RAISE_APPLICATION_ERROR(-20000,SUBSTR(SQLERRM,1,250));
END does_node_have_rule;
/
SHOW ERROR
/
SHOW ERROR