没有写博客的习惯,今天碰到个问题困扰了我好久,网上搜了很多,但都不是自己遇到问题的答案。很是心烦,所以决定开始记录自己遇到的问题,方便以后自己寻找同时方便同行们解决问题,菜鸟萌新,请多关照。
今天写了一个sql,运行时报错“ORA-00923: FROM keyword not found where expected”,网上答案有说select后列之间没有添加“,”,也有说列别名没有添加“双引号”的,但试过后发现并不能解决我的问题,以下是问题部分代码。
BEGIN
SELECT
wpa.we_channel_id INTO channelid,
wpa.we_class_id INTO classid ,
wc.TYPE INTO typeid ,
FROM
wechat_public_account wpa
LEFT JOIN we_class wc ON wpa.we_class_id = wc.id
WHERE
wpa.WE_ACCOUNT_IDENTIFY = wechatid
AND wpa.we_channel_id IS NOT NULL
AND wpa.we_class_id IS NOT NULL;
EXCEPTION
WHEN no_data_found THEN
classid := - 1;
channelid := - 1;
END;
以下是错误信息
> ORA-06550: line 37, column 21:
PL/SQL: ORA-00923: FROM keyword not found where expected
ORA-06550: line 35, column 5:
PL/SQL: SQL Statement ignored
> 时间: 0.106s
经过一点一点测试,发现是一处语法错误,into赋值问题。
在使用into给查询语句赋值时,是一次性into,例:select a,b,c into d,e,f from…而不是分别进行into,例: select a into d ,b into e…
所以最后代码修改为:
BEGIN
SELECT
wpa.we_channel_id ,
wpa.we_class_id ,
wc.TYPE INTO channelid ,classid ,typeid
FROM
wechat_public_account wpa
LEFT JOIN we_class wc ON wpa.we_class_id = wc.id
WHERE
wpa.WE_ACCOUNT_IDENTIFY = wechatid
AND wpa.we_channel_id IS NOT NULL
AND wpa.we_class_id IS NOT NULL;
EXCEPTION
WHEN no_data_found THEN
classid := - 1;
channelid := - 1;
END;