Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- CREATE OR REPLACE FUNCTION ZBX_GETNEXTID( nodeid NUMBER, tablename VARCHAR2, fieldname VARCHAR2, idmin NUMBER, idmax NUMBER, inc NUMBER )
- RETURN NUMBER IS
- sqlquery VARCHAR2(1000);
- sequencename VARCHAR2(128);
- sequenceexists NUMBER;
- nextid NUMBER(20);
- lastid NUMBER(20);
- BEGIN
- --
- -- sequencename construct - IDSSEQ_NODEID_TABLENAME_FIELDNAME
- --
- SELECT UPPER('idsseq_'||CAST(nodeid AS VARCHAR2(10))||'_'||tablename||'_'||fieldname) INTO sequencename
- FROM dual;
- -- checks if sequence exists
- sqlquery := 'SELECT COUNT(1) FROM USER_SEQUENCES WHERE SEQUENCE_NAME = '''||sequencename||'''';
- EXECUTE IMMEDIATE sqlquery INTO sequenceexists;
- -- if not, create it
- IF sequenceexists = 0 THEN
- -- get last id looking into table
- sqlquery := 'SELECT NVL(MAX('||fieldname||'),'||CAST(idmin AS VARCHAR2)||') FROM '||tablename||' WHERE '||fieldname||' BETWEEN '||CAST(idmin AS VARCHAR2)||' AND '||CAST(idmax AS VARCHAR2);
- EXECUTE IMMEDIATE sqlquery INTO lastid;
- -- create the new sequence
- sqlquery := 'CREATE SEQUENCE '||sequencename||' START WITH '||CAST(lastid AS VARCHAR2)||' INCREMENT BY '||CAST(inc AS VARCHAR2)||' NOMAXVALUE';
- EXECUTE IMMEDIATE sqlquery;
- END IF;
- -- retrieve the nextid from sequence
- sqlquery := 'SELECT LEAST(GREATEST(NVL('||sequencename||'.nextval,0),'||CAST(idmin AS VARCHAR2)||'),'||CAST(idmax AS VARCHAR2)||') FROM dual';
- EXECUTE IMMEDIATE sqlquery INTO nextid;
- -- dbms_output.put_line( 'sequenceexists = '||CAST(sequenceexists AS CHAR) );
- -- dbms_output.put_line( 'sequencename = '||sequencename );
- -- dbms_output.put_line( 'nextid = '||CAST(nextid AS VARCHAR2) );
- RETURN nextid;
- END;
- /
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement