teradata中的多光标存储过程

时间:2014-12-16 00:14:21

标签: sql stored-procedures teradata

我对sql和teradata(6周)完全陌生。并且已经完成了一项很少指导的任务 (创建一个存储过程,允许用户使用存储过程选择蝙蝠的制造商和(可选)序列号。输出应显示使用蝙蝠制造商的所有玩家。如果还提供序列号,则仅显示使用该蝙蝠的制造商和序列号的玩家。确保使用CREATE PROCEDURE调用并将此过程插入到现有数据库中。)这是一个通过teradata复制到我自己的数据库中进行编辑的数据库。这是我到目前为止所得到的,它不断返回两个错误。我非常喜欢帮助解决方案以及快速有效地学习SQL的最佳建议。我提前感谢你的帮助。而且我确定这是你见过的最丑陋的代码,我很抱歉。 :-D

CREATE PROCEDURE batman(manuf varchar(20), bat_type varchar(4)=null) DYNAMIC RESULT SETS 2 BEGIN DECLARE c CURSOR FOR SELECT playernum FROM affiliation, bats WHERE manuf = :manuf; declare serial cursor for select playernum from affiliation where bat_type=NULL or bat_type=:bat_type if bat_type=NULL then open c else open serial; end if; END;

1 个答案:

答案 0 :(得分:1)

参数的默认值始终为NULL,无需声明。

您无法使用=比较NULL,而必须是is null

还有一些缺失的分号......

CREATE PROCEDURE batman(manuf VARCHAR(20), bat_type VARCHAR(4))
    DYNAMIC RESULT SETS 1
    BEGIN
    DECLARE c CURSOR FOR
    SELECT playernum
    FROM affiliation, bats
    WHERE manuf = :manuf;
    DECLARE serial CURSOR FOR
    SELECT playernum
    FROM affiliation
    WHERE bat_type IS NULL OR bat_type=:bat_type;
    IF bat_type IS NULL THEN OPEN c;
    ELSE OPEN serial;
    end if;
    END;