Oracle的Long类型转换为String类型的方法

来源:互联网 发布:延保 知乎 编辑:程序博客网 时间:2024/05/17 01:25

在Oracle中,当我们读取系统表USER_TAB_COLS中的DATA_DEFAULT字段时,发现这个是Long类型的字段,也就是说不能读取了,因此我们需要进行转换,下面是这种方法的转换函数

CREATE OR REPLACE FUNCTION LONG_TO_CHAR(uTABLE IN VARCHAR2,uID IN NUMBER)RETURN VARCHAR2AS  uVal VARCHAR2(32767); BEGIN  SELECT DATA_DEFAULT INTO uVal FROM USER_TAB_COLS WHERE TABLE_NAME = UPPER(uTABLE) AND COLUMN_ID = uID;  uVal := SUBSTR(uVal,1,50);   RETURN uVal;  END LONG_TO_CHAR;

接下来,我们可以使用下面的SQL语句读取表的结构了。首先创建一个测试表和数据

-- 删除表存储过程CALL p_DropTable('App_TEST');-- 创建序列号CALL p_SetSequence('APP_TEST_KEY');-- 创建测试表Create Table App_TEST(  fKEY            NUMBER,  fName           VARCHAR2(10) DEFAULT 'PAUL',  fCSRQ           DATE DEFAULT TO_DATE('2018-01-01','YYYY-MM-DD'),  fPID            VARCHAR2(10));Alter Table App_TEST Add Constraint App_TESTKey Primary Key (fKEY) Using index;-- 加表和字段的注释CALL p_SetComment( 'App_TEST','测试表|关键字|姓名|出生日期|点位号' );-- 插入实验数据INSERT INTO App_TEST (fKEY,fCSRQ,fPID) VALUES (APP_TEST_KEY.NEXTVAL,TO_DATE('1962-12-18','YYYY-MM=DD'),'P001');INSERT INTO App_TEST (fKEY,fName,fCSRQ,fPID) VALUES (APP_TEST_KEY.NEXTVAL,'SEPT',TO_DATE('1968-09-17','YYYY-MM=DD'),'P002');INSERT INTO App_TEST (fKEY,fName,fPID) VALUES (APP_TEST_KEY.NEXTVAL,'WENGLEI','P003');COMMIT;SELECT * FROM App_TEST;------------------------------- FKEY  FNAME   fCSRQ       FPID------------------------------- 1     PAUL    1962-12-18  P001 2     SEPT    1968-09-17  P002 3     WENGLEI 2018-01-01  P003-------------------------------

下面是Oracle的表结构查询语句,当然也可以使用DESC

SELECT    CASE WHEN M.COLUMN_ID = 1 THEN M.TABLE_NAME END TABLE_NAME  ,CASE WHEN M.COLUMN_ID = 1 THEN TC.COMMENTS  END COMMENTS  ,M.COLUMN_ID ID  ,M.COLUMN_NAME  ,M.DATA_TYPE  ,M.DATA_LENGTH LEN  ,M.NULLABLE  ,CC.COMMENTS  ,LONG_TO_CHAR(M.TABLE_NAME,M.COLUMN_ID) DEFAULT_VALFROM  USER_TAB_COLS MLEFT JOIN  USER_COL_COMMENTS CC  ON M.TABLE_NAME = CC.TABLE_NAME AND M.COLUMN_NAME = CC.column_nameLEFT JOIN  USER_TAB_COMMENTS TC  ON M.TABLE_NAME = TC.TABLE_NAMEWHERE M.TABLE_NAME = 'APP_TEST'ORDER BY M.COLUMN_ID----------------------------------------------------------------------------------------------------------- TABLE_NAME  COMMENTS  ID  COLUMN_NAME DATA_TYPE LEN NULLABLE  COMMENTS  DEFAULT_VAL----------------------------------------------------------------------------------------------------------- APP_TEST    测试表    1   FKEY        NUMBER    22  N         关键字                        2   FNAME       VARCHAR2  10  Y         姓名      'PAUL'                       3   FCSRQ       DATE      7   Y         出生日期  TO_DATE('2018-01-01','YYYY-MM-DD')                       4   FPID        VARCHAR2  10  Y         点位号-----------------------------------------------------------------------------------------------------------
原创粉丝点击