Last active
April 23, 2024 09:03
-
-
Save omansak/f19eefffd2d639ac72a1f4b506d8471a to your computer and use it in GitHub Desktop.
Oracle DB Generate Class From Table
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
______________________________________________________________________ | |
| ORACLE DATABASE DATA TYPE | NET TYPE ALIAS | NETDATATYPE | | |
|----------------------------|----------------|----------------------| | |
| NUMBER1 | BOOL | SYSTEM.BOOLEAN | | |
| NUMBER2TONUMBER4 | BYTE | SYSTEM.BYTE | | |
| NUMBER5 | SHORTINT16 | SYSTEM.INT16 | | |
| NUMBER6TONUMBER10 | INTINT32 | SYSTEM.INT32 | | |
| NUMBER11TONUMBER19 | LONGINT64 | SYSTEM.INT64 | | |
| NUMBERGT19 | DECIMAL | SYSTEM.DECIMAL | | |
| NUMBERPS | DECIMAL | SYSTEM.DECIMAL | | |
| NUMBER | DECIMAL | SYSTEM.DECIMAL | | |
| BINARY_FLOAT | FLOAT | SYSTEM.FLOAT | | |
| BINARY_DOUBLE | DOUBLE | SYSTEM.DOUBLE | | |
| TIMESTAMP | DATETIME | SYSTEM.DATETIME | | |
| TIMESTAMPWITHTIMEZONE | DATETIMEOFFSET | SYSTEM.DATETIMEOFFSET | | |
| TIMESTAMPWITHLOCALTIMEZONE | DATETIMEOFFSET | SYSTEM.DATETIMEOFFSET | | |
| DATE | DATE | SYSTEM.DATE | | |
| INTERVALDAYTOSECOND | TIMESPAN | SYSTEM.TIMESPAN | | |
| INTERVALYEARTOMONTH | STRING | SYSTEM.STRING | | |
| VARCHAR2 | STRING | SYSTEM.STRING | | |
| JSON | STRING | SYSTEM.STRING | | |
| NVARCHAR2 | STRING | SYSTEM.STRING | | |
| CHAR | STRING | SYSTEM.STRING | | |
| NCHAR | STRING | SYSTEM.STRING | | |
| CLOB | STRING | SYSTEM.STRING | | |
| NCLOB | STRING | SYSTEM.STRING | | |
| RAW | BYTE | SYSTEM.BYTE | | |
| BLOB | BYTE | SYSTEM.BYTE | | |
| XMLTYPE | STRING | SYSTEM.STRING | | |
| ROWID | STRING | SYSTEM.STRING | | |
| UROWID | STRING | SYSTEM.STRING | | |
| LONG | STRING | SYSTEM.STRING | | |
| BFILE | BYTE | SYSTEM.BYTE | | |
| LONGRAW | BYTE | SYSTEM.BYTE | | |
______________________________________________________________________ | |
*/ | |
--https://docs.oracle.com/en/database/oracle/oracle-database/21/odpnt/EFCoreREDataTypeMapping.html#GUID-4FF3A9A3-AE49-431B-A4FB-31F8C53FCCF5 | |
WITH PROPERTIES AS | |
( | |
SELECT | |
CASE | |
WHEN C.COLUMN_NAME IN | |
( | |
SELECT COLUMN_NAME | |
FROM ALL_CONS_COLUMNS | |
WHERE CONSTRAINT_NAME =( SELECT CONSTRAINT_NAME FROM ALL_CONSTRAINTS WHERE Upper(TABLE_NAME) = Upper(C.TABLE_NAME) AND CONSTRAINT_TYPE = 'P') | |
) | |
THEN '[Key]' || CHR(10) | |
ELSE '' | |
END | |
|| | |
CASE | |
WHEN C.IDENTITY_COLUMN = 'YES' THEN '[DatabaseGenerated(DatabaseGeneratedOption.Identity)]' || CHR(10) | |
ELSE '' | |
END | |
|| | |
CASE | |
WHEN C.NULLABLE = 'N' THEN '[Required]' || CHR(10) | |
ELSE '' | |
END | |
|| | |
CASE | |
WHEN C.DATA_TYPE = 'VARCHAR2' THEN '[StringLength(' || C.DATA_LENGTH || ')]' || CHR(10) | |
ELSE '' | |
END | |
|| '[Column("' || C.COLUMN_NAME || '", TypeName = "' || C.DATA_TYPE | |
|| | |
CASE | |
WHEN C.DATA_TYPE IN ('VARCHAR','VARCHAR2') THEN ( | |
CASE | |
WHEN C.DATA_LENGTH IS NOT NULL | |
AND C.DATA_LENGTH > 0 THEN '(' || C.DATA_LENGTH ||')' | |
ELSE '' | |
END) | |
WHEN C.DATA_TYPE IN ('NUMBER') THEN ( | |
CASE | |
WHEN C.DATA_PRECISION IS NOT NULL | |
AND C.DATA_LENGTH > 0 | |
THEN '('|| C.DATA_PRECISION || ( CASE WHEN C.DATA_SCALE IS NOT NULL THEN ',' || C.DATA_SCALE ELSE '' END ) || ')' | |
ELSE '' | |
END) | |
ELSE '' | |
END | |
|| '",Order = ' || C.COLUMN_ID || ')]' || CHR(10) | |
|| 'public ' || CASE WHEN C.NULLABLE = 'N' AND C.IDENTITY_COLUMN <> 'YES' THEN 'required ' ELSE '' END | |
|| | |
CASE | |
WHEN C.DATA_TYPE = 'CHAR' THEN 'string' | |
WHEN C.DATA_TYPE = 'BOOLEAN' THEN 'bool' | |
WHEN C.DATA_TYPE = 'DECIMAL' THEN 'decimal' | |
WHEN C.DATA_TYPE = 'INTEGER' THEN 'int' | |
WHEN C.DATA_TYPE = 'INT' THEN 'int' | |
WHEN C.DATA_TYPE = 'LONG' THEN 'string' | |
WHEN C.DATA_TYPE = 'BINARY_FLOAT' THEN 'float' | |
WHEN C.DATA_TYPE = 'BINARY_DOUBLE' THEN 'double' | |
WHEN C.DATA_TYPE = 'JSON' THEN 'string' | |
WHEN C.DATA_TYPE = 'NUMBER' AND C.DATA_SCALE IS NULL THEN 'decimal' | |
WHEN C.DATA_TYPE = 'NUMBER' AND C.DATA_SCALE > 0 THEN 'decimal' | |
WHEN C.DATA_TYPE = 'NUMBER' AND C.DATA_SCALE = 0 AND C.DATA_PRECISION >= 2 AND C.DATA_PRECISION <= 4 THEN 'byte' | |
WHEN C.DATA_TYPE = 'NUMBER' AND C.DATA_SCALE = 0 AND C.DATA_PRECISION = 1 THEN 'bool' /*CARE*/ | |
WHEN C.DATA_TYPE = 'NUMBER' AND C.DATA_SCALE = 0 AND C.DATA_PRECISION <= 5 THEN 'short' | |
WHEN C.DATA_TYPE = 'NUMBER' AND C.DATA_SCALE = 0 AND C.DATA_PRECISION <= 10 THEN 'int' | |
WHEN C.DATA_TYPE = 'NUMBER' AND C.DATA_SCALE = 0 AND C.DATA_PRECISION <= 19 THEN 'long' | |
WHEN C.DATA_TYPE = 'NUMBER' AND C.DATA_SCALE = 0 AND C.DATA_PRECISION > 19 THEN 'decimal' | |
WHEN C.DATA_TYPE = 'NUMBER' AND C.DATA_SCALE = 0 AND C.DATA_PRECISION IS NULL THEN 'decimal' | |
WHEN C.DATA_TYPE = 'VARCHAR' THEN 'string' | |
WHEN C.DATA_TYPE = 'VARCHAR2' THEN 'string' | |
WHEN C.DATA_TYPE = 'CLOB' THEN 'string' | |
WHEN C.DATA_TYPE = 'ROWID' THEN 'string' | |
WHEN C.DATA_TYPE = 'FLOAT' THEN 'decimal' | |
WHEN C.DATA_TYPE = 'BLOB' THEN 'byte[]' | |
WHEN C.DATA_TYPE LIKE '%TIMESTAMP%' THEN 'DateTime' | |
WHEN C.DATA_TYPE = 'DATE' THEN 'DateTime' | |
ELSE 'object' | |
END | |
|| | |
CASE | |
WHEN C.NULLABLE = 'Y' THEN '? ' ELSE ' ' | |
END | |
|| REPLACE(INITCAP(REGEXP_REPLACE(C.COLUMN_NAME,'[_^\-\.\#\$]',' ')),' ','') | |
|| ' {get;set;}' || CHR(10) AS CSHARP_PROPERTY, | |
C.TABLE_NAME, | |
C.COLUMN_NAME, | |
C.COLUMN_ID | |
FROM ALL_TAB_COLUMNS c | |
WHERE C.TABLE_NAME IN ('TABLE_NAME') /*Table Names*/ | |
ORDER BY COLUMN_ID) | |
SELECT TABLE_NAME, | |
'[Table("' | |
|| TABLE_NAME | |
|| '")]' | |
|| CHR(10) | |
|| 'public class ' | |
|| REPLACE(INITCAP(REGEXP_REPLACE(TABLE_NAME,'[_^\-\.\#\$]',' ')),' ','') | |
|| '{' | |
|| CHR(10) | |
|| REPLACE(RTRIM(XMLAGG(XMLELEMENT(E,CSHARP_PROPERTY,CHR(10)).EXTRACT('//text()') ORDER BY COLUMN_ID).GETCLOBVAL(),','),CHR(38) | |
||'quot;','"') | |
|| '}' | |
|| CHR(10) AS "CODE" | |
FROM PROPERTIES | |
GROUP BY TABLE_NAME |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
.NET 5 and before