Quantcast
Channel: oracle function call is being cached during bulk insert - Stack Overflow
Viewing all articles
Browse latest Browse all 4

oracle function call is being cached during bulk insert

$
0
0

when inserting bulk rows and using a function call as one of the column values i'm getting exactly the same values for every 10-11 rows from the function. the function is actually generating UUID values and returns unique results. If i replace the function call in the insert statement with the actual code of the function it never repeats.

So what i conclude from this is that oracle actually caches the result of the function and calls it only once for every 10-11 rows it's inserting. how can i change this behavior?

the function i'm calling i've taken from http://www.oracle-base.com/articles/9i/UUID9i.php :

create or replaceFUNCTION        new_uuid RETURN VARCHAR2 AS  l_seed        BINARY_INTEGER;  l_random_num  NUMBER(5);  l_date        VARCHAR2(25);  l_random      VARCHAR2(4);  l_ip_address  VARCHAR2(12);BEGIN  l_seed := TO_NUMBER(TO_CHAR(SYSDATE,'YYYYDDMMSS'));  DBMS_RANDOM.initialize (val => l_seed);  l_random_num := TRUNC(DBMS_RANDOM.value(low => 1, high => 65535));  DBMS_RANDOM.terminate;  l_date       := conversion_api.to_hex(TO_NUMBER(TO_CHAR(SYSTIMESTAMP,'FFSSMIHH24DDMMYYYY')));  l_random     := RPAD(conversion_api.to_hex(l_random_num), 4, '0');  l_ip_address := conversion_api.to_hex(TO_NUMBER(REPLACE(NVL(SYS_CONTEXT('USERENV','IP_ADDRESS'), '123.123.123.123'), '.', '')));  RETURN SUBSTR(l_date, 1, 8)                     || '-' ||         SUBSTR(l_date, 9, 4)                     || '-' ||         SUBSTR(l_date, 13, 4)                    || '-' ||         RPAD(SUBSTR(l_date, 17), 4, '0')         || '-' ||         RPAD(L_RANDOM || L_IP_ADDRESS, 12, '0');END;

and here's the insert statement i'm using:

INSERT INTO My_TABLE(ID, NAME,)SELECT NEW_UUID(), NAMEFROM MY_TABLE2;COMMIT;

the select inside this statement produces lots of repeating UUIDs. while this statement produces unique ones:

SELECT RPAD(RPAD(my_schema.conversion_api.to_hex(TRUNC(DBMS_RANDOM.VALUE( 1, 65535))), 4, '0') || my_schema.conversion_api.to_hex(TO_NUMBER(REPLACE(NVL(SYS_CONTEXT('USERENV','IP_ADDRESS'), '123.123.123.123'), '.', ''))), 12, '0') sssFROM my_schema.MY_TABLE

Viewing all articles
Browse latest Browse all 4

Latest Images

Trending Articles





Latest Images