用于获取要添加到数据库的信息的SQL脚本

时间:2014-04-20 14:43:08

标签: database oracle sqlplus

我正在尝试创建一个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');

1 个答案:

答案 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';