回答

收藏

Oracle SQL查询中的常量

技术问答 技术问答 260 人阅读 | 0 人回复 | 2023-09-14

我是Oracle的新手(虽然熟悉SQL),并且必须编写一个相当复杂的查询,其中多次使用了从当前日期得出的值。不必每次都计算值,而是为此声明一个常量似乎是显而易见的。3 [0 r+ j; T* S. t
但是,当我随后尝试在后续的SELECT语句中使用DateIndex常量(我希望该常量基于“7 N% R5 {2 y. T& q! z
DateIndex”返回值)时,解析器告诉我它正在执行SELECT INTO。  P4 v* w/ x0 _& P
我所拥有的(简化为最低形式)是…
% Y7 W) Y( {) K DECLARE DateIndex CONSTANT NUMBER(10,0) := 24;
9 S5 M0 [6 V. r BEGIN$ F$ ]' R8 J  f' l: {. p, M4 o, B
      SELECT DateIndex& t; n. M; `: C5 O) r( G
      FROM DUAL;4 p% Q5 z% n  F: f) y
END;
3 }* q4 ]/ ~& a% H选择表时只能使用常量而不返回结果吗?似乎很奇怪。
& n/ F7 M7 t' j) [6 l请注意,我对数据库 没有 写权限。
. n# |: N7 U! i0 j7 O' Z  f非常感谢您的协助。
3 C4 m" }5 i: a: Z                ! q2 e% Q& x# B9 [: D1 q
解决方案:
) J: H# E2 P2 k. x7 S2 A# H& {               
# ~; l7 ]2 L1 H0 |# C) ^
6 |5 A5 o6 n* O; U% E; e
. r  ?) i! l" V) t7 h7 s/ l                您的代码不是Oracle SQL,而是PL / SQL。在PL / SQL中,查询结果必须分配给变量。因此,如果您只希望得到一个结果,则必须使用“7 a, ^% `2 ]  v( b( A1 t
select into子句”,或者使用游标。/ J/ O% [/ t6 o/ g/ S4 [8 A! g
另一方面,在SQL中,您不能声明常量。有时您可以通过使用内联视图来解决此限制! |3 \2 q' M4 |  {' j5 c6 \% g1 v0 u
select something-complex-here, x.pi
7 t; Z) M$ g3 k+ M% sfrom sometable, (
2 M+ _, _" g) r4 x  x9 Z' ]    select 3.1415 as pi, 1234 other_constant ( ~- e0 Q& C8 ~& {5 j, R- W  }! \
    from dual) D2 w8 i% M$ S
)
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则