我对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;
答案 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;