在下面的PLSQL触发器中,为什么将所有内容都在数据透视代码中转换为AS VARCHAR2?

咖啡因

我正在尝试把这个触发器包住头。我在这里正在研究触发代码:

 INSERT INTO ONLINE_PROFILE_HISTORY.ONLINE_ACCOUNT_AVH
      SELECT ONLINE_PROFILE_HISTORY.ONLINE_ACCOUNT_AVH_SEQ.NEXTVAL
                 ,tmpVar
                 ,O.ATTR_NM
                 ,O.ATTR_OLD_VLU
                 ,CAST(NULL AS CHAR) AS ATTR_NEW_VLU 
    FROM (SELECT :OLD.ONL_ACCT_ID 
                           ,CAST(:OLD.ONL_ACCT_INTL_ID AS VARCHAR2(1024)) ONL_ACCT_INTL_ID
                           ,CAST(:OLD.ONL_ACCT_EXT_ID AS VARCHAR2(1024)) AS ONL_ACCT_EXT_ID
                           ,CAST(:OLD.LCKED_TS AS VARCHAR2(1024)) AS LCKED_TS
                           ,CAST(:OLD.DISABLED_TS AS VARCHAR2(1024)) AS DISABLED_TS
                           ,CAST(:OLD.LST_SCSFL_LOGIN_TS AS VARCHAR2(1024)) AS LST_SCSFL_LOGIN_TS
                          /* etc etc*/ 
                           ,CAST(:OLD.VLDT_SCRT_QUES_FAILURE_CNT AS VARCHAR2(1024)) AS VLDT_SCRT_QUES_FAILURE_CNT
                           ,CAST(:OLD.VLDT_SCRT_QUES_LST_FAILURE_TS AS VARCHAR2(1024)) AS VLDT_SCRT_QUES_LST_FAILURE_TS
                           ,CAST(:OLD.VLDT_SCRT_QUES_SUCCESS_TS AS VARCHAR2(1024)) AS VLDT_SCRT_QUES_SUCCESS_TS
                           ,CAST(:OLD.DLTD_TS AS VARCHAR2(1024)) AS DLTD_TS
                           ,CAST(:OLD.TRMS_CONDS_ACPTED_HOST_ADDR_NM AS VARCHAR2(1024)) AS TRMS_CONDS_ACPTED_HOST_ADDR_NM
                  FROM dual)
               UNPIVOT (ATTR_OLD_VLU FOR
                      ATTR_NM IN (
                      ONL_ACCT_INTL_ID
                      ,ONL_ACCT_EXT_ID
                      ,LCKED_TS
                      ,DISABLED_TS
                      ,VLDT_TOKEN_VLU
                      ,VLDT_TOKEN_KEY_NM
                      ,VLDTD_TS
                      ,VLDT_TOKEN_CREATE_TS
                      ,PRIM_BILLING_ACCT_SRC_ID
                      ,PRIM_BILLING_ACCT_SRC_ID_2
                      ,PRIM_BILLING_ACCT_SRC_SYS_CD
                      ,TRMS_CONDS_VER_NUM
                      ,TRMS_CONDS_ACPTED_TS
                      ,PSWD_FMT_NM
                      ,VLDT_SCRT_QUES_FAILURE_CNT
                      ,VLDT_SCRT_QUES_LST_FAILURE_TS
                      ,VLDT_SCRT_QUES_SUCCESS_TS
                      ,DLTD_TS
                      ,TRMS_CONDS_ACPTED_HOST_ADDR_NM
                     ))  O;   

为什么我们正在做

 CAST(:OLD.VLDTD_TS AS VARCHAR2(1024)) AS VLDTD_TS

在那里吗?我通常了解枢轴是如何工作的,但不确定为什么每一列都像这样进行转换。

诺埃尔

UNPIVOT将跨几列的数据转换为单列。如果这些列的数据类型不同,将导致错误。

ORA-01790: expression must have same datatype as corresponding expression

SQL小提琴

create table mytable(
    id_ number,
    col1_ varchar2(10),
    col2_ number,
    col3_ date
);

insert into mytable values(1, 'asd',32,date'2014-03-04');
insert into mytable values(2, 'qwe',16,date'2014-02-11');

select *
from mytable
unpivot(val_ for col_name in (
  col1_,col2_,col3_)
        );

ORA-01790: expression must have same datatype as corresponding expression : select * from mytable unpivot(val_ for col_name in ( col1_,col2_,col3_) )

这就是为什么在取消透视之前应将所有列转换为相同的数据类型的原因。

SQL小提琴

select *
from (
  select
  id_,
  col1_,
  to_char(col2_) col2_,
  to_char(col3_,'dd-mm-yyyy') col3_
  from mytable
  )
unpivot(
  val_ for col_name_ in (
    col1_, col2_, col3_
    )
  )

结果

