Side Note: The SQLs are using Oracle Function BITAND. Also if you want to know more info about USEEDIT field please click here.
USEEDIT field assigns a decimal value to each individual bit value.
SQL 1 (simple)
SELECT FIELDNAME, DECODE(BITAND(USEEDIT, 1), 1 ,'Y', DECODE(BITAND(USEEDIT, 16), 16, 'Alt')) as Key, DECODE(BITAND(USEEDIT, 2048),2048 , 'Y' , '') as Search, DECODE(BITAND(USEEDIT, 32), 32 ,'Y','') AS List, DECODE(BITAND(USEEDIT, 256), 256 ,'Y','')AS Req, DECODE(BITAND(USEEDIT, 512), 512 ,'Xlat', DECODE(BITAND(USEEDIT, 8192), 8192 ,'Y/N', DECODE(BITAND(USEEDIT, 16384),16384 ,'Prompt',''))) AS Edit, EDITTABLE, DEFFIELDNAME FROM PSRECFIELDDB WHERE RECNAME = 'ACAD_PROG' --Record Name ORDER BY FIELDNUM;
SQL 2 (complex)
SELECT A.recname, A.fieldname, CASE WHEN B.fieldtype = 0 THEN 'CHAR' WHEN B.fieldtype = 1 THEN 'LONG CHAR' WHEN B.fieldtype = 2 THEN 'NUMBER' WHEN B.fieldtype = 3 THEN 'SIGNED NBR' WHEN B.fieldtype = 4 THEN 'DATE' WHEN B.fieldtype = 5 THEN 'TIME' WHEN B.fieldtype = 6 THEN 'DATETIME' WHEN B.fieldtype = 7 OR B.fieldtype = 8 THEN 'IMAGE' ELSE NULL END AS FIELDTYPE, CASE WHEN B.fieldtype = 2 OR B.fieldtype = 3 THEN Trim(To_char(B.length)) || '.' || To_char(B.decimalpos) ELSE To_char(B.length) END AS FLDLEN, CASE WHEN Bitand(A.useedit, 256) > 0 THEN 'YES' ELSE 'NO' END AS REQ, CASE WHEN Bitand(A.useedit, 1) > 0 THEN 'KEY' WHEN Bitand(A.useedit, 2) > 0 THEN 'DUP' WHEN Bitand(A.useedit, 16) > 0 THEN 'ALT' ELSE NULL END AS KEY_TYPE, CASE WHEN Bitand(A.useedit, 64) > 0 THEN 'DESC' WHEN ( Bitand(A.useedit, 1) > 0 OR Bitand(A.useedit, 2) > 0 OR Bitand(A.useedit, 16) > 0 ) AND Bitand(A.useedit, 64) = 0 THEN 'ASC' ELSE NULL END AS DIR, CASE WHEN Bitand(A.useedit, 2048) > 0 THEN 'YES' ELSE 'NO' END AS SRCH, CASE WHEN Bitand(A.useedit, 32) > 0 THEN 'YES' ELSE 'NO' END AS LIST, CASE WHEN Bitand(A.useedit, 4) > 0 THEN 'YES' ELSE 'NO' END AS SYS, CASE WHEN Trim(A.defrecname) = '' THEN A.deffieldname ELSE Trim(A.defrecname) || '.' || A.deffieldname END AS DEFAULT_VALUE, CASE WHEN Bitand(A.useedit, 8) > 0 AND Bitand(A.useedit, 128) = 0 AND Bitand(A.useedit, 1024) = 0 THEN 'A' WHEN Bitand(A.useedit, 8) > 0 AND Bitand(A.useedit, 128) > 0 AND Bitand(A.useedit, 1024) = 0 THEN 'AC' WHEN Bitand(A.useedit, 8) > 0 AND Bitand(A.useedit, 128) > 0 AND Bitand(A.useedit, 1024) > 0 THEN 'ACD' WHEN Bitand(A.useedit, 8) = 0 AND Bitand(A.useedit, 128) > 0 AND Bitand(A.useedit, 1024) = 0 THEN 'C' WHEN Bitand(A.useedit, 8) = 0 AND Bitand(A.useedit, 128) > 0 AND Bitand(A.useedit, 1024) > 0 THEN 'CD' WHEN Bitand(A.useedit, 8) = 0 AND Bitand(A.useedit, 128) = 0 AND Bitand(A.useedit, 1024) > 0 THEN 'D' ELSE NULL END AS AUDT, CASE WHEN Bitand(A.useedit, 16384) > 0 THEN 'PROMPT' WHEN Bitand(A.useedit, 512) > 0 THEN 'XLAT' WHEN Bitand(A.useedit, 8192) > 0 THEN 'Y/N' ELSE NULL END AS EDIT, A.edittable AS PROMPT_TABLE, A.setcntrlfld AS SET_CONTROL_FLD, CASE WHEN Bitand(A.useedit, 4096) > 0 THEN 'YES' ELSE 'NO' END AS REASONABLE_DT, CASE WHEN Bitand(A.useedit, 32768) > 0 THEN 'YES' ELSE 'NO' END AS AUTO_UPDT, CASE WHEN Bitand(A.useedit, 262144) > 0 THEN 'FROM' WHEN Bitand(A.useedit, 524288) > 0 THEN 'THROUGH' ELSE NULL END AS SEARCH_FIELD, CASE WHEN A.subrecord = 'Y' THEN 'YES' ELSE 'NO' END AS SUBRECORD, A.lastupddttm, A.lastupdoprid FROM psrecfield A, psdbfield B WHERE A.recname = :1 --paste recname here AND A.fieldname = B.fieldname ORDER BY fieldnum;
0 comments :
Post a Comment