Skip to content

Instantly share code, notes, and snippets.

@pranithan-kang
Last active March 4, 2024 08:48
Show Gist options
  • Save pranithan-kang/5dc442f52d408b13ba96b253d9b6caab to your computer and use it in GitHub Desktop.
Save pranithan-kang/5dc442f52d408b13ba96b253d9b6caab to your computer and use it in GitHub Desktop.
GET TABLE NAME LIMITED BY ORACLE 30 CHARACTER RULE
CREATE OR REPLACE FUNCTION PDBADMIN.GET_TB(DJANGO_FULL_INSTANCE_NAME IN VARCHAR) RETURN VARCHAR
IS
/**
* GET TABLE NAME LIMITED BY ORACLE 30 CHARACTER RULE
* RELATED DJANGO CODE IS [HERE](https://github.com/django/django/blob/main/django/db/backends/utils.py#L283)
*
* PARAMETER
* ---------
* - DJANGO_FULL_INSTANCE_NAME [VARCHAR] IS DJANGO_APP_NAME PLUS '_' PLUS DJANGO_MODEL_NAME
* FOR EXAMPLE, IF YOU WOULD LIKE TO GET THE TABLE NAME OF RequestForCompensationAppealItem
* LOCATED IN appeal DJANGO APP, THE DJANGO_FULL_INSTANCE_NAME SHOULD BE appeal_RequestForCompensationAppealItem
*
* RETURN [VARCHAR]
* ------
* RETURN TRUE TABLE NAME THAT YOU CAN PUT IN SELECT STATEMENT
*
*/
L INTEGER;
LOWER_NAME VARCHAR(50);
UPPER_NAME VARCHAR(50);
RET VARCHAR(50);
BEGIN
LOWER_NAME := LOWER(DJANGO_FULL_INSTANCE_NAME);
UPPER_NAME := UPPER(DJANGO_FULL_INSTANCE_NAME);
L := LENGTH(DJANGO_FULL_INSTANCE_NAME);
IF L > 30 THEN
SELECT SUBSTR(UPPER_NAME, 0, 26) ||
SUBSTR(RAWTOHEX(STANDARD_HASH(LOWER_NAME, 'MD5')), 0, 4)
INTO RET FROM DUAL;
ELSE
RET := UPPER_NAME;
END IF;
RETURN RET;
END;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment