【问题标题】:sql command not properly ended for select statementsql 命令未正确结束 select 语句
【发布时间】:2016-10-15 15:55:48
【问题描述】:

我有一个 pl/sql 函数,其中我有以下代码:

execute immediate 'select ' || schemaname || '.' || value1 || '_seq.nextval from dual into cnpParmId';

对于这一行,我收到一个错误:

SQL 错误:ORA-00933:SQL 命令未正确结束

在上面的代码中,我从选择查询的结果中获得了value1schemaname 是函数的输入,cnpParmId 是函数的返回值。

我尝试了不同的方法来解决这个问题,但我仍然收到错误。

【问题讨论】:

    标签: oracle function stored-procedures plsql plsqldeveloper


    【解决方案1】:

    如果不向我们展示更多您的过程,很难说,但我认为您并不是要在动态 SQL 中连接 cnpParmId 是一个公平的猜测(动态 SQL 怎么可能知道如何解释 @987654323 @?)。 cnpParmId 可能在您的过程中的某处定义。

    相反,您可能打算使用execute immediate 命令的into 子句:

    execute immediate 'select ' || schemaname || '.' || value1 || '_seq.nextval from dual'
    into cnpParmId;
    

    【讨论】:

    • 函数是这样的:
    • 抱歉,我刚刚意识到我说的是returning into,而它本应该是into。但重点是一样的,into 子句不应该是动态 SQL 的一部分。
    • 我试过这种方式,但不起作用:立即执行'select'||模式名 || '。' ||值1 || '_seq.nextval from dual' 到 cnpParmId;错误:SQL 错误:ORA-00904:“CNPPARMID”:标识符无效
    • 就像我在帖子中所说:如果不向我们展示更多您的程序,很难说。我假设您的程序中某处一定有一个cnpParmId 变量。但显然你没有。那么cnpParmId 是什么?
    猜你喜欢
    • 2019-10-11
    • 2013-05-10
    • 1970-01-01
    • 1970-01-01
    • 2021-06-01
    • 2012-05-29
    • 2016-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多