我正在尝试创建一个swl脚本,该脚本将提示用户输入将添加到数据库的信息。我提示用户输入日期和商店名称。在用户输入商店名称后,我想运行一个查询,该查询将返回与该商店名称相关联的代码并将其分配给变量。当我运行此脚本时,在用户输入商店名称后,会发生以下情况:
Enter the date of the expense:01-01-13
Enter the store name for which the expense was against:MetEd
12
我不确定自己做错了什么,因为我刚开始编写SQL脚本。以下是我的脚本文件我感谢任何帮助/提示。谢谢。 P.S.,我很有趣sql plus / oracle。
ACCEPT EDate PROMPT 'Enter the date of the expense:';
ACCEPT StoreName PROMPT 'Enter the store name for which the expense was against:';
DECLARE
v_StoreCode VARCHAR;
BEGIN
SELECT CODE
INTO v_StoreCode
FROM STORE
WHERE STORENAME = '&StoreName';
END;
INSERT INTO EXPMAST (ExpNum, EDate, StoreCode)
VALUES(seq_EXPMAST.nextval, to_date('&EDate','mm-dd-yy'), 'v_StoreCode');
答案 0 :(得分:1)
12
是一个行号,因为系统会提示您输入。 SQL * Plus期望新行上的/
执行匿名块。你的脚本没有那个。因此提示。
你还有其他问题。我假设您要插入检索到的CODE值,但现在您要插入字符串'v_StoreCode'
。所以你需要删除那些单引号。
ACCEPT EDate PROMPT 'Enter the date of the expense:';
ACCEPT StoreName PROMPT 'Enter the store name for which the expense was against:';
DECLARE
v_StoreCode VARCHAR;
BEGIN
SELECT CODE
INTO v_StoreCode
FROM STORE
WHERE STORENAME = '&StoreName';
END;
/
INSERT INTO EXPMAST (ExpNum, EDate, StoreCode)
VALUES(seq_EXPMAST.nextval, to_date('&EDate','mm-dd-yy'), v_StoreCode);
此外,您可以使用INSERT ... SELECT构造来整理代码:
ACCEPT EDate PROMPT 'Enter the date of the expense:';
ACCEPT StoreName PROMPT 'Enter the store name for which the expense was against:';
INSERT INTO EXPMAST (ExpNum, EDate, StoreCode)
SELECT seq_EXPMAST.nextval, to_date('&EDate','mm-dd-yy'), CODE
FROM STORE
WHERE STORENAME = '&StoreName';