| ID_ | COL_NAME_ |       VAL_ |
|-----|-----------|------------|
|   1 |     COL1_ |        asd |
|   1 |     COL2_ |         32 |
|   1 |     COL3_ | 04-03-2014 |
|   2 |     COL1_ |        qwe |
|   2 |     COL2_ |         16 |
|   2 |     COL3_ | 11-02-2014 |

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在下面的PLSQL触发器中,为什么将所有内容都在数据透视代码中转换为AS VARCHAR2?

来自分类Dev

PLSQL - 将字符数组转换为 Varchar2

来自分类Dev

将日期转换为varchar2丢失的时间部分

来自分类Dev

SQL将varchar2转换为数字

来自分类Dev

如何在Oracle中将数字转换为VARCHAR2?

来自分类Dev

在Oracle中将Varchar2转换为Char数组

来自分类Dev

从VARCHAR2转换为NCLOB(Oracle)

来自分类Dev

具有CLOB或VARCHAR2输入且CLOB或VARCHAR2返回值的单个PLSQL函数

来自分类Dev

Varchar2数据类型允许systimestamp

来自分类Dev

在Oracle varchar2列中存储“大于或等于”符号

来自分类Dev

检查varchar2中的数字是否大于n

来自分类Dev

PLSQL将数据从存储在varchar2中的csv列表移至整数集合

来自分类Dev

PLSQL将数据从存储在varchar2中的csv列表移至整数集合

来自分类Dev

如何将NCHAR的十六进制代码转换为VARCHAR2

来自分类Dev

将时间戳varchar2转换为日期数据类型

来自分类Dev

将数据类型Clob转换为Varchar2 Oracle

来自分类Dev

将数据类型Clob转换为Varchar2 Oracle

来自分类Dev

使用触发器检查VARCHAR2是否仅包含字母

来自分类Dev

为什么Oracle plsql varchar2变量需要大小但参数不需要大小?

来自分类Dev

为什么在Oracle数据库中为数字插入varchar2是可行的?

来自分类Dev

如何使用 PLSQL 将 VARCHAR2 更改为 NUMBER 数据类型

来自分类Dev

数据类型从varchar2隐式转换为日期,数字等

来自分类Dev

如何使用PL / JSON将JSON对象转换为varchar2

来自分类Dev

将数值转换为VARCHAR2会引发ORA-03113

来自分类Dev

将Varchar2转换为Date或Time_Stamp无效月份?

来自分类Dev

如何动态生成将任何CLOB转换为varchar2的sql语句

来自分类Dev

Django Oracle数据库-Varchar2与NVarchar2

来自分类Dev

log4j2记录数据库varchar2错误

来自分类Dev

如何在Oracle中将以varchar2存储的时间转换为24小时格式?

Related 相关文章

  1. 1

    在下面的PLSQL触发器中,为什么将所有内容都在数据透视代码中转换为AS VARCHAR2?

  2. 2

    PLSQL - 将字符数组转换为 Varchar2

  3. 3

    将日期转换为varchar2丢失的时间部分

  4. 4

    SQL将varchar2转换为数字

  5. 5

    如何在Oracle中将数字转换为VARCHAR2?

  6. 6

    在Oracle中将Varchar2转换为Char数组

  7. 7

    从VARCHAR2转换为NCLOB(Oracle)

  8. 8

    具有CLOB或VARCHAR2输入且CLOB或VARCHAR2返回值的单个PLSQL函数

  9. 9

    Varchar2数据类型允许systimestamp

  10. 10

    在Oracle varchar2列中存储“大于或等于”符号

  11. 11

    检查varchar2中的数字是否大于n

  12. 12

    PLSQL将数据从存储在varchar2中的csv列表移至整数集合

  13. 13

    PLSQL将数据从存储在varchar2中的csv列表移至整数集合

  14. 14

    如何将NCHAR的十六进制代码转换为VARCHAR2

  15. 15

    将时间戳varchar2转换为日期数据类型

  16. 16

    将数据类型Clob转换为Varchar2 Oracle

  17. 17

    将数据类型Clob转换为Varchar2 Oracle

  18. 18

    使用触发器检查VARCHAR2是否仅包含字母

  19. 19

    为什么Oracle plsql varchar2变量需要大小但参数不需要大小?

  20. 20

    为什么在Oracle数据库中为数字插入varchar2是可行的?

  21. 21

    如何使用 PLSQL 将 VARCHAR2 更改为 NUMBER 数据类型

  22. 22

    数据类型从varchar2隐式转换为日期,数字等

  23. 23

    如何使用PL / JSON将JSON对象转换为varchar2

  24. 24

    将数值转换为VARCHAR2会引发ORA-03113

  25. 25

    将Varchar2转换为Date或Time_Stamp无效月份?

  26. 26

    如何动态生成将任何CLOB转换为varchar2的sql语句

  27. 27

    Django Oracle数据库-Varchar2与NVarchar2

  28. 28

    log4j2记录数据库varchar2错误

  29. 29

    如何在Oracle中将以varchar2存储的时间转换为24小时格式?

热门标签

归档