Sql teradata中的多游标存储过程

Sql teradata中的多游标存储过程,sql,stored-procedures,teradata,Sql,Stored Procedures,Teradata,我对sql和teradata完全陌生(6周)。并且被分配了一个任务,但没有什么指导。 (创建一个存储过程,允许用户选择bat的制造商和(可选)使用存储过程的序列号。输出应显示使用bat制造商的所有玩家。如果还提供了序列号,则仅显示使用该bat制造商和序列号的玩家。确保使用CREATE procedure调用并将此过程插入现有数据库。)这是一个通过teradata建立的数据库,已复制到我自己的数据库中进行编辑。这就是我到目前为止得到的结果,它不断返回两个错误。我很想得到帮助,提供一个解决方案和最好

我对sql和teradata完全陌生(6周)。并且被分配了一个任务,但没有什么指导。
(创建一个存储过程,允许用户选择bat的制造商和(可选)使用存储过程的序列号。输出应显示使用bat制造商的所有玩家。如果还提供了序列号,则仅显示使用该bat制造商和序列号的玩家。确保使用CREATE procedure调用并将此过程插入现有数据库。)这是一个通过teradata建立的数据库,已复制到我自己的数据库中进行编辑。这就是我到目前为止得到的结果,它不断返回两个错误。我很想得到帮助,提供一个解决方案和最好的建议,以便快速有效地学习sql。我提前感谢你的帮助。我相信这是你见过的最丑陋的代码,我想-D

CREATE过程蝙蝠侠(manuf varchar(20),bat_类型varchar(4)=null)
动态结果集2
开始
将c游标声明为
选择playernum
来自从属关系,蝙蝠
其中manuf=:manuf;
声明的串行游标
选择playernum
来自从属关系
其中bat_type=NULL或bat_type=:bat_type
如果bat_type=NULL,则打开c
否则打开序列号;
如果结束;

结束

参数的默认值始终为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;

您收到了什么错误?SPL1076:E(L1),参数声明中的右括号缺失。SPL1048:E(L1),意外文本“;”代替SPL语句。对于您的
bat_type
声明,要定义默认值,您可以使用
bat_type varchar(4)default NULL
。非常感谢,它可以工作!