这个看起来像一个古老的问题但实际上并非如此。我无法在SO或其他地方找到答案。
我有这张桌子:
n (number) | s (varchar2)
-------------------------
200 | some string
201 | some other string
我可以将数字n
转换为字符串并选择它而不会出现这样的问题:
SELECT n FROM t;
SELECT TO_CHAR(n) FROM t;
但我需要在所有列中搜索字符串值。我尝试过的(它通常起作用,意味着数据库是 11g )是UNPIVOT
:
SELECT * FROM t UNPIVOT (anywhere FOR col IN (...));
然而, NOT 工作的是混合数据类型(数字和基于字符的类型,如varchar2
)。我得到的是:
ORA-01790:表达式必须与对应的表达式具有相同的数据类型
没关系,我理解这一点,解决方案很明显。将数字转换为字符。但这也不起作用。立即解决方案:
SELECT * FROM t UNPIVOT (anywhere FOR col IN (s, TO_CHAR(n)));
^
我收到了这个意外错误:
ORA-00917:缺少逗号
此处的问题是TO_CHAR
根本不会被解释为函数,它被认为是列名s
或n
。
那么,如何将UNPIVOT
用于混合数据类型或如何将所有列投射到varchar2
或我还能如何解决这个问题?
答案 0 :(得分:0)
尝试使用:
SELECT *
FROM (SELECT to_char(n) as n, s FROM t)
UNPIVOT (anywhere FOR col IN (...));