如何选择列名中带有空格的列。

3
我正试图通过OCCI调用在我的CPP程序中执行SQL查询。我想读取其中的2列,其中一列名称之间有空格。我尝试将列名括在' '" "[ ]之间,但没有帮助。请专家给我建议。
以下是我的代码: ....
string sqlStmt = "SELECT 'REJECTED COST', APPROVED_COST FROM COST_TABLE where PART_NUM= 'PN4879-1'";
stmt = conn->createStatement(sqlStmt);
ResultSet *rset = stmt->executeQuery();
double dRejCost = 0;
double dAppCost = 0;
if(rset->next())
        {
            dRejCost = rset->getNumber(1);
            dAppCost = rset->getNumber(2);

        }
stmt->closeResultSet(rset);
conn->terminateStatement(stmt);

错误/异常:

我在dRejCost = rset->getNumber(1);处遇到的错误:
ORA-01722: 无效数字

PS:ORACLE表有许多列,其中“REJECTED COST”列标题带有空格。尽管我没有权限要求DB团队更改DB表名。

提前致谢。


3
SQL标准要求这样的标识符必须用双引号括起来:"REJECTED COST",Oracle也是如此。你的代码需要使用:string sqlStmt = "SELECT \"REJECTED COST\", .... "; (或者任何C语言字符串内部使用的转义字符)。单引号只能用于SQL语句中的字符串字面量。但是"ORA-01722: invalid number"的原因是你当前的语句为该列返回了一个字符串 '..' - user330315
1个回答

2

单引号 (') 表示字符字面量。也就是说,你选择的字符串是 'REJECTED COST',很明显不能转换为数字。 如果要选择一个包含空格的列名,应该使用双引号 (")。请注意,它们需要被转义,因为你正在使用它们作为 C++ 字符串的一部分,而 C++ 字符串也用双引号表示:

string sqlStmt = "SELECT \"REJECTED COST\", APPROVED_COST FROM COST_TABLE where PART_NUM= 'PN4879-1'";

非常感谢您的回复。它解决了我的问题。 - Vijay

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接