找不到列?

时间:2019-12-21 14:01:41

标签: sql oracle

我正在尝试按升序显示2017年1月13日之后加入的所有用户的用户名,姓氏,加入日期和国家/地区名称。但是,每次我尝试调用任何列时,都会收到错误消息“列:无效标识符”。


    campaign_criterion_service = ADWORDS_CLIENT.GetService(
        'CampaignCriterionService', version='v201809')

    selector = {
        'fields': ['CampaignId', 'Id', 'CriteriaType', "PlacementUrl",
                   'KeywordText', "ChannelName", "AppId", "DisplayName", "CampaignStatus", "CampaignName"],
        'predicates': [{
            'field': 'CriteriaType',
            'operator': 'IN',
            'values': [
                'CUSTOM_AFFINITY',
                'CUSTOM_INTENT'
            ]
        },
        {
            'field': 'CampaignStatus',
            'operator': 'IN',
            'values': [
                'ENABLED'
            ]
        }


        ],
        'paging': {
            'startIndex': 0,
            'numberResults': 500
        }
    }

    page = campaign_criterion_service.get(selector)



这是如何创建BR_USER表的图像。 enter image description here

简单的代码,例如:

SELECT Username, LastName, JoinDate, CountryName
FROM BR_USER, BR_COUNTRY
WHERE JoinDate = '01-JAN-17' AND JoinDate IS NOT NULL
ORDER BY JoinDate ASC;

给出相同的无效标识符错误,帮助

1 个答案:

答案 0 :(得分:1)

documentation所述:

  

每个数据库对象都有一个名称。在SQL语句中,您用带引号的标识符或未带引号的标识符表示对象的名称。

     
      
  • 带引号的标识符以双引号(“)开头和结尾。如果使用带引号的标识符命名架构对象,则在引用该对象时必须使用双引号。
  •   

如果用双引号定义列名,则在引用该列时,注定要使用双引号。或表格或其他带有名称的东西。

实际上,我认为文档不是100%正确的。 Oracle将所有标识符大写以进行解析。因此,如果您使用全大写字母定义了带引号的标识符,那么它将不带引号就可以工作。如此有效:

create table t (
    "COL" int
);

select "COL", COL, col
from t;

Here是db <>小提琴。

但是谁想记住这样的规则-如此神秘而又复杂的规则,甚至使文档产生误导。

简单的解决方案:不要使用双引号。