ORACLE - 根据查询设置varchar2长度的长度

时间:2016-05-11 08:26:03

标签: sql oracle select varchar2

我正在尝试使用CAST函数将查询中列的输出转换为VARCHAR2(255 CHAR)到可变长度的VARCHAR2,即最终数字由子查询返回,如下所示:

SELECT CAST(Title as VARCHAR2(SELECT MAX(LENGTH(Title)) FROM Books)) 
FROM Books;

有没有人知道我是否可以将输出格式化为具有子查询返回的长度的VARCHAR2?对于上面的示例,我不断收到错误,但可能还有其他方法。

2 个答案:

答案 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;

并且您将看到在两种情况下返回的数据都是相同的。