【问题标题】:Oracle Common Table Expressions (WITH) within BEGIN and ENDBEGIN 和 END 中的 Oracle 公用表表达式 (WITH)
【发布时间】:2014-11-13 15:56:00
【问题描述】:

我想编写一个包含多个 SQL 语句的字符串,通过 ODBC 发送,其中的常量表示为“变量”以提高易读性/维护性。我相信我需要使用 DECLARE 块。我不想编写过程或函数,这是一个临时查询。

以下测试 CTE 可以单独工作(没有开始/结束块):

WITH X AS ( SELECT 'HELLO' from DUAL ) SELECT * FROM X;

但是当我运行它时

declare
badgerId CHAR(32); /*todo, use me later, a few times within multiple CTEs*/
begin
WITH X AS ( SELECT 'HELLO' from DUAL ) SELECT * FROM X;
end;

我得到错误:

Error starting at line 2 in command:
declare
badgerId CHAR(32); /*todo, use me later*/
begin
WITH X AS ( SELECT 'HELLO' from DUAL ) SELECT * FROM X;
end;
Error report:
ORA-06550: line 4, column 1:
PLS-00428: an INTO clause is expected in this SELECT statement
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:

这是什么乱七八糟的东西?在 SQL Server 中,我只需键入即可。

DECLARE @badgerId CHAR(32); 

随时在SQL语句中,这太棒了。什么是 Oracle 等价物?

干杯!

【问题讨论】:

  • 你不是我,很明显!下次尝试回答问题,而不是光顾提问的人。
  • This might be helpful。取决于您是否真的要返回单个值或多行,在这种情况下您可能需要一个 ref 游标。

标签: oracle common-table-expression


【解决方案1】:

您收到此错误是因为您选择了数据但未将其分配给声明的变量 (badgerId)。以下应该可以工作,

declare
badgerId CHAR(32); /*todo, use me later, a few times within multiple CTEs*/
begin
WITH X AS ( SELECT 'HELLO' from DUAL ) SELECT * into badgerId FROM X;
end;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-11-16
    • 2011-11-15
    • 1970-01-01
    • 2014-03-18
    • 1970-01-01
    • 1970-01-01
    • 2019-05-18
    相关资源
    最近更新 更多