【问题标题】:execute immediate - ORA-00904: STRING: invalid identifier立即执行 - ORA-00904: STRING: 无效标识符
【发布时间】:2021-12-22 20:23:22
【问题描述】:

我得到了错误

ORA-00904:ggCategory:标识符无效。

如果我正常运行选择,它可以正常工作并返回正确的值。有谁知道语法错误在哪里?

execute immediate 'create table TEST_TABLE as (
    select 
        category.name l_category,
        u.*
    from 
        User u
    inner join listtext_view category on u.categoryID=category.ID and category.ident='||'ggCategory'||'
    )';

【问题讨论】:

  • 为什么要使用动态SQL?您的声明不需要它。
  • 我对数据库和sql有点缺乏经验。你是什​​么意思我的声明不要求它?出于数据隐私的原因,我更改了 select 命令,即使错误仍然存​​在。选择在一个过程中。

标签: oracle execute-immediate


【解决方案1】:

如果ggCategory 是字符串字面量,那么:

execute immediate 'create table TEST_TABLE as (
    select 
        category.name l_category,
        u.*
    from 
        User u
    inner join listtext_view category on u.categoryID=category.ID and category.ident=''ggCategory''
    )';

如果它是一个变量,那么:

execute immediate 'create table TEST_TABLE as (
    select 
        category.name l_category,
        u.*
    from 
        User u
    inner join listtext_view category on u.categoryID=category.ID and category.ident='||ggCategory||'
    )';

假设在后一种情况下,它是一个不需要引用的数字或其他东西;或者,如果确实需要引用:

execute immediate 'create table TEST_TABLE as (
    select 
        category.name l_category,
        u.*
    from 
        User u
    inner join listtext_view category on u.categoryID=category.ID and category.ident='''||ggCategory||'''
    )';

【讨论】:

  • thx :) 是一个字符串文字并且可以工作。
【解决方案2】:

ggcategory 是什么?我认为它是一个变量(或参数);如果是这样,则不应将其括在单引号中,即

execute immediate 'create table TEST_TABLE as (
select 
    category.name l_category,
    u.*
from User u inner join listtext_view category on
          u.categoryID=category.ID and category.ident=' || ggCategory ||')';
                                                           ----------

另外,表名肯定不是User,因为它是Oracle函数的保留字。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-08
    • 2022-01-22
    • 2011-08-27
    • 2011-04-21
    • 2019-06-29
    • 2013-10-20
    • 2017-12-29
    相关资源
    最近更新 更多