【问题标题】:Create Table, insert values and then select those within stored procedure创建表,插入值,然后在存储过程中选择那些
【发布时间】:2014-10-15 08:51:16
【问题描述】:

我有这个存储过程:

CREATE or replace PROCEDURE TESTx()

BEGIN



DECLARE tableOneCount INTEGER; 
DECLARE tableTwoCount INTEGER;
DECLARE strCmd VARCHAR(500);



SET tableOneCount = (SELECT COUNT(*) FROM proj);
SET tableTwoCount = (SELECT COUNT(*) FROM proj2);

SET msg = tableOneCount + tableTwoCount;

Create table tempa(name varchar(50), counter integer);
Insert into tempa(name, counter) values ('counter1', tableOneCount);
Insert into tempa(name, counter) values ('counter2', tableTwoCount);
Insert into tempa(name, counter) values ('counter_all', msg);

SET strCmd=(SELECT * FROM tempa);

EXECUTE IMMEDIATE(strCmd);

drop table tempa;

END @

它应该只计算 2 个表并添加它们,然后返回一个包含结果的表。由于我还没有想出另一种方法来做到这一点,我创建了一个临时表并将所有内容插入其中,然后只返回一个 select 语句。不知何故,这不起作用,因为 select 语句遇到了错误。

我尝试过使用

declare global temporary table session.tempa
(name varchar(50), counter integer) 
on commit preserve rows not logged;

但这给了我错误,即行数和变量数不匹配 (SQL0117N)

知道如何让它工作吗?

【问题讨论】:

    标签: sql select stored-procedures db2


    【解决方案1】:

    你最后一条语句(动态查询格式不正确)抛出错误,应该如下所示

    SET strCmd="SELECT * FROM tempa";
    EXECUTE IMMEDIATE(strCmd);
    

    虽然您根本不需要在这里形成动态查询语句。你可以像SELECT * FROM tempa一样返回select

    同样你的程序可以缩短

    CREATE or replace PROCEDURE TESTx()
    BEGIN
    
    DECLARE tableOneCount INTEGER;
    SET tableOneCount = (SELECT COUNT(*) FROM proj) + (SELECT COUNT(*) FROM proj2);
    
    select 'counter1', count(*) from proj
    
    union all
    
    select 'counter2', COUNT(*) FROM proj2
    
    union all 
    
    select 'counter_all', tableOneCount from dual
    
    END @
    

    【讨论】:

    • 我得到一个错误,选择语句是意外的,它需要一个 ....当我将选择放在 set something= 子句中,然后立即执行它的变量找不到双....知道为什么吗?结果我需要整个表......所有 3 行
    • 正确阅读答案。您根本不需要准备好的声明,只需执行select * from tempa。这样就可以了。
    • 我从中得到 SQL0104N: On ,msg);" 遵循意外的标记 "SELECT *" 可能的标记是 " 您发布的版本(缩短的版本)与令牌问题:
    猜你喜欢
    • 1970-01-01
    • 2011-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多