我正在尝试使用CAST
函数将查询中列的输出转换为VARCHAR2
(255 CHAR)到可变长度的VARCHAR2
,即最终数字由子查询返回,如下所示:
SELECT CAST(Title as VARCHAR2(SELECT MAX(LENGTH(Title)) FROM Books))
FROM Books;
有没有人知道我是否可以将输出格式化为具有子查询返回的长度的VARCHAR2?对于上面的示例,我不断收到错误,但可能还有其他方法。
答案 0 :(得分:0)
你想要做的事情是不可能的。
根据定义,SQL具有静态类型系统,即结果列的数量及其名称和类型在语句运行之前(以及在解析语句之后)确定。
答案 1 :(得分:0)
你可以用动态sql来做。在SQL Developer中工作的解决方案是:
if (kmTotalMil < allTotal || kmTotalMil > allTotal)
{
return string.Format("You are <span style='color:red'>{0}</span> km. in city <span style='color:red'>{1}</span> km.", kmTotalMil, allTotal);
}
然而,由于标题已经是VARIABLE cur REFCURSOR;
DECLARE
p_max_length INT;
BEGIN
SELECT MAX( LENGTH( title ) )
INTO p_max_length
FROM Books;
OPEN :cur FOR
'SELECT CAST( Title AS VARCHAR2(' || p_max_length || ')) FROM Books';
END;
/
PRINT cur;
(因此已经有可变长度),因此我无法理解为什么你想要这样做,并且减少最大容量是不会的减少数据的大小。
您可以通过以下方式看到它们是相同的:
VARCHAR2(255)
并将其与上面的查询进行比较:
SELECT DUMP(Title) FROM Books;
并且您将看到在两种情况下返回的数据都是相同的。