【问题标题】:SELECT INTO variable, two statements, add variablesSELECT INTO 变量,两条语句,添加变量
【发布时间】:2010-10-15 10:59:19
【问题描述】:

我有一个名为 c_kilometers 的变量。我有一个光标可以抓取一堆具有这些公里数的记录。我需要在游标中运行两个单独的 SELECT 语句,它们只是根据游标中的值从一个表中抓取一公里,然后在另一个表上运行另一个 SELECT 执行相同的操作。

SELECT t.kilometers INTO c_kilometers
FROM table_name WHERE WHERE l.code = cursor_t.code_att

SELECT g.kilometers INTO c_kilometers
FROM table_name WHERE l.code = cursor_t.code_aff

我的问题是我可以将 c_kilometers 加在一起而不创建临时变量来保存这些值吗?我有一段时间没有使用 PL/SQL,而且我不记得曾经这样做过,所以这更像是一个学习问题。

【问题讨论】:

  • 不清楚您要做什么。在您的示例中, c_kilometers 将被第二个查询覆盖。请提供一些您希望获得的示例数据和结果。
  • 这正是我要问的。我不想覆盖 c_kilometers。我想把它们加在一起。创建一个临时变量是标准做法,并将第二个 SELECT 放入临时变量,然后执行 c_kilometers = c_kilometers + c_temporary 吗?

标签: sql oracle plsql


【解决方案1】:

假设您的两个查询始终只返回一行,您可以执行以下任一操作:

/* Variant 1 */


SELECT  t.kilometers + g.kilometers
INTO    c_kilometers
FROM    table_name t, table_name2 g
WHERE   etc1
        AND etc2

/* Variant 2 */

SELECT  t.kilometers
INTO    c_kilometers
FROM    table_name
WHERE   etc;

SELECT  c_kilometers + g.kilometers
INTO    c_kilometers
FROM    table_name2
WHERE   etc;

如果它们与您发布的内容在同一个表中,您可以使用:

SELECT COALESCE(SUM(kilometers), 0)
INTO   c_kilometers
FROM   table_name
WHERE  l.code IN (cursor_t.code_aff, cursor_t.code_att)

似乎将table_name 放入产生光标的SELECT 查询中会更有效。

如果您发布此查询,我可能会提供帮助。

【讨论】:

  • 对不起,我把 SELECT 贴错了。它们实际上在同一张表上,但使用不同的 WHERE 子句。
  • 我认为您的第二个脚本运行良好。感谢您的回答。
【解决方案2】:

像这样加入 SELECT: SELECT a.kilometers + b.kilometers FROM (SELECT code, kilometers FROM table_name WHERE ...) a JOIN (SELECT code, kilometers FROM table_name WHERE ...) b ON a.code = b.code

【讨论】:

    猜你喜欢
    • 2017-11-09
    • 1970-01-01
    • 2019-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 2011-03-29
    相关资源
    最近更新 更